diff --git a/.babelrc b/.babelrc deleted file mode 100644 index c6340ccc..00000000 --- a/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "env": { - "production": { - "plugins": ["transform-remove-console"] - } - } - } \ No newline at end of file diff --git a/.buckconfig b/.buckconfig deleted file mode 100644 index 934256cb..00000000 --- a/.buckconfig +++ /dev/null @@ -1,6 +0,0 @@ - -[android] - target = Google Inc.:Google APIs:23 - -[maven_repositories] - central = https://repo1.maven.org/maven2 diff --git a/.commitlintrc.json b/.commitlintrc.json index 3dc9fdf7..1b9a3480 100644 --- a/.commitlintrc.json +++ b/.commitlintrc.json @@ -1,20 +1,20 @@ -{ - "extends": ["@commitlint/config-conventional"], - "rules": { - "type-enum": [ - 2, - "always", - [ - "ci", - "chore", - "docs", - "feat", - "fix", - "perf", - "refactor", - "revert", - "style" - ] - ] - } -} +{ + "extends": ["@commitlint/config-conventional"], + "rules": { + "type-enum": [ + 2, + "always", + [ + "ci", + "chore", + "docs", + "feat", + "fix", + "perf", + "refactor", + "revert", + "style" + ] + ] + } +} diff --git a/.eslintrc.js b/.eslintrc.js index 0026be71..bb578116 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,13 +1,11 @@ module.exports = { root: true, - extends: ['@react-native-community', 'plugin:prettier/recommended'], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'prettier'], + extends: '@react-native', overrides: [ { files: ['*.ts', '*.tsx'], rules: { - '@typescript-eslint/no-shadow': ['warn'], + '@typescript-eslint/no-shadow': 'warn', 'no-shadow': 'off', 'no-undef': 'off', 'prettier/prettier': 'error', diff --git "a/.github/ISSUE_TEMPLATE/\346\226\260\346\203\263\346\263\225-\351\234\200\346\261\202\347\202\271\350\277\231\351\207\214.md" "b/.github/ISSUE_TEMPLATE/\346\226\260\346\203\263\346\263\225-\351\234\200\346\261\202\347\202\271\350\277\231\351\207\214.md" index af83e9c7..978e631d 100644 --- "a/.github/ISSUE_TEMPLATE/\346\226\260\346\203\263\346\263\225-\351\234\200\346\261\202\347\202\271\350\277\231\351\207\214.md" +++ "b/.github/ISSUE_TEMPLATE/\346\226\260\346\203\263\346\263\225-\351\234\200\346\261\202\347\202\271\350\277\231\351\207\214.md" @@ -1,23 +1,23 @@ ---- -name: 新想法/需求点这里 -about: feature -title: "[FEATURE] xxxxx" -labels: '' -assignees: maotoumao - ---- - -**注意事项** -- [ ] 确保已经阅读过ReadMe并*了解本软件的定位* -- [ ] 确保你的新需求/想法合理合法,且*不是因为无解决方案的众口难调导致的个例问题* - ------- - -**需求描述** -请详细描述一下需求场景,以及可能导致的问题;以及你预期的解决方案或效果 - -**替代方案** -如果无法实现,请描述一下预期的替代方案或最低期望 - -**其他信息** -是否能提供一些其他的帮助,包括但不限于代码、UI、测试 ... 如果有的话,辛苦描述一下,感谢~ +--- +name: 新想法/需求点这里 +about: feature +title: "[FEATURE] xxxxx" +labels: '' +assignees: maotoumao + +--- + +**注意事项** +- [ ] 确保已经阅读过ReadMe并*了解本软件的定位* +- [ ] 确保你的新需求/想法合理合法,且*不是因为无解决方案的众口难调导致的个例问题* + +------ + +**需求描述** +请详细描述一下需求场景,以及可能导致的问题;以及你预期的解决方案或效果 + +**替代方案** +如果无法实现,请描述一下预期的替代方案或最低期望 + +**其他信息** +是否能提供一些其他的帮助,包括但不限于代码、UI、测试 ... 如果有的话,辛苦描述一下,感谢~ diff --git "a/.github/ISSUE_TEMPLATE/\351\201\207\345\210\260bug\344\272\206\347\202\271\350\277\231\351\207\214.md" "b/.github/ISSUE_TEMPLATE/\351\201\207\345\210\260bug\344\272\206\347\202\271\350\277\231\351\207\214.md" index 4085df27..6ea564c8 100644 --- "a/.github/ISSUE_TEMPLATE/\351\201\207\345\210\260bug\344\272\206\347\202\271\350\277\231\351\207\214.md" +++ "b/.github/ISSUE_TEMPLATE/\351\201\207\345\210\260bug\344\272\206\347\202\271\350\277\231\351\207\214.md" @@ -1,30 +1,30 @@ ---- -name: 遇到bug了点这里 -about: bug -title: "[BUG] xxxxxx" -labels: '' -assignees: maotoumao - ---- - -**注意事项** -- [ ] 确保该bug可能是软件的本身问题,不是由于插件导致(如搜索结果不全,无法导入等都属于插件问题);如果是插件问题请去对应第三方插件仓库提issue。 -- [ ] 确保已经搜索过issue区,并阅读过QA - ---- - -**问题描述** -简要描述一下问题的现象(在xx场景下,进行xx操作,产生xx现象,而不是xx) - -**详细的复现步骤** -按步骤详细描述一下触发bug的特定行为: - -**预期行为** -描述一下预期正确的行为是什么样的 - -**截图** -附带一些截图/录屏吧,如果方便的话打开侧边栏-基本设置-记录详细日志,复现之后贴一下Android/data/fun.upup.musicfree/files/log/trace-log.log下的日志(完成之后记得删掉,不然时间长了会卡) - -**其他信息:** - - OS: [e.g. Android12] - - 版本号 [e.g. v0.1.0-alpha.0] +--- +name: 遇到bug了点这里 +about: bug +title: "[BUG] xxxxxx" +labels: '' +assignees: maotoumao + +--- + +**注意事项** +- [ ] 确保该bug可能是软件的本身问题,不是由于插件导致(如搜索结果不全,无法导入等都属于插件问题);如果是插件问题请去对应第三方插件仓库提issue。 +- [ ] 确保已经搜索过issue区,并阅读过QA + +--- + +**问题描述** +简要描述一下问题的现象(在xx场景下,进行xx操作,产生xx现象,而不是xx) + +**详细的复现步骤** +按步骤详细描述一下触发bug的特定行为: + +**预期行为** +描述一下预期正确的行为是什么样的 + +**截图** +附带一些截图/录屏吧,如果方便的话打开侧边栏-基本设置-记录详细日志,复现之后贴一下Android/data/fun.upup.musicfree/files/log/trace-log.log下的日志(完成之后记得删掉,不然时间长了会卡) + +**其他信息:** + - OS: [e.g. Android12] + - 版本号 [e.g. v0.1.0-alpha.0] diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index f27f4700..fd09e3e4 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -1,57 +1,57 @@ -name: 自动构建 -on: - workflow_dispatch: - pull_request: - types: - - closed - -jobs: - build-android: - if: "github.event.pull_request.merged == true && startsWith(github.event.pull_request.title, 'release: ')" - runs-on: ubuntu-latest - steps: - - env: - REQBODY: ${{github.event.pull_request.body}} - run: | - echo "${REQBODY}" - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Env - uses: actions/setup-node@v3 - with: - node-version: 16 - - name: Install Pkgs - run: npm ci - - name: Get Version - run: node -p -e '`VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - - name: Build - run: | - cd ./android - ./gradlew assembleRelease - - name: Generate Changelog - run: echo github.event_name - manual: - runs-on: ubuntu-latest - if: "github.event_name == 'workflow_dispatch'" - steps: - - env: - REQBODY: ${{github.event.pull_request.body}} - run: | - echo "${REQBODY}" - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Env - uses: actions/setup-node@v3 - with: - node-version: 16 - - name: Install Pkgs - run: npm ci - - name: Get Version - run: node -p -e '`VERSION=${require("./package.json").version}`' >> $GITHUB_ENV - - name: Build - run: | - cd ./android - ./gradlew assembleRelease - +name: 自动构建 +on: + workflow_dispatch: + pull_request: + types: + - closed + +jobs: + build-android: + if: "github.event.pull_request.merged == true && startsWith(github.event.pull_request.title, 'release: ')" + runs-on: ubuntu-latest + steps: + - env: + REQBODY: ${{github.event.pull_request.body}} + run: | + echo "${REQBODY}" + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Env + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install Pkgs + run: npm ci + - name: Get Version + run: node -p -e '`VERSION=${require("./package.json").version}`' >> $GITHUB_ENV + - name: Build + run: | + cd ./android + ./gradlew assembleRelease + - name: Generate Changelog + run: echo github.event_name + manual: + runs-on: ubuntu-latest + if: "github.event_name == 'workflow_dispatch'" + steps: + - env: + REQBODY: ${{github.event.pull_request.body}} + run: | + echo "${REQBODY}" + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Env + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install Pkgs + run: npm ci + - name: Get Version + run: node -p -e '`VERSION=${require("./package.json").version}`' >> $GITHUB_ENV + - name: Build + run: | + cd ./android + ./gradlew assembleRelease + diff --git a/.gitignore b/.gitignore index 0086bfd0..5fad5d8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,72 +1,88 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -ios/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -/ios/Pods/ -/vendor/bundle/ - -keystore.properties -.VSCodeCounter/ - -.vscode/ -tmp/ -scripts/ - -*.log \ No newline at end of file +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + + +keystore.properties +.VSCodeCounter/ + +.vscode/ +tmp/ +scripts/ + +*.log +# Expo +.expo +dist/ +web-build/ \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg index 813f13e3..69108af4 100644 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - npm run commit-lint diff --git a/.husky/pre-commit b/.husky/pre-commit index 7e154687..0100eae1 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - npm run lint-staged diff --git a/.prettierrc.js b/.prettierrc.js index 56656933..21126c61 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -6,4 +6,5 @@ module.exports = { trailingComma: 'all', tabWidth: 4, useTabs: false, + endOfLine: "auto" }; diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index a603bb50..00000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.7.5 diff --git a/.watchmanconfig b/.watchmanconfig index 9e26dfee..0967ef42 100644 --- a/.watchmanconfig +++ b/.watchmanconfig @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/Gemfile b/Gemfile index 5efda89f..8d72c37a 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,9 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '2.7.5' +ruby ">= 2.6.10" -gem 'cocoapods', '~> 1.11', '>= 1.11.2' +# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper +# bound in the template on Cocoapods with next React Native release. +gem 'cocoapods', '>= 1.13', '< 1.15' +gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702d..00000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/__tests__/App-test.tsx b/__tests__/App-test.tsx deleted file mode 100644 index 090aefa9..00000000 --- a/__tests__/App-test.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @format - */ - -import 'react-native'; -import React from 'react'; -import App from '../App'; - -// Note: test renderer must be required after react-native. -import renderer from 'react-test-renderer'; - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/android/app/_BUCK b/android/app/_BUCK deleted file mode 100644 index 6862e085..00000000 --- a/android/app/_BUCK +++ /dev/null @@ -1,55 +0,0 @@ -# To learn about Buck see [Docs](https://buckbuild.com/). -# To run your application with Buck: -# - install Buck -# - `npm start` - to start the packager -# - `cd android` -# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` -# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck -# - `buck install -r android/app` - compile, install and run application -# - -load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") - -lib_deps = [] - -create_aar_targets(glob(["libs/*.aar"])) - -create_jar_targets(glob(["libs/*.jar"])) - -android_library( - name = "all-libs", - exported_deps = lib_deps, -) - -android_library( - name = "app-code", - srcs = glob([ - "src/main/java/**/*.java", - ]), - deps = [ - ":all-libs", - ":build_config", - ":res", - ], -) - -android_build_config( - name = "build_config", - package = "fun.upup.musicfree", -) - -android_resource( - name = "res", - package = "fun.upup.musicfree", - res = "src/main/res", -) - -android_binary( - name = "app", - keystore = "//android/keystores:debug", - manifest = "src/main/AndroidManifest.xml", - package_type = "debug", - deps = [ - ":app-code", - ], -) diff --git a/android/app/build.gradle b/android/app/build.gradle index a1e261cc..eca7097e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,355 +1,155 @@ -apply plugin: "com.android.application" - -import com.android.build.OutputFile -import groovy.json.JsonSlurper - -/** - * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets - * and bundleReleaseJsAndAssets). - * These basically call `react-native bundle` with the correct arguments during the Android build - * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the - * bundle directly from the development server. Below you can see all the possible configurations - * and their defaults. If you decide to add a configuration block, make sure to add it before the - * `apply from: "../../node_modules/react-native/react.gradle"` line. - * - * project.ext.react = [ - * // the name of the generated asset file containing your JS bundle - * bundleAssetName: "index.android.bundle", - * - * // the entry file for bundle generation. If none specified and - * // "index.android.js" exists, it will be used. Otherwise "index.js" is - * // default. Can be overridden with ENTRY_FILE environment variable. - * entryFile: "index.android.js", - * - * // https://reactnative.dev/docs/performance#enable-the-ram-format - * bundleCommand: "ram-bundle", - * - * // whether to bundle JS and assets in debug mode - * bundleInDebug: false, - * - * // whether to bundle JS and assets in release mode - * bundleInRelease: true, - * - * // whether to bundle JS and assets in another build variant (if configured). - * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants - * // The configuration property can be in the following formats - * // 'bundleIn${productFlavor}${buildType}' - * // 'bundleIn${buildType}' - * // bundleInFreeDebug: true, - * // bundleInPaidRelease: true, - * // bundleInBeta: true, - * - * // whether to disable dev mode in custom build variants (by default only disabled in release) - * // for example: to disable dev mode in the staging build type (if configured) - * devDisabledInStaging: true, - * // The configuration property can be in the following formats - * // 'devDisabledIn${productFlavor}${buildType}' - * // 'devDisabledIn${buildType}' - * - * // the root of your project, i.e. where "package.json" lives - * root: "../../", - * - * // where to put the JS bundle asset in debug mode - * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", - * - * // where to put the JS bundle asset in release mode - * jsBundleDirRelease: "$buildDir/intermediates/assets/release", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in debug mode - * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in release mode - * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", - * - * // by default the gradle tasks are skipped if none of the JS files or assets change; this means - * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to - * // date; if you have any other folders that you want to ignore for performance reasons (gradle - * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ - * // for example, you might want to remove it from here. - * inputExcludes: ["android/**", "ios/**"], - * - * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"], - * - * // supply additional arguments to the packager - * extraPackagerArgs: [] - * ] - */ - -project.ext.react = [ - entryFile: "index.js", - enableHermes: true, // clean and rebuild if changing - hermesCommand: '../../node_modules/react-native/sdks/hermesc/%OS-BIN%/hermesc' -] - -apply from: "../../node_modules/react-native/react.gradle" - -/** - * Set this to true to create two separate APKs instead of one: - * - An APK that only works on ARM devices - * - An APK that only works on x86 devices - * The advantage is the size of the APK is reduced by about 4MB. - * Upload all the APKs to the Play Store and people will download - * the correct one based on the CPU architecture of their device. - */ -def enableSeparateBuildPerCPUArchitecture = false - -/** - * Run Proguard to shrink the Java bytecode in release builds. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore. - * - * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'org.webkit:android-jsc:+' - -/** - * Whether to enable the Hermes VM. - * - * This should be set on project.ext.react and that value will be read here. If it is not set - * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode - * and the benefits of using Hermes will therefore be sharply reduced. - */ -def enableHermes = project.ext.react.get("enableHermes", false); - -/** - * Architectures to build native code for. - */ -def reactNativeArchitectures() { - def value = project.getProperties().get("reactNativeArchitectures") - return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] -} - -def keystoreProperties = new Properties() -def keystorePropertiesFile = rootProject.file('keystore.properties') -if (keystorePropertiesFile.exists()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} - -def getVersion() { - def inputFile = new File("../package.json") - def packageJson = new JsonSlurper().parseText(inputFile.text) - return packageJson["version"] -} - -def appVersion = getVersion() - - -android { - ndkVersion rootProject.ext.ndkVersion - - compileSdkVersion rootProject.ext.compileSdkVersion - - defaultConfig { - applicationId "fun.upup.musicfree" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName appVersion - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - - if (isNewArchitectureEnabled()) { - // We configure the NDK build only if you decide to opt-in for the New Architecture. - externalNativeBuild { - ndkBuild { - arguments "APP_PLATFORM=android-21", - "APP_STL=c++_shared", - "NDK_TOOLCHAIN_VERSION=clang", - "GENERATED_SRC_DIR=$buildDir/generated/source", - "PROJECT_BUILD_DIR=$buildDir", - "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", - "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", - "NODE_MODULES_DIR=$rootDir/../node_modules" - cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" - cppFlags "-std=c++17" - // Make sure this target name is the same you specify inside the - // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. - targets "musicfree_appmodules" - } - } - if (!enableSeparateBuildPerCPUArchitecture) { - ndk { - abiFilters (*reactNativeArchitectures()) - } - } - } - } - - if (isNewArchitectureEnabled()) { - // We configure the NDK build only if you decide to opt-in for the New Architecture. - externalNativeBuild { - ndkBuild { - path "$projectDir/src/main/jni/Android.mk" - } - } - def reactAndroidProjectDir = project(':ReactAndroid').projectDir - def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { - dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") - from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") - into("$buildDir/react-ndk/exported") - } - def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { - dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") - from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") - into("$buildDir/react-ndk/exported") - } - afterEvaluate { - // If you wish to add a custom TurboModule or component locally, - // you should uncomment this line. - // preBuild.dependsOn("generateCodegenArtifactsFromSchema") - preDebugBuild.dependsOn(packageReactNdkDebugLibs) - preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) - - // Due to a bug inside AGP, we have to explicitly set a dependency - // between configureNdkBuild* tasks and the preBuild tasks. - // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 - configureNdkBuildRelease.dependsOn(preReleaseBuild) - configureNdkBuildDebug.dependsOn(preDebugBuild) - reactNativeArchitectures().each { architecture -> - tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { - dependsOn("preDebugBuild") - } - tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { - dependsOn("preReleaseBuild") - } - } - } - } - - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include (*reactNativeArchitectures()) - } - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - release { - storeFile file(keystoreProperties['RELEASE_STORE_FILE']) - storePassword keystoreProperties['RELEASE_STORE_PASSWORD'] - keyAlias keystoreProperties['RELEASE_KEY_ALIAS'] - keyPassword keystoreProperties['RELEASE_KEY_PASSWORD'] - - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.release - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } - - // applicationVariants are e.g. debug, release - applicationVariants.all { variant -> - variant.outputs.each { output -> - // For each separate APK per architecture, set a unique version code as described here: - // https://developer.android.com/studio/build/configure-apk-splits.html - // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. - def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - defaultConfig.versionCode * 1000 + versionCodes.get(abi) - } - - } - } -} - -dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - - //noinspection GradleDynamicVersion - implementation "com.facebook.react:react-native:+" // From node_modules - - implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" - implementation "androidx.core:core-splashscreen:1.0.0" - - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { - exclude group:'com.facebook.fbjni' - } - - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { - exclude group:'com.facebook.flipper' - } - - if (enableHermes) { - //noinspection GradleDynamicVersion - implementation("com.facebook.react:hermes-engine:+") { // From node_modules - exclude group:'com.facebook.fbjni' - } - } else { - implementation jscFlavor - } - - implementation project(':react-native-fs') - implementation 'com.facebook.fresco:animated-gif:2.5.0' - // https://mvnrepository.com/artifact/net.jthink/jaudiotagger - implementation 'net.jthink:jaudiotagger:2.2.5' - -} - -if (isNewArchitectureEnabled()) { - // If new architecture is enabled, we let you build RN from source - // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. - // This will be applied to all the imported transtitive dependency. - configurations.all { - resolutionStrategy.dependencySubstitution { - substitute(module("com.facebook.react:react-native")) - .using(project(":ReactAndroid")) - .because("On New Architecture we're building React Native from source") - substitute(module("com.facebook.react:hermes-engine")) - .using(project(":ReactAndroid:hermes-engine")) - .because("On New Architecture we're building Hermes from source") - } - } -} - -// Run this once to be able to run the application with BUCK -// puts all compile dependencies into folder libs for BUCK to use -task copyDownloadableDepsToLibs(type: Copy) { - from configurations.implementation - into 'libs' -} - -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) - -apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle"); - -def isNewArchitectureEnabled() { - // To opt-in for the New Architecture, you can either: - // - Set `newArchEnabled` to true inside the `gradle.properties` file - // - Invoke gradle with `-newArchEnabled=true` - // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` - return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" -} - +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +import com.android.build.OutputFile +import groovy.json.JsonSlurper + + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '..' + // root = file("../") + // The folder where the react-native NPM package is. Default is ../node_modules/react-native + // reactNativeDir = file("../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen + // codegenDir = file("../node_modules/@react-native/codegen") + // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js + // cliFile = file("../node_modules/react-native/cli.js") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + // + // The command to run when bundling. By default is 'bundle' + // bundleCommand = "ram-bundle" + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + // + // Added by install-expo-modules + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", rootDir.getAbsoluteFile().getParentFile().getAbsolutePath(), "android", "absolute"].execute(null, rootDir).text.trim()) + cliFile = new File(["node", "--print", "require.resolve('@expo/cli')"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = false + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +// !! Add lines +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('keystore.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + +static def getVersion() { + def inputFile = new File("../package.json") + def packageJson = new JsonSlurper().parseText(inputFile.text) + return packageJson["version"] +} + +def appVersion = getVersion() + +android { + ndkVersion rootProject.ext.ndkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace "fun.upup.musicfree" + defaultConfig { + applicationId "fun.upup.musicfree" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName appVersion + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + // !! Add lines + release { + storeFile file(keystoreProperties['RELEASE_STORE_FILE']) + storePassword keystoreProperties['RELEASE_STORE_PASSWORD'] + keyAlias keystoreProperties['RELEASE_KEY_ALIAS'] + keyPassword keystoreProperties['RELEASE_KEY_PASSWORD'] + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.release + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } + + // !! Add lines + implementation project(':react-native-fs') + implementation 'com.facebook.fresco:animated-gif:2.5.0' + // https://mvnrepository.com/artifact/net.jthink/jaudiotagger + implementation 'net.jthink:jaudiotagger:2.2.5' +} + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/android/app/build_defs.bzl b/android/app/build_defs.bzl deleted file mode 100644 index fff270f8..00000000 --- a/android/app/build_defs.bzl +++ /dev/null @@ -1,19 +0,0 @@ -"""Helper definitions to glob .aar and .jar targets""" - -def create_aar_targets(aarfiles): - for aarfile in aarfiles: - name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] - lib_deps.append(":" + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -def create_jar_targets(jarfiles): - for jarfile in jarfiles: - name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] - lib_deps.append(":" + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 4b185bc1..eb98c01a 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -2,12 +2,8 @@ - - - - + tools:ignore="GoogleAppIndexingWarning"/> diff --git a/android/app/src/debug/java/fun/upup/musicfree/ReactNativeFlipper.java b/android/app/src/debug/java/fun/upup/musicfree/ReactNativeFlipper.java deleted file mode 100644 index d7d12636..00000000 --- a/android/app/src/debug/java/fun/upup/musicfree/ReactNativeFlipper.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - *

This source code is licensed under the MIT license found in the LICENSE file in the root - * directory of this source tree. - */ -package fun.upup.musicfree; - -import android.content.Context; -import com.facebook.flipper.android.AndroidFlipperClient; -import com.facebook.flipper.android.utils.FlipperUtils; -import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.react.ReactFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.react.ReactInstanceEventListener; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.modules.network.NetworkingModule; -import okhttp3.OkHttpClient; - -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - if (FlipperUtils.shouldEnableFlipper(context)) { - final FlipperClient client = AndroidFlipperClient.getInstance(context); - - client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new ReactFlipperPlugin()); - client.addPlugin(new DatabasesFlipperPlugin(context)); - client.addPlugin(new SharedPreferencesFlipperPlugin(context)); - client.addPlugin(CrashReporterPlugin.getInstance()); - - NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); - NetworkingModule.setCustomClientBuilder( - new NetworkingModule.CustomClientBuilder() { - @Override - public void apply(OkHttpClient.Builder builder) { - builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); - } - }); - client.addPlugin(networkFlipperPlugin); - client.start(); - - // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized - // Hence we run if after all native modules have been initialized - ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); - if (reactContext == null) { - reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceEventListener() { - @Override - public void onReactContextInitialized(ReactContext reactContext) { - reactInstanceManager.removeReactInstanceEventListener(this); - reactContext.runOnNativeModulesQueueThread( - new Runnable() { - @Override - public void run() { - client.addPlugin(new FrescoFlipperPlugin()); - } - }); - } - }); - } else { - client.addPlugin(new FrescoFlipperPlugin()); - } - } - } -} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 440b8bd4..8a721fe0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,56 +1,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/ic_launcher-playstore.png b/android/app/src/main/ic_launcher-playstore.png new file mode 100644 index 00000000..1140f6f6 Binary files /dev/null and b/android/app/src/main/ic_launcher-playstore.png differ diff --git a/android/app/src/main/java/fun/upup/musicfree/MainActivity.java b/android/app/src/main/java/fun/upup/musicfree/MainActivity.java deleted file mode 100644 index e5b4841a..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/MainActivity.java +++ /dev/null @@ -1,58 +0,0 @@ -package fun.upup.musicfree; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.ReactRootView; -import android.os.Bundle; -import com.zoontek.rnbootsplash.RNBootSplash; -import androidx.core.view.WindowCompat; - -public class MainActivity extends ReactActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - RNBootSplash.init(this); - super.onCreate(null); - WindowCompat.setDecorFitsSystemWindows(getWindow(), false); - } - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "MusicFree"; - } - - /** - * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and - * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer - * (Paper). - */ - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new MainActivityDelegate(this, getMainComponentName()); - } - - public static class MainActivityDelegate extends ReactActivityDelegate { - public MainActivityDelegate(ReactActivity activity, String mainComponentName) { - super(activity, mainComponentName); - } - - @Override - protected ReactRootView createRootView() { - ReactRootView reactRootView = new ReactRootView(getContext()); - // If you opted-in for the New Architecture, we enable the Fabric Renderer. - reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); - return reactRootView; - } - - @Override - protected boolean isConcurrentRootEnabled() { - // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). - // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html - return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - } - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/MainActivity.kt b/android/app/src/main/java/fun/upup/musicfree/MainActivity.kt new file mode 100644 index 00000000..efe16e9f --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/MainActivity.kt @@ -0,0 +1,23 @@ +package `fun`.upup.musicfree +import expo.modules.ReactActivityDelegateWrapper + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +class MainActivity : ReactActivity() { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "MusicFree" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)) +} diff --git a/android/app/src/main/java/fun/upup/musicfree/MainApplication.java b/android/app/src/main/java/fun/upup/musicfree/MainApplication.java deleted file mode 100644 index eacac5e6..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/MainApplication.java +++ /dev/null @@ -1,104 +0,0 @@ -package fun.upup.musicfree; - -import android.app.Application; -import android.content.Context; - -import com.facebook.react.PackageList; -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.config.ReactFeatureFlags; -import com.facebook.soloader.SoLoader; - -import fun.upup.musicfree.appIconUtil.AppIconUtilPackage; -import fun.upup.musicfree.newarchitecture.MainApplicationReactNativeHost; - -import java.lang.reflect.InvocationTargetException; -import java.util.List; - -import com.rnfs.RNFSPackage; -import fun.upup.musicfree.utils.UtilsPackage; -import fun.upup.musicfree.mp3Util.Mp3UtilPackage; -import fun.upup.musicfree.lyricUtil.LyricUtilPackage; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = - new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - packages.add(new UtilsPackage()); - packages.add(new Mp3UtilPackage()); - packages.add(new LyricUtilPackage()); - packages.add(new AppIconUtilPackage(getPackageName())); - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - private final ReactNativeHost mNewArchitectureNativeHost = - new MainApplicationReactNativeHost(this); - - @Override - public ReactNativeHost getReactNativeHost() { - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - return mNewArchitectureNativeHost; - } else { - return mReactNativeHost; - } - } - - @Override - public void onCreate() { - super.onCreate(); - // If you opted-in for the New Architecture, we enable the TurboModule system - ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - SoLoader.init(this, /* native exopackage */ false); - initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - } - - /** - * Loads Flipper in React Native templates. Call this in the onCreate method with something like - * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - * - * @param context - * @param reactInstanceManager - */ - private static void initializeFlipper( - Context context, ReactInstanceManager reactInstanceManager) { - if (BuildConfig.DEBUG) { - try { - /* - We use reflection here to pick up the class that initializes Flipper, - since Flipper library is not available in release mode - */ - Class aClass = Class.forName("fun.upup.musicfree.ReactNativeFlipper"); - aClass - .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) - .invoke(null, context, reactInstanceManager); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/MainApplication.kt b/android/app/src/main/java/fun/upup/musicfree/MainApplication.kt new file mode 100644 index 00000000..32ea3811 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/MainApplication.kt @@ -0,0 +1,58 @@ +package `fun`.upup.musicfree +import android.content.res.Configuration +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +import android.app.Application +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.soloader.SoLoader +import `fun`.upup.musicfree.lyricUtil.LyricUtilPackage +import `fun`.upup.musicfree.mp3Util.Mp3UtilPackage +import `fun`.upup.musicfree.utils.UtilsPackage + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = + ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + add(UtilsPackage()) + add(Mp3UtilPackage()) + add(LyricUtilPackage()) + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + }) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilModule.java b/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilModule.java deleted file mode 100644 index 9434ecb6..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilModule.java +++ /dev/null @@ -1,173 +0,0 @@ -// 参考:https://blog.stackademic.com/change-the-app-icon-at-runtime-for-react-native-by-creating-a-nativemodule-5bfb285bd69b -package fun.upup.musicfree.appIconUtil; - -import android.Manifest; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.app.Activity; -import android.app.Application; -import android.content.ComponentName; -import android.content.pm.PackageManager; -import android.os.Bundle; - - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; - -import java.util.HashSet; -import java.util.Set; - - -public class AppIconUtilModule extends ReactContextBaseJavaModule implements Application.ActivityLifecycleCallbacks { - private static ReactApplicationContext reactContext; - - private final String packageName; - - public static final String MAIN_ACTVITY_BASE_NAME = ".MainActivity"; - - private String componentClass = ""; - - private final Set classesToKill = new HashSet<>(); - - public AppIconUtilModule(ReactApplicationContext context, String packageName) { - super(context); - reactContext = context; - this.packageName = packageName; - } - - @NonNull - @Override - public String getName() { - return "AppIconUtil"; - } - - @ReactMethod - public void getIcon(Promise promise) { - final Activity activity = getCurrentActivity(); - if (activity == null) { - promise.reject("ACTIVITY_NOT_FOUND", "Activity was not found"); - return; - } - - final String activityName = activity.getComponentName().getClassName(); - - if (activityName.endsWith(MAIN_ACTVITY_BASE_NAME)) { - promise.resolve("Default"); - return; - } - String[] activityNameSplit = activityName.split("MainActivity"); - if (activityNameSplit.length != 2) { - promise.reject("ANDROID:UNEXPECTED_COMPONENT_CLASS:", this.componentClass); - return; - } - promise.resolve(activityNameSplit[1]); - } - - @ReactMethod - public void changeIcon(String iconName, Promise promise) { - - final Activity activity = getCurrentActivity(); - - if (activity == null) { - promise.reject("ACTIVITY_NOT_FOUND", "The activity is null. Check if the app is running properly."); - return; - } - if (iconName.isEmpty()) { - promise.reject("EMPTY_ICON_STRING", "Icon name is missing i.e. changeIcon('YOUR_ICON_NAME_HERE')"); - return; - } - if (this.componentClass.isEmpty()) { - this.componentClass = activity.getComponentName().getClassName(); // i.e. MyActivity - } - - final String activeClass = this.packageName + MAIN_ACTVITY_BASE_NAME + iconName; - - if (this.componentClass.equals(activeClass)) { - promise.reject("ICON_ALREADY_USED", "This icons is the current active icon. " + this.componentClass); - return; - } - - try { - activity.getPackageManager().setComponentEnabledSetting( - new ComponentName(this.packageName, activeClass), - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP - ); - promise.resolve(iconName); - } catch (Exception e) { - promise.reject("ICON_INVALID", e.getLocalizedMessage()); - return; - } - - this.classesToKill.add(this.componentClass); - this.componentClass = activeClass; - activity.getApplication().registerActivityLifecycleCallbacks(this); -// The completeIconChange() is what makes the current active class disabled. -// Move it to onActivityPaused or onActivityStopped etc to change the icon only when the app closes or goes to background - completeIconChange(); - } - - private void completeIconChange() { - final Activity activity = getCurrentActivity(); - if (activity == null) return; - -// Works for minSdkVersion = 23 - for (String className : classesToKill) { - activity.getPackageManager().setComponentEnabledSetting( - new ComponentName(this.packageName, className), - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP - ); - } -/* - // Works for minSdkVersion = 24 and above - classesToKill.forEach((cls) -> activity.getPackageManager().setComponentEnabledSetting( - new ComponentName(this.packageName, cls), - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP - )); -*/ - classesToKill.clear(); - } - - @Override - public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) { - - } - - @Override - public void onActivityStarted(@NonNull Activity activity) { - - } - - @Override - public void onActivityResumed(@NonNull Activity activity) { - - } - - @Override - public void onActivityPaused(@NonNull Activity activity) { - - } - - @Override - public void onActivityStopped(@NonNull Activity activity) { - - } - - @Override - public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle bundle) { - - } - - @Override - public void onActivityDestroyed(@NonNull Activity activity) { - - } -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilPackage.java b/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilPackage.java deleted file mode 100644 index 424a258e..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/appIconUtil/AppIconUtilPackage.java +++ /dev/null @@ -1,35 +0,0 @@ -package fun.upup.musicfree.appIconUtil; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class AppIconUtilPackage implements ReactPackage { - - private final String packageName; - - public AppIconUtilPackage(String packageName) { - this.packageName = packageName; - } - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules( - ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new AppIconUtilModule(reactContext, this.packageName)); - - return modules; - } - -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.java b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.java deleted file mode 100644 index 381dbfdb..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.java +++ /dev/null @@ -1,241 +0,0 @@ -package fun.upup.musicfree.lyricUtil; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.provider.Settings; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.UiThreadUtil; - -import java.util.HashMap; -import java.util.Map; - - -public class LyricUtilModule extends ReactContextBaseJavaModule { - private static ReactApplicationContext reactContext; - private LyricView lyricView; - - public LyricUtilModule(ReactApplicationContext context) { - super(context); - reactContext = context; - } - - @NonNull - @Override - public String getName() { - return "LyricUtil"; - } - - @ReactMethod - public void checkSystemAlertPermission(Promise promise){ - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - promise.resolve(Settings.canDrawOverlays(reactContext)); - } - promise.resolve(true); - } catch(Exception e) { - promise.reject("Error", e.getMessage()); - } - } - - @RequiresApi(api = Build.VERSION_CODES.M) - @ReactMethod - public void requestSystemAlertPermission(Promise promise){ - try { - Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); - intent.setData(Uri.parse("package:" + getReactApplicationContext().getPackageName())); - Activity currentActivity = getCurrentActivity(); - if (currentActivity != null) { - currentActivity.startActivity(intent); - } - promise.resolve(true); - } catch(Exception e) { - promise.reject("Error", e.getMessage()); - } - } - - - @ReactMethod - public void showStatusBarLyric(String initLyric, ReadableMap options, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView == null) { - lyricView = new LyricView(reactContext); - } - /** - * topPercent: number; - * leftPercent: number; - * align: number; - * color: string; - * backgroundColor: string; - * widthPercent: number; - * fontSize: number; - */ - Map mapOptions = new HashMap<>(); - if(options.hasKey("topPercent")) { - mapOptions.put("topPercent", options.getDouble("topPercent")); - } - if(options.hasKey("leftPercent")) { - mapOptions.put("leftPercent", options.getDouble("leftPercent")); - } - if(options.hasKey("align")) { - mapOptions.put("align", options.getInt("align")); - - } - if(options.hasKey("color")) { - mapOptions.put("color", options.getString("color")); - - } - if(options.hasKey("backgroundColor")) { - mapOptions.put("backgroundColor", options.getString("backgroundColor")); - - } - if(options.hasKey("widthPercent")) { - mapOptions.put("widthPercent", options.getDouble("widthPercent")); - - } - if(options.hasKey("fontSize")) { - mapOptions.put("fontSize", options.getDouble("fontSize")); - - } - try { - lyricView.showLyricWindow(initLyric, mapOptions); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - }); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - - } - - - - - @ReactMethod - public void hideStatusBarLyric(Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.hideLyricWindow(); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricText(String lyric, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setText(lyric); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricAlign(int alignment, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setAlign(alignment); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricTop(double pct, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setTopPercent(pct); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricLeft(double pct, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setLeftPercent(pct); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricWidth(double pct, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setWidth(pct); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarLyricFontSize(float fontSize, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setFontSize(fontSize); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - @ReactMethod - public void setStatusBarColors(String textColor, String backgroundColor, Promise promise) { - try { - UiThreadUtil.runOnUiThread(() -> { - if(lyricView != null) { - lyricView.setColors(textColor, backgroundColor); - } - }); - promise.resolve(true); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - } - - - -} diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.kt b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.kt new file mode 100644 index 00000000..cab026e3 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilModule.kt @@ -0,0 +1,179 @@ +package `fun`.upup.musicfree.lyricUtil + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.provider.Settings +import android.util.Log +import androidx.annotation.RequiresApi +import com.facebook.react.bridge.* +import java.util.* + +class LyricUtilModule(private val reactContext: ReactApplicationContext): ReactContextBaseJavaModule(reactContext) { + override fun getName() = "LyricUtil" + private var lyricView: LyricView? = null + + @ReactMethod + fun checkSystemAlertPermission(promise: Promise) { + try { + promise.resolve(Settings.canDrawOverlays(reactContext)) + } catch (e: Exception) { + promise.reject("Error", e.message) + } + } + + @ReactMethod + fun requestSystemAlertPermission(promise: Promise) { + try { + val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION).apply { + data = Uri.parse("package:" + reactContext.packageName) + } + currentActivity?.startActivity(intent) + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Error", e.message) + } + } + + @ReactMethod + fun showStatusBarLyric(initLyric: String, options: ReadableMap, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + if (lyricView == null) { + lyricView = LyricView(reactContext) + } + + val mapOptions = mutableMapOf().apply { + if (options.hasKey("topPercent")) { + put("topPercent", options.getDouble("topPercent")) + } + if (options.hasKey("leftPercent")) { + put("leftPercent", options.getDouble("leftPercent")) + } + if (options.hasKey("align")) { + put("align", options.getInt("align")) + } + if (options.hasKey("color")) { + options.getString("color")?.let { put("color", it) } + } + if (options.hasKey("backgroundColor")) { + options.getString("backgroundColor")?.let { put("color", it) } + } + if (options.hasKey("widthPercent")) { + put("color", options.getDouble("widthPercent")) + } + if (options.hasKey("fontSize")) { + put("color", options.getDouble("fontSize")) + } + } + + try { + lyricView?.showLyricWindow(initLyric, mapOptions) + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun hideStatusBarLyric(promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.hideLyricWindow() + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricText(lyric: String, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setText(lyric) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricAlign(alignment: Int, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setAlign(alignment) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricTop(pct: Double, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setTopPercent(pct) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricLeft(pct: Double, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setLeftPercent(pct) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricWidth(pct: Double, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setWidth(pct) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarLyricFontSize(fontSize: Float, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setFontSize(fontSize) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun setStatusBarColors(textColor: String, backgroundColor: String, promise: Promise) { + try { + UiThreadUtil.runOnUiThread { + lyricView?.setColors(textColor, backgroundColor) + } + promise.resolve(true) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.java b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.java deleted file mode 100644 index 9a4fc742..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.java +++ /dev/null @@ -1,33 +0,0 @@ -package fun.upup.musicfree.lyricUtil; - -import androidx.annotation.NonNull; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class LyricUtilPackage implements ReactPackage { - - @NonNull - @Override - public List createViewManagers(@NonNull ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @NonNull - @Override - public List createNativeModules( - @NonNull ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new LyricUtilModule(reactContext)); - - return modules; - } - -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.kt b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.kt new file mode 100644 index 00000000..4d53ad85 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricUtilPackage.kt @@ -0,0 +1,19 @@ +package `fun`.upup.musicfree.lyricUtil + +import android.view.View +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ReactShadowNode +import com.facebook.react.uimanager.ViewManager + +class LyricUtilPackage : ReactPackage { + + override fun createViewManagers( + reactContext: ReactApplicationContext + ): MutableList>> = mutableListOf() + + override fun createNativeModules( + reactContext: ReactApplicationContext + ): MutableList = listOf(LyricUtilModule(reactContext)).toMutableList() +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.java b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.java deleted file mode 100644 index e6320ace..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.java +++ /dev/null @@ -1,283 +0,0 @@ -package fun.upup.musicfree.lyricUtil; - -import android.app.Activity; -import android.content.res.Configuration; -import android.graphics.Color; -import android.graphics.PixelFormat; -import android.graphics.drawable.ColorDrawable; -import android.hardware.SensorManager; -import android.os.Build; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.OrientationEventListener; -import android.view.View; -import android.view.WindowManager; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.facebook.react.bridge.ReactContext; - -import java.util.Map; - -public class LyricView extends Activity implements View.OnTouchListener { - - private WindowManager windowManager = null; - - private OrientationEventListener orientationEventListener = null; - - private WindowManager.LayoutParams layoutParams = null; - - private TextView tv = null; - - private final ReactContext reactContext; - - LyricView(ReactContext _reactContext) { - reactContext = _reactContext; - } - - // 窗口信息 - private double windowWidth; - - private double windowHeight; - - private double widthPercent; - - private double leftPercent; - - private double topPercent = 0; - - - - @Override - public boolean onTouch(View view, MotionEvent motionEvent) { - Log.d("touch", "Desktop Touch"); - return false; - } - - // 展示歌词窗口 - public void showLyricWindow(String initText, Map options) { - try { - if (windowManager == null) { - windowManager = (WindowManager) reactContext.getSystemService(WINDOW_SERVICE); - layoutParams = new WindowManager.LayoutParams(); - - DisplayMetrics outMetrics = new DisplayMetrics(); - windowManager.getDefaultDisplay().getMetrics(outMetrics); - this.windowWidth = outMetrics.widthPixels; - this.windowHeight = outMetrics.heightPixels; - - layoutParams.type = Build.VERSION.SDK_INT < Build.VERSION_CODES.O ? - WindowManager.LayoutParams.TYPE_SYSTEM_ALERT : - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; - /* - * topPercent: number; - * leftPercent: number; - * align: number; - * color: string; - * backgroundColor: string; - * widthPercent: number; - * fontSize: number; - */ - Object topPercent = options.get("topPercent"); - Object leftPercent = options.get("leftPercent"); - Object align = options.get("align"); - Object color = options.get("color"); - Object backgroundColor = options.get("backgroundColor"); - Object widthPercent = options.get("widthPercent"); - Object fontSize = options.get("fontSize"); - - this.widthPercent = (widthPercent != null ? (double) widthPercent: 0.5); - - layoutParams.width = (int) (this.widthPercent * this.windowWidth); - layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; - layoutParams.gravity = Gravity.TOP | Gravity.START; -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { -// layoutParams.setFitInsetsTypes(0); -// } - this.leftPercent = (double) (leftPercent != null ? leftPercent : 0.5); - layoutParams.x = (int) (this.leftPercent * (this.windowWidth - layoutParams.width)); - layoutParams.y = 0; - - - layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN - | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; // 最后一个控制不可点击 - layoutParams.format = PixelFormat.TRANSPARENT; - - tv = new TextView(reactContext); - if (initText != null) { - tv.setText(initText); - } - tv.setTextSize(fontSize != null ? ((Double) fontSize).floatValue() : 14); - tv.setBackgroundColor(Color.parseColor(rgba2argb(backgroundColor != null ? (String) backgroundColor: "#84888153"))); - tv.setTextColor(Color.parseColor(rgba2argb(color != null ? (String) color: "#FFE9D2"))); - tv.setPadding(12, 6, 12, 6); - tv.setGravity(align != null ? (int) align: Gravity.CENTER); - windowManager.addView(tv, layoutParams); - - if (topPercent != null) { - setTopPercent((double) topPercent); - } - listenOrientationChange(); - - - - } - } catch(Exception e) { - hideLyricWindow(); - throw e; - } - } - - private void listenOrientationChange() { - if(windowManager == null) { - return; - } - if (orientationEventListener == null) { - orientationEventListener = new OrientationEventListener(reactContext, SensorManager.SENSOR_DELAY_NORMAL) { - @Override - public void onOrientationChanged(int i) { - if(windowManager != null) { - DisplayMetrics outMetrics = new DisplayMetrics(); - windowManager.getDefaultDisplay().getMetrics(outMetrics); - windowWidth = outMetrics.widthPixels; - windowHeight = outMetrics.heightPixels; - layoutParams.width = (int) (widthPercent * windowWidth); - layoutParams.x = (int) (leftPercent * (windowWidth - layoutParams.width)); - layoutParams.y = (int) (topPercent * (windowHeight - tv.getHeight())); - windowManager.updateViewLayout(tv, layoutParams); - } - } - }; - } - - if(orientationEventListener.canDetectOrientation()) { - orientationEventListener.enable(); - } - } - - private void unlistenOrientationChange() { - if(orientationEventListener != null) { - orientationEventListener.disable(); - } - } - - - String rgba2argb(String color) { - if (color.length() == 9) { - return color.charAt(0) + color.substring(7, 9) + color.substring(1, 7); - } else { - return color; - } - } - - - // 隐藏歌词窗口 - public void hideLyricWindow() { - if (windowManager != null) { - if (tv != null) { - try { - windowManager.removeView(tv); - } catch (Exception e) { - - } - tv = null; - } - windowManager = null; - layoutParams = null; - unlistenOrientationChange(); - } - } - - // 设置歌词内容 - public void setText(String text) { - if (tv != null) { - tv.setText(text); - } - } - - - public void setAlign(int gravity) { - if (tv != null) { -// tv.setTextAlignment(alignment); - tv.setGravity(gravity); - } - } - - public void setTopPercent(double pct) { - if (pct < 0) { - pct = 0; - } - if (pct > 1) { - pct = 1; - } - if (tv != null) { - layoutParams.y = (int) (pct * (windowHeight - tv.getHeight())); - windowManager.updateViewLayout(tv, layoutParams); - } - this.topPercent = pct; - } - - public void setLeftPercent(double pct) { - if (pct < 0) { - pct = 0; - } - if (pct > 1) { - pct = 1; - } - if(tv != null) { - layoutParams.x = (int) (pct * (windowWidth - layoutParams.width)); - windowManager.updateViewLayout(tv, layoutParams); - } - this.leftPercent = pct; - } - - public void setColors(String textColor, String backgroundColor) { - if(tv != null) { - if(textColor != null) { - tv.setTextColor(Color.parseColor(rgba2argb(textColor))); - } - if (backgroundColor != null) { - ColorDrawable background = new ColorDrawable(Color.parseColor(rgba2argb(backgroundColor))); - tv.setBackground(background); - } - } - } - - public void setWidth(double pct) { - if (pct < 0.3) { - pct = 0.3; - } - if (pct > 1) { - pct = 1; - } - if(tv != null) { - int width = (int) (pct * this.windowWidth); - int originalWidth = layoutParams.width; - if(width <= originalWidth) { - layoutParams.x += ((originalWidth - width) / 2); - } else { - layoutParams.x -= ((width - originalWidth) / 2); - if (layoutParams.x < 0) { - layoutParams.x = 0; - } else if(layoutParams.x + width > windowWidth) { - layoutParams.x = (int) (windowWidth - width); - } - } - layoutParams.width = width; - windowManager.updateViewLayout(tv, layoutParams); - } - this.widthPercent = pct; - } - - public void setFontSize(float fontSize) { - if (tv != null) { - tv.setTextSize(fontSize); - } - } - - - -} diff --git a/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.kt b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.kt new file mode 100644 index 00000000..a03f6486 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/lyricUtil/LyricView.kt @@ -0,0 +1,222 @@ +package `fun`.upup.musicfree.lyricUtil + +import android.app.Activity +import android.content.Context +import android.graphics.Color +import android.graphics.PixelFormat +import android.graphics.drawable.ColorDrawable +import android.hardware.SensorManager +import android.os.Build +import android.util.DisplayMetrics +import android.util.Log +import android.view.Gravity +import android.view.MotionEvent +import android.view.OrientationEventListener +import android.view.View +import android.view.WindowManager +import android.widget.TextView +import com.facebook.react.bridge.ReactContext + + + +class LyricView(private val reactContext: ReactContext) : Activity(), View.OnTouchListener { + + private var windowManager: WindowManager? = null + private var orientationEventListener: OrientationEventListener? = null + private var layoutParams: WindowManager.LayoutParams? = null + private var tv: TextView? = null + + // 窗口信息 + private var windowWidth = 0.0 + private var windowHeight = 0.0 + private var widthPercent = 0.0 + private var leftPercent = 0.0 + private var topPercent = 0.0 + + override fun onTouch(view: View, motionEvent: MotionEvent): Boolean { + Log.d("touch", "Desktop Touch") + return false + } + + // 展示歌词窗口 + fun showLyricWindow(initText: String?, options: Map) { + try { + if (windowManager == null) { + windowManager = reactContext.getSystemService(WINDOW_SERVICE) as WindowManager + layoutParams = WindowManager.LayoutParams() + + val outMetrics = DisplayMetrics() + windowManager?.defaultDisplay?.getMetrics(outMetrics) + windowWidth = outMetrics.widthPixels.toDouble() + windowHeight = outMetrics.heightPixels.toDouble() + + layoutParams?.type = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) + WindowManager.LayoutParams.TYPE_SYSTEM_ALERT + else + WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY + + /* + * topPercent: number; + * leftPercent: number; + * align: number; + * color: string; + * backgroundColor: string; + * widthPercent: number; + * fontSize: number; + */ + val topPercent = options["topPercent"] + val leftPercent = options["leftPercent"] + val align = options["align"] + val color = options["color"] + val backgroundColor = options["backgroundColor"] + val widthPercent = options["widthPercent"] + val fontSize = options["fontSize"] + + this.widthPercent = widthPercent?.toString()?.toDouble() ?: 0.5 + + layoutParams?.width = (this.widthPercent * windowWidth).toInt() + layoutParams?.height = WindowManager.LayoutParams.WRAP_CONTENT + layoutParams?.gravity = Gravity.TOP or Gravity.START + + this.leftPercent = leftPercent?.toString()?.toDouble() ?: 0.5 + layoutParams?.x = (this.leftPercent * (windowWidth - layoutParams!!.width)).toInt() + layoutParams?.y = 0 + + layoutParams?.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + + layoutParams?.format = PixelFormat.TRANSPARENT + + tv = TextView(reactContext).apply { + text = initText ?: "" + textSize = fontSize?.toString()?.toFloat() ?: 14f + setBackgroundColor(Color.parseColor(rgba2argb(backgroundColor?.toString() ?: "#84888153"))) + setTextColor(Color.parseColor(rgba2argb(color?.toString() ?: "#FFE9D2"))) + setPadding(12, 6, 12, 6) + gravity = align?.toString()?.toInt() ?: Gravity.CENTER + } + windowManager?.addView(tv, layoutParams) + + topPercent?.toString()?.toDouble()?.let { setTopPercent(it) } + + listenOrientationChange() + } + } catch (e: Exception) { + hideLyricWindow() + throw e + } + } + + private fun listenOrientationChange() { + if (windowManager == null) return + + if (orientationEventListener == null) { + orientationEventListener = object : OrientationEventListener(reactContext, SensorManager.SENSOR_DELAY_NORMAL) { + override fun onOrientationChanged(orientation: Int) { + if (windowManager != null) { + val outMetrics = DisplayMetrics() + windowManager?.defaultDisplay?.getMetrics(outMetrics) + windowWidth = outMetrics.widthPixels.toDouble() + windowHeight = outMetrics.heightPixels.toDouble() + layoutParams?.width = (widthPercent * windowWidth).toInt() + layoutParams?.x = (leftPercent * (windowWidth - layoutParams!!.width)).toInt() + layoutParams?.y = (topPercent * (windowHeight - tv!!.height)).toInt() + windowManager?.updateViewLayout(tv, layoutParams) + } + } + } + } + + if (orientationEventListener?.canDetectOrientation() == true) { + orientationEventListener?.enable() + } + } + + private fun unlistenOrientationChange() { + orientationEventListener?.disable() + } + + private fun rgba2argb(color: String): String { + return if (color.length == 9) { + color[0] + color.substring(7, 9) + color.substring(1, 7) + } else { + color + } + } + + // 隐藏歌词窗口 + fun hideLyricWindow() { + if (windowManager != null) { + tv?.let { + try { + windowManager?.removeView(it) + } catch (e: Exception) { + // Handle exception + } + tv = null + } + windowManager = null + layoutParams = null + unlistenOrientationChange() + } + } + + // 设置歌词内容 + fun setText(text: String) { + tv?.text = text + } + + fun setAlign(gravity: Int) { + tv?.gravity = gravity + } + + fun setTopPercent(pct: Double) { + var percent = pct.coerceIn(0.0, 1.0) + tv?.let { + layoutParams?.y = (percent * (windowHeight - it.height)).toInt() + windowManager?.updateViewLayout(it, layoutParams) + } + this.topPercent = percent + } + + fun setLeftPercent(pct: Double) { + var percent = pct.coerceIn(0.0, 1.0) + tv?.let { + layoutParams?.x = (percent * (windowWidth - layoutParams!!.width)).toInt() + windowManager?.updateViewLayout(it, layoutParams) + } + this.leftPercent = percent + } + + fun setColors(textColor: String?, backgroundColor: String?) { + tv?.let { + textColor?.let { color -> it.setTextColor(Color.parseColor(rgba2argb(color))) } + backgroundColor?.let { color -> + it.background = ColorDrawable(Color.parseColor(rgba2argb(color))) + } + } + } + + fun setWidth(pct: Double) { + var percent = pct.coerceIn(0.3, 1.0) + tv?.let { + val width = (percent * windowWidth).toInt() + val originalWidth = layoutParams?.width ?: 0 + layoutParams?.x = if (width <= originalWidth) { + layoutParams!!.x + (originalWidth - width) / 2 + } else { + layoutParams!!.x - (width - originalWidth) / 2 + }.coerceAtLeast(0).coerceAtMost((windowWidth - width).toInt()) + layoutParams?.width = width + windowManager?.updateViewLayout(it, layoutParams) + } + this.widthPercent = percent + } + + fun setFontSize(fontSize: Float) { + tv?.textSize = fontSize + } +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.java b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.java deleted file mode 100644 index 0c697780..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.java +++ /dev/null @@ -1,249 +0,0 @@ -package fun.upup.musicfree.mp3Util; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.media.MediaMetadataRetriever; -import android.net.Uri; -import android.util.Log; - -import androidx.annotation.NonNull; - -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableArray; -import com.facebook.react.bridge.WritableMap; - -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.AudioFileIO; -import org.jaudiotagger.tag.FieldKey; -import org.jaudiotagger.tag.Tag; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; - - -public class Mp3UtilModule extends ReactContextBaseJavaModule { - private static ReactApplicationContext reactContext; - - public Mp3UtilModule(ReactApplicationContext context) { - super(context); - reactContext = context; - } - - @NonNull - @Override - public String getName() { - return "Mp3Util"; - } - - private boolean isContentUri(Uri uri) { - if (uri != null) { - String scheme = uri.getScheme(); - return scheme != null && scheme.equalsIgnoreCase("content"); - } - return false; - } - - @ReactMethod - public void getBasicMeta(String filePath, Promise promise) { - try { - Uri uri = Uri.parse(filePath); - MediaMetadataRetriever mmr = new MediaMetadataRetriever(); - if (isContentUri(uri)) { - mmr.setDataSource(getReactApplicationContext(), uri); - } else { - mmr.setDataSource(filePath); - } - // b站源部分直接转格式的mp3文件好像有问题 0x08000 - WritableMap properties = Arguments.createMap(); - properties.putString("duration", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); - properties.putString("bitrate", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)); - properties.putString("artist", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); - properties.putString("author", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)); - properties.putString("album", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); - properties.putString("title", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)); - properties.putString("date", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)); - properties.putString("year", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)); - promise.resolve(properties); - } catch (Exception e) { - promise.reject("Exception", e.getMessage()); - } - - } - - @ReactMethod - public void getMediaMeta(ReadableArray filePaths, Promise promise) { - WritableArray metas = Arguments.createArray(); - MediaMetadataRetriever mmr = new MediaMetadataRetriever(); - for (int i = 0; i < filePaths.size(); ++i) { - try { - String filePath = filePaths.getString(i); - Uri uri = Uri.parse(filePath); - - if (isContentUri(uri)) { - mmr.setDataSource(getReactApplicationContext(), uri); - } else { - mmr.setDataSource(filePath); - } - // b站源部分直接转格式的mp3文件好像有问题 0x08000 - - WritableMap properties = Arguments.createMap(); - properties.putString("duration", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); - properties.putString("bitrate", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)); - properties.putString("artist", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); - properties.putString("author", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)); - properties.putString("album", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); - properties.putString("title", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)); - properties.putString("date", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)); - properties.putString("year", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)); - metas.pushMap(properties); - - } catch (Exception e) { - metas.pushNull(); - } - } - try { - mmr.release(); - } catch (Exception ignored) { - } - promise.resolve(metas); - - } - - - // 读取内置的封面图,直接返回临时文件路径 - @ReactMethod - public void getMediaCoverImg(String filePath, Promise promise) { - int pathHashCode; - try { - File file = new File(filePath); - if (!file.exists()) { - promise.reject("File not exist", "File not exist"); - return; - } - // 路径的hashcode就够了 - pathHashCode = file.hashCode(); - if (pathHashCode == 0) { - promise.resolve(null); - return; - } - // 判断缓存是否存在,如果存在直接返回 - File cacheDir = reactContext.getCacheDir(); - File coverFile = new File(cacheDir, "image_manager_disk_cache/" + pathHashCode + ".jpg"); - if (coverFile.exists()) { - promise.resolve(coverFile.toURI().toString()); - return; - } - MediaMetadataRetriever mmr = new MediaMetadataRetriever(); - mmr.setDataSource(filePath); - byte[] coverImg = mmr.getEmbeddedPicture(); - if (coverImg != null) { - Bitmap bitmap = BitmapFactory.decodeByteArray(coverImg, 0, coverImg.length); - // 存储到本地路径 - FileOutputStream outputStream = new FileOutputStream(coverFile); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); - outputStream.flush(); - outputStream.close(); - promise.resolve(coverFile.toURI().toString()); - } else { - - promise.resolve(null); - } - mmr.release(); - } catch (Exception ignored) { - promise.reject("Error", "Got error"); - } - - } - - - // 读取歌词 - @ReactMethod - public void getLyric(String filePath, Promise promise) { - try { - File file = new File(filePath); - if (file.exists()) { - AudioFile audioFile = AudioFileIO.read(file); - Tag tag = audioFile.getTag(); - String lrc = tag.getFirst(FieldKey.LYRICS); - promise.resolve(lrc); - } else { - throw new IOException("File not found"); - } - - } catch (Exception e) { - promise.reject("Error", e.getMessage()); - } - } - - @ReactMethod - public void setMediaTag(String filePath, ReadableMap meta, Promise promise) { - try { - File file = new File(filePath); - if (file.exists()) { - AudioFile audioFile = AudioFileIO.read(file); - Tag tag = audioFile.getTag(); - String title = meta.getString("title"); - String artist = meta.getString("artist"); - String album = meta.getString("album"); - String lyric = meta.getString("lyric"); - String comment = meta.getString("comment"); - if (title != null) { - tag.setField(FieldKey.TITLE, title); - } - if (artist != null) { - tag.setField(FieldKey.ARTIST, artist); - } - if (album != null) { - tag.setField(FieldKey.ALBUM, album); - } - if(lyric != null) { - tag.setField(FieldKey.LYRICS, lyric); - } - - tag.setField(FieldKey.COMMENT, comment); - audioFile.commit(); - } else { - promise.reject("Error", "File Not Exist"); - } - promise.resolve(true); - } catch (Exception e) { - promise.reject("Error", e.getMessage()); - } - } - - @ReactMethod - public void getMediaTag(String filePath, Promise promise) { - try { - File file = new File(filePath); - if (file.exists()) { - AudioFile audioFile = AudioFileIO.read(file); - Tag tag = audioFile.getTag(); - String title = tag.getFirst(FieldKey.TITLE); - String artist = tag.getFirst(FieldKey.ARTIST); - String album = tag.getFirst(FieldKey.ALBUM); - String lyric = tag.getFirst(FieldKey.LYRICS); - String comment = tag.getFirst(FieldKey.COMMENT); - - WritableMap properties = Arguments.createMap(); - properties.putString("title", title); - properties.putString("artist", artist); - properties.putString("album", album); - properties.putString("lyric", lyric); - properties.putString("comment", comment); - promise.resolve(properties); - } else{ - promise.reject("Error", "File Not Found"); - } - } catch (Exception e) { - promise.reject("Error", e.getMessage()); - } - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.kt b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.kt new file mode 100644 index 00000000..e5d7366e --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilModule.kt @@ -0,0 +1,190 @@ +package `fun`.upup.musicfree.mp3Util + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.media.MediaMetadataRetriever +import android.net.Uri +import com.facebook.react.bridge.* +import org.jaudiotagger.audio.AudioFileIO +import org.jaudiotagger.tag.FieldKey +import java.io.File +import java.io.FileOutputStream +import java.io.IOException + +class Mp3UtilModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { + + override fun getName() = "Mp3Util" + + private fun isContentUri(uri: Uri?): Boolean { + return uri?.scheme?.equals("content", ignoreCase = true) == true + } + + @ReactMethod + fun getBasicMeta(filePath: String, promise: Promise) { + try { + val uri = Uri.parse(filePath) + val mmr = MediaMetadataRetriever() + if (isContentUri(uri)) { + mmr.setDataSource(reactApplicationContext, uri) + } else { + mmr.setDataSource(filePath) + } + + val properties = Arguments.createMap().apply { + putString("duration", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) + putString("bitrate", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)) + putString("artist", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)) + putString("author", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)) + putString("album", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)) + putString("title", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)) + putString("date", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)) + putString("year", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)) + } + promise.resolve(properties) + } catch (e: Exception) { + promise.reject("Exception", e.message) + } + } + + @ReactMethod + fun getMediaMeta(filePaths: ReadableArray, promise: Promise) { + val metas = Arguments.createArray() + val mmr = MediaMetadataRetriever() + for (i in 0 until filePaths.size()) { + try { + val filePath = filePaths.getString(i) + val uri = Uri.parse(filePath) + + if (isContentUri(uri)) { + mmr.setDataSource(reactApplicationContext, uri) + } else { + mmr.setDataSource(filePath) + } + + val properties = Arguments.createMap().apply { + putString("duration", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) + putString("bitrate", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)) + putString("artist", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)) + putString("author", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR)) + putString("album", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)) + putString("title", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)) + putString("date", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)) + putString("year", mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR)) + } + metas.pushMap(properties) + } catch (e: Exception) { + metas.pushNull() + } + } + try { + mmr.release() + } catch (ignored: Exception) { + } + promise.resolve(metas) + } + + + @ReactMethod + fun getMediaCoverImg(filePath: String, promise: Promise) { + try { + val file = File(filePath) + if (!file.exists()) { + promise.reject("File not exist", "File not exist") + return + } + + val pathHashCode = file.hashCode() + if (pathHashCode == 0) { + promise.resolve(null) + return + } + + val cacheDir = reactContext.cacheDir + val coverFile = File(cacheDir, "image_manager_disk_cache/$pathHashCode.jpg") + if (coverFile.exists()) { + promise.resolve(coverFile.toURI().toString()) + return + } + + val mmr = MediaMetadataRetriever() + mmr.setDataSource(filePath) + val coverImg = mmr.embeddedPicture + if (coverImg != null) { + val bitmap = BitmapFactory.decodeByteArray(coverImg, 0, coverImg.size) + FileOutputStream(coverFile).use { outputStream -> + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream) + outputStream.flush() + } + promise.resolve(coverFile.toURI().toString()) + } else { + promise.resolve(null) + } + mmr.release() + } catch (ignored: Exception) { + promise.reject("Error", "Got error") + } + } + + @ReactMethod + fun getLyric(filePath: String, promise: Promise) { + try { + val file = File(filePath) + if (file.exists()) { + val audioFile = AudioFileIO.read(file) + val tag = audioFile.tag + val lrc = tag.getFirst(FieldKey.LYRICS) + promise.resolve(lrc) + } else { + throw IOException("File not found") + } + } catch (e: Exception) { + promise.reject("Error", e.message) + } + } + + @ReactMethod + fun setMediaTag(filePath: String, meta: ReadableMap, promise: Promise) { + try { + val file = File(filePath) + if (file.exists()) { + val audioFile = AudioFileIO.read(file) + val tag = audioFile.tag + meta.getString("title")?.let { tag.setField(FieldKey.TITLE, it) } + meta.getString("artist")?.let { tag.setField(FieldKey.ARTIST, it) } + meta.getString("album")?.let { tag.setField(FieldKey.ALBUM, it) } + meta.getString("lyric")?.let { tag.setField(FieldKey.LYRICS, it) } + meta.getString("comment")?.let { tag.setField(FieldKey.COMMENT, it) } + audioFile.commit() + promise.resolve(true) + } else { + promise.reject("Error", "File Not Exist") + } + } catch (e: Exception) { + promise.reject("Error", e.message) + } + } + + @ReactMethod + fun getMediaTag(filePath: String, promise: Promise) { + try { + val file = File(filePath) + if (file.exists()) { + val audioFile = AudioFileIO.read(file) + val tag = audioFile.tag + + val properties = Arguments.createMap().apply { + putString("title", tag.getFirst(FieldKey.TITLE)) + putString("artist", tag.getFirst(FieldKey.ARTIST)) + putString("album", tag.getFirst(FieldKey.ALBUM)) + putString("lyric", tag.getFirst(FieldKey.LYRICS)) + putString("comment", tag.getFirst(FieldKey.COMMENT)) + } + promise.resolve(properties) + } else { + promise.reject("Error", "File Not Found") + } + } catch (e: Exception) { + promise.reject("Error", e.message) + } + } +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.java b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.java deleted file mode 100644 index a9a5a52d..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.java +++ /dev/null @@ -1,29 +0,0 @@ -package fun.upup.musicfree.mp3Util; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class Mp3UtilPackage implements ReactPackage { - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules( - ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new Mp3UtilModule(reactContext)); - - return modules; - } - -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.kt b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.kt new file mode 100644 index 00000000..25de0fa5 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/mp3Util/Mp3UtilPackage.kt @@ -0,0 +1,19 @@ +package `fun`.upup.musicfree.mp3Util + +import android.view.View +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ReactShadowNode +import com.facebook.react.uimanager.ViewManager + +class Mp3UtilPackage : ReactPackage { + + override fun createViewManagers( + reactContext: ReactApplicationContext + ): MutableList>> = mutableListOf() + + override fun createNativeModules( + reactContext: ReactApplicationContext + ): MutableList = listOf(Mp3UtilModule(reactContext)).toMutableList() +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/MainApplicationReactNativeHost.java b/android/app/src/main/java/fun/upup/musicfree/newarchitecture/MainApplicationReactNativeHost.java deleted file mode 100644 index 32223c94..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/MainApplicationReactNativeHost.java +++ /dev/null @@ -1,116 +0,0 @@ -package fun.upup.musicfree.newarchitecture; - -import android.app.Application; -import androidx.annotation.NonNull; -import com.facebook.react.PackageList; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.ReactPackageTurboModuleManagerDelegate; -import com.facebook.react.bridge.JSIModulePackage; -import com.facebook.react.bridge.JSIModuleProvider; -import com.facebook.react.bridge.JSIModuleSpec; -import com.facebook.react.bridge.JSIModuleType; -import com.facebook.react.bridge.JavaScriptContextHolder; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.UIManager; -import com.facebook.react.fabric.ComponentFactory; -import com.facebook.react.fabric.CoreComponentsRegistry; -import com.facebook.react.fabric.FabricJSIModuleProvider; -import com.facebook.react.fabric.ReactNativeConfig; -import com.facebook.react.uimanager.ViewManagerRegistry; -import fun.upup.musicfree.BuildConfig; -import fun.upup.musicfree.newarchitecture.components.MainComponentsRegistry; -import fun.upup.musicfree.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; -import java.util.ArrayList; -import java.util.List; - -/** - * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both - * TurboModule delegates and the Fabric Renderer. - * - *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the - * `newArchEnabled` property). Is ignored otherwise. - */ -public class MainApplicationReactNativeHost extends ReactNativeHost { - public MainApplicationReactNativeHost(Application application) { - super(application); - } - - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - // TurboModules must also be loaded here providing a valid TurboReactPackage implementation: - // packages.add(new TurboReactPackage() { ... }); - // If you have custom Fabric Components, their ViewManagers should also be loaded here - // inside a ReactPackage. - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - - @NonNull - @Override - protected ReactPackageTurboModuleManagerDelegate.Builder - getReactPackageTurboModuleManagerDelegateBuilder() { - // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary - // for the new architecture and to use TurboModules correctly. - return new MainApplicationTurboModuleManagerDelegate.Builder(); - } - - @Override - protected JSIModulePackage getJSIModulePackage() { - return new JSIModulePackage() { - @Override - public List getJSIModules( - final ReactApplicationContext reactApplicationContext, - final JavaScriptContextHolder jsContext) { - final List specs = new ArrayList<>(); - - // Here we provide a new JSIModuleSpec that will be responsible of providing the - // custom Fabric Components. - specs.add( - new JSIModuleSpec() { - @Override - public JSIModuleType getJSIModuleType() { - return JSIModuleType.UIManager; - } - - @Override - public JSIModuleProvider getJSIModuleProvider() { - final ComponentFactory componentFactory = new ComponentFactory(); - CoreComponentsRegistry.register(componentFactory); - - // Here we register a Components Registry. - // The one that is generated with the template contains no components - // and just provides you the one from React Native core. - MainComponentsRegistry.register(componentFactory); - - final ReactInstanceManager reactInstanceManager = getReactInstanceManager(); - - ViewManagerRegistry viewManagerRegistry = - new ViewManagerRegistry( - reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)); - - return new FabricJSIModuleProvider( - reactApplicationContext, - componentFactory, - ReactNativeConfig.DEFAULT_CONFIG, - viewManagerRegistry); - } - }); - return specs; - } - }; - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/components/MainComponentsRegistry.java b/android/app/src/main/java/fun/upup/musicfree/newarchitecture/components/MainComponentsRegistry.java deleted file mode 100644 index d059cc41..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/components/MainComponentsRegistry.java +++ /dev/null @@ -1,36 +0,0 @@ -package fun.upup.musicfree.newarchitecture.components; - -import com.facebook.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.fabric.ComponentFactory; -import com.facebook.soloader.SoLoader; - -/** - * Class responsible to load the custom Fabric Components. This class has native methods and needs a - * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ - * folder for you). - * - *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the - * `newArchEnabled` property). Is ignored otherwise. - */ -@DoNotStrip -public class MainComponentsRegistry { - static { - SoLoader.loadLibrary("fabricjni"); - } - - @DoNotStrip private final HybridData mHybridData; - - @DoNotStrip - private native HybridData initHybrid(ComponentFactory componentFactory); - - @DoNotStrip - private MainComponentsRegistry(ComponentFactory componentFactory) { - mHybridData = initHybrid(componentFactory); - } - - @DoNotStrip - public static MainComponentsRegistry register(ComponentFactory componentFactory) { - return new MainComponentsRegistry(componentFactory); - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/android/app/src/main/java/fun/upup/musicfree/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java deleted file mode 100644 index 574c0944..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java +++ /dev/null @@ -1,48 +0,0 @@ -package fun.upup.musicfree.newarchitecture.modules; - -import com.facebook.jni.HybridData; -import com.facebook.react.ReactPackage; -import com.facebook.react.ReactPackageTurboModuleManagerDelegate; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.soloader.SoLoader; -import java.util.List; - -/** - * Class responsible to load the TurboModules. This class has native methods and needs a - * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ - * folder for you). - * - *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the - * `newArchEnabled` property). Is ignored otherwise. - */ -public class MainApplicationTurboModuleManagerDelegate - extends ReactPackageTurboModuleManagerDelegate { - - private static volatile boolean sIsSoLibraryLoaded; - - protected MainApplicationTurboModuleManagerDelegate( - ReactApplicationContext reactApplicationContext, List packages) { - super(reactApplicationContext, packages); - } - - protected native HybridData initHybrid(); - - native boolean canCreateTurboModule(String moduleName); - - public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { - protected MainApplicationTurboModuleManagerDelegate build( - ReactApplicationContext context, List packages) { - return new MainApplicationTurboModuleManagerDelegate(context, packages); - } - } - - @Override - protected synchronized void maybeLoadOtherSoLibraries() { - if (!sIsSoLibraryLoaded) { - // If you change the name of your application .so file in the Android.mk file, - // make sure you update the name here as well. - SoLoader.loadLibrary("musicfree_appmodules"); - sIsSoLibraryLoaded = true; - } - } -} diff --git a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.java b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.java deleted file mode 100644 index a6c464a1..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.java +++ /dev/null @@ -1,90 +0,0 @@ -package fun.upup.musicfree.utils; - -import android.Manifest; -import android.app.Activity; -import android.app.ActivityManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.provider.Settings; - -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; - -import java.util.List; - - -public class UtilsModule extends ReactContextBaseJavaModule { - private static ReactApplicationContext reactContext; - - - public UtilsModule(ReactApplicationContext context) { - super(context); - reactContext = context; - } - - @NonNull - @Override - public String getName() { - return "NativeUtils"; - } - - - @ReactMethod - public void exitApp() { - Activity activity = reactContext.getCurrentActivity(); - if (activity != null) { - activity.finishAndRemoveTask(); - } - android.os.Process.killProcess(android.os.Process.myPid()); - System.exit(0); - } - - - @ReactMethod - public void checkStoragePermission(Promise promise){ - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - if (Environment.isExternalStorageManager()) { - promise.resolve(true); - } else { - promise.resolve(false); - } - } else { - if (ContextCompat.checkSelfPermission(reactContext, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(reactContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { - promise.resolve(true); - } else { - promise.resolve(false); - } - } - promise.resolve(false); - } - - @ReactMethod - public void requestStoragePermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); - intent.setData(Uri.parse("package:" + reactContext.getPackageName())); - Activity currentActivity = getCurrentActivity(); - if (currentActivity != null) { - currentActivity.startActivity(intent); - } - } else { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + reactContext.getPackageName())); - Activity currentActivity = getCurrentActivity(); - if (currentActivity != null) { - currentActivity.startActivity(intent); - } - } - } - -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.kt b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.kt new file mode 100644 index 00000000..b7a73fcc --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsModule.kt @@ -0,0 +1,54 @@ +package `fun`.upup.musicfree.utils; // replace your-apps-package-name with your app’s package name +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Build +import android.os.Environment +import android.provider.Settings +import androidx.core.content.ContextCompat +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import kotlin.system.exitProcess + +class UtilsModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) { + + private val reactContext: ReactApplicationContext = context; + + override fun getName() = "NativeUtils" + + @ReactMethod + fun exitApp() { + val activity = reactContext.currentActivity + activity?.finishAndRemoveTask() + android.os.Process.killProcess(android.os.Process.myPid()) + exitProcess(0) + } + + @ReactMethod + fun checkStoragePermission(promise: Promise) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + promise.resolve(Environment.isExternalStorageManager()) + } else { + val readPermission = ContextCompat.checkSelfPermission(reactContext, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + val writePermission = ContextCompat.checkSelfPermission(reactContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + promise.resolve(readPermission && writePermission) + } + } + + @ReactMethod + fun requestStoragePermission() { + val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).apply { + data = Uri.parse("package:${reactContext.packageName}") + } + } else { + Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.parse("package:${reactContext.packageName}") + } + } + reactContext.currentActivity?.startActivity(intent) + } +} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.java b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.java deleted file mode 100644 index b5220bcb..00000000 --- a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.java +++ /dev/null @@ -1,29 +0,0 @@ -package fun.upup.musicfree.utils; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class UtilsPackage implements ReactPackage { - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules( - ReactApplicationContext reactContext) { - List modules = new ArrayList<>(); - - modules.add(new UtilsModule(reactContext)); - - return modules; - } - -} \ No newline at end of file diff --git a/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.kt b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.kt new file mode 100644 index 00000000..ecf56213 --- /dev/null +++ b/android/app/src/main/java/fun/upup/musicfree/utils/UtilsPackage.kt @@ -0,0 +1,19 @@ +package `fun`.upup.musicfree.utils + +import android.view.View +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ReactShadowNode +import com.facebook.react.uimanager.ViewManager + +class UtilsPackage : ReactPackage { + + override fun createViewManagers( + reactContext: ReactApplicationContext + ): MutableList>> = mutableListOf() + + override fun createNativeModules( + reactContext: ReactApplicationContext + ): MutableList = listOf(UtilsModule(reactContext)).toMutableList() +} \ No newline at end of file diff --git a/android/app/src/main/jni/Android.mk b/android/app/src/main/jni/Android.mk deleted file mode 100644 index 0664b4e3..00000000 --- a/android/app/src/main/jni/Android.mk +++ /dev/null @@ -1,48 +0,0 @@ -THIS_DIR := $(call my-dir) - -include $(REACT_ANDROID_DIR)/Android-prebuilt.mk - -# If you wish to add a custom TurboModule or Fabric component in your app you -# will have to include the following autogenerated makefile. -# include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk -include $(CLEAR_VARS) - -LOCAL_PATH := $(THIS_DIR) - -# You can customize the name of your application .so file here. -LOCAL_MODULE := musicfree_appmodules - -LOCAL_C_INCLUDES := $(LOCAL_PATH) -LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) -LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) - -# If you wish to add a custom TurboModule or Fabric component in your app you -# will have to uncomment those lines to include the generated source -# files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni) -# -# LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni -# LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp) -# LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni - -# Here you should add any native library you wish to depend on. -LOCAL_SHARED_LIBRARIES := \ - libfabricjni \ - libfbjni \ - libfolly_runtime \ - libglog \ - libjsi \ - libreact_codegen_rncore \ - libreact_debug \ - libreact_nativemodule_core \ - libreact_render_componentregistry \ - libreact_render_core \ - libreact_render_debug \ - libreact_render_graphics \ - librrc_view \ - libruntimeexecutor \ - libturbomodulejsijni \ - libyoga - -LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall - -include $(BUILD_SHARED_LIBRARY) diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/android/app/src/main/jni/MainApplicationModuleProvider.cpp deleted file mode 100644 index 0ac23cc6..00000000 --- a/android/app/src/main/jni/MainApplicationModuleProvider.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "MainApplicationModuleProvider.h" - -#include - -namespace facebook { -namespace react { - -std::shared_ptr MainApplicationModuleProvider( - const std::string moduleName, - const JavaTurboModule::InitParams ¶ms) { - // Here you can provide your own module provider for TurboModules coming from - // either your application or from external libraries. The approach to follow - // is similar to the following (for a library called `samplelibrary`: - // - // auto module = samplelibrary_ModuleProvider(moduleName, params); - // if (module != nullptr) { - // return module; - // } - // return rncore_ModuleProvider(moduleName, params); - return rncore_ModuleProvider(moduleName, params); -} - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.h b/android/app/src/main/jni/MainApplicationModuleProvider.h deleted file mode 100644 index 0fa43fa6..00000000 --- a/android/app/src/main/jni/MainApplicationModuleProvider.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include -#include - -#include - -namespace facebook { -namespace react { - -std::shared_ptr MainApplicationModuleProvider( - const std::string moduleName, - const JavaTurboModule::InitParams ¶ms); - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp deleted file mode 100644 index dbbdc3d1..00000000 --- a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "MainApplicationTurboModuleManagerDelegate.h" -#include "MainApplicationModuleProvider.h" - -namespace facebook { -namespace react { - -jni::local_ref -MainApplicationTurboModuleManagerDelegate::initHybrid( - jni::alias_ref) { - return makeCxxInstance(); -} - -void MainApplicationTurboModuleManagerDelegate::registerNatives() { - registerHybrid({ - makeNativeMethod( - "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid), - makeNativeMethod( - "canCreateTurboModule", - MainApplicationTurboModuleManagerDelegate::canCreateTurboModule), - }); -} - -std::shared_ptr -MainApplicationTurboModuleManagerDelegate::getTurboModule( - const std::string name, - const std::shared_ptr jsInvoker) { - // Not implemented yet: provide pure-C++ NativeModules here. - return nullptr; -} - -std::shared_ptr -MainApplicationTurboModuleManagerDelegate::getTurboModule( - const std::string name, - const JavaTurboModule::InitParams ¶ms) { - return MainApplicationModuleProvider(name, params); -} - -bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( - std::string name) { - return getTurboModule(name, nullptr) != nullptr || - getTurboModule(name, {.moduleName = name}) != nullptr; -} - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h deleted file mode 100644 index 0c6d3fd5..00000000 --- a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include - -#include -#include - -namespace facebook { -namespace react { - -class MainApplicationTurboModuleManagerDelegate - : public jni::HybridClass< - MainApplicationTurboModuleManagerDelegate, - TurboModuleManagerDelegate> { - public: - // Adapt it to the package you used for your Java class. - static constexpr auto kJavaDescriptor = - "Lcom/musicfree/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; - - static jni::local_ref initHybrid(jni::alias_ref); - - static void registerNatives(); - - std::shared_ptr getTurboModule( - const std::string name, - const std::shared_ptr jsInvoker) override; - std::shared_ptr getTurboModule( - const std::string name, - const JavaTurboModule::InitParams ¶ms) override; - - /** - * Test-only method. Allows user to verify whether a TurboModule can be - * created by instances of this class. - */ - bool canCreateTurboModule(std::string name); -}; - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.cpp b/android/app/src/main/jni/MainComponentsRegistry.cpp deleted file mode 100644 index 8f7edffd..00000000 --- a/android/app/src/main/jni/MainComponentsRegistry.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "MainComponentsRegistry.h" - -#include -#include -#include -#include - -namespace facebook { -namespace react { - -MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {} - -std::shared_ptr -MainComponentsRegistry::sharedProviderRegistry() { - auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); - - // Custom Fabric Components go here. You can register custom - // components coming from your App or from 3rd party libraries here. - // - // providerRegistry->add(concreteComponentDescriptorProvider< - // AocViewerComponentDescriptor>()); - return providerRegistry; -} - -jni::local_ref -MainComponentsRegistry::initHybrid( - jni::alias_ref, - ComponentFactory *delegate) { - auto instance = makeCxxInstance(delegate); - - auto buildRegistryFunction = - [](EventDispatcher::Weak const &eventDispatcher, - ContextContainer::Shared const &contextContainer) - -> ComponentDescriptorRegistry::Shared { - auto registry = MainComponentsRegistry::sharedProviderRegistry() - ->createComponentDescriptorRegistry( - {eventDispatcher, contextContainer}); - - auto mutableRegistry = - std::const_pointer_cast(registry); - - mutableRegistry->setFallbackComponentDescriptor( - std::make_shared( - ComponentDescriptorParameters{ - eventDispatcher, contextContainer, nullptr})); - - return registry; - }; - - delegate->buildRegistryFunction = buildRegistryFunction; - return instance; -} - -void MainComponentsRegistry::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid), - }); -} - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.h b/android/app/src/main/jni/MainComponentsRegistry.h deleted file mode 100644 index ce8856db..00000000 --- a/android/app/src/main/jni/MainComponentsRegistry.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -namespace facebook { -namespace react { - -class MainComponentsRegistry - : public facebook::jni::HybridClass { - public: - // Adapt it to the package you used for your Java class. - constexpr static auto kJavaDescriptor = - "Lcom/musicfree/newarchitecture/components/MainComponentsRegistry;"; - - static void registerNatives(); - - MainComponentsRegistry(ComponentFactory *delegate); - - private: - static std::shared_ptr - sharedProviderRegistry(); - - static jni::local_ref initHybrid( - jni::alias_ref, - ComponentFactory *delegate); -}; - -} // namespace react -} // namespace facebook diff --git a/android/app/src/main/jni/OnLoad.cpp b/android/app/src/main/jni/OnLoad.cpp deleted file mode 100644 index c569b6e8..00000000 --- a/android/app/src/main/jni/OnLoad.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "MainApplicationTurboModuleManagerDelegate.h" -#include "MainComponentsRegistry.h" - -JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { - return facebook::jni::initialize(vm, [] { - facebook::react::MainApplicationTurboModuleManagerDelegate:: - registerNatives(); - facebook::react::MainComponentsRegistry::registerNatives(); - }); -} diff --git a/android/app/src/main/musicfree_logo-playstore.png b/android/app/src/main/musicfree_logo-playstore.png deleted file mode 100644 index 3b21684c..00000000 Binary files a/android/app/src/main/musicfree_logo-playstore.png and /dev/null differ diff --git a/android/app/src/main/musicfree_logo_1-playstore.png b/android/app/src/main/musicfree_logo_1-playstore.png deleted file mode 100644 index 213604a8..00000000 Binary files a/android/app/src/main/musicfree_logo_1-playstore.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-v24/musicfree_logo_1_foreground.xml b/android/app/src/main/res/drawable-v24/musicfree_logo_1_foreground.xml deleted file mode 100644 index d790786b..00000000 --- a/android/app/src/main/res/drawable-v24/musicfree_logo_1_foreground.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml index f35d9962..5c25e728 100644 --- a/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -17,10 +17,11 @@ android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" - android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> + android:insetBottom="@dimen/abc_edit_text_inset_bottom_material" + > - \ No newline at end of file diff --git a/android/app/src/main/res/values/musicfree_logo_background.xml b/android/app/src/main/res/values/ic_launcher_background.xml similarity index 51% rename from android/app/src/main/res/values/musicfree_logo_background.xml rename to android/app/src/main/res/values/ic_launcher_background.xml index 109cbd22..cfa9be08 100644 --- a/android/app/src/main/res/values/musicfree_logo_background.xml +++ b/android/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - - - #FEFDFD + + + #FFFFFF \ No newline at end of file diff --git a/android/app/src/main/res/values/musicfree_logo_1_background.xml b/android/app/src/main/res/values/musicfree_logo_1_background.xml deleted file mode 100644 index f236b946..00000000 --- a/android/app/src/main/res/values/musicfree_logo_1_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #F1F2F3 - \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 1280cb6a..4595d9c8 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,14 +1,10 @@ - - - - - - - + + + + + + diff --git a/android/build.gradle b/android/build.gradle index ace7fb2d..f536a792 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,69 +1,21 @@ -import org.apache.tools.ant.taskdefs.condition.Os - -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { ext { - buildToolsVersion = "31.0.0" - minSdkVersion = 21 - compileSdkVersion = 33 - targetSdkVersion = 30 - - if (System.properties['os.arch'] == "aarch64") { - // For M1 Users we need to use the NDK 24 which added support for aarch64 - ndkVersion = "24.0.8215888" - } else { - // Otherwise we default to the side-by-side NDK version from AGP. - ndkVersion = "21.4.7075529" - } + buildToolsVersion = "34.0.0" + minSdkVersion = 23 + compileSdkVersion = 34 + targetSdkVersion = 34 + ndkVersion = "26.1.10909125" + kotlinVersion = "1.9.22" } repositories { google() mavenCentral() } dependencies { - classpath('com.android.tools.build:gradle:7.1.2') + classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") - classpath("de.undercouch:gradle-download-task:5.0.1") - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") } } -allprojects { - repositories { - // https://github.com/facebook/react-native/issues/35210 - exclusiveContent { - // We get React Native's Android binaries exclusively through npm, - // from a local Maven repo inside node_modules/react-native/. - // (The use of exclusiveContent prevents looking elsewhere like Maven Central - // and potentially getting a wrong version.) - filter { - includeGroup "com.facebook.react" - } - forRepository { - maven { - url "$rootDir/../node_modules/react-native/android" - } - } - } - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url("$rootDir/../node_modules/react-native/android") - } - maven { - // Android JSC is installed from npm - url("$rootDir/../node_modules/jsc-android/dist") - } - mavenCentral { - // We don't want to fetch react-native from Maven Central as there are - // older versions over there. - content { - excludeGroup "com.facebook.react" - } - } - google() - maven { url 'https://maven.aliyun.com/repository/jcenter' } - maven { url 'https://www.jitpack.io' } - } -} +apply plugin: "com.facebook.react.rootproject" diff --git a/android/gradle.properties b/android/gradle.properties index 5267d916..a46a5b90 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -24,9 +24,6 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -# Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.182.0 - # Use this property to specify which architecture you want to build. # You can also override it from the CLI using # ./gradlew -PreactNativeArchitectures=x86_64 @@ -39,4 +36,6 @@ reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 # are providing them. newArchEnabled=false -AsyncStorage_db_size_in_MB=20 \ No newline at end of file +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar index 7454180f..7f93135c 100644 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 669386b8..e6aba251 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew index 1b6c7873..1aa94a42 100644 --- a/android/gradlew +++ b/android/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/android/gradlew.bat b/android/gradlew.bat index 107acd32..7101f8e4 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -1,89 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle index 03ed0b5b..b6f18a48 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,14 +1,7 @@ -rootProject.name = 'MusicFree' -apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':app' -includeBuild('../node_modules/react-native-gradle-plugin') - -if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { - include(":ReactAndroid") - project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') - include(":ReactAndroid:hermes-engine") - project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') -} - -include ':react-native-fs' -project(':react-native-fs').projectDir = new File(settingsDir, '../node_modules/react-native-fs/android') \ No newline at end of file +rootProject.name = 'MusicFree' +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) +include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") +useExpoModules() \ No newline at end of file diff --git a/app.json b/app.json index 97e158b1..84cf5b02 100644 --- a/app.json +++ b/app.json @@ -1,4 +1,4 @@ { "name": "MusicFree", - "displayName": "Music Free" -} \ No newline at end of file + "displayName": "MusicFree" +} diff --git a/assets/bootsplash_logo.png b/assets/bootsplash_logo.png deleted file mode 100644 index 5c5ab2d4..00000000 Binary files a/assets/bootsplash_logo.png and /dev/null differ diff --git a/assets/bootsplash_logo@1,5x.png b/assets/bootsplash_logo@1,5x.png deleted file mode 100644 index c66a3ee0..00000000 Binary files a/assets/bootsplash_logo@1,5x.png and /dev/null differ diff --git a/assets/bootsplash_logo@2x.png b/assets/bootsplash_logo@2x.png deleted file mode 100644 index 0a0fd56a..00000000 Binary files a/assets/bootsplash_logo@2x.png and /dev/null differ diff --git a/assets/bootsplash_logo@3x.png b/assets/bootsplash_logo@3x.png deleted file mode 100644 index b26292bf..00000000 Binary files a/assets/bootsplash_logo@3x.png and /dev/null differ diff --git a/assets/bootsplash_logo@4x.png b/assets/bootsplash_logo@4x.png deleted file mode 100644 index 9fb4f2e1..00000000 Binary files a/assets/bootsplash_logo@4x.png and /dev/null differ diff --git a/babel.config.js b/babel.config.js index 078dbe17..f75f2022 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - presets: ['module:metro-react-native-babel-preset'], + presets: ['module:@react-native/babel-preset'], plugins: [ [ 'module-resolver', @@ -12,4 +12,9 @@ module.exports = { ], 'react-native-reanimated/plugin', ], + env: { + production: { + plugins: ['transform-remove-console'], + }, + }, }; diff --git a/changelog.md b/changelog.md index f952c4c3..2868452a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,230 +1,230 @@ -`2024.3.31 v0.3.0` -本次更新优化了存储方式,更新到此版本后,歌单会自动转化为新的存储方式;安装新版本后再回退到老版本会导致歌单清空,虽然测试下来没啥问题,但是请谨慎升级Orz -备用链接:https://pan.baidu.com/s/1HmbHlh3vTcSyVXcOs-7kTA?pwd=saku 提取码: saku -1. 【功能】历史播放记录支持批量编辑 -2. 【功能】歌单内支持按照加入时间排序 -3. 【功能】新增设置“本地歌单添加歌曲顺序”,在歌单内添加歌曲时可以加到歌单开头 -4. 【功能】首页新建歌单旁边新增“导入歌单”按钮,点击时会自动寻找具有导入歌单功能的插件,并拉起导入浮层 -5. 【功能】设置项中新增“自动换源”功能,当插件失效/无法获取播放链接时,会自动尝试更换其他源的同名歌曲 -6. 【优化】尝试优化了软件启动时间,应该有点作用 -7. 【优化】更新了存储方式,现在单个歌单可以存储大于10000首歌曲; -8. 【优化】调整未开启“允许使用移动网络播放”开关时的样式表现 -9. 【优化】优化了设置页的样式 -10. 【优化】微调歌词详情页的布局 -11. 【修复】修复打开弹窗时,点击返回按钮不关闭弹窗的问题 -12. 【修复】修复启动软件时播放模式错误的问题 -13. 【修复】修复搜索结果页特定情况下白屏的问题 - -`2024.1.21 v0.2.0` -1. 【功能】支持 Webdav 备份 & 播放 -2. 【功能】插件支持显示作者 -3. 【功能】插件榜单详情支持分页 -4. 【功能】首页&歌词页样式改版:新增歌词进度调整、歌词大小调整、歌词翻译、自动搜索歌词 -5. 【功能】新增收藏歌单功能 -6. 【功能】侧边栏新增“权限管理”设置 -7. 【功能】音乐播放栏支持左右滑动切歌(可能会闪一下,后续修掉) -8. 【功能】新增 “通知栏显示关闭按钮” 设置 -9. 【优化】重构播放、数据存储逻辑 -10. 【优化】统一浮层、toast样式 -11. 【优化】去除插件URL必须以.js结尾的限制 -12. 【修复】修改无限列表到底不触发onEndReached的问题 (感谢 @282931) -13. 【修复】修复标题栏背景色透明度不生效的问题 -14. 【修复】修复播放记录退出后被清空的问题 -15. 【修复】修复部分情况下深色模式异常的问题 -16. 【其他】这次安装包备用链接发到百度网盘了:https://pan.baidu.com/s/1H360C0MqejKXS67XwMqgPw?pwd=6666 提取码6666 - - -`2023.11.24 v0.1.2-alpha.0` -1. 【功能】新增桌面歌词功能,可在设置页开启(开启之前需要去手机设置授予悬浮窗权限) -2. 【功能】可以使用 MusicFree 打开本地 .js 或 .mp3 文件;其中 .js 文件会被当作插件安装; .mp3 文件会直接播放 -3. 【功能】新增插件设置:打开软件时自动更新插件、安装插件时不校验版本 -4. 【功能】新增播放设置:打开软件时自动播放歌曲 -5. 【功能】插件页新增开关,可以控制是否在榜单、热门歌单、搜索结果中展示对应插件的结果 -6. 【功能】插件协议新增 “用户变量” ,可以在插件中获取 APP 输入的配置(可以由此实现自建音乐源的插件/webdav源插件,但是还没写) -7. 【优化】下载单曲支持选择音质 -8. 【优化】新增“关联歌词方式”设置,如果设置为“输入歌曲ID”,则会恢复老版本关联歌词,即输入ID关联歌词 -9. 【优化】侧边栏新增“返回桌面”按钮 -10. 【修复】修复榜单、推荐歌单、搜索歌词页白屏闪退的问题 (感谢 @282931) -11. 【修复】修复自定义背景模糊度和透明度无法设置为 0 的问题 (感谢 @282931) -12. 【修复】修复浅色主题状态栏表现错误的问题 -13. 【修复】修复歌单批量编辑无法删除的问题 -14. 【修复】修复无法恢复桌面版导出的歌单的问题 - -`2023.10.15 v0.1.1-alpha.0` -1. 【功能】音源支持m3u8 (桌面版下个版本支持m3u8) -2. 【功能】增加歌曲详情页屏幕常亮的设置 -3. 【功能】重构主题相关功能,增加「跟随系统深色设置」选项;调整大部分样式,移除第三方UI库 -4. 【功能】插件页增加「插件批量更新」的功能 -5. 【功能】取消原「歌词关联」的逻辑,修改为拉起「歌词搜索」浮层 -6. 【优化】增加了一些无障碍属性 -7. 【修复】修复部分场景下无法保存歌单的问题 -8. 【修复】修复部分场景下重启之后无法播放歌曲的问题 -9. 【插件】部分插件更新,侧边栏更新插件即可 - -`2023.8.13 v0.1.0-alpha.10` -1. 【功能】当前音乐无歌词时可以在歌词页搜索歌词 -2. 【优化】调整右上角弹出气泡的位置 -3. 【优化】增加打开歌曲详情页时的默认表现设置 -4. 【优化】修复进入歌词页时候显示跳变的问题 -5. 【插件】插件协议更新,更新后可以配置某插件不出现在特定的搜索结果页下 -6. 【插件】部分插件更新,侧边栏更新插件即可 - -`2023.6.26 v0.1.0-alpha.9` -1. 【功能】新增搜索歌单功能 -2. 【功能】新增播放记录功能 -3. 【优化】加了一些无障碍适配 -4. 【插件】部分插件更新,侧边栏更新插件即可 - -`2023.6.4 v0.1.0-alpha.8` -1. 【功能】新增“推荐歌单”功能,需要配合支持该功能的插件使用 -2. 【功能】导入本地文件时增加“全选”按钮 -3. 【优化】修改“保存专辑封面”时的提示文案 -4. 【修复】修复当目标歌曲在播放列表内时,添加到下一首播放无效的问题 -5. 【插件】部分插件更新,侧边栏更新插件即可 - -`2023.5.21 v0.1.0-alpha.7` -1. 【功能】歌单页新增“播放全部”按钮 -2. 【功能】歌曲播放页中,长按专辑封面可保存到本地 -3. 【功能】歌单页新增“歌单排序”功能 -4. 【插件】b站插件作者页API变动,侧边栏更新插件即可 - -`2023.5.3 v0.1.0-alpha.6` -小小拖更一下~ -1. 【功能】歌单内搜索时支持英文大小写模糊搜索 -2. 【修复】修复首次进入时歌曲可能无法正常播放的问题 - -`2023.3.26 v0.1.0-alpha.5` -1. 【功能】更新弹窗新增“跳过此版本”的复选框 -2. 【功能】侧边栏-基本设置-开发选项中新增“查看错误日志”的选项,点击会弹出错误日志的弹窗 -3. 【修复】修复输入框被软键盘遮挡的问题 -4. 【优化】优化了定时关闭的样式 -5. 【文档】文档中更新了插件的制作教程。文档地址:http://musicfree.upup.fun - -`2023.3.19 v0.1.0-alpha.4` -1. 【功能】适配横屏设备 -2. 【功能】新建歌单时添加默认歌单名;从专辑/榜单批量添加到新歌单时,默认以专辑名/榜单名为新歌单名 -3. 【修复】修复设备有虚拟按键时,浮层会被遮挡的问题 -4. 【修复】修复拖拽歌词时部分情况下时间异常的问题 -5. 【修复】调整下载失败时的提示文案 -6. 【插件】部分插件有更新,可以从侧边栏更新 - -`2023.2.26 v0.1.0-alpha.3` -1. 【功能】专辑列表支持分页,需要配合插件更新; -2. 【优化】去掉了全面屏手机界面下方的小白条; -3. 【优化】调整拖拽歌词时标识线的对齐范围;调整歌词拖到最底端时的逻辑; -4. 【优化】调整下载歌曲时的文件名; -5. 【优化】导入歌曲时的提示文案增加滚动; -6. 【修复】修复特殊情况下歌曲中断后可能恢复到错误状态的问题(未验证); -7. 【插件】个别插件有更新,可以去侧边栏更新订阅。 - -`2023.2.13 v0.1.0-alpha.2` -1. 【功能】备份&恢复:可以把本地的歌单和插件备份到一个json文件中,也可以从本地文件或网络上恢复插件和歌单。 -2. 【修复】修复部分情况下后台播放切换歌曲时暂停的问题 -3. 【修复】修复部分场景无法下载的问题 -4. 【修复】修复部分场景无法删除本地文件的问题 -5. 【优化】简单优化了下歌单列表 -6. 【调试】调试面板现在可以打印出插件中的console语句 - -`2023.1.27 v0.1.0-alpha.1` -1. !!!【功能】插件更新,升级到新版本之后原有插件完全不兼容;更新后卸载原有插件,然后更新订阅即可(具体看公众号示例) -2. 【功能】新增功能“倍速播放” -3. 【功能】重写了插件订阅的逻辑,现在应该会更合理一点点 -4. 【功能】删除本地文件之前增加二次确认提醒 -5. 【功能】增加了一些无关紧要的分享 -6. 【样式】换了个logo,丑的更直白一些 -7. 【样式】调整了一些样式(如播放页的模糊和透明度、歌词样式等) -8. 【样式】专辑描述文字默认6行,点击可以展开或折叠 -9. 【修复】修复部分情况下无法下载的问题 -10. 【插件】大量插件有更新,更新到此版本后更新订阅即可 - -`2023.1.8 v0.0.1-alpha.13` -1. 【功能】主页入口增加“榜单” -2. 【功能】歌单页新增“编辑歌单信息”,可以修改歌单名称和歌单封面 -3. 【修复】修复了一个会导致播放音乐时拖拽排序卡顿的问题,做了一些其他优化 -4. 【插件】部分插件有更新,可以在侧边栏更新 - -`2022.12.25 v0.0.1-alpha.12` -1. 【功能】增加“单击搜索结果中单曲tab”时的行为配置 -2. 【功能】增加调试配置及调试面板,可用于查看插件的错误信息 -3. 【修复】修复部分情况下本地音乐中断时无法继续播放的问题 -4. 【修复】尝试修复扫描本地音乐,音乐文件太多时可能卡死的问题 - -`2022.12.11 v0.0.1-alpha.11` -1. 【功能】完善音质功能 -2. 【功能】更新下载功能,支持根据音质下载文件;修复一些小问题 -3. 【功能】新增播放时被打断的设置,可设置为暂停或者暂时降低音量 -4. 【优化】调整侧边栏样式,侧边栏新增“定时关闭”功能 -5. 【优化】本地音乐读取歌词时,会自动读取同目录下的同名lrc文件作为歌词 -6. 【修复】修复安装插件时误弹安装失败提示的问题 -7. 【修复】修复部分情况下本地文件删除失败的问题 -8. 【修复】修复本地音乐在通知栏不显示音乐标题的问题 -9. 【插件】示例插件仓库中migu有更新(支持音质),需要可自行更新 - -`2022.12.4 v0.0.1-alpha.10` -1. 【功能】支持自定义下载路径 -2. 【功能】支持插件排序(也就是搜索结果的排序) -3. 【功能】增加音质相关的配置 -4. 【优化】弹窗、浮层的性能优化,页面嵌套较深时卡顿的情况应该会好一点 -5. 【优化】拖拽排序,比上个版本手感应该会好一点 -6. 【修复】修复在歌词页清空播放列表时白屏的问题 - -`2022.11.20 v0.0.1-alpha.9` -1. 【功能】本地音乐读取内嵌歌词 -2. 【功能】批量编辑页新增了凑合能用的拖拽排序 -3. 【功能】歌曲详情浮层新增凑合能用的定时关闭 -4. 【功能】添加到歌单时可以新建歌单 -5. 【功能】本地音乐扫描支持外置sd卡;支持导入aac格式 -6. 【优化】优化播放列表浮层拉起时的锚定 -7. 【修复】修复更新弹窗无法滚动的问题 -8. 【修复】修复安卓12状态栏概率不沉浸的问题 -9. 【修复】修复安卓12、13播一首就停的问题 -10. 【插件】示例插件有更新,可以删掉原有插件重新导入 - -`2022.11.13 v0.0.1-alpha.8` -1. 【功能】侧边栏插件设置新增“订阅插件”功能,订阅之后直接点击“更新插件”即可更新,不需要清空重装了 -2. 【功能】本地音乐读取内置封面 -3. 【功能】本地音乐歌单支持批量删除(不删除源文件) -4. 【优化】重写导入本地音乐的逻辑,支持多选文件夹;修复部分机型重启应用时本地音乐消失的问题(可能需要删除后重新导入);支持导入flac,wav,wav,m4a,ogg等格式 -5. 【优化】重写播放列表浮层,拉起时会锚定到当前正在播放的歌曲 -6. 【优化】调整部分逻辑,可能会减少音频卡顿时卡死的情况 -7. 【修复】修复歌曲详情页进度条不连续的问题 -8. 【修复】修复某些情况下无法关联歌词的问题 -9. 【修复】修复正在播放的歌曲无歌词时,进入歌词页白屏的问题 -10. 【插件】示例插件有更新,可以删掉原有插件重新导入 - -`2022.10.30 v0.0.1-alpha.7` -1. 新增功能:历史记录一键清空 -2. 新增功能:歌手页、本地歌单页支持批量编辑 -3. 修复移动网络下无法播放本地音乐的问题 -4. 样式优化&修复:toast提示显示异常、侧边栏样式优化、歌单内序号显示不全、【关于】页无法滑动 -5. 之前使用的拖拽排序组件在列表较大时有很严重的性能问题,会导致卡顿甚至白屏,因此批量编辑页暂时去掉了拖拽排序,后续会重新加上 - -`2022.10.22 v0.0.1-alpha.6` -1. 重要!! v0.0.1-alpha.5以前的版本无法通过app正常更新,请在gitee/github发布页下载最新版本(v0.0.1-alpha.6),或QQ群自取; -2. 导入本地音乐时,如果未识别本地音乐文件,则会使用文件名作为音乐名; -3. 自建歌单、专辑详情页增加批量选择功能,可点击右上角查看(歌曲较多时可能有点卡,后续优化);使用方式:选中歌曲可进行下一首播放/加入歌单/下载/删除,长按拖动进行排序;删除/排序后点击保存按钮方可生效 -4. 调整歌单内歌曲编号字体大小; - -`2022.10.16 v0.0.1-alpha.5` -1. 新增功能:导入本地音乐文件 -2. 从网络源安装的插件可在插件页直接更新 -3. 调整下载逻辑 - -`2022.10.06 v0.0.1-alpha.4` -1. 修复专辑详情页没有loading的问题 -2. 为插件新增Cookie管理器 -3. 优化播放页的显示 -4. 新增一键卸载全部插件的功能 - -`2022.10.04 v0.0.1-alpha.3` -1. 修复设置页无法滚动的问题 -2. 修复播放结束时可能暂停的问题 - -`2022.10.03 v0.0.1-alpha.2` -1. 插件协议更新,需要重新安装插件 -2. 支持批量导入插件 -3. 新增清空播放列表功能 -4. 优化搜索结果面板和播放专辑逻辑 - -`2022.10.02` -测试版本出现啦!撒花 +`2024.3.31 v0.3.0` +本次更新优化了存储方式,更新到此版本后,歌单会自动转化为新的存储方式;安装新版本后再回退到老版本会导致歌单清空,虽然测试下来没啥问题,但是请谨慎升级Orz +备用链接:https://pan.baidu.com/s/1HmbHlh3vTcSyVXcOs-7kTA?pwd=saku 提取码: saku +1. 【功能】历史播放记录支持批量编辑 +2. 【功能】歌单内支持按照加入时间排序 +3. 【功能】新增设置“本地歌单添加歌曲顺序”,在歌单内添加歌曲时可以加到歌单开头 +4. 【功能】首页新建歌单旁边新增“导入歌单”按钮,点击时会自动寻找具有导入歌单功能的插件,并拉起导入浮层 +5. 【功能】设置项中新增“自动换源”功能,当插件失效/无法获取播放链接时,会自动尝试更换其他源的同名歌曲 +6. 【优化】尝试优化了软件启动时间,应该有点作用 +7. 【优化】更新了存储方式,现在单个歌单可以存储大于10000首歌曲; +8. 【优化】调整未开启“允许使用移动网络播放”开关时的样式表现 +9. 【优化】优化了设置页的样式 +10. 【优化】微调歌词详情页的布局 +11. 【修复】修复打开弹窗时,点击返回按钮不关闭弹窗的问题 +12. 【修复】修复启动软件时播放模式错误的问题 +13. 【修复】修复搜索结果页特定情况下白屏的问题 + +`2024.1.21 v0.2.0` +1. 【功能】支持 Webdav 备份 & 播放 +2. 【功能】插件支持显示作者 +3. 【功能】插件榜单详情支持分页 +4. 【功能】首页&歌词页样式改版:新增歌词进度调整、歌词大小调整、歌词翻译、自动搜索歌词 +5. 【功能】新增收藏歌单功能 +6. 【功能】侧边栏新增“权限管理”设置 +7. 【功能】音乐播放栏支持左右滑动切歌(可能会闪一下,后续修掉) +8. 【功能】新增 “通知栏显示关闭按钮” 设置 +9. 【优化】重构播放、数据存储逻辑 +10. 【优化】统一浮层、toast样式 +11. 【优化】去除插件URL必须以.js结尾的限制 +12. 【修复】修改无限列表到底不触发onEndReached的问题 (感谢 @282931) +13. 【修复】修复标题栏背景色透明度不生效的问题 +14. 【修复】修复播放记录退出后被清空的问题 +15. 【修复】修复部分情况下深色模式异常的问题 +16. 【其他】这次安装包备用链接发到百度网盘了:https://pan.baidu.com/s/1H360C0MqejKXS67XwMqgPw?pwd=6666 提取码6666 + + +`2023.11.24 v0.1.2-alpha.0` +1. 【功能】新增桌面歌词功能,可在设置页开启(开启之前需要去手机设置授予悬浮窗权限) +2. 【功能】可以使用 MusicFree 打开本地 .js 或 .mp3 文件;其中 .js 文件会被当作插件安装; .mp3 文件会直接播放 +3. 【功能】新增插件设置:打开软件时自动更新插件、安装插件时不校验版本 +4. 【功能】新增播放设置:打开软件时自动播放歌曲 +5. 【功能】插件页新增开关,可以控制是否在榜单、热门歌单、搜索结果中展示对应插件的结果 +6. 【功能】插件协议新增 “用户变量” ,可以在插件中获取 APP 输入的配置(可以由此实现自建音乐源的插件/webdav源插件,但是还没写) +7. 【优化】下载单曲支持选择音质 +8. 【优化】新增“关联歌词方式”设置,如果设置为“输入歌曲ID”,则会恢复老版本关联歌词,即输入ID关联歌词 +9. 【优化】侧边栏新增“返回桌面”按钮 +10. 【修复】修复榜单、推荐歌单、搜索歌词页白屏闪退的问题 (感谢 @282931) +11. 【修复】修复自定义背景模糊度和透明度无法设置为 0 的问题 (感谢 @282931) +12. 【修复】修复浅色主题状态栏表现错误的问题 +13. 【修复】修复歌单批量编辑无法删除的问题 +14. 【修复】修复无法恢复桌面版导出的歌单的问题 + +`2023.10.15 v0.1.1-alpha.0` +1. 【功能】音源支持m3u8 (桌面版下个版本支持m3u8) +2. 【功能】增加歌曲详情页屏幕常亮的设置 +3. 【功能】重构主题相关功能,增加「跟随系统深色设置」选项;调整大部分样式,移除第三方UI库 +4. 【功能】插件页增加「插件批量更新」的功能 +5. 【功能】取消原「歌词关联」的逻辑,修改为拉起「歌词搜索」浮层 +6. 【优化】增加了一些无障碍属性 +7. 【修复】修复部分场景下无法保存歌单的问题 +8. 【修复】修复部分场景下重启之后无法播放歌曲的问题 +9. 【插件】部分插件更新,侧边栏更新插件即可 + +`2023.8.13 v0.1.0-alpha.10` +1. 【功能】当前音乐无歌词时可以在歌词页搜索歌词 +2. 【优化】调整右上角弹出气泡的位置 +3. 【优化】增加打开歌曲详情页时的默认表现设置 +4. 【优化】修复进入歌词页时候显示跳变的问题 +5. 【插件】插件协议更新,更新后可以配置某插件不出现在特定的搜索结果页下 +6. 【插件】部分插件更新,侧边栏更新插件即可 + +`2023.6.26 v0.1.0-alpha.9` +1. 【功能】新增搜索歌单功能 +2. 【功能】新增播放记录功能 +3. 【优化】加了一些无障碍适配 +4. 【插件】部分插件更新,侧边栏更新插件即可 + +`2023.6.4 v0.1.0-alpha.8` +1. 【功能】新增“推荐歌单”功能,需要配合支持该功能的插件使用 +2. 【功能】导入本地文件时增加“全选”按钮 +3. 【优化】修改“保存专辑封面”时的提示文案 +4. 【修复】修复当目标歌曲在播放列表内时,添加到下一首播放无效的问题 +5. 【插件】部分插件更新,侧边栏更新插件即可 + +`2023.5.21 v0.1.0-alpha.7` +1. 【功能】歌单页新增“播放全部”按钮 +2. 【功能】歌曲播放页中,长按专辑封面可保存到本地 +3. 【功能】歌单页新增“歌单排序”功能 +4. 【插件】b站插件作者页API变动,侧边栏更新插件即可 + +`2023.5.3 v0.1.0-alpha.6` +小小拖更一下~ +1. 【功能】歌单内搜索时支持英文大小写模糊搜索 +2. 【修复】修复首次进入时歌曲可能无法正常播放的问题 + +`2023.3.26 v0.1.0-alpha.5` +1. 【功能】更新弹窗新增“跳过此版本”的复选框 +2. 【功能】侧边栏-基本设置-开发选项中新增“查看错误日志”的选项,点击会弹出错误日志的弹窗 +3. 【修复】修复输入框被软键盘遮挡的问题 +4. 【优化】优化了定时关闭的样式 +5. 【文档】文档中更新了插件的制作教程。文档地址:http://musicfree.upup.fun + +`2023.3.19 v0.1.0-alpha.4` +1. 【功能】适配横屏设备 +2. 【功能】新建歌单时添加默认歌单名;从专辑/榜单批量添加到新歌单时,默认以专辑名/榜单名为新歌单名 +3. 【修复】修复设备有虚拟按键时,浮层会被遮挡的问题 +4. 【修复】修复拖拽歌词时部分情况下时间异常的问题 +5. 【修复】调整下载失败时的提示文案 +6. 【插件】部分插件有更新,可以从侧边栏更新 + +`2023.2.26 v0.1.0-alpha.3` +1. 【功能】专辑列表支持分页,需要配合插件更新; +2. 【优化】去掉了全面屏手机界面下方的小白条; +3. 【优化】调整拖拽歌词时标识线的对齐范围;调整歌词拖到最底端时的逻辑; +4. 【优化】调整下载歌曲时的文件名; +5. 【优化】导入歌曲时的提示文案增加滚动; +6. 【修复】修复特殊情况下歌曲中断后可能恢复到错误状态的问题(未验证); +7. 【插件】个别插件有更新,可以去侧边栏更新订阅。 + +`2023.2.13 v0.1.0-alpha.2` +1. 【功能】备份&恢复:可以把本地的歌单和插件备份到一个json文件中,也可以从本地文件或网络上恢复插件和歌单。 +2. 【修复】修复部分情况下后台播放切换歌曲时暂停的问题 +3. 【修复】修复部分场景无法下载的问题 +4. 【修复】修复部分场景无法删除本地文件的问题 +5. 【优化】简单优化了下歌单列表 +6. 【调试】调试面板现在可以打印出插件中的console语句 + +`2023.1.27 v0.1.0-alpha.1` +1. !!!【功能】插件更新,升级到新版本之后原有插件完全不兼容;更新后卸载原有插件,然后更新订阅即可(具体看公众号示例) +2. 【功能】新增功能“倍速播放” +3. 【功能】重写了插件订阅的逻辑,现在应该会更合理一点点 +4. 【功能】删除本地文件之前增加二次确认提醒 +5. 【功能】增加了一些无关紧要的分享 +6. 【样式】换了个logo,丑的更直白一些 +7. 【样式】调整了一些样式(如播放页的模糊和透明度、歌词样式等) +8. 【样式】专辑描述文字默认6行,点击可以展开或折叠 +9. 【修复】修复部分情况下无法下载的问题 +10. 【插件】大量插件有更新,更新到此版本后更新订阅即可 + +`2023.1.8 v0.0.1-alpha.13` +1. 【功能】主页入口增加“榜单” +2. 【功能】歌单页新增“编辑歌单信息”,可以修改歌单名称和歌单封面 +3. 【修复】修复了一个会导致播放音乐时拖拽排序卡顿的问题,做了一些其他优化 +4. 【插件】部分插件有更新,可以在侧边栏更新 + +`2022.12.25 v0.0.1-alpha.12` +1. 【功能】增加“单击搜索结果中单曲tab”时的行为配置 +2. 【功能】增加调试配置及调试面板,可用于查看插件的错误信息 +3. 【修复】修复部分情况下本地音乐中断时无法继续播放的问题 +4. 【修复】尝试修复扫描本地音乐,音乐文件太多时可能卡死的问题 + +`2022.12.11 v0.0.1-alpha.11` +1. 【功能】完善音质功能 +2. 【功能】更新下载功能,支持根据音质下载文件;修复一些小问题 +3. 【功能】新增播放时被打断的设置,可设置为暂停或者暂时降低音量 +4. 【优化】调整侧边栏样式,侧边栏新增“定时关闭”功能 +5. 【优化】本地音乐读取歌词时,会自动读取同目录下的同名lrc文件作为歌词 +6. 【修复】修复安装插件时误弹安装失败提示的问题 +7. 【修复】修复部分情况下本地文件删除失败的问题 +8. 【修复】修复本地音乐在通知栏不显示音乐标题的问题 +9. 【插件】示例插件仓库中migu有更新(支持音质),需要可自行更新 + +`2022.12.4 v0.0.1-alpha.10` +1. 【功能】支持自定义下载路径 +2. 【功能】支持插件排序(也就是搜索结果的排序) +3. 【功能】增加音质相关的配置 +4. 【优化】弹窗、浮层的性能优化,页面嵌套较深时卡顿的情况应该会好一点 +5. 【优化】拖拽排序,比上个版本手感应该会好一点 +6. 【修复】修复在歌词页清空播放列表时白屏的问题 + +`2022.11.20 v0.0.1-alpha.9` +1. 【功能】本地音乐读取内嵌歌词 +2. 【功能】批量编辑页新增了凑合能用的拖拽排序 +3. 【功能】歌曲详情浮层新增凑合能用的定时关闭 +4. 【功能】添加到歌单时可以新建歌单 +5. 【功能】本地音乐扫描支持外置sd卡;支持导入aac格式 +6. 【优化】优化播放列表浮层拉起时的锚定 +7. 【修复】修复更新弹窗无法滚动的问题 +8. 【修复】修复安卓12状态栏概率不沉浸的问题 +9. 【修复】修复安卓12、13播一首就停的问题 +10. 【插件】示例插件有更新,可以删掉原有插件重新导入 + +`2022.11.13 v0.0.1-alpha.8` +1. 【功能】侧边栏插件设置新增“订阅插件”功能,订阅之后直接点击“更新插件”即可更新,不需要清空重装了 +2. 【功能】本地音乐读取内置封面 +3. 【功能】本地音乐歌单支持批量删除(不删除源文件) +4. 【优化】重写导入本地音乐的逻辑,支持多选文件夹;修复部分机型重启应用时本地音乐消失的问题(可能需要删除后重新导入);支持导入flac,wav,wav,m4a,ogg等格式 +5. 【优化】重写播放列表浮层,拉起时会锚定到当前正在播放的歌曲 +6. 【优化】调整部分逻辑,可能会减少音频卡顿时卡死的情况 +7. 【修复】修复歌曲详情页进度条不连续的问题 +8. 【修复】修复某些情况下无法关联歌词的问题 +9. 【修复】修复正在播放的歌曲无歌词时,进入歌词页白屏的问题 +10. 【插件】示例插件有更新,可以删掉原有插件重新导入 + +`2022.10.30 v0.0.1-alpha.7` +1. 新增功能:历史记录一键清空 +2. 新增功能:歌手页、本地歌单页支持批量编辑 +3. 修复移动网络下无法播放本地音乐的问题 +4. 样式优化&修复:toast提示显示异常、侧边栏样式优化、歌单内序号显示不全、【关于】页无法滑动 +5. 之前使用的拖拽排序组件在列表较大时有很严重的性能问题,会导致卡顿甚至白屏,因此批量编辑页暂时去掉了拖拽排序,后续会重新加上 + +`2022.10.22 v0.0.1-alpha.6` +1. 重要!! v0.0.1-alpha.5以前的版本无法通过app正常更新,请在gitee/github发布页下载最新版本(v0.0.1-alpha.6),或QQ群自取; +2. 导入本地音乐时,如果未识别本地音乐文件,则会使用文件名作为音乐名; +3. 自建歌单、专辑详情页增加批量选择功能,可点击右上角查看(歌曲较多时可能有点卡,后续优化);使用方式:选中歌曲可进行下一首播放/加入歌单/下载/删除,长按拖动进行排序;删除/排序后点击保存按钮方可生效 +4. 调整歌单内歌曲编号字体大小; + +`2022.10.16 v0.0.1-alpha.5` +1. 新增功能:导入本地音乐文件 +2. 从网络源安装的插件可在插件页直接更新 +3. 调整下载逻辑 + +`2022.10.06 v0.0.1-alpha.4` +1. 修复专辑详情页没有loading的问题 +2. 为插件新增Cookie管理器 +3. 优化播放页的显示 +4. 新增一键卸载全部插件的功能 + +`2022.10.04 v0.0.1-alpha.3` +1. 修复设置页无法滚动的问题 +2. 修复播放结束时可能暂停的问题 + +`2022.10.03 v0.0.1-alpha.2` +1. 插件协议更新,需要重新安装插件 +2. 支持批量导入插件 +3. 新增清空播放列表功能 +4. 优化搜索结果面板和播放专辑逻辑 + +`2022.10.02` +测试版本出现啦!撒花 diff --git a/generator/generate-assets.mjs b/generator/generate-assets.mjs new file mode 100644 index 00000000..d5c8b7e5 --- /dev/null +++ b/generator/generate-assets.mjs @@ -0,0 +1,66 @@ +import fs from 'fs/promises'; +import path from 'path'; +import * as url from "node:url"; + + +function toCamelCase(str) { + // 将下划线和中划线统一替换为空格 + let camelCaseStr = str.replace(/[-_]/g, ' '); + + // 将每个单词的首字母大写,其余字母小写 + camelCaseStr = camelCaseStr.split(' ').map(word => { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + }).join(''); + + return camelCaseStr; +} + +// 读取所有的icon +const basePath = path.resolve(url.fileURLToPath(import.meta.url), '../../src/assets/icons') + +// 读取所有的svg +const icons = await fs.readdir(basePath) + +const assets = icons.map(it => ({ + componentName: toCamelCase(it.slice(0, -path.extname(it).length)) + "Icon", + filePath: `@/assets/icons/${it}`, + name: it.slice(0, -path.extname(it).length) +})) + +let scriptTemplate = `// This file is generated by generate-assets.mjs. DO NOT MODIFY. +import {SvgProps} from 'react-native-svg'; + +${assets.map(asset => `import ${asset.componentName} from '${asset.filePath}';`).join('\n')} + +export type IIconName = ${assets.map(asset => `'${asset.name}'`).join(' | ')}; + +interface IProps extends SvgProps { + /** 图标名称 */ + name: IIconName; + /** 图标大小 */ + size?: number; +} + +const iconMap = { +${assets.map(asset => ` '${asset.name}': ${asset.componentName}`).join(',\n')} +} as const; + +export default function Icon(props: IProps) { + const {name, size} = props; + + const newProps = { + ...props, + width: props.width ?? size, + height: props.width ?? size + } as SvgProps; + + const Component = iconMap[name]; + + return ; +} +` + +const targetPath = path.resolve(url.fileURLToPath(import.meta.url), '../../src/components/base/icon.tsx'); +await fs.writeFile(targetPath, scriptTemplate, 'utf8'); + +console.log(`Generate Succeed. ${assets.length} assets.`) \ No newline at end of file diff --git a/index.js b/index.js index 80e4a496..a97fbb76 100644 --- a/index.js +++ b/index.js @@ -3,9 +3,9 @@ */ import {AppRegistry} from 'react-native'; -import Pages from './src/entry'; import {name as appName} from './app.json'; import TrackPlayer from 'react-native-track-player'; +import Pages from '@/entry'; AppRegistry.registerComponent(appName, () => Pages); TrackPlayer.registerPlaybackService(() => require('./src/service/index')); diff --git a/ios/MusicFree.xcodeproj/project.pbxproj b/ios/MusicFree.xcodeproj/project.pbxproj index 194ce933..2c11377a 100644 --- a/ios/MusicFree.xcodeproj/project.pbxproj +++ b/ios/MusicFree.xcodeproj/project.pbxproj @@ -1,700 +1,688 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* MusicFreeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MusicFreeTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-MusicFree.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */; }; - 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 7699B88040F8A987B510C191 /* libPods-MusicFree-MusicFreeTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = MusicFree; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MusicFreeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* MusicFreeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicFreeTests.m; sourceTree = ""; }; - 13B07F961A680F5B00A75B9A /* MusicFree.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicFree.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = MusicFree/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = MusicFree/AppDelegate.mm; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = MusicFree/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = MusicFree/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = MusicFree/main.m; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MusicFree-MusicFreeTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree.debug.xcconfig"; path = "Target Support Files/Pods-MusicFree/Pods-MusicFree.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree.release.xcconfig"; path = "Target Support Files/Pods-MusicFree/Pods-MusicFree.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree-MusicFreeTests.debug.xcconfig"; path = "Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MusicFree.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = MusicFree/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree-MusicFreeTests.release.xcconfig"; path = "Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests.release.xcconfig"; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7699B88040F8A987B510C191 /* libPods-MusicFree-MusicFreeTests.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-MusicFree.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* MusicFreeTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* MusicFreeTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = MusicFreeTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 13B07FAE1A68108700A75B9A /* MusicFree */ = { - isa = PBXGroup; - children = ( - 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.mm */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 13B07FB71A68108700A75B9A /* main.m */, - ); - name = MusicFree; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* MusicFree */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* MusicFreeTests */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* MusicFree.app */, - 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* MusicFreeTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MusicFreeTests" */; - buildPhases = ( - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = MusicFreeTests; - productName = MusicFreeTests; - productReference = 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 13B07F861A680F5B00A75B9A /* MusicFree */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MusicFree" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - FD10A7F022414F080027D42C /* Start Packager */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MusicFree; - productName = MusicFree; - productReference = 13B07F961A680F5B00A75B9A /* MusicFree.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MusicFree" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* MusicFree */, - 00E356ED1AD99517003FC87E /* MusicFreeTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MusicFree-MusicFreeTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-MusicFree-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - FD10A7F022414F080027D42C /* Start Packager */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Start Packager"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* MusicFreeTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, - 13B07FC11A68108700A75B9A /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* MusicFree */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = MusicFreeTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MusicFree.app/MusicFree"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = MusicFreeTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MusicFree.app/MusicFree"; - }; - name = Release; - }; - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = MusicFree/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = MusicFree; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = MusicFree/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = MusicFree; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - ); - SDKROOT = iphoneos; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - ); - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MusicFreeTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MusicFree" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MusicFree" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 00E356F31AD99517003FC87E /* MusicFreeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MusicFreeTests.m */; }; + 0C80B921A6F3F58F76C31292 /* libPods-MusicFree.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */; }; + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 7699B88040F8A987B510C191 /* libPods-MusicFree-MusicFreeTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */; }; + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = MusicFree; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MusicFreeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 00E356F21AD99517003FC87E /* MusicFreeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MusicFreeTests.m; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* MusicFree.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicFree.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = MusicFree/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = MusicFree/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = MusicFree/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = MusicFree/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = MusicFree/main.m; sourceTree = ""; }; + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = MusicFree/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MusicFree-MusicFreeTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree.debug.xcconfig"; path = "Target Support Files/Pods-MusicFree/Pods-MusicFree.debug.xcconfig"; sourceTree = ""; }; + 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree.release.xcconfig"; path = "Target Support Files/Pods-MusicFree/Pods-MusicFree.release.xcconfig"; sourceTree = ""; }; + 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree-MusicFreeTests.debug.xcconfig"; path = "Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests.debug.xcconfig"; sourceTree = ""; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MusicFree.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = MusicFree/LaunchScreen.storyboard; sourceTree = ""; }; + 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MusicFree-MusicFreeTests.release.xcconfig"; path = "Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests.release.xcconfig"; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 00E356EB1AD99517003FC87E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7699B88040F8A987B510C191 /* libPods-MusicFree-MusicFreeTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0C80B921A6F3F58F76C31292 /* libPods-MusicFree.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 00E356EF1AD99517003FC87E /* MusicFreeTests */ = { + isa = PBXGroup; + children = ( + 00E356F21AD99517003FC87E /* MusicFreeTests.m */, + 00E356F01AD99517003FC87E /* Supporting Files */, + ); + path = MusicFreeTests; + sourceTree = ""; + }; + 00E356F01AD99517003FC87E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00E356F11AD99517003FC87E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 13B07FAE1A68108700A75B9A /* MusicFree */ = { + isa = PBXGroup; + children = ( + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, + 13B07FB71A68108700A75B9A /* main.m */, + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, + ); + name = MusicFree; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 5DCACB8F33CDC322A6C60F78 /* libPods-MusicFree.a */, + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-MusicFree-MusicFreeTests.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 /* PBXGroup */ = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* MusicFree */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 00E356EF1AD99517003FC87E /* MusicFreeTests */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + BBD78D7AC51CEA395F1C20DB /* Pods */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* MusicFree.app */, + 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + BBD78D7AC51CEA395F1C20DB /* Pods */ = { + isa = PBXGroup; + children = ( + 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */, + 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */, + 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 00E356ED1AD99517003FC87E /* MusicFreeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MusicFreeTests" */; + buildPhases = ( + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, + 00E356EA1AD99517003FC87E /* Sources */, + 00E356EB1AD99517003FC87E /* Frameworks */, + 00E356EC1AD99517003FC87E /* Resources */, + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 00E356F51AD99517003FC87E /* PBXTargetDependency */, + ); + name = MusicFreeTests; + productName = MusicFreeTests; + productReference = 00E356EE1AD99517003FC87E /* MusicFreeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 13B07F861A680F5B00A75B9A /* MusicFree */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MusicFree" */; + buildPhases = ( + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MusicFree; + productName = MusicFree; + productReference = 13B07F961A680F5B00A75B9A /* MusicFree.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1210; + TargetAttributes = { + 00E356ED1AD99517003FC87E = { + CreatedOnToolsVersion = 6.2; + TestTargetID = 13B07F861A680F5B00A75B9A /* MusicFree */; + }; + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1120; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MusicFree" */; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192 /* PBXGroup */; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* MusicFree */, + 00E356ED1AD99517003FC87E /* MusicFreeTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 00E356EC1AD99517003FC87E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/.xcode.env", + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n"; + }; + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MusicFree-MusicFreeTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MusicFree-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree/Pods-MusicFree-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MusicFree-MusicFreeTests/Pods-MusicFree-MusicFreeTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 00E356EA1AD99517003FC87E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00E356F31AD99517003FC87E /* MusicFreeTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* MusicFree */; + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 00E356F61AD99517003FC87E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-MusicFree-MusicFreeTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = MusicFreeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + "$(inherited)", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MusicFree.app/MusicFree"; + }; + name = Debug; + }; + 00E356F71AD99517003FC87E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-MusicFree-MusicFreeTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + COPY_PHASE_STRIP = NO; + INFOPLIST_FILE = MusicFreeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + OTHER_LDFLAGS = ( + "-ObjC", + "-lc++", + "$(inherited)", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MusicFree.app/MusicFree"; + }; + name = Release; + }; + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-MusicFree.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = MusicFree/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = MusicFree; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-MusicFree.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = MusicFree/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = MusicFree; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + SDKROOT = iphoneos; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); + LIBRARY_SEARCH_PATHS = ( + "\"$(SDKROOT)/usr/lib/swift\"", + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", + "\"$(inherited)\"", + ); + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-DFOLLY_NO_CONFIG", + "-DFOLLY_MOBILE=1", + "-DFOLLY_USE_LIBCPP=1", + "-DFOLLY_CFG_NO_COROUTINES=1", + "-DFOLLY_HAVE_CLOCK_GETTIME=1", + ); + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MusicFreeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 00E356F61AD99517003FC87E /* Debug */, + 00E356F71AD99517003FC87E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MusicFree" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MusicFree" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192; +} diff --git a/ios/MusicFree.xcodeproj/xcshareddata/xcschemes/MusicFree.xcscheme b/ios/MusicFree.xcodeproj/xcshareddata/xcschemes/MusicFreeNew.xcscheme similarity index 100% rename from ios/MusicFree.xcodeproj/xcshareddata/xcschemes/MusicFree.xcscheme rename to ios/MusicFree.xcodeproj/xcshareddata/xcschemes/MusicFreeNew.xcscheme diff --git a/ios/MusicFree/AppDelegate.h b/ios/MusicFree/AppDelegate.h index ef1de86a..8c4dd302 100644 --- a/ios/MusicFree/AppDelegate.h +++ b/ios/MusicFree/AppDelegate.h @@ -1,8 +1,7 @@ -#import -#import - -@interface AppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end +#import +#import +#import + +@interface AppDelegate : EXAppDelegateWrapper + +@end diff --git a/ios/MusicFree/AppDelegate.mm b/ios/MusicFree/AppDelegate.mm index 0ffbfdf0..8296ad98 100644 --- a/ios/MusicFree/AppDelegate.mm +++ b/ios/MusicFree/AppDelegate.mm @@ -1,133 +1,31 @@ -#import "AppDelegate.h" - -#import -#import -#import - -#import - -#if RCT_NEW_ARCH_ENABLED -#import -#import -#import -#import -#import -#import - -#import - -static NSString *const kRNConcurrentRoot = @"concurrentRoot"; - -@interface AppDelegate () { - RCTTurboModuleManager *_turboModuleManager; - RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; - std::shared_ptr _reactNativeConfig; - facebook::react::ContextContainer::Shared _contextContainer; -} -@end -#endif - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - RCTAppSetupPrepareApp(application); - - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - -#if RCT_NEW_ARCH_ENABLED - _contextContainer = std::make_shared(); - _reactNativeConfig = std::make_shared(); - _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); - _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; - bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; -#endif - - NSDictionary *initProps = [self prepareInitialProps]; - UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"MusicFree", initProps); - - if (@available(iOS 13.0, *)) { - rootView.backgroundColor = [UIColor systemBackgroundColor]; - } else { - rootView.backgroundColor = [UIColor whiteColor]; - } - - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - return YES; -} - -/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. -/// -/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html -/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). -/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`. -- (BOOL)concurrentRootEnabled -{ - // Switch this bool to turn on and off the concurrent root - return true; -} - -- (NSDictionary *)prepareInitialProps -{ - NSMutableDictionary *initProps = [NSMutableDictionary new]; - -#ifdef RCT_NEW_ARCH_ENABLED - initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); -#endif - - return initProps; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ -#if DEBUG - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; -#else - return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; -#endif -} - -#if RCT_NEW_ARCH_ENABLED - -#pragma mark - RCTCxxBridgeDelegate - -- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge -{ - _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge - delegate:self - jsInvoker:bridge.jsCallInvoker]; - return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); -} - -#pragma mark RCTTurboModuleManagerDelegate - -- (Class)getModuleClassFromName:(const char *)name -{ - return RCTCoreModulesClassProvider(name); -} - -- (std::shared_ptr)getTurboModule:(const std::string &)name - jsInvoker:(std::shared_ptr)jsInvoker -{ - return nullptr; -} - -- (std::shared_ptr)getTurboModule:(const std::string &)name - initParams: - (const facebook::react::ObjCTurboModule::InitParams &)params -{ - return nullptr; -} - -- (id)getModuleInstanceFromClass:(Class)moduleClass -{ - return RCTAppSetupDefaultModuleFromClass(moduleClass); -} - -#endif - -@end +#import "AppDelegate.h" + +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.moduleName = @"MusicFree"; + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ + return [self bundleURL]; +} + +- (NSURL *)bundleURL +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +@end diff --git a/ios/MusicFree/BootSplash.storyboard b/ios/MusicFree/BootSplash.storyboard deleted file mode 100644 index 1a6b2b9b..00000000 --- a/ios/MusicFree/BootSplash.storyboard +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/Contents.json b/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/Contents.json deleted file mode 100644 index 570652df..00000000 --- a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "bootsplash_logo.png", - "scale": "1x" - }, - { - "idiom": "universal", - "filename": "bootsplash_logo@2x.png", - "scale": "2x" - }, - { - "idiom": "universal", - "filename": "bootsplash_logo@3x.png", - "scale": "3x" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png b/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png deleted file mode 100644 index 5c5ab2d4..00000000 Binary files a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png and /dev/null differ diff --git a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png b/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png deleted file mode 100644 index 0a0fd56a..00000000 Binary files a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png and /dev/null differ diff --git a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png b/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png deleted file mode 100644 index b26292bf..00000000 Binary files a/ios/MusicFree/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png and /dev/null differ diff --git a/ios/MusicFree/Info.plist b/ios/MusicFree/Info.plist index 44d4ab6b..f5f29a36 100644 --- a/ios/MusicFree/Info.plist +++ b/ios/MusicFree/Info.plist @@ -17,23 +17,20 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) LSRequiresIPhoneOS NSAppTransportSecurity - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + NSLocationWhenInUseUsageDescription @@ -41,7 +38,7 @@ LaunchScreen UIRequiredDeviceCapabilities - armv7 + arm64 UISupportedInterfaceOrientations diff --git a/ios/MusicFree/PrivacyInfo.xcprivacy b/ios/MusicFree/PrivacyInfo.xcprivacy new file mode 100644 index 00000000..ef1896e7 --- /dev/null +++ b/ios/MusicFree/PrivacyInfo.xcprivacy @@ -0,0 +1,38 @@ + + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyTracking + + + diff --git a/ios/MusicFreeTests/MusicFreeTests.m b/ios/MusicFreeTests/MusicFreeNewTests.m similarity index 100% rename from ios/MusicFreeTests/MusicFreeTests.m rename to ios/MusicFreeTests/MusicFreeNewTests.m diff --git a/ios/Podfile b/ios/Podfile index 6147b43c..ff901270 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,37 +1,49 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' - -platform :ios, '12.4' -install! 'cocoapods', :deterministic_uuids => false - -target 'MusicFree' do - config = use_native_modules! - - # Flags change depending on the env values. - flags = get_default_flags() - - use_react_native!( - :path => config[:reactNativePath], - # to enable hermes on iOS, change `false` to `true` and then install pods - :hermes_enabled => flags[:hermes_enabled], - :fabric_enabled => flags[:fabric_enabled], - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - target 'MusicFreeTests' do - inherit! :complete - # Pods for testing - end - - # Enables Flipper. - # - # Note that if you have use_frameworks! enabled, Flipper will not work and - # you should disable the next line. - use_flipper!() - - post_install do |installer| - react_native_post_install(installer) - __apply_Xcode_12_5_M1_post_install_workaround(installer) - end -end +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip + +platform :ios, min_ios_version_supported +prepare_react_native_project! + +linkage = ENV['USE_FRAMEWORKS'] +if linkage != nil + Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green + use_frameworks! :linkage => linkage.to_sym +end + +target 'MusicFree' do + use_expo_modules! + post_integrate do |installer| + begin + expo_patch_react_imports!(installer) + rescue => e + Pod::UI.warn e + end + end + config = use_native_modules! + + use_react_native!( + :path => config[:reactNativePath], + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) + + target 'MusicFreeTests' do + inherit! :complete + # Pods for testing + end + + post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + # :ccache_enabled => true + ) + end +end diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..bae0df3d --- /dev/null +++ b/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/metro.config.js b/metro.config.js index 022f21a1..44d28d4d 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,31 +1,25 @@ +const {getDefaultConfig} = require('expo/metro-config'); +const {mergeConfig} = require('@react-native/metro-config'); + +/** + * Reference: https://github.com/software-mansion/react-native-svg/blob/main/USAGE.md + */ +const defaultConfig = getDefaultConfig(__dirname); +const {assetExts, sourceExts} = defaultConfig.resolver; /** - * Metro configuration for React Native - * https://github.com/facebook/react-native + * Metro configuration + * https://reactnative.dev/docs/metro * - * @format + * @type {import('metro-config').MetroConfig} */ +const config = { + transformer: { + babelTransformerPath: require.resolve('react-native-svg-transformer'), + }, + resolver: { + assetExts: assetExts.filter(ext => ext !== 'svg'), + sourceExts: [...sourceExts, 'svg'], + }, +}; -const {getDefaultConfig} = require('metro-config'); - -module.exports = (async () => { - const { - resolver: {sourceExts, assetExts}, - } = await getDefaultConfig(); - return { - transformer: { - babelTransformerPath: require.resolve( - 'react-native-svg-transformer', - ), - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, - resolver: { - assetExts: assetExts.filter(ext => ext !== 'svg'), - sourceExts: [...sourceExts, 'svg'], - }, - }; -})(); +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 1afafbd5..00000000 --- a/package-lock.json +++ /dev/null @@ -1,22194 +0,0 @@ -{ - "name": "MusicFree", - "version": "0.3.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "MusicFree", - "version": "0.3.0", - "license": "GPL", - "dependencies": { - "@react-native-async-storage/async-storage": "^1.17.7", - "@react-native-clipboard/clipboard": "^1.11.2", - "@react-native-community/netinfo": "^9.4.1", - "@react-native-community/slider": "^4.2.4", - "@react-native-cookies/cookies": "^6.2.1", - "@react-native-masked-view/masked-view": "^0.2.9", - "@react-navigation/drawer": "^6.7.2", - "@react-navigation/native": "^6.1.18", - "@react-navigation/native-stack": "^6.10.1", - "@sayem314/react-native-keep-awake": "^1.2.2", - "@shopify/flash-list": "^1.7.0", - "axios": "^0.27.2", - "big-integer": "^1.6.51", - "cheerio": "^1.0.0-rc.12", - "color": "^4.2.3", - "compare-versions": "^6.1.0", - "crypto-js": "^4.1.1", - "dayjs": "^1.11.12", - "deepmerge": "^4.3.1", - "he": "^1.2.0", - "immer": "^9.0.15", - "jotai": "^2.7.0", - "lodash.shuffle": "^4.2.0", - "lru-cache": "^7.14.0", - "nanoid": "^4.0.2", - "object-path": "^0.11.8", - "p-queue": "^7.4.1", - "path-browserify": "^1.0.1", - "qrcode-generator": "^1.4.4", - "qs": "^6.12.3", - "react": "18.0.0", - "react-native": "0.69.12", - "react-native-background-timer": "^2.4.1", - "react-native-bootsplash": "^4.3.2", - "react-native-circular-progress-indicator": "^4.4.2", - "react-native-device-info": "^10.9.0", - "react-native-document-picker": "^8.1.1", - "react-native-fast-image": "^8.6.3", - "react-native-file-access": "^2.5.0", - "react-native-fs": "^2.20.0", - "react-native-gesture-handler": "^2.17.1", - "react-native-get-random-values": "^1.9.0", - "react-native-image-colors": "^1.5.1", - "react-native-image-picker": "^4.10.0", - "react-native-linear-gradient": "^2.8.3", - "react-native-logs": "^5.0.1", - "react-native-mmkv": "^2.5.1", - "react-native-pager-view": "^5.4.25", - "react-native-permissions": "^3.9.0", - "react-native-reanimated": "^2.17.0", - "react-native-safe-area-context": "^4.10.8", - "react-native-screens": "^3.15.0", - "react-native-share": "^9.4.1", - "react-native-svg": "^12.4.0", - "react-native-tab-view": "^3.5.2", - "react-native-track-player": "^4.0.1", - "react-native-url-polyfill": "^2.0.0", - "react-native-vector-icons": "^10.0.0", - "react-native-view-shot": "^3.4.0", - "react-native-webview": "^13.6.2", - "react-qr-code": "^2.0.7", - "recyclerlistview": "^4.2.1", - "webdav": "github:maotoumao/webdav-client#release" - }, - "devDependencies": { - "@babel/core": "^7.12.9", - "@babel/runtime": "^7.12.5", - "@commitlint/cli": "^17.0.3", - "@commitlint/config-conventional": "^17.0.3", - "@react-native-community/eslint-config": "^2.0.0", - "@tsconfig/react-native": "^2.0.0", - "@types/color": "^3.0.3", - "@types/crypto-js": "^4.1.1", - "@types/he": "^1.1.2", - "@types/jest": "^26.0.23", - "@types/lodash.shuffle": "^4.2.7", - "@types/node": "^18.0.4", - "@types/object-path": "^0.11.1", - "@types/path-browserify": "^1.0.0", - "@types/qs": "^6.9.7", - "@types/react": "^18", - "@types/react-native": "^0.69.1", - "@types/react-native-background-timer": "^2.0.0", - "@types/react-native-vector-icons": "^6.4.11", - "@types/react-test-renderer": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^5.29.0", - "@typescript-eslint/parser": "^5.29.0", - "babel-jest": "^26.6.3", - "babel-plugin-module-resolver": "^4.1.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.2.1", - "husky": "^8.0.1", - "jest": "^26.6.3", - "lint-staged": "^13.0.3", - "metro-config": "^0.80.2", - "metro-react-native-babel-preset": "^0.70.3", - "prettier": "^2.7.1", - "react-native-svg-transformer": "^1.3.0", - "react-test-renderer": "18.0.0", - "sharp": "^0.33.4", - "typescript": "^4.4.4" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", - "dependencies": { - "@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/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@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.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.17" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.13", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.16", - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-default-from": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-assign": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.15", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@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/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.15", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.15", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-typescript": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.17", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@buttercup/fetch": { - "version": "0.1.2", - "license": "MIT", - "optionalDependencies": { - "node-fetch": "^3.3.0" - } - }, - "node_modules/@buttercup/fetch/node_modules/node-fetch": { - "version": "3.3.2", - "license": "MIT", - "optional": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@commitlint/cli": { - "version": "17.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/format": "^17.4.4", - "@commitlint/lint": "^17.7.0", - "@commitlint/load": "^17.7.1", - "@commitlint/read": "^17.5.1", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "conventional-changelog-conventionalcommits": "^6.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "17.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/ensure": { - "version": "17.6.7", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "17.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format": { - "version": "17.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/format/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/format/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/format/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/format/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "semver": "7.5.4" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@commitlint/lint": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/is-ignored": "^17.7.0", - "@commitlint/parse": "^17.7.0", - "@commitlint/rules": "^17.7.0", - "@commitlint/types": "^17.4.4" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load": { - "version": "17.7.1", - "dev": true, - "license": "MIT", - "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.4.7", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/load/node_modules/@types/node": { - "version": "20.4.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/load/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/load/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/load/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/load/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/load/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/message": { - "version": "17.4.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^17.4.4", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read": { - "version": "17.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/top-level": "^17.4.0", - "@commitlint/types": "^17.4.4", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "17.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/config-validator": "^17.6.7", - "@commitlint/types": "^17.4.4", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/rules": { - "version": "17.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/ensure": "^17.6.7", - "@commitlint/message": "^17.4.2", - "@commitlint/to-lines": "^17.4.0", - "@commitlint/types": "^17.4.4", - "execa": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "17.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/top-level": { - "version": "17.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/types": { - "version": "17.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@egjs/hammerjs": { - "version": "2.0.17", - "license": "MIT", - "dependencies": { - "@types/hammerjs": "^2.0.36" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/@jest/types": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/@types/yargs": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@jest/create-cache-key-function/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jimp/bmp": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "bmp-js": "^0.1.0" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/core": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^16.5.4", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "node_modules/@jimp/custom": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.16.13" - } - }, - "node_modules/@jimp/gif": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/jpeg": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "jpeg-js": "^0.4.2" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/plugin-resize": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/png": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.13", - "pngjs": "^3.3.3" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/tiff": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/types": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.16.13", - "@jimp/gif": "^0.16.13", - "@jimp/jpeg": "^0.16.13", - "@jimp/png": "^0.16.13", - "@jimp/tiff": "^0.16.13", - "timm": "^1.6.1" - }, - "peerDependencies": { - "@jimp/custom": ">=0.3.5" - } - }, - "node_modules/@jimp/utils": { - "version": "0.16.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" - } - }, - "node_modules/@jimp/utils/node_modules/regenerator-runtime": { - "version": "0.13.11", - "license": "MIT" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-async-storage/async-storage": { - "version": "1.19.3", - "license": "MIT", - "dependencies": { - "merge-options": "^3.0.4" - }, - "peerDependencies": { - "react-native": "^0.0.0-0 || 0.60 - 0.72 || 1000.0.0" - } - }, - "node_modules/@react-native-clipboard/clipboard": { - "version": "1.11.2", - "license": "MIT", - "peerDependencies": { - "react": ">=16.0", - "react-native": ">=0.57.0" - } - }, - "node_modules/@react-native-community/cli": { - "version": "8.0.7", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-clean": "^8.0.4", - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-doctor": "^8.0.6", - "@react-native-community/cli-hermes": "^8.0.5", - "@react-native-community/cli-plugin-metro": "^8.0.7", - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", - "@react-native-community/cli-types": "^8.0.0", - "chalk": "^4.1.2", - "commander": "^2.19.0", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "minimist": "^1.2.0", - "prompts": "^2.4.0", - "semver": "^6.3.0" - }, - "bin": { - "react-native": "build/bin.js" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "8.0.4", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "prompts": "^2.4.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/execa": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/npm-run-path": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-config": { - "version": "8.0.6", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/deepmerge": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/parse-json": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "8.0.0", - "license": "MIT", - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "8.0.6", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config": "^8.0.6", - "@react-native-community/cli-platform-ios": "^8.0.6", - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/execa": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/npm-run-path": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-hermes": { - "version": "8.0.5", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-platform-android": "^8.0.5", - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "8.0.5", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "jetifier": "^1.6.2", - "lodash": "^4.17.15", - "logkitty": "^0.7.1", - "slash": "^3.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/execa": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/fs-extra": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/npm-run-path": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "8.0.6", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "glob": "^7.1.3", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "ora": "^5.4.1", - "plist": "^3.0.2" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/execa": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/npm-run-path": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "8.0.7", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-server-api": "^8.0.4", - "@react-native-community/cli-tools": "^8.0.4", - "chalk": "^4.1.2", - "metro": "^0.70.4", - "metro-config": "^0.70.4", - "metro-core": "^0.70.4", - "metro-react-native-babel-transformer": "^0.70.4", - "metro-resolver": "^0.70.4", - "metro-runtime": "^0.70.4", - "readline": "^1.3.0" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/cosmiconfig": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/import-fresh": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/metro-config": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.70.4", - "metro-cache": "0.70.4", - "metro-core": "0.70.4", - "metro-runtime": "0.70.4" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/parse-json": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/resolve-from": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-plugin-metro/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "8.0.4", - "license": "MIT", - "dependencies": { - "@react-native-community/cli-debugger-ui": "^8.0.0", - "@react-native-community/cli-tools": "^8.0.4", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "8.0.4", - "license": "MIT", - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "lodash": "^4.17.15", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^6.3.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "8.0.0", - "license": "MIT", - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@react-native-community/cli/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@react-native-community/cli/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/@react-native-community/cli/node_modules/cross-spawn": { - "version": "6.0.5", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/@react-native-community/cli/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli/node_modules/execa": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/fs-extra": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/is-stream": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/npm-run-path": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/path-key": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli/node_modules/shebang-command": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/shebang-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli/node_modules/universalify": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/eslint-config": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@react-native-community/eslint-plugin": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^3.1.0", - "@typescript-eslint/parser": "^3.1.0", - "babel-eslint": "^10.1.0", - "eslint-config-prettier": "^6.10.1", - "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-flowtype": "2.50.3", - "eslint-plugin-jest": "22.4.1", - "eslint-plugin-prettier": "3.1.2", - "eslint-plugin-react": "^7.20.0", - "eslint-plugin-react-hooks": "^4.0.4", - "eslint-plugin-react-native": "^3.8.1", - "prettier": "^2.0.2" - }, - "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^3.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/parser": { - "version": "3.10.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/eslint-config-prettier": { - "version": "6.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/eslint-plugin-prettier": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">= 5.0.0", - "prettier": ">= 1.13.0" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/eslint-config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@react-native-community/eslint-plugin": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@react-native-community/netinfo": { - "version": "9.4.1", - "license": "MIT", - "peerDependencies": { - "react-native": ">=0.59" - } - }, - "node_modules/@react-native-community/slider": { - "version": "4.4.3", - "license": "MIT" - }, - "node_modules/@react-native-cookies/cookies": { - "version": "6.2.1", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4" - }, - "peerDependencies": { - "react-native": ">= 0.60.2" - } - }, - "node_modules/@react-native-masked-view/masked-view": { - "version": "0.2.9", - "license": "MIT", - "peerDependencies": { - "react": ">=16", - "react-native": ">=0.57" - } - }, - "node_modules/@react-native/assets": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/@react-native/normalize-color": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/@react-native/polyfills": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/@react-navigation/core": { - "version": "6.4.17", - "resolved": "https://registry.npmmirror.com/@react-navigation/core/-/core-6.4.17.tgz", - "integrity": "sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg==", - "dependencies": { - "@react-navigation/routers": "^6.1.9", - "escape-string-regexp": "^4.0.0", - "nanoid": "^3.1.23", - "query-string": "^7.1.3", - "react-is": "^16.13.0", - "use-latest-callback": "^0.2.1" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@react-navigation/core/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/@react-navigation/core/node_modules/use-latest-callback": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/use-latest-callback/-/use-latest-callback-0.2.1.tgz", - "integrity": "sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ==", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-navigation/drawer": { - "version": "6.7.2", - "resolved": "https://registry.npmmirror.com/@react-navigation/drawer/-/drawer-6.7.2.tgz", - "integrity": "sha512-o4g2zgTZa2+oLd+8V33etrSM38KIqu8S/zCBTsdsHUoQyVE7JNRiv3Qgq/jMvEb8PZCqWmm7jHItcgzrBuwyOQ==", - "dependencies": { - "@react-navigation/elements": "^1.3.31", - "color": "^4.2.3", - "warn-once": "^0.1.0" - }, - "peerDependencies": { - "@react-navigation/native": "^6.0.0", - "react": "*", - "react-native": "*", - "react-native-gesture-handler": ">= 1.0.0", - "react-native-reanimated": ">= 1.0.0", - "react-native-safe-area-context": ">= 3.0.0", - "react-native-screens": ">= 3.0.0" - } - }, - "node_modules/@react-navigation/elements": { - "version": "1.3.31", - "resolved": "https://registry.npmmirror.com/@react-navigation/elements/-/elements-1.3.31.tgz", - "integrity": "sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ==", - "peerDependencies": { - "@react-navigation/native": "^6.0.0", - "react": "*", - "react-native": "*", - "react-native-safe-area-context": ">= 3.0.0" - } - }, - "node_modules/@react-navigation/native": { - "version": "6.1.18", - "resolved": "https://registry.npmmirror.com/@react-navigation/native/-/native-6.1.18.tgz", - "integrity": "sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg==", - "dependencies": { - "@react-navigation/core": "^6.4.17", - "escape-string-regexp": "^4.0.0", - "fast-deep-equal": "^3.1.3", - "nanoid": "^3.1.23" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/@react-navigation/native-stack": { - "version": "6.10.1", - "resolved": "https://registry.npmmirror.com/@react-navigation/native-stack/-/native-stack-6.10.1.tgz", - "integrity": "sha512-MDTHtelO2EhY1sEbz4YMNw+1YoE0sWXSHLUYireQZFHUXKDfYiWYbxXg2Q08Ool0KEvnZjP0hh0Wm6/ZnvDCtw==", - "dependencies": { - "@react-navigation/elements": "^1.3.31", - "warn-once": "^0.1.0" - }, - "peerDependencies": { - "@react-navigation/native": "^6.0.0", - "react": "*", - "react-native": "*", - "react-native-safe-area-context": ">= 3.0.0", - "react-native-screens": ">= 3.0.0" - } - }, - "node_modules/@react-navigation/native/node_modules/nanoid": { - "version": "3.3.6", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/@react-navigation/routers": { - "version": "6.1.9", - "resolved": "https://registry.npmmirror.com/@react-navigation/routers/-/routers-6.1.9.tgz", - "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==", - "dependencies": { - "nanoid": "^3.1.23" - } - }, - "node_modules/@react-navigation/routers/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/@sayem314/react-native-keep-awake": { - "version": "1.2.2", - "license": "MIT", - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/sayem314" - } - }, - "node_modules/@shopify/flash-list": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/@shopify/flash-list/-/flash-list-1.7.0.tgz", - "integrity": "sha512-Uys8mWTb0Y34Ts1hD97KrVFbFH9oY7qbj/u1oSrAS5PJAackDFbndUEVuTYyXSyWxHY0sRutF5HgS1yNdhj+0A==", - "dependencies": { - "recyclerlistview": "4.2.1", - "tslib": "2.6.3" - }, - "peerDependencies": { - "@babel/runtime": "*", - "react": "*", - "react-native": "*" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "license": "MIT" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/react-native": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/color": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/color-convert": "*" - } - }, - "node_modules/@types/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/color-name": "*" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/crypto-js": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hammerjs": { - "version": "2.0.41", - "license": "MIT" - }, - "node_modules/@types/he": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.24", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.198", - "license": "MIT" - }, - "node_modules/@types/lodash.shuffle": { - "version": "4.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.17.15", - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/object-path": { - "version": "0.11.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/path-browserify": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.2.21", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-native": { - "version": "0.69.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-native-background-timer": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react-native-vector-icons": { - "version": "6.4.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*", - "@types/react-native": "^0.70" - } - }, - "node_modules/@types/react-native-vector-icons/node_modules/@types/react-native": { - "version": "0.70.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-test-renderer": { - "version": "18.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "15.0.15", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "dev": true, - "license": "BSD-2-Clause", - "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.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abs-svg-path": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/absolute-path": { - "version": "0.0.0", - "license": "MIT" - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "license": "MIT" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/colorette": { - "version": "1.4.0", - "license": "MIT" - }, - "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/node_modules/slice-ansi": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-base": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "license": "MIT" - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.14.2", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "3.2.4", - "license": "MIT" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atob": { - "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.27.2", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "license": "MIT", - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-module-resolver": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "license": "MIT" - }, - "node_modules/babel-plugin-transform-remove-console": { - "version": "6.9.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-fbjs": { - "version": "3.4.0", - "license": "MIT", - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", - "optional": true - }, - "node_modules/bare-fs": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/bare-fs/-/bare-fs-2.3.1.tgz", - "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", - "optional": true, - "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" - } - }, - "node_modules/bare-os": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/bare-os/-/bare-os-2.4.0.tgz", - "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", - "optional": true - }, - "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", - "optional": true, - "dependencies": { - "bare-os": "^2.1.0" - } - }, - "node_modules/bare-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/bare-stream/-/bare-stream-2.1.3.tgz", - "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", - "optional": true, - "dependencies": { - "streamx": "^2.18.0" - } - }, - "node_modules/base": { - "version": "0.11.2", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-64": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/big-integer": { - "version": "1.6.51", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bmp-js": { - "version": "0.1.0", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/browserslist": { - "version": "4.21.10", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/byte-length": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001532", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "license": "BSD-2-Clause", - "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.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/ci-info": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "license": "MIT" - }, - "node_modules/commander": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/compare-func": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compare-versions": { - "version": "6.1.0", - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "6.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.32.2", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v14.21.3" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/css-line-break": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "utrie": "^1.0.2" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/dargs": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2" - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.513", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.7.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.10.0", - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-abstract": { - "version": "1.22.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "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.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "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.10", - "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.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "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.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "dev": true, - "license": "MIT", - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "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.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "2.50.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "lodash": "^4.17.10" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=2.0.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "22.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-native": { - "version": "3.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.7.4", - "eslint-plugin-react-native-globals": "^0.1.1" - }, - "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react-native-globals": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "license": "MIT" - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exif-parser": { - "version": "0.1.12" - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "license": "MIT", - "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.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.3.2", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-type": { - "version": "16.5.4", - "license": "MIT", - "dependencies": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.2.4", - "token-types": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-babel-config": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up/node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-parser": { - "version": "0.121.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "license": "MIT", - "optional": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gifwrap": { - "version": "0.9.4", - "license": "MIT", - "dependencies": { - "image-q": "^4.0.0", - "omggif": "^1.0.10" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-dirs": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/growly": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hermes-engine": { - "version": "0.11.0", - "license": "MIT" - }, - "node_modules/hermes-estree": { - "version": "0.6.0", - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.6.0" - } - }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-profile-transformer/node_modules/source-map": { - "version": "0.7.4", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/hot-patcher": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/html2canvas": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "css-line-break": "^2.1.0", - "text-segmentation": "^1.0.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-q": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/node": "16.9.1" - } - }, - "node_modules/image-q/node_modules/@types/node": { - "version": "16.9.1", - "license": "MIT" - }, - "node_modules/image-size": { - "version": "0.6.3", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "license": "MIT" - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/human-signals": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-cli/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-util": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jetifier": { - "version": "1.6.8", - "license": "MIT", - "bin": { - "jetifier": "bin/jetify", - "jetifier-standalone": "bin/jetifier-standalone", - "jetify": "bin/jetify" - } - }, - "node_modules/joi": { - "version": "17.10.1", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/jotai": { - "version": "2.7.0", - "resolved": "https://registry.npmmirror.com/jotai/-/jotai-2.7.0.tgz", - "integrity": "sha512-4qsyFKu4MprI39rj2uoItyhu24NoCHzkOV7z70PQr65SpzV6CSyhQvVIfbNlNqOIOspNMdf5OK+kTXLvqe63Jw==", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@types/react": ">=17.0.0", - "react": ">=17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/jpeg-js": { - "version": "0.4.4", - "license": "BSD-3-Clause" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-android": { - "version": "250230.2.1", - "license": "BSD-2-Clause" - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "license": "0BSD" - }, - "node_modules/jscodeshift": { - "version": "0.13.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "license": "MIT", - "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.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jscodeshift/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jscodeshift/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/rimraf": { - "version": "2.6.3", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/jscodeshift/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jscodeshift/node_modules/temp": { - "version": "0.8.4", - "license": "MIT", - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/jscodeshift/node_modules/to-regex-range": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "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.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/layerr": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/leven": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "13.3.0", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "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" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "6.6.1", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/load-bmfont/node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.shuffle": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "license": "MIT", - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/logkitty/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/logkitty/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/logkitty/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/logkitty/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/logkitty/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/wrap-ansi": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/logkitty/node_modules/yargs": { - "version": "15.4.1", - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/yargs-parser": { - "version": "18.1.3", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "license": "CC0-1.0" - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/meow": { - "version": "8.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-options": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.6.0", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-haste-map": "^27.3.1", - "jest-worker": "^27.2.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.70.4", - "metro-cache": "0.70.4", - "metro-cache-key": "0.70.4", - "metro-config": "0.70.4", - "metro-core": "0.70.4", - "metro-hermes-compiler": "0.70.4", - "metro-inspector-proxy": "0.70.4", - "metro-minify-uglify": "0.70.4", - "metro-react-native-babel-preset": "0.70.4", - "metro-resolver": "0.70.4", - "metro-runtime": "0.70.4", - "metro-source-map": "0.70.4", - "metro-symbolicate": "0.70.4", - "metro-transform-plugins": "0.70.4", - "metro-transform-worker": "0.70.4", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "bin": { - "metro": "src/cli.js" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.0", - "hermes-parser": "0.6.0", - "metro-source-map": "0.70.4", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-cache": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "metro-core": "0.70.4", - "rimraf": "^2.5.4" - } - }, - "node_modules/metro-cache-key": { - "version": "0.70.4", - "license": "MIT" - }, - "node_modules/metro-cache/node_modules/rimraf": { - "version": "2.7.1", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/metro-config": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "jest-validate": "^29.6.3", - "metro": "0.80.2", - "metro-cache": "0.80.2", - "metro-core": "0.80.2", - "metro-runtime": "0.80.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/@jest/types": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/@types/yargs": { - "version": "17.0.32", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-config/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/metro-config/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-config/node_modules/hermes-estree": { - "version": "0.18.0", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-config/node_modules/hermes-parser": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hermes-estree": "0.18.0" - } - }, - "node_modules/metro-config/node_modules/image-size": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/metro-config/node_modules/import-fresh": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-config/node_modules/jest-get-type": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/jest-util": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/jest-util/node_modules/ci-info": { - "version": "3.9.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-config/node_modules/jest-validate": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/jest-worker": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro-config/node_modules/metro": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.18.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.80.2", - "metro-cache": "0.80.2", - "metro-cache-key": "0.80.2", - "metro-config": "0.80.2", - "metro-core": "0.80.2", - "metro-file-map": "0.80.2", - "metro-minify-terser": "0.80.2", - "metro-resolver": "0.80.2", - "metro-runtime": "0.80.2", - "metro-source-map": "0.80.2", - "metro-symbolicate": "0.80.2", - "metro-transform-plugins": "0.80.2", - "metro-transform-worker": "0.80.2", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^3.0.2", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-babel-transformer": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "hermes-parser": "0.18.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-cache": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "metro-core": "0.80.2", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-cache-key": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-core": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.80.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-resolver": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-runtime": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-source-map": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.20.0", - "@babel/types": "^7.20.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.80.2", - "nullthrows": "^1.1.1", - "ob1": "0.80.2", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-symbolicate": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.80.2", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-transform-plugins": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.20.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/metro-transform-worker": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.0", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "metro": "0.80.2", - "metro-babel-transformer": "0.80.2", - "metro-cache": "0.80.2", - "metro-cache-key": "0.80.2", - "metro-source-map": "0.80.2", - "metro-transform-plugins": "0.80.2", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-config/node_modules/ob1": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-config/node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/pretty-format": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-config/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-config/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/metro-config/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-config/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/metro-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-config/node_modules/through2": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/metro-core": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "jest-haste-map": "^27.3.1", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.70.4" - } - }, - "node_modules/metro-core/node_modules/@jest/types": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-core/node_modules/@types/yargs": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-core/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-core/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro-core/node_modules/ci-info": { - "version": "3.8.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-core/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro-core/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/metro-core/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-core/node_modules/jest-haste-map": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-core/node_modules/jest-regex-util": { - "version": "27.5.1", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-core/node_modules/jest-serializer": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-core/node_modules/jest-util": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-core/node_modules/jest-worker": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/metro-core/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro-core/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/node_modules/@jest/types": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-file-map/node_modules/@types/yargs": { - "version": "17.0.32", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-file-map/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-file-map/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro-file-map/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map/node_modules/ci-info": { - "version": "3.9.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro-file-map/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-file-map/node_modules/jest-util": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-worker": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/metro-file-map/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro-hermes-compiler": { - "version": "0.70.4", - "license": "MIT" - }, - "node_modules/metro-inspector-proxy": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro-inspector-proxy/node_modules/cliui": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/metro-inspector-proxy/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/metro-inspector-proxy/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/metro-inspector-proxy/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/metro-inspector-proxy/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/wrap-ansi": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/metro-inspector-proxy/node_modules/yargs": { - "version": "15.4.1", - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro-inspector-proxy/node_modules/yargs-parser": { - "version": "18.1.3", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/metro-minify-terser": { - "version": "0.80.2", - "dev": true, - "license": "MIT", - "dependencies": { - "terser": "^5.15.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/metro-minify-uglify": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "uglify-es": "^3.1.9" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.6.0", - "metro-babel-transformer": "0.70.4", - "metro-react-native-babel-preset": "0.70.4", - "metro-source-map": "0.70.4", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-resolver": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "absolute-path": "^0.0.0" - } - }, - "node_modules/metro-runtime": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0" - } - }, - "node_modules/metro-source-map": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.70.4", - "nullthrows": "^1.1.1", - "ob1": "0.70.4", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.70.4", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/metro-symbolicate/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/metro-symbolicate/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/metro-symbolicate/node_modules/through2": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.70.4", - "metro-babel-transformer": "0.70.4", - "metro-cache": "0.70.4", - "metro-cache-key": "0.70.4", - "metro-hermes-compiler": "0.70.4", - "metro-source-map": "0.70.4", - "metro-transform-plugins": "0.70.4", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro/node_modules/@jest/types": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro/node_modules/@types/yargs": { - "version": "16.0.5", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/metro/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/metro/node_modules/cliui": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/metro/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/metro/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/metro/node_modules/cosmiconfig": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/metro/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/fs-extra": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/metro/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/import-fresh": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/jest-haste-map": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro/node_modules/jest-regex-util": { - "version": "27.5.1", - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro/node_modules/jest-serializer": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro/node_modules/jest-util": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro/node_modules/jest-util/node_modules/ci-info": { - "version": "3.8.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/jest-worker": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/metro/node_modules/jsonfile": { - "version": "2.4.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/metro/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/metro-config": { - "version": "0.70.4", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.70.4", - "metro-cache": "0.70.4", - "metro-core": "0.70.4", - "metro-runtime": "0.70.4" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/metro/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/metro/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/parse-json": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro/node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/resolve-from": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/metro/node_modules/rimraf": { - "version": "2.7.1", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/wrap-ansi": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/metro/node_modules/yargs": { - "version": "15.4.1", - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/yargs-parser": { - "version": "18.1.3", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "7.4.6", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "4.0.2", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "license": "MIT", - "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.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" - }, - "node_modules/nested-property": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/nocache": { - "version": "3.0.4", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmmirror.com/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-dir/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-dir/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "license": "MIT" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/node-vibrant": { - "version": "3.1.6", - "license": "MIT", - "dependencies": { - "@jimp/custom": "^0.16.1", - "@jimp/plugin-resize": "^0.16.1", - "@jimp/types": "^0.16.1", - "@types/lodash": "^4.14.53", - "@types/node": "^10.11.7", - "lodash": "^4.17.20", - "url": "^0.11.0" - } - }, - "node_modules/node-vibrant/node_modules/@types/node": { - "version": "10.17.60", - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-svg-path": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "svg-arc-to-cubic-bezier": "^3.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/ob1": { - "version": "0.70.4", - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-path": { - "version": "0.11.8", - "license": "MIT", - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/omggif": { - "version": "1.0.10", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "6.4.0", - "license": "MIT", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "7.4.1", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^5.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-svg-path": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/parse5": { - "version": "7.1.2", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-posix": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/peek-readable": { - "version": "4.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/phin": { - "version": "2.9.3", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pixelmatch": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "pngjs": "^3.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qr.js": { - "version": "0.0.0", - "license": "MIT" - }, - "node_modules/qrcode-generator": { - "version": "1.4.4", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.12.3", - "resolved": "https://registry.npmmirror.com/qs/-/qs-6.12.3.tgz", - "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmmirror.com/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/queue": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.0.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "4.24.0", - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-freeze": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=17.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-native": { - "version": "0.69.12", - "license": "MIT", - "dependencies": { - "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "^8.0.7", - "@react-native-community/cli-platform-android": "^8.0.5", - "@react-native-community/cli-platform-ios": "^8.0.6", - "@react-native/assets": "1.0.0", - "@react-native/normalize-color": "2.0.0", - "@react-native/polyfills": "2.0.0", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "event-target-shim": "^5.0.1", - "hermes-engine": "~0.11.0", - "invariant": "^2.2.4", - "jsc-android": "^250230.2.1", - "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.70.4", - "metro-runtime": "0.70.4", - "metro-source-map": "0.70.4", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.2.0", - "react-devtools-core": "4.24.0", - "react-native-codegen": "^0.69.2", - "react-native-gradle-plugin": "^0.0.7", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "^0.21.0", - "stacktrace-parser": "^0.1.3", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.1.4" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "18.0.0" - } - }, - "node_modules/react-native-background-timer": { - "version": "2.4.1", - "license": "MIT", - "peerDependencies": { - "react-native": ">=0.47.0" - } - }, - "node_modules/react-native-bootsplash": { - "version": "4.7.5", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "picocolors": "^1.0.0", - "sharp": "^0.32.1" - }, - "peerDependencies": { - "react-native": ">=0.65.0" - } - }, - "node_modules/react-native-bootsplash/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native-bootsplash/node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", - "hasInstallScript": 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" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/react-native-circular-progress-indicator": { - "version": "4.4.2", - "license": "MIT", - "dependencies": { - "react-native-redash": "*" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-native": ">=0.59.0", - "react-native-reanimated": ">=2.2.0", - "react-native-svg": ">=12.1.1" - } - }, - "node_modules/react-native-codegen": { - "version": "0.69.2", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.14.0", - "flow-parser": "^0.121.0", - "jscodeshift": "^0.13.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/react-native-device-info": { - "version": "10.9.0", - "license": "MIT", - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/react-native-document-picker": { - "version": "8.2.1", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-windows": "*" - }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } - } - }, - "node_modules/react-native-fast-image": { - "version": "8.6.3", - "license": "(MIT AND Apache-2.0)", - "peerDependencies": { - "react": "^17 || ^18", - "react-native": ">=0.60.0" - } - }, - "node_modules/react-native-file-access": { - "version": "2.6.0", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-fs": { - "version": "2.20.0", - "license": "MIT", - "dependencies": { - "base-64": "^0.1.0", - "utf8": "^3.0.0" - }, - "peerDependencies": { - "react-native": "*", - "react-native-windows": "*" - }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } - } - }, - "node_modules/react-native-fs/node_modules/base-64": { - "version": "0.1.0" - }, - "node_modules/react-native-gesture-handler": { - "version": "2.17.1", - "resolved": "https://registry.npmmirror.com/react-native-gesture-handler/-/react-native-gesture-handler-2.17.1.tgz", - "integrity": "sha512-pWfniN6NuVKUq40KACuD3NCMe+bWNQCpD3cmxL6aLSCTwPKYmf7l4Lp0/E/almpjvxhybJZtFLU0w4tmxnIKaA==", - "dependencies": { - "@egjs/hammerjs": "^2.0.17", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.2.4", - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-get-random-values": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "fast-base64-decode": "^1.0.0" - }, - "peerDependencies": { - "react-native": ">=0.56" - } - }, - "node_modules/react-native-gradle-plugin": { - "version": "0.0.7", - "license": "MIT" - }, - "node_modules/react-native-image-colors": { - "version": "1.5.2", - "license": "MIT", - "dependencies": { - "node-vibrant": "3.1.6" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-image-picker": { - "version": "4.10.3", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-linear-gradient": { - "version": "2.8.3", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-logs": { - "version": "5.0.1", - "license": "MIT" - }, - "node_modules/react-native-mmkv": { - "version": "2.5.1", - "license": "(MIT AND BSD-3-Clause)", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-pager-view": { - "version": "5.4.25", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-permissions": { - "version": "3.9.0", - "license": "MIT", - "peerDependencies": { - "react": ">=16.13.1", - "react-native": ">=0.63.3", - "react-native-windows": ">=0.62.0" - }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } - } - }, - "node_modules/react-native-reanimated": { - "version": "2.17.0", - "resolved": "https://registry.npmmirror.com/react-native-reanimated/-/react-native-reanimated-2.17.0.tgz", - "integrity": "sha512-bVy+FUEaHXq4i+aPPqzGeor1rG4scgVNBbBz21ohvC7iMpB9IIgvGsmy1FAoodZhZ5sa3EPF67Rcec76F1PXlQ==", - "dependencies": { - "@babel/plugin-transform-object-assign": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", - "invariant": "^2.2.4", - "lodash.isequal": "^4.5.0", - "setimmediate": "^1.0.5", - "string-hash-64": "^1.0.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0", - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-redash": { - "version": "18.1.0", - "license": "MIT", - "dependencies": { - "abs-svg-path": "^0.1.1", - "normalize-svg-path": "^1.0.1", - "parse-svg-path": "^0.1.2" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-gesture-handler": "*", - "react-native-reanimated": ">=2.0.0" - } - }, - "node_modules/react-native-safe-area-context": { - "version": "4.10.8", - "resolved": "https://registry.npmmirror.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.8.tgz", - "integrity": "sha512-Jx1lovhvIdYygg0UsMCBUJN0Wvj9GlA5bbcBLzjZf93uJpNHzaiHC4hR280+sNVK1+/pMHEyEkXVHDZE5JWn0w==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-screens": { - "version": "3.25.0", - "license": "MIT", - "dependencies": { - "react-freeze": "^1.0.0", - "warn-once": "^0.1.0" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-share": { - "version": "9.4.1", - "license": "MIT" - }, - "node_modules/react-native-svg": { - "version": "12.5.1", - "license": "MIT", - "dependencies": { - "css-select": "^5.1.0", - "css-tree": "^1.1.3" - }, - "peerDependencies": { - "react": "*", - "react-native": ">=0.50.0" - } - }, - "node_modules/react-native-svg-transformer": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0", - "@svgr/plugin-svgo": "^8.1.0", - "path-dirname": "^1.0.2" - }, - "peerDependencies": { - "react-native": ">=0.59.0", - "react-native-svg": ">=12.0.0" - } - }, - "node_modules/react-native-tab-view": { - "version": "3.5.2", - "license": "MIT", - "dependencies": { - "use-latest-callback": "^0.1.5" - }, - "peerDependencies": { - "react": "*", - "react-native": "*", - "react-native-pager-view": "*" - } - }, - "node_modules/react-native-track-player": { - "version": "4.0.1", - "license": "Apache-2.0", - "funding": { - "url": "https://github.com/doublesymmetry/react-native-track-player?sponsor=1" - }, - "peerDependencies": { - "react": ">=16.8.6", - "react-native": ">=0.60.0-rc.2", - "react-native-windows": ">=0.63.0" - }, - "peerDependenciesMeta": { - "react-native-windows": { - "optional": true - } - } - }, - "node_modules/react-native-url-polyfill": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "whatwg-url-without-unicode": "8.0.0-3" - }, - "peerDependencies": { - "react-native": "*" - } - }, - "node_modules/react-native-vector-icons": { - "version": "10.0.0", - "license": "MIT", - "dependencies": { - "prop-types": "^15.7.2", - "yargs": "^16.1.1" - }, - "bin": { - "fa-upgrade.sh": "bin/fa-upgrade.sh", - "fa5-upgrade": "bin/fa5-upgrade.sh", - "fa6-upgrade": "bin/fa6-upgrade.sh", - "generate-icon": "bin/generate-icon.js" - } - }, - "node_modules/react-native-vector-icons/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-native-vector-icons/node_modules/cliui": { - "version": "7.0.4", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/react-native-vector-icons/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-native-vector-icons/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/react-native-vector-icons/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/react-native-vector-icons/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native-vector-icons/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native-vector-icons/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/react-native-vector-icons/node_modules/yargs": { - "version": "16.2.0", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native-view-shot": { - "version": "3.7.0", - "license": "MIT", - "dependencies": { - "html2canvas": "^1.4.1" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-webview": { - "version": "13.6.2", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "2.0.0", - "invariant": "2.2.4" - }, - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native-webview/node_modules/escape-string-regexp": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-native/node_modules/regenerator-runtime": { - "version": "0.13.11", - "license": "MIT" - }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-qr-code": { - "version": "2.0.12", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1", - "qr.js": "0.0.0" - }, - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x", - "react-native-svg": "*" - }, - "peerDependenciesMeta": { - "react-native-svg": { - "optional": true - } - } - }, - "node_modules/react-refresh": { - "version": "0.4.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-test-renderer": { - "version": "18.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "react-is": "^18.0.0", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.21.0" - }, - "peerDependencies": { - "react": "^18.0.0" - } - }, - "node_modules/react-test-renderer/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "license": "BSD" - }, - "node_modules/recast": { - "version": "0.20.5", - "license": "MIT", - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recyclerlistview": { - "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/recyclerlistview/-/recyclerlistview-4.2.1.tgz", - "integrity": "sha512-NtVYjofwgUCt1rEsTp6jHQg/47TWjnO92TU2kTVgJ9wsc/ely4HnizHHa+f/dI7qaw4+zcSogElrLjhMltN2/g==", - "dependencies": { - "lodash.debounce": "4.0.8", - "prop-types": "15.8.1", - "ts-object-utils": "0.0.5" - }, - "peerDependencies": { - "react": ">= 15.2.1", - "react-native": ">= 0.30.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/reselect": { - "version": "4.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.4", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-global": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^0.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sane": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "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.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "license": "ISC" - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.21.0", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sharp": { - "version": "0.33.4", - "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.0" - }, - "engines": { - "libvips": ">=8.15.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "license": "MIT" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "license": "MIT" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://registry.npmmirror.com/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/string-argv": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-hash-64": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/strtok3": { - "version": "6.3.0", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^4.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-arc-to-cubic-bezier": { - "version": "3.2.0", - "license": "ISC" - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "css-what": "^6.1.0", - "csso": "5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-tree": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.30", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/table": { - "version": "6.8.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/table/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/table/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/temp": { - "version": "0.8.3", - "engines": [ - "node >=0.8.0" - ], - "license": "MIT", - "dependencies": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.2.8", - "license": "MIT", - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.26.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.11.3", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-segmentation": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "utrie": "^1.0.2" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "5.0.0", - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/timm": { - "version": "1.7.1", - "license": "MIT" - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "license": "MIT" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "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 - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.10.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-object-utils": { - "version": "0.0.5", - "license": "ISC" - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "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.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-es": { - "version": "3.3.9", - "license": "BSD-2-Clause", - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "license": "MIT" - }, - "node_modules/url": { - "version": "0.11.2", - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "node_modules/url-join": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-latest-callback": { - "version": "0.1.6", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/utif": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "pako": "^1.0.5" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/utrie": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "base64-arraybuffer": "^1.0.2" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/warn-once": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webdav": { - "version": "5.3.1", - "resolved": "git+ssh://git@github.com/maotoumao/webdav-client.git#ab77412d14ec0e6ae3f666d5f872373b13137d67", - "license": "MIT", - "dependencies": { - "@buttercup/fetch": "^0.1.1", - "base-64": "^1.0.0", - "byte-length": "^1.0.2", - "fast-xml-parser": "^4.2.4", - "hot-patcher": "^2.0.0", - "layerr": "^2.0.1", - "md5": "^2.3.0", - "minimatch": "^7.4.6", - "nested-property": "^4.0.0", - "path-posix": "^1.0.0", - "url-join": "^5.0.0", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "he": "^1.2.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.18", - "license": "MIT" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url-without-unicode": { - "version": "8.0.0-3", - "license": "MIT", - "dependencies": { - "buffer": "^5.4.3", - "punycode": "^2.1.1", - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { - "version": "5.0.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "license": "MIT", - "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 - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/xml2js": { - "version": "0.4.23", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "15.1.1", - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.3.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "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.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json index e8080db4..1cf8e28f 100644 --- a/package.json +++ b/package.json @@ -1,152 +1,130 @@ -{ - "name": "MusicFree", - "version": "0.3.0", - "license": "GPL", - "private": true, - "author": { - "name": "猫头猫", - "email": "lhx_xjtu@163.com" - }, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios", - "start": "react-native start", - "clean": "cd ./android && ./gradlew clean", - "test": "jest", - "commit-lint": "commitlint --edit", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx src --fix", - "lint-staged": "lint-staged", - "connect-mumu": "adb kill-server & adb connect localhost:7555", - "build-android": "cd .\\android\\ && .\\gradlew assembleRelease", - "prepare": "husky install" - }, - "dependencies": { - "@react-native-async-storage/async-storage": "^1.17.7", - "@react-native-clipboard/clipboard": "^1.11.2", - "@react-native-community/netinfo": "^9.4.1", - "@react-native-community/slider": "^4.2.4", - "@react-native-cookies/cookies": "^6.2.1", - "@react-native-masked-view/masked-view": "^0.2.9", - "@react-navigation/drawer": "^6.7.2", - "@react-navigation/native": "^6.1.18", - "@react-navigation/native-stack": "^6.10.1", - "@sayem314/react-native-keep-awake": "^1.2.2", - "@shopify/flash-list": "^1.7.0", - "axios": "^0.27.2", - "big-integer": "^1.6.51", - "cheerio": "^1.0.0-rc.12", - "color": "^4.2.3", - "compare-versions": "^6.1.0", - "crypto-js": "^4.1.1", - "dayjs": "^1.11.12", - "deepmerge": "^4.3.1", - "he": "^1.2.0", - "immer": "^9.0.15", - "jotai": "^2.7.0", - "lodash.shuffle": "^4.2.0", - "lru-cache": "^7.14.0", - "nanoid": "^4.0.2", - "object-path": "^0.11.8", - "p-queue": "^7.4.1", - "path-browserify": "^1.0.1", - "qrcode-generator": "^1.4.4", - "qs": "^6.12.3", - "react": "18.0.0", - "react-native": "0.69.12", - "react-native-background-timer": "^2.4.1", - "react-native-bootsplash": "^4.3.2", - "react-native-circular-progress-indicator": "^4.4.2", - "react-native-device-info": "^10.9.0", - "react-native-document-picker": "^8.1.1", - "react-native-fast-image": "^8.6.3", - "react-native-file-access": "^2.5.0", - "react-native-fs": "^2.20.0", - "react-native-gesture-handler": "^2.17.1", - "react-native-get-random-values": "^1.9.0", - "react-native-image-colors": "^1.5.1", - "react-native-image-picker": "^4.10.0", - "react-native-linear-gradient": "^2.8.3", - "react-native-logs": "^5.0.1", - "react-native-mmkv": "^2.5.1", - "react-native-pager-view": "^5.4.25", - "react-native-permissions": "^3.9.0", - "react-native-reanimated": "^2.17.0", - "react-native-safe-area-context": "^4.10.8", - "react-native-screens": "^3.15.0", - "react-native-share": "^9.4.1", - "react-native-svg": "^12.4.0", - "react-native-tab-view": "^3.5.2", - "react-native-track-player": "^4.0.1", - "react-native-url-polyfill": "^2.0.0", - "react-native-vector-icons": "^10.0.0", - "react-native-view-shot": "^3.4.0", - "react-native-webview": "^13.6.2", - "react-qr-code": "^2.0.7", - "recyclerlistview": "^4.2.1", - "webdav": "github:maotoumao/webdav-client#release" - }, - "devDependencies": { - "@babel/core": "^7.12.9", - "@babel/runtime": "^7.12.5", - "@commitlint/cli": "^17.0.3", - "@commitlint/config-conventional": "^17.0.3", - "@react-native-community/eslint-config": "^2.0.0", - "@tsconfig/react-native": "^2.0.0", - "@types/color": "^3.0.3", - "@types/crypto-js": "^4.1.1", - "@types/he": "^1.1.2", - "@types/jest": "^26.0.23", - "@types/lodash.shuffle": "^4.2.7", - "@types/node": "^18.0.4", - "@types/object-path": "^0.11.1", - "@types/path-browserify": "^1.0.0", - "@types/qs": "^6.9.7", - "@types/react": "^18", - "@types/react-native": "^0.69.1", - "@types/react-native-background-timer": "^2.0.0", - "@types/react-native-vector-icons": "^6.4.11", - "@types/react-test-renderer": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^5.29.0", - "@typescript-eslint/parser": "^5.29.0", - "babel-jest": "^26.6.3", - "babel-plugin-module-resolver": "^4.1.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.2.1", - "husky": "^8.0.1", - "jest": "^26.6.3", - "lint-staged": "^13.0.3", - "metro-config": "^0.80.2", - "metro-react-native-babel-preset": "^0.70.3", - "prettier": "^2.7.1", - "react-native-svg-transformer": "^1.3.0", - "react-test-renderer": "18.0.0", - "sharp": "^0.33.4", - "typescript": "^4.4.4" - }, - "resolutions": { - "@types/react": "^18" - }, - "jest": { - "preset": "react-native", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "jsx", - "json", - "node" - ] - }, - "lint-staged": { - "src/**/*.{ts,tsx}": [ - "npm run lint", - "git add ." - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/maotoumao/MusicFree.git" - } -} +{ + "name": "MusicFree", + "version": "0.3.1", + "private": true, + "license": "GPL", + "author": { + "name": "猫头猫", + "email": "lhx_xjtu@163.com" + }, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx src --fix", + "start": "react-native start --experimental-debugger", + "clean": "cd ./android && ./gradlew clean", + "test": "jest", + "commit-lint": "commitlint --edit", + "lint-staged": "lint-staged", + "connect-mumu": "adb kill-server & adb connect localhost:7555", + "build-android": "cd .\\android\\ && .\\gradlew assembleRelease", + "generate-assets": "node ./generator/generate-assets.mjs", + "prepare": "husky" + }, + "dependencies": { + "@react-native-async-storage/async-storage": "^1.24.0", + "@react-native-clipboard/clipboard": "^1.14.1", + "@react-native-community/netinfo": "^11.3.2", + "@react-native-community/slider": "^4.5.2", + "@react-native-cookies/cookies": "^6.2.1", + "@react-native-masked-view/masked-view": "^0.3.1", + "@react-navigation/drawer": "^6.7.2", + "@react-navigation/native": "^6.1.18", + "@react-navigation/native-stack": "^6.11.0", + "@sayem314/react-native-keep-awake": "^1.2.4", + "@shopify/flash-list": "^1.7.0", + "axios": "^1.7.3", + "big-integer": "^1.6.52", + "cheerio": "^1.0.0-rc.12", + "color": "^4.2.3", + "compare-versions": "^6.1.1", + "crypto-js": "^4.2.0", + "dayjs": "^1.11.12", + "deepmerge": "^4.3.1", + "expo": "^51.0.0", + "expo-splash-screen": "~0.27.5", + "he": "^1.2.0", + "immer": "^10.1.1", + "jotai": "^2.9.1", + "lodash.shuffle": "^4.2.0", + "lru-cache": "^11.0.0", + "nanoid": "^5.0.7", + "object-path": "^0.11.8", + "p-queue": "^8.0.1", + "path-browserify": "^1.0.1", + "qs": "^6.13.0", + "react": "18.2.0", + "react-native": "0.74.4", + "react-native-background-timer": "^2.4.1", + "react-native-circular-progress-indicator": "^4.4.2", + "react-native-device-info": "^11.1.0", + "react-native-document-picker": "^9.3.0", + "react-native-fast-image": "^8.6.3", + "react-native-file-access": "^3.1.0", + "react-native-fs": "^2.20.0", + "react-native-gesture-handler": "^2.18.1", + "react-native-get-random-values": "^1.11.0", + "react-native-image-colors": "^2.4.0", + "react-native-image-picker": "^7.1.2", + "react-native-linear-gradient": "^2.8.3", + "react-native-logs": "^5.1.0", + "react-native-mmkv": "^2.12.2", + "react-native-pager-view": "^6.3.3", + "react-native-permissions": "^4.1.5", + "react-native-reanimated": "^3.14.0", + "react-native-safe-area-context": "^4.10.8", + "react-native-screens": "^3.33.0", + "react-native-share": "^10.2.1", + "react-native-svg": "^15.4.0", + "react-native-tab-view": "^3.5.2", + "react-native-track-player": "^4.1.1", + "react-native-url-polyfill": "^2.0.0", + "recyclerlistview": "^4.2.1", + "webdav": "^5.7.0" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@babel/preset-env": "^7.20.0", + "@babel/runtime": "^7.20.0", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", + "@react-native/babel-preset": "0.74.86", + "@react-native/eslint-config": "0.74.86", + "@react-native/metro-config": "0.74.86", + "@react-native/typescript-config": "0.74.86", + "@types/color": "^3.0.6", + "@types/crypto-js": "^4.2.2", + "@types/he": "^1.2.3", + "@types/lodash.shuffle": "^4.2.9", + "@types/object-path": "^0.11.4", + "@types/path-browserify": "^1.0.2", + "@types/qs": "^6.9.15", + "@types/react": "^18.2.6", + "@types/react-native-background-timer": "^2.0.2", + "@types/react-test-renderer": "^18.0.0", + "babel-jest": "^29.6.3", + "babel-plugin-module-resolver": "^5.0.2", + "babel-plugin-transform-remove-console": "^6.9.4", + "eslint": "^8.19.0", + "husky": "^9.1.4", + "jest": "^29.6.3", + "lint-staged": "^15.2.7", + "prettier": "2.8.8", + "react-native-svg-transformer": "^1.5.0", + "react-test-renderer": "18.2.0", + "typescript": "5.0.4" + }, + "engines": { + "node": ">=18" + }, + "lint-staged": { + "src/**/*.{ts,tsx}": [ + "npm run lint", + "git add ." + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/maotoumao/MusicFree.git" + } +} diff --git a/readme.md b/readme.md index 72f552ac..7c97df5d 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ > [!CAUTION] > 👎 小米/华为/vivo等应用市场的 MusicFree 和本软件无关,**是套用本软件名称和 Logo 的广告软件**。 -> +> > 👎 速悦音乐基于本软件二次开发,改动点仅仅是内置插件、修改一些 UI 以及引流,**并未遵守本项目的开源协议,且拒绝沟通**。 --- @@ -20,7 +20,7 @@ 软件下载方式、插件使用说明、插件开发文档可去站点 [https://musicfree.upup.fun](https://musicfree.upup.fun) 查看。 > [!NOTE] -> - 如果你在其他的平台看到收费版/无广告版/破解版,都是假的,本来就是开源项目,**遇到收费版请直接举报**; +> - 如果你在其他的平台看到收费版/无广告版/破解版,都是假的,本来就是开源项目,**遇到收费版请直接举报**; > - 软件首先是自用,顺带分享出来希望可以帮助到有需要的人;是业余作品,会尽量保持维护,不过每天能写的时间有限(半小时左右),目测会有很长一段时间处于不稳定测试版本,且更新频率不定,请谨慎使用; > - 软件的第三方插件、及其所产生的数据与本软件无关,请合理合法使用,可能产生的版权数据请及时删除。 > - **请不要以 VIP/破解版为噱头进行宣传**,示例仓库基于互联网公开接口封装,并**过滤掉所有 VIP、试听、付费歌曲**,且示例仓库以后也**不会提供具备破解功能的插件**; @@ -118,27 +118,27 @@ #### 侧边栏 - 基础设置 -![基础设置](./.imgs/basic-setting.jpg) + ![基础设置](./.imgs/basic-setting.jpg) - 主题设置 -![主题设置](./.imgs/theme-setting.jpg) + ![主题设置](./.imgs/theme-setting.jpg) #### 音乐相关 - 歌单页 -![歌单页](./.imgs/song-sheet.jpg) + ![歌单页](./.imgs/song-sheet.jpg) - 歌单内检索 -![歌单内检索](./.imgs/search-in-sheet.jpg) + ![歌单内检索](./.imgs/search-in-sheet.jpg) - 播放页 -![播放页](./.imgs/song-cover.jpg) + ![播放页](./.imgs/song-cover.jpg) - 歌词页 -![歌词页](./.imgs/song-lrc.jpg) + ![歌词页](./.imgs/song-lrc.jpg) #### 搜索相关 - 作者信息 -![专辑信息](./.imgs/artist-detail.jpg) + ![专辑信息](./.imgs/artist-detail.jpg) diff --git a/src/assets/icons/alarm-outline.svg b/src/assets/icons/alarm-outline.svg new file mode 100644 index 00000000..b4c3b84a --- /dev/null +++ b/src/assets/icons/alarm-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/album-outline.svg b/src/assets/icons/album-outline.svg new file mode 100644 index 00000000..b6e9a349 --- /dev/null +++ b/src/assets/icons/album-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/archive-box-x-mark.svg b/src/assets/icons/archive-box-x-mark.svg new file mode 100644 index 00000000..6df0110e --- /dev/null +++ b/src/assets/icons/archive-box-x-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-down-tray.svg b/src/assets/icons/arrow-down-tray.svg new file mode 100644 index 00000000..7f75c8a0 --- /dev/null +++ b/src/assets/icons/arrow-down-tray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-left.svg b/src/assets/icons/arrow-left.svg new file mode 100644 index 00000000..a8ef7506 --- /dev/null +++ b/src/assets/icons/arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-long-left.svg b/src/assets/icons/arrow-long-left.svg new file mode 100644 index 00000000..3b105f95 --- /dev/null +++ b/src/assets/icons/arrow-long-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-path.svg b/src/assets/icons/arrow-path.svg new file mode 100644 index 00000000..dbeb39e0 --- /dev/null +++ b/src/assets/icons/arrow-path.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-right-end-on-rectangle.svg b/src/assets/icons/arrow-right-end-on-rectangle.svg new file mode 100644 index 00000000..39434c7b --- /dev/null +++ b/src/assets/icons/arrow-right-end-on-rectangle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrow-uturn-left.svg b/src/assets/icons/arrow-uturn-left.svg new file mode 100644 index 00000000..1558debd --- /dev/null +++ b/src/assets/icons/arrow-uturn-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/arrows-left-right.svg b/src/assets/icons/arrows-left-right.svg new file mode 100644 index 00000000..adbf5005 --- /dev/null +++ b/src/assets/icons/arrows-left-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/bars-3.svg b/src/assets/icons/bars-3.svg new file mode 100644 index 00000000..49f1467a --- /dev/null +++ b/src/assets/icons/bars-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/bookmark-square.svg b/src/assets/icons/bookmark-square.svg new file mode 100644 index 00000000..d4cf1f7f --- /dev/null +++ b/src/assets/icons/bookmark-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/check-circle-outline.svg b/src/assets/icons/check-circle-outline.svg new file mode 100644 index 00000000..102bf9e5 --- /dev/null +++ b/src/assets/icons/check-circle-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/check-circle.svg b/src/assets/icons/check-circle.svg new file mode 100644 index 00000000..53d12e3c --- /dev/null +++ b/src/assets/icons/check-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/check.svg b/src/assets/icons/check.svg new file mode 100644 index 00000000..e12382e6 --- /dev/null +++ b/src/assets/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/circle-stack.svg b/src/assets/icons/circle-stack.svg new file mode 100644 index 00000000..4b8555ae --- /dev/null +++ b/src/assets/icons/circle-stack.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/clock-outline.svg b/src/assets/icons/clock-outline.svg new file mode 100644 index 00000000..7b88d32b --- /dev/null +++ b/src/assets/icons/clock-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/code-bracket-square.svg b/src/assets/icons/code-bracket-square.svg new file mode 100644 index 00000000..e6220b19 --- /dev/null +++ b/src/assets/icons/code-bracket-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/cog-8-tooth.svg b/src/assets/icons/cog-8-tooth.svg new file mode 100644 index 00000000..b49bb43c --- /dev/null +++ b/src/assets/icons/cog-8-tooth.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/document-outline.svg b/src/assets/icons/document-outline.svg new file mode 100644 index 00000000..133f13a5 --- /dev/null +++ b/src/assets/icons/document-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/ellipsis-vertical.svg b/src/assets/icons/ellipsis-vertical.svg new file mode 100644 index 00000000..51f0d3b6 --- /dev/null +++ b/src/assets/icons/ellipsis-vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/exclamation-circle.svg b/src/assets/icons/exclamation-circle.svg new file mode 100644 index 00000000..a17a6d51 --- /dev/null +++ b/src/assets/icons/exclamation-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/fire-outline.svg b/src/assets/icons/fire-outline.svg new file mode 100644 index 00000000..c71d7400 --- /dev/null +++ b/src/assets/icons/fire-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/fire.svg b/src/assets/icons/fire.svg new file mode 100644 index 00000000..c71d7400 --- /dev/null +++ b/src/assets/icons/fire.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/folder-music-outline.svg b/src/assets/icons/folder-music-outline.svg new file mode 100644 index 00000000..5d135e74 --- /dev/null +++ b/src/assets/icons/folder-music-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/folder-outline.svg b/src/assets/icons/folder-outline.svg new file mode 100644 index 00000000..91d5d6f3 --- /dev/null +++ b/src/assets/icons/folder-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/folder-plus.svg b/src/assets/icons/folder-plus.svg new file mode 100644 index 00000000..c6067e2b --- /dev/null +++ b/src/assets/icons/folder-plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/font-size.svg b/src/assets/icons/font-size.svg new file mode 100644 index 00000000..d12277ea --- /dev/null +++ b/src/assets/icons/font-size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/heart-outline.svg b/src/assets/icons/heart-outline.svg new file mode 100644 index 00000000..43f47b82 --- /dev/null +++ b/src/assets/icons/heart-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/heart.svg b/src/assets/icons/heart.svg new file mode 100644 index 00000000..21e01929 --- /dev/null +++ b/src/assets/icons/heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/home-outline.svg b/src/assets/icons/home-outline.svg new file mode 100644 index 00000000..bb183b60 --- /dev/null +++ b/src/assets/icons/home-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/identification.svg b/src/assets/icons/identification.svg new file mode 100644 index 00000000..6b5e6b77 --- /dev/null +++ b/src/assets/icons/identification.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/inbox-arrow-down.svg b/src/assets/icons/inbox-arrow-down.svg new file mode 100644 index 00000000..19a91a4c --- /dev/null +++ b/src/assets/icons/inbox-arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/information-circle.svg b/src/assets/icons/information-circle.svg new file mode 100644 index 00000000..e57f5f39 --- /dev/null +++ b/src/assets/icons/information-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/javascript.svg b/src/assets/icons/javascript.svg new file mode 100644 index 00000000..7404b4be --- /dev/null +++ b/src/assets/icons/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/link-slash.svg b/src/assets/icons/link-slash.svg new file mode 100644 index 00000000..018163a5 --- /dev/null +++ b/src/assets/icons/link-slash.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/link.svg b/src/assets/icons/link.svg new file mode 100644 index 00000000..28d33f1a --- /dev/null +++ b/src/assets/icons/link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/lyric.svg b/src/assets/icons/lyric.svg index 2f5318b5..aed58702 100644 --- a/src/assets/icons/lyric.svg +++ b/src/assets/icons/lyric.svg @@ -1,3 +1,3 @@ - - - + + + diff --git a/src/assets/icons/magnifying-glass.svg b/src/assets/icons/magnifying-glass.svg new file mode 100644 index 00000000..b7bb7645 --- /dev/null +++ b/src/assets/icons/magnifying-glass.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/minus.svg b/src/assets/icons/minus.svg new file mode 100644 index 00000000..ed409ccc --- /dev/null +++ b/src/assets/icons/minus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/motion-play.svg b/src/assets/icons/motion-play.svg new file mode 100644 index 00000000..3734f050 --- /dev/null +++ b/src/assets/icons/motion-play.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/icons/musical-note.svg b/src/assets/icons/musical-note.svg new file mode 100644 index 00000000..f83e9c9a --- /dev/null +++ b/src/assets/icons/musical-note.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/pause-circle-outline.svg b/src/assets/icons/pause-circle-outline.svg new file mode 100644 index 00000000..2956eb56 --- /dev/null +++ b/src/assets/icons/pause-circle-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/pause.svg b/src/assets/icons/pause.svg new file mode 100644 index 00000000..8cd1f5c8 --- /dev/null +++ b/src/assets/icons/pause.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/pencil-outline.svg b/src/assets/icons/pencil-outline.svg new file mode 100644 index 00000000..be50240d --- /dev/null +++ b/src/assets/icons/pencil-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/pencil-square.svg b/src/assets/icons/pencil-square.svg new file mode 100644 index 00000000..d34da416 --- /dev/null +++ b/src/assets/icons/pencil-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/play-circle-outline.svg b/src/assets/icons/play-circle-outline.svg new file mode 100644 index 00000000..9858bf44 --- /dev/null +++ b/src/assets/icons/play-circle-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/play-circle.svg b/src/assets/icons/play-circle.svg new file mode 100644 index 00000000..d55a08e4 --- /dev/null +++ b/src/assets/icons/play-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/play.svg b/src/assets/icons/play.svg new file mode 100644 index 00000000..4dafab6d --- /dev/null +++ b/src/assets/icons/play.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/playlist.svg b/src/assets/icons/playlist.svg new file mode 100644 index 00000000..32d069e3 --- /dev/null +++ b/src/assets/icons/playlist.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/plus.svg b/src/assets/icons/plus.svg new file mode 100644 index 00000000..9cc7ee43 --- /dev/null +++ b/src/assets/icons/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/power-outline.svg b/src/assets/icons/power-outline.svg new file mode 100644 index 00000000..b6cd4f77 --- /dev/null +++ b/src/assets/icons/power-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/repeat-song-1.svg b/src/assets/icons/repeat-song-1.svg new file mode 100644 index 00000000..e5128c4f --- /dev/null +++ b/src/assets/icons/repeat-song-1.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/icons/repeat-song.svg b/src/assets/icons/repeat-song.svg new file mode 100644 index 00000000..1c21f373 --- /dev/null +++ b/src/assets/icons/repeat-song.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/share.svg b/src/assets/icons/share.svg new file mode 100644 index 00000000..50842d0f --- /dev/null +++ b/src/assets/icons/share.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/shield-keyhole-outline.svg b/src/assets/icons/shield-keyhole-outline.svg new file mode 100644 index 00000000..c89b8684 --- /dev/null +++ b/src/assets/icons/shield-keyhole-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuffle.svg b/src/assets/icons/shuffle.svg new file mode 100644 index 00000000..a1a4c204 --- /dev/null +++ b/src/assets/icons/shuffle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/skip-left.svg b/src/assets/icons/skip-left.svg new file mode 100644 index 00000000..8e7be99a --- /dev/null +++ b/src/assets/icons/skip-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/skip-right.svg b/src/assets/icons/skip-right.svg new file mode 100644 index 00000000..1f647e67 --- /dev/null +++ b/src/assets/icons/skip-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/sort-outline.svg b/src/assets/icons/sort-outline.svg new file mode 100644 index 00000000..a6f4cca8 --- /dev/null +++ b/src/assets/icons/sort-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/t-shirt-outline.svg b/src/assets/icons/t-shirt-outline.svg new file mode 100644 index 00000000..4e829784 --- /dev/null +++ b/src/assets/icons/t-shirt-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/translation.svg b/src/assets/icons/translation.svg index 662004bb..a71f5052 100644 --- a/src/assets/icons/translation.svg +++ b/src/assets/icons/translation.svg @@ -1,4 +1,4 @@ - - - - + + + + diff --git a/src/assets/icons/trash-outline.svg b/src/assets/icons/trash-outline.svg new file mode 100644 index 00000000..d459e66c --- /dev/null +++ b/src/assets/icons/trash-outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/trophy.svg b/src/assets/icons/trophy.svg new file mode 100644 index 00000000..286dc8f0 --- /dev/null +++ b/src/assets/icons/trophy.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/user.svg b/src/assets/icons/user.svg new file mode 100644 index 00000000..c65608ad --- /dev/null +++ b/src/assets/icons/user.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/x-mark.svg b/src/assets/icons/x-mark.svg new file mode 100644 index 00000000..7af25f61 --- /dev/null +++ b/src/assets/icons/x-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/imgs/logo1.png b/src/assets/imgs/logo1.png deleted file mode 100644 index 213604a8..00000000 Binary files a/src/assets/imgs/logo1.png and /dev/null differ diff --git a/src/components/base/SortableFlatList.tsx b/src/components/base/SortableFlatList.tsx index b6001d26..b411d590 100644 --- a/src/components/base/SortableFlatList.tsx +++ b/src/components/base/SortableFlatList.tsx @@ -1,465 +1,465 @@ -/** - * 支持长按拖拽排序的flatlist,右边加个固定的按钮,拖拽排序。 - * 考虑到方便实现+节省性能,整个app内的拖拽排序都遵守以下实现。 - * 点击会出现 - */ - -import globalStyle from '@/constants/globalStyle'; -import {iconSizeConst} from '@/constants/uiConst'; -import useTextColor from '@/hooks/useTextColor'; -import rpx from '@/utils/rpx'; -import {FlashList} from '@shopify/flash-list'; -import React, { - ForwardedRef, - forwardRef, - memo, - useEffect, - useMemo, - useRef, - useState, -} from 'react'; -import {LayoutRectangle, Pressable, StyleSheet, View} from 'react-native'; -import { - runOnJS, - useDerivedValue, - useSharedValue, -} from 'react-native-reanimated'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -const defaultZIndex = 10; - -interface ISortableFlatListProps { - data: T[]; - renderItem: (props: {item: T; index: number}) => JSX.Element; - // 高度 - itemHeight: number; - itemJustifyContent?: - | 'flex-start' - | 'flex-end' - | 'center' - | 'space-between' - | 'space-around' - | 'space-evenly'; - // 滚动list距离顶部的距离, 这里写的不好 - marginTop: number; - /** 拖拽时的背景色 */ - activeBackgroundColor?: string; - /** 交换结束 */ - onSortEnd?: (newData: T[]) => void; -} - -export default function SortableFlatList( - props: ISortableFlatListProps, -) { - const { - data, - renderItem, - itemHeight, - itemJustifyContent, - marginTop, - activeBackgroundColor, - onSortEnd, - } = props; - - // 不要干扰原始数据 - const [_data, _setData] = useState([...(data ?? [])]); - // 是否禁止滚动 - const [scrollEnabled, setScrollEnabled] = useState(true); - // 是否处在激活状态, -1表示无,其他表示当前激活的下标 - const activeRef = useRef(-1); - const [activeItem, setActiveItem] = useState(null); - - const layoutRef = useRef(); - // listref - const listRef = useRef | null>(null); - // fakeref - const fakeItemRef = useRef(null); - // contentoffset - const contentOffsetYRef = useRef(-1); - const targetOffsetYRef = useRef(0); - - const direction = useSharedValue(0); - - useEffect(() => { - _setData([...(data ?? [])]); - }, [data]); - - const initDragPageY = useRef(0); - const initDragLocationY = useRef(0); - const offsetRef = useRef(0); - - //#region 滚动 - const scrollingRef = useRef(false); - - // 列表整体的高度 - const listContentHeight = useMemo( - () => itemHeight * data.length, - [data, itemHeight], - ); - - function scrollToTarget(forceScroll = false) { - // 未选中 - if (activeRef.current === -1) { - scrollingRef.current = false; - return; - } - - // 滚动中就不滚了 / - if (scrollingRef.current && !forceScroll) { - scrollingRef.current = true; - return; - } - // 方向是0 - if (direction.value === 0) { - scrollingRef.current = false; - return; - } - - const nextTarget = - Math.sign(direction.value) * - Math.max(Math.abs(direction.value), 0.3) * - 300 + - contentOffsetYRef.current; - // 当前到极限了 - if ( - (contentOffsetYRef.current <= 2 && - nextTarget < contentOffsetYRef.current) || - (contentOffsetYRef.current >= - listContentHeight - (layoutRef.current?.height ?? 0) - 2 && - nextTarget > contentOffsetYRef.current) - ) { - scrollingRef.current = false; - return; - } - scrollingRef.current = true; - // 超出区域 - targetOffsetYRef.current = Math.min( - Math.max(0, nextTarget), - listContentHeight - (layoutRef.current?.height ?? 0), - ); - listRef.current?.scrollToOffset({ - animated: true, - offset: targetOffsetYRef.current, - }); - } - - useDerivedValue(() => { - // 正在滚动 - if (scrollingRef.current) { - return; - } else if (direction.value !== 0) { - // 开始滚动 - runOnJS(scrollToTarget)(); - } - }, []); - - //#endregion - - return ( - - {/* 纯展示 */} - (fakeItemRef.current = _)} - backgroundColor={activeBackgroundColor} - renderItem={renderItem} - itemHeight={itemHeight} - item={activeItem} - itemJustifyContent={itemJustifyContent} - /> - { - listRef.current = _; - }} - onLayout={evt => { - layoutRef.current = evt.nativeEvent.layout; - }} - data={_data} - estimatedItemSize={itemHeight} - scrollEventThrottle={16} - onTouchStart={e => { - if (activeRef.current !== -1) { - // 相对于整个页面顶部的距离 - initDragPageY.current = e.nativeEvent.pageY; - initDragLocationY.current = e.nativeEvent.locationY; - } - }} - onTouchMove={e => { - if (activeRef.current !== -1) { - offsetRef.current = - e.nativeEvent.pageY - - (marginTop ?? layoutRef.current?.y ?? 0) - - itemHeight / 2; - - if (offsetRef.current < 0) { - offsetRef.current = 0; - } else if ( - offsetRef.current > - (layoutRef.current?.height ?? 0) - itemHeight - ) { - offsetRef.current = - (layoutRef.current?.height ?? 0) - itemHeight; - } - fakeItemRef.current!.setNativeProps({ - top: offsetRef.current, - opacity: 1, - zIndex: 100, - }); - - // 如果超出范围,停止 - if (offsetRef.current < itemHeight * 2) { - // 上滑 - direction.value = - offsetRef.current / itemHeight / 2 - 1; - } else if ( - offsetRef.current > - (layoutRef.current?.height ?? 0) - 3 * itemHeight - ) { - // 下滑 - direction.value = - (offsetRef.current - - (layoutRef.current?.height ?? 0) + - 3 * itemHeight) / - itemHeight / - 2; - } else { - // 不滑动 - direction.value = 0; - } - } - }} - onTouchEnd={e => { - if (activeRef.current !== -1) { - // 计算最终的位置,触发onSortEnd - let index = activeRef.current; - if (contentOffsetYRef.current !== -1) { - index = Math.round( - (contentOffsetYRef.current + - offsetRef.current) / - itemHeight, - ); - } else { - // 拖动的距离 - index = - activeRef.current + - Math.round( - (e.nativeEvent.pageY - - initDragPageY.current + - initDragLocationY.current) / - itemHeight, - ); - } - index = Math.min(data.length, Math.max(index, 0)); - // from: activeRef.current to: index - if (activeRef.current !== index) { - let nData = _data - .slice(0, activeRef.current) - .concat(_data.slice(activeRef.current + 1)); - nData.splice(index, 0, activeItem as T); - onSortEnd?.(nData); - // 测试用,正式时移除掉 - // _setData(nData); - } - } - scrollingRef.current = false; - activeRef.current = -1; - setScrollEnabled(true); - setActiveItem(null); - fakeItemRef.current!.setNativeProps({ - top: 0, - opacity: 0, - zIndex: -1, - }); - }} - onTouchCancel={() => { - // todo: 滑动很快的时候会触发取消,native的flatlist就这样 - activeRef.current = -1; - scrollingRef.current = false; - setScrollEnabled(true); - setActiveItem(null); - fakeItemRef.current!.setNativeProps({ - top: 0, - opacity: 0, - zIndex: -1, - }); - contentOffsetYRef.current = -1; - }} - onScroll={e => { - contentOffsetYRef.current = e.nativeEvent.contentOffset.y; - if ( - activeRef.current !== -1 && - Math.abs( - contentOffsetYRef.current - - targetOffsetYRef.current, - ) < 2 - ) { - scrollToTarget(true); - } - }} - renderItem={({item, index}) => { - return ( - - ); - }} - /> - - ); -} - -interface ISortableFlatListItemProps { - item: T; - index: number; - // 高度 - itemHeight: number; - itemJustifyContent?: - | 'flex-start' - | 'flex-end' - | 'center' - | 'space-between' - | 'space-around' - | 'space-evenly'; - setScrollEnabled: (scrollEnabled: boolean) => void; - renderItem: (props: {item: T; index: number}) => JSX.Element; - setActiveItem: (item: T | null) => void; - activeRef: React.MutableRefObject; -} -function _SortableFlatListItem(props: ISortableFlatListItemProps) { - const { - itemHeight, - setScrollEnabled, - renderItem, - setActiveItem, - itemJustifyContent, - item, - index, - activeRef, - } = props; - - // 省一点性能,height是顺着传下来的,放ref就好了 - const styleRef = useRef( - StyleSheet.create({ - viewWrapper: { - height: itemHeight, - width: '100%', - flexDirection: 'row', - justifyContent: itemJustifyContent ?? 'flex-end', - zIndex: defaultZIndex, - }, - btn: { - height: itemHeight, - justifyContent: 'center', - alignItems: 'center', - position: 'absolute', - top: 0, - right: 0, - width: rpx(100), - textAlignVertical: 'center', - }, - }), - ); - const textColor = useTextColor(); - - return ( - - {renderItem({item, index})} - { - if (activeRef.current !== -1) { - return; - } - /** 使用ref避免其它组件重新渲染; 由于事件冒泡,这里会先触发 */ - activeRef.current = index; - /** 锁定滚动 */ - setScrollEnabled(false); - setActiveItem(item); - }} - style={styleRef.current.btn}> - - - - ); -} - -const SortableFlatListItem = memo( - _SortableFlatListItem, - (prev, curr) => prev.index === curr.index && prev.item === curr.item, -); - -const FakeFlatListItem = forwardRef(function ( - props: Pick< - ISortableFlatListItemProps, - 'itemHeight' | 'renderItem' | 'item' | 'itemJustifyContent' - > & { - backgroundColor?: string; - }, - ref: ForwardedRef, -) { - const {itemHeight, renderItem, item, backgroundColor, itemJustifyContent} = - props; - - const styleRef = useRef( - StyleSheet.create({ - viewWrapper: { - height: itemHeight, - width: '100%', - flexDirection: 'row', - justifyContent: itemJustifyContent ?? 'flex-end', - zIndex: defaultZIndex, - }, - btn: { - height: itemHeight, - paddingHorizontal: rpx(28), - justifyContent: 'center', - alignItems: 'center', - position: 'absolute', - top: 0, - right: 0, - width: rpx(100), - textAlignVertical: 'center', - }, - }), - ); - const textColor = useTextColor(); - - return ( - - {item ? renderItem({item, index: -1}) : null} - - - - - ); -}); - -const style = StyleSheet.create({ - activeItemDefault: { - opacity: 0, - zIndex: -1, - position: 'absolute', - top: 0, - left: 0, - }, -}); +/** + * 支持长按拖拽排序的flatlist,右边加个固定的按钮,拖拽排序。 + * 考虑到方便实现+节省性能,整个app内的拖拽排序都遵守以下实现。 + * 点击会出现 + */ + +import globalStyle from '@/constants/globalStyle'; +import {iconSizeConst} from '@/constants/uiConst'; +import useTextColor from '@/hooks/useTextColor'; +import rpx from '@/utils/rpx'; +import {FlashList} from '@shopify/flash-list'; +import React, { + ForwardedRef, + forwardRef, + memo, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; +import {LayoutRectangle, Pressable, StyleSheet, View} from 'react-native'; +import { + runOnJS, + useDerivedValue, + useSharedValue, +} from 'react-native-reanimated'; +import Icon from '@/components/base/icon.tsx'; + +const defaultZIndex = 10; + +interface ISortableFlatListProps { + data: T[]; + renderItem: (props: {item: T; index: number}) => JSX.Element; + // 高度 + itemHeight: number; + itemJustifyContent?: + | 'flex-start' + | 'flex-end' + | 'center' + | 'space-between' + | 'space-around' + | 'space-evenly'; + // 滚动list距离顶部的距离, 这里写的不好 + marginTop: number; + /** 拖拽时的背景色 */ + activeBackgroundColor?: string; + /** 交换结束 */ + onSortEnd?: (newData: T[]) => void; +} + +export default function SortableFlatList( + props: ISortableFlatListProps, +) { + const { + data, + renderItem, + itemHeight, + itemJustifyContent, + marginTop, + activeBackgroundColor, + onSortEnd, + } = props; + + // 不要干扰原始数据 + const [_data, _setData] = useState([...(data ?? [])]); + // 是否禁止滚动 + const [scrollEnabled, setScrollEnabled] = useState(true); + // 是否处在激活状态, -1表示无,其他表示当前激活的下标 + const activeRef = useRef(-1); + const [activeItem, setActiveItem] = useState(null); + + const layoutRef = useRef(); + // listref + const listRef = useRef | null>(null); + // fakeref + const fakeItemRef = useRef(null); + // contentoffset + const contentOffsetYRef = useRef(-1); + const targetOffsetYRef = useRef(0); + + const direction = useSharedValue(0); + + useEffect(() => { + _setData([...(data ?? [])]); + }, [data]); + + const initDragPageY = useRef(0); + const initDragLocationY = useRef(0); + const offsetRef = useRef(0); + + //#region 滚动 + const scrollingRef = useRef(false); + + // 列表整体的高度 + const listContentHeight = useMemo( + () => itemHeight * data.length, + [data, itemHeight], + ); + + function scrollToTarget(forceScroll = false) { + // 未选中 + if (activeRef.current === -1) { + scrollingRef.current = false; + return; + } + + // 滚动中就不滚了 / + if (scrollingRef.current && !forceScroll) { + scrollingRef.current = true; + return; + } + // 方向是0 + if (direction.value === 0) { + scrollingRef.current = false; + return; + } + + const nextTarget = + Math.sign(direction.value) * + Math.max(Math.abs(direction.value), 0.3) * + 300 + + contentOffsetYRef.current; + // 当前到极限了 + if ( + (contentOffsetYRef.current <= 2 && + nextTarget < contentOffsetYRef.current) || + (contentOffsetYRef.current >= + listContentHeight - (layoutRef.current?.height ?? 0) - 2 && + nextTarget > contentOffsetYRef.current) + ) { + scrollingRef.current = false; + return; + } + scrollingRef.current = true; + // 超出区域 + targetOffsetYRef.current = Math.min( + Math.max(0, nextTarget), + listContentHeight - (layoutRef.current?.height ?? 0), + ); + listRef.current?.scrollToOffset({ + animated: true, + offset: targetOffsetYRef.current, + }); + } + + useDerivedValue(() => { + // 正在滚动 + if (scrollingRef.current) { + return; + } else if (direction.value !== 0) { + // 开始滚动 + runOnJS(scrollToTarget)(); + } + }, []); + + //#endregion + + return ( + + {/* 纯展示 */} + (fakeItemRef.current = _)} + backgroundColor={activeBackgroundColor} + renderItem={renderItem} + itemHeight={itemHeight} + item={activeItem} + itemJustifyContent={itemJustifyContent} + /> + { + listRef.current = _; + }} + onLayout={evt => { + layoutRef.current = evt.nativeEvent.layout; + }} + data={_data} + estimatedItemSize={itemHeight} + scrollEventThrottle={16} + onTouchStart={e => { + if (activeRef.current !== -1) { + // 相对于整个页面顶部的距离 + initDragPageY.current = e.nativeEvent.pageY; + initDragLocationY.current = e.nativeEvent.locationY; + } + }} + onTouchMove={e => { + if (activeRef.current !== -1) { + offsetRef.current = + e.nativeEvent.pageY - + (marginTop ?? layoutRef.current?.y ?? 0) - + itemHeight / 2; + + if (offsetRef.current < 0) { + offsetRef.current = 0; + } else if ( + offsetRef.current > + (layoutRef.current?.height ?? 0) - itemHeight + ) { + offsetRef.current = + (layoutRef.current?.height ?? 0) - itemHeight; + } + fakeItemRef.current!.setNativeProps({ + top: offsetRef.current, + opacity: 1, + zIndex: 100, + }); + + // 如果超出范围,停止 + if (offsetRef.current < itemHeight * 2) { + // 上滑 + direction.value = + offsetRef.current / itemHeight / 2 - 1; + } else if ( + offsetRef.current > + (layoutRef.current?.height ?? 0) - 3 * itemHeight + ) { + // 下滑 + direction.value = + (offsetRef.current - + (layoutRef.current?.height ?? 0) + + 3 * itemHeight) / + itemHeight / + 2; + } else { + // 不滑动 + direction.value = 0; + } + } + }} + onTouchEnd={e => { + if (activeRef.current !== -1) { + // 计算最终的位置,触发onSortEnd + let index = activeRef.current; + if (contentOffsetYRef.current !== -1) { + index = Math.round( + (contentOffsetYRef.current + + offsetRef.current) / + itemHeight, + ); + } else { + // 拖动的距离 + index = + activeRef.current + + Math.round( + (e.nativeEvent.pageY - + initDragPageY.current + + initDragLocationY.current) / + itemHeight, + ); + } + index = Math.min(data.length, Math.max(index, 0)); + // from: activeRef.current to: index + if (activeRef.current !== index) { + let nData = _data + .slice(0, activeRef.current) + .concat(_data.slice(activeRef.current + 1)); + nData.splice(index, 0, activeItem as T); + onSortEnd?.(nData); + // 测试用,正式时移除掉 + // _setData(nData); + } + } + scrollingRef.current = false; + activeRef.current = -1; + setScrollEnabled(true); + setActiveItem(null); + fakeItemRef.current!.setNativeProps({ + top: 0, + opacity: 0, + zIndex: -1, + }); + }} + onTouchCancel={() => { + // todo: 滑动很快的时候会触发取消,native的flatlist就这样 + activeRef.current = -1; + scrollingRef.current = false; + setScrollEnabled(true); + setActiveItem(null); + fakeItemRef.current!.setNativeProps({ + top: 0, + opacity: 0, + zIndex: -1, + }); + contentOffsetYRef.current = -1; + }} + onScroll={e => { + contentOffsetYRef.current = e.nativeEvent.contentOffset.y; + if ( + activeRef.current !== -1 && + Math.abs( + contentOffsetYRef.current - + targetOffsetYRef.current, + ) < 2 + ) { + scrollToTarget(true); + } + }} + renderItem={({item, index}) => { + return ( + + ); + }} + /> + + ); +} + +interface ISortableFlatListItemProps { + item: T; + index: number; + // 高度 + itemHeight: number; + itemJustifyContent?: + | 'flex-start' + | 'flex-end' + | 'center' + | 'space-between' + | 'space-around' + | 'space-evenly'; + setScrollEnabled: (scrollEnabled: boolean) => void; + renderItem: (props: {item: T; index: number}) => JSX.Element; + setActiveItem: (item: T | null) => void; + activeRef: React.MutableRefObject; +} +function _SortableFlatListItem(props: ISortableFlatListItemProps) { + const { + itemHeight, + setScrollEnabled, + renderItem, + setActiveItem, + itemJustifyContent, + item, + index, + activeRef, + } = props; + + // 省一点性能,height是顺着传下来的,放ref就好了 + const styleRef = useRef( + StyleSheet.create({ + viewWrapper: { + height: itemHeight, + width: '100%', + flexDirection: 'row', + justifyContent: itemJustifyContent ?? 'flex-end', + zIndex: defaultZIndex, + }, + btn: { + height: itemHeight, + justifyContent: 'center', + alignItems: 'center', + position: 'absolute', + top: 0, + right: 0, + width: rpx(100), + textAlignVertical: 'center', + }, + }), + ); + const textColor = useTextColor(); + + return ( + + {renderItem({item, index})} + { + if (activeRef.current !== -1) { + return; + } + /** 使用ref避免其它组件重新渲染; 由于事件冒泡,这里会先触发 */ + activeRef.current = index; + /** 锁定滚动 */ + setScrollEnabled(false); + setActiveItem(item); + }} + style={styleRef.current.btn}> + + + + ); +} + +const SortableFlatListItem = memo( + _SortableFlatListItem, + (prev, curr) => prev.index === curr.index && prev.item === curr.item, +); + +const FakeFlatListItem = forwardRef(function ( + props: Pick< + ISortableFlatListItemProps, + 'itemHeight' | 'renderItem' | 'item' | 'itemJustifyContent' + > & { + backgroundColor?: string; + }, + ref: ForwardedRef, +) { + const {itemHeight, renderItem, item, backgroundColor, itemJustifyContent} = + props; + + const styleRef = useRef( + StyleSheet.create({ + viewWrapper: { + height: itemHeight, + width: '100%', + flexDirection: 'row', + justifyContent: itemJustifyContent ?? 'flex-end', + zIndex: defaultZIndex, + }, + btn: { + height: itemHeight, + paddingHorizontal: rpx(28), + justifyContent: 'center', + alignItems: 'center', + position: 'absolute', + top: 0, + right: 0, + width: rpx(100), + textAlignVertical: 'center', + }, + }), + ); + const textColor = useTextColor(); + + return ( + + {item ? renderItem({item, index: -1}) : null} + + + + + ); +}); + +const style = StyleSheet.create({ + activeItemDefault: { + opacity: 0, + zIndex: -1, + position: 'absolute', + top: 0, + left: 0, + }, +}); diff --git a/src/components/base/appBar.tsx b/src/components/base/appBar.tsx index 969e7989..986f7ca6 100644 --- a/src/components/base/appBar.tsx +++ b/src/components/base/appBar.tsx @@ -1,11 +1,11 @@ import React, {ReactNode, useEffect, useState} from 'react'; import { LayoutRectangle, + StatusBar as OriginalStatusBar, + StyleProp, StyleSheet, TouchableWithoutFeedback, View, - StatusBar as OriginalStatusBar, - StyleProp, ViewStyle, } from 'react-native'; import rpx from '@/utils/rpx'; @@ -24,17 +24,18 @@ import Animated, { } from 'react-native-reanimated'; import Portal from './portal'; import ListItem from './listItem'; +import {IIconName} from '@/components/base/icon.tsx'; interface IAppBarProps { titleTextOpacity?: number; withStatusBar?: boolean; color?: string; actions?: Array<{ - icon: string; + icon: IIconName; onPress?: () => void; }>; menu?: Array<{ - icon: string; + icon: IIconName; title: string; show?: boolean; onPress?: () => void; @@ -143,10 +144,10 @@ export default function AppBar(props: IAppBarProps) { {actionComponent ?? null} {menu?.length ? ( { - setMenuIconLayout(e.nativeEvent.layout); + onLayout={evt => { + setMenuIconLayout(evt.nativeEvent.layout); }} color={contentColor} style={[globalStyle.notShrink, styles.rightButton]} @@ -208,7 +209,7 @@ export default function AppBar(props: IAppBarProps) { it.show !== false ? ( { it.onPress?.(); @@ -232,6 +233,7 @@ const styles = StyleSheet.create({ zIndex: 10000, height: rpx(88), flexDirection: 'row', + alignItems: 'center', paddingHorizontal: rpx(24), }, content: { diff --git a/src/components/base/button.tsx b/src/components/base/button.tsx index 8fa15e0f..bbdfbdd4 100644 --- a/src/components/base/button.tsx +++ b/src/components/base/button.tsx @@ -5,7 +5,7 @@ import rpx from '@/utils/rpx'; import {CustomizedColors} from '@/hooks/useColors'; interface IButtonProps { - withHorizonalPadding?: boolean; + withHorizontalPadding?: boolean; style?: any; hitSlop?: number; children: string; @@ -13,19 +13,20 @@ interface IButtonProps { onPress?: () => void; } export default function (props: IButtonProps) { - const {children, onPress, fontColor, hitSlop, withHorizonalPadding} = props; + const {children, onPress, fontColor, hitSlop, withHorizontalPadding} = + props; return ( diff --git a/src/components/base/checkbox.tsx b/src/components/base/checkbox.tsx index f12638ca..9bb2c66b 100644 --- a/src/components/base/checkbox.tsx +++ b/src/components/base/checkbox.tsx @@ -1,65 +1,65 @@ -import React from 'react'; -import {StyleProp, StyleSheet, View, ViewProps} from 'react-native'; -import rpx from '@/utils/rpx'; -import useColors from '@/hooks/useColors'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {TouchableOpacity} from 'react-native-gesture-handler'; - -interface ICheckboxProps { - checked?: boolean; - onPress?: () => void; - style?: StyleProp; -} - -const slop = rpx(24); - -export default function Checkbox(props: ICheckboxProps) { - const {checked, onPress, style} = props; - const colors = useColors(); - - const innerNode = ( - - {checked ? ( - - ) : null} - - ); - - return onPress ? ( - - {innerNode} - - ) : ( - innerNode - ); -} - -const styles = StyleSheet.create({ - container: { - width: rpx(36), - height: rpx(36), - borderRadius: rpx(2), - borderWidth: rpx(1), - alignItems: 'center', - justifyContent: 'center', - }, -}); +import React from 'react'; +import {StyleProp, StyleSheet, View, ViewProps} from 'react-native'; +import rpx from '@/utils/rpx'; +import useColors from '@/hooks/useColors'; +import {TouchableOpacity} from 'react-native-gesture-handler'; +import Icon from '@/components/base/icon.tsx'; + +interface ICheckboxProps { + checked?: boolean; + onPress?: () => void; + style?: StyleProp; +} + +const slop = rpx(24); + +export default function Checkbox(props: ICheckboxProps) { + const {checked, onPress, style} = props; + const colors = useColors(); + + const innerNode = ( + + {checked ? ( + + ) : null} + + ); + + return onPress ? ( + + {innerNode} + + ) : ( + innerNode + ); +} + +const styles = StyleSheet.create({ + container: { + width: rpx(36), + height: rpx(36), + borderRadius: rpx(2), + borderWidth: rpx(1), + alignItems: 'center', + justifyContent: 'center', + }, +}); diff --git a/src/components/base/chip.tsx b/src/components/base/chip.tsx index 3c581231..6ba2b58c 100644 --- a/src/components/base/chip.tsx +++ b/src/components/base/chip.tsx @@ -1,57 +1,57 @@ -import React, {ReactNode} from 'react'; -import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from './themeText'; -import useColors from '@/hooks/useColors'; -import IconButton from './iconButton'; - -interface IChipProps { - containerStyle?: StyleProp; - children?: ReactNode; - onPress?: () => void; - onClose?: () => void; -} -export default function Chip(props: IChipProps) { - const {containerStyle, children, onPress, onClose} = props; - const colors = useColors(); - - return ( - - {typeof children === 'string' ? ( - - {children} - - ) : ( - children - )} - - - ); -} - -const styles = StyleSheet.create({ - container: { - height: rpx(56), - paddingHorizontal: rpx(18), - borderRadius: rpx(28), - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - icon: { - marginLeft: rpx(8), - }, -}); +import React, {ReactNode} from 'react'; +import {Pressable, StyleProp, StyleSheet, ViewStyle} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from './themeText'; +import useColors from '@/hooks/useColors'; +import IconButton from './iconButton'; + +interface IChipProps { + containerStyle?: StyleProp; + children?: ReactNode; + onPress?: () => void; + onClose?: () => void; +} +export default function Chip(props: IChipProps) { + const {containerStyle, children, onPress, onClose} = props; + const colors = useColors(); + + return ( + + {typeof children === 'string' ? ( + + {children} + + ) : ( + children + )} + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: rpx(56), + paddingHorizontal: rpx(18), + borderRadius: rpx(28), + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + icon: { + marginLeft: rpx(8), + }, +}); diff --git a/src/components/base/colorBlock.tsx b/src/components/base/colorBlock.tsx index 19dcb469..411ca61b 100644 --- a/src/components/base/colorBlock.tsx +++ b/src/components/base/colorBlock.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {StyleSheet, Image, View} from 'react-native'; +import {Image, StyleSheet, View} from 'react-native'; import rpx from '@/utils/rpx'; import {ImgAsset} from '@/constants/assetsConst'; diff --git a/src/components/base/fab.tsx b/src/components/base/fab.tsx index aa0fe692..7274baa0 100644 --- a/src/components/base/fab.tsx +++ b/src/components/base/fab.tsx @@ -1,58 +1,58 @@ -import React from 'react'; -import {Pressable, StyleSheet} from 'react-native'; -import rpx from '@/utils/rpx'; -import useColors from '@/hooks/useColors'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {iconSizeConst} from '@/constants/uiConst'; - -interface IFabProps { - icon?: string; - onPress?: () => void; -} -export default function Fab(props: IFabProps) { - const {icon, onPress} = props; - - const colors = useColors(); - - return ( - - {icon ? ( - - ) : null} - - ); -} - -const styles = StyleSheet.create({ - container: { - width: rpx(108), - height: rpx(108), - borderRadius: rpx(54), - position: 'absolute', - zIndex: 10010, - right: rpx(36), - bottom: rpx(72), - justifyContent: 'center', - alignItems: 'center', - shadowOffset: { - width: 0, - height: 5, - }, - shadowOpacity: 0.34, - shadowRadius: 6.27, - - elevation: 10, - }, -}); +import React from 'react'; +import {Pressable, StyleSheet} from 'react-native'; +import rpx from '@/utils/rpx'; +import useColors from '@/hooks/useColors'; +import {iconSizeConst} from '@/constants/uiConst'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; + +interface IFabProps { + icon?: IIconName; + onPress?: () => void; +} +export default function Fab(props: IFabProps) { + const {icon, onPress} = props; + + const colors = useColors(); + + return ( + + {icon ? ( + + ) : null} + + ); +} + +const styles = StyleSheet.create({ + container: { + width: rpx(108), + height: rpx(108), + borderRadius: rpx(54), + position: 'absolute', + zIndex: 10010, + right: rpx(36), + bottom: rpx(72), + justifyContent: 'center', + alignItems: 'center', + shadowOffset: { + width: 0, + height: 5, + }, + shadowOpacity: 0.34, + shadowRadius: 6.27, + + elevation: 10, + }, +}); diff --git a/src/components/base/icon.tsx b/src/components/base/icon.tsx new file mode 100644 index 00000000..3b871afd --- /dev/null +++ b/src/components/base/icon.tsx @@ -0,0 +1,227 @@ +// This file is generated by generate-assets.mjs. DO NOT MODIFY. +import {SvgProps} from 'react-native-svg'; + +import AlarmOutlineIcon from '@/assets/icons/alarm-outline.svg'; +import AlbumOutlineIcon from '@/assets/icons/album-outline.svg'; +import ArchiveBoxXMarkIcon from '@/assets/icons/archive-box-x-mark.svg'; +import ArrowDownTrayIcon from '@/assets/icons/arrow-down-tray.svg'; +import ArrowLeftIcon from '@/assets/icons/arrow-left.svg'; +import ArrowLongLeftIcon from '@/assets/icons/arrow-long-left.svg'; +import ArrowPathIcon from '@/assets/icons/arrow-path.svg'; +import ArrowRightEndOnRectangleIcon from '@/assets/icons/arrow-right-end-on-rectangle.svg'; +import ArrowUturnLeftIcon from '@/assets/icons/arrow-uturn-left.svg'; +import ArrowsLeftRightIcon from '@/assets/icons/arrows-left-right.svg'; +import Bars3Icon from '@/assets/icons/bars-3.svg'; +import BookmarkSquareIcon from '@/assets/icons/bookmark-square.svg'; +import CheckCircleOutlineIcon from '@/assets/icons/check-circle-outline.svg'; +import CheckCircleIcon from '@/assets/icons/check-circle.svg'; +import CheckIcon from '@/assets/icons/check.svg'; +import CircleStackIcon from '@/assets/icons/circle-stack.svg'; +import ClockOutlineIcon from '@/assets/icons/clock-outline.svg'; +import CodeBracketSquareIcon from '@/assets/icons/code-bracket-square.svg'; +import Cog8ToothIcon from '@/assets/icons/cog-8-tooth.svg'; +import DocumentOutlineIcon from '@/assets/icons/document-outline.svg'; +import EllipsisVerticalIcon from '@/assets/icons/ellipsis-vertical.svg'; +import ExclamationCircleIcon from '@/assets/icons/exclamation-circle.svg'; +import FireOutlineIcon from '@/assets/icons/fire-outline.svg'; +import FireIcon from '@/assets/icons/fire.svg'; +import FolderMusicOutlineIcon from '@/assets/icons/folder-music-outline.svg'; +import FolderOutlineIcon from '@/assets/icons/folder-outline.svg'; +import FolderPlusIcon from '@/assets/icons/folder-plus.svg'; +import FontSizeIcon from '@/assets/icons/font-size.svg'; +import HeartOutlineIcon from '@/assets/icons/heart-outline.svg'; +import HeartIcon from '@/assets/icons/heart.svg'; +import HomeOutlineIcon from '@/assets/icons/home-outline.svg'; +import IdentificationIcon from '@/assets/icons/identification.svg'; +import InboxArrowDownIcon from '@/assets/icons/inbox-arrow-down.svg'; +import InformationCircleIcon from '@/assets/icons/information-circle.svg'; +import JavascriptIcon from '@/assets/icons/javascript.svg'; +import LinkSlashIcon from '@/assets/icons/link-slash.svg'; +import LinkIcon from '@/assets/icons/link.svg'; +import LyricIcon from '@/assets/icons/lyric.svg'; +import MagnifyingGlassIcon from '@/assets/icons/magnifying-glass.svg'; +import MinusIcon from '@/assets/icons/minus.svg'; +import MotionPlayIcon from '@/assets/icons/motion-play.svg'; +import MusicalNoteIcon from '@/assets/icons/musical-note.svg'; +import PauseCircleOutlineIcon from '@/assets/icons/pause-circle-outline.svg'; +import PauseIcon from '@/assets/icons/pause.svg'; +import PencilOutlineIcon from '@/assets/icons/pencil-outline.svg'; +import PencilSquareIcon from '@/assets/icons/pencil-square.svg'; +import PlayCircleOutlineIcon from '@/assets/icons/play-circle-outline.svg'; +import PlayCircleIcon from '@/assets/icons/play-circle.svg'; +import PlayIcon from '@/assets/icons/play.svg'; +import PlaylistIcon from '@/assets/icons/playlist.svg'; +import PlusIcon from '@/assets/icons/plus.svg'; +import PowerOutlineIcon from '@/assets/icons/power-outline.svg'; +import RepeatSong1Icon from '@/assets/icons/repeat-song-1.svg'; +import RepeatSongIcon from '@/assets/icons/repeat-song.svg'; +import ShareIcon from '@/assets/icons/share.svg'; +import ShieldKeyholeOutlineIcon from '@/assets/icons/shield-keyhole-outline.svg'; +import ShuffleIcon from '@/assets/icons/shuffle.svg'; +import SkipLeftIcon from '@/assets/icons/skip-left.svg'; +import SkipRightIcon from '@/assets/icons/skip-right.svg'; +import SortOutlineIcon from '@/assets/icons/sort-outline.svg'; +import TShirtOutlineIcon from '@/assets/icons/t-shirt-outline.svg'; +import TranslationIcon from '@/assets/icons/translation.svg'; +import TrashOutlineIcon from '@/assets/icons/trash-outline.svg'; +import TrophyIcon from '@/assets/icons/trophy.svg'; +import UserIcon from '@/assets/icons/user.svg'; +import XMarkIcon from '@/assets/icons/x-mark.svg'; + +export type IIconName = + | 'alarm-outline' + | 'album-outline' + | 'archive-box-x-mark' + | 'arrow-down-tray' + | 'arrow-left' + | 'arrow-long-left' + | 'arrow-path' + | 'arrow-right-end-on-rectangle' + | 'arrow-uturn-left' + | 'arrows-left-right' + | 'bars-3' + | 'bookmark-square' + | 'check-circle-outline' + | 'check-circle' + | 'check' + | 'circle-stack' + | 'clock-outline' + | 'code-bracket-square' + | 'cog-8-tooth' + | 'document-outline' + | 'ellipsis-vertical' + | 'exclamation-circle' + | 'fire-outline' + | 'fire' + | 'folder-music-outline' + | 'folder-outline' + | 'folder-plus' + | 'font-size' + | 'heart-outline' + | 'heart' + | 'home-outline' + | 'identification' + | 'inbox-arrow-down' + | 'information-circle' + | 'javascript' + | 'link-slash' + | 'link' + | 'lyric' + | 'magnifying-glass' + | 'minus' + | 'motion-play' + | 'musical-note' + | 'pause-circle-outline' + | 'pause' + | 'pencil-outline' + | 'pencil-square' + | 'play-circle-outline' + | 'play-circle' + | 'play' + | 'playlist' + | 'plus' + | 'power-outline' + | 'repeat-song-1' + | 'repeat-song' + | 'share' + | 'shield-keyhole-outline' + | 'shuffle' + | 'skip-left' + | 'skip-right' + | 'sort-outline' + | 't-shirt-outline' + | 'translation' + | 'trash-outline' + | 'trophy' + | 'user' + | 'x-mark'; + +interface IProps extends SvgProps { + /** 图标名称 */ + name: IIconName; + /** 图标大小 */ + size?: number; +} + +const iconMap = { + 'alarm-outline': AlarmOutlineIcon, + 'album-outline': AlbumOutlineIcon, + 'archive-box-x-mark': ArchiveBoxXMarkIcon, + 'arrow-down-tray': ArrowDownTrayIcon, + 'arrow-left': ArrowLeftIcon, + 'arrow-long-left': ArrowLongLeftIcon, + 'arrow-path': ArrowPathIcon, + 'arrow-right-end-on-rectangle': ArrowRightEndOnRectangleIcon, + 'arrow-uturn-left': ArrowUturnLeftIcon, + 'arrows-left-right': ArrowsLeftRightIcon, + 'bars-3': Bars3Icon, + 'bookmark-square': BookmarkSquareIcon, + 'check-circle-outline': CheckCircleOutlineIcon, + 'check-circle': CheckCircleIcon, + check: CheckIcon, + 'circle-stack': CircleStackIcon, + 'clock-outline': ClockOutlineIcon, + 'code-bracket-square': CodeBracketSquareIcon, + 'cog-8-tooth': Cog8ToothIcon, + 'document-outline': DocumentOutlineIcon, + 'ellipsis-vertical': EllipsisVerticalIcon, + 'exclamation-circle': ExclamationCircleIcon, + 'fire-outline': FireOutlineIcon, + fire: FireIcon, + 'folder-music-outline': FolderMusicOutlineIcon, + 'folder-outline': FolderOutlineIcon, + 'folder-plus': FolderPlusIcon, + 'font-size': FontSizeIcon, + 'heart-outline': HeartOutlineIcon, + heart: HeartIcon, + 'home-outline': HomeOutlineIcon, + identification: IdentificationIcon, + 'inbox-arrow-down': InboxArrowDownIcon, + 'information-circle': InformationCircleIcon, + javascript: JavascriptIcon, + 'link-slash': LinkSlashIcon, + link: LinkIcon, + lyric: LyricIcon, + 'magnifying-glass': MagnifyingGlassIcon, + minus: MinusIcon, + 'motion-play': MotionPlayIcon, + 'musical-note': MusicalNoteIcon, + 'pause-circle-outline': PauseCircleOutlineIcon, + pause: PauseIcon, + 'pencil-outline': PencilOutlineIcon, + 'pencil-square': PencilSquareIcon, + 'play-circle-outline': PlayCircleOutlineIcon, + 'play-circle': PlayCircleIcon, + play: PlayIcon, + playlist: PlaylistIcon, + plus: PlusIcon, + 'power-outline': PowerOutlineIcon, + 'repeat-song-1': RepeatSong1Icon, + 'repeat-song': RepeatSongIcon, + share: ShareIcon, + 'shield-keyhole-outline': ShieldKeyholeOutlineIcon, + shuffle: ShuffleIcon, + 'skip-left': SkipLeftIcon, + 'skip-right': SkipRightIcon, + 'sort-outline': SortOutlineIcon, + 't-shirt-outline': TShirtOutlineIcon, + translation: TranslationIcon, + 'trash-outline': TrashOutlineIcon, + trophy: TrophyIcon, + user: UserIcon, + 'x-mark': XMarkIcon, +} as const; + +export default function Icon(props: IProps) { + const {name, size} = props; + + const newProps = { + ...props, + width: props.width ?? size, + height: props.width ?? size, + } as SvgProps; + + const Component = iconMap[name]; + + return ; +} diff --git a/src/components/base/iconButton.tsx b/src/components/base/iconButton.tsx index 6010885b..13d1a3bf 100644 --- a/src/components/base/iconButton.tsx +++ b/src/components/base/iconButton.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {ColorKey, iconSizeConst, colorMap} from '@/constants/uiConst'; -import {IconProps} from 'react-native-vector-icons/Icon'; +import {ColorKey, colorMap, iconSizeConst} from '@/constants/uiConst'; import {TapGestureHandler} from 'react-native-gesture-handler'; import {StyleSheet} from 'react-native'; import useColors from '@/hooks/useColors'; +import {SvgProps} from 'react-native-svg'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; -interface IIconButtonProps extends IconProps { - name: string; - style?: IconProps['style']; +interface IIconButtonProps extends SvgProps { + name: IIconName; + style?: SvgProps['style']; sizeType?: keyof typeof iconSizeConst; fontColor?: ColorKey; color?: string; diff --git a/src/components/base/iconTextButton.tsx b/src/components/base/iconTextButton.tsx index 83ecc33a..97587e79 100644 --- a/src/components/base/iconTextButton.tsx +++ b/src/components/base/iconTextButton.tsx @@ -1,43 +1,43 @@ -import React from 'react'; -import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from './themeText'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {iconSizeConst} from '@/constants/uiConst'; -import useColors from '@/hooks/useColors'; -import {TouchableOpacity} from 'react-native-gesture-handler'; - -interface IProps { - icon: string; - onPress?: () => void; - containerStyle?: StyleProp; - children?: string; -} -export default function (props: IProps) { - const {icon, children, onPress, containerStyle} = props; - const colors = useColors(); - - return ( - - - - {children} - - - ); -} - -const style = StyleSheet.create({ - container: { - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: rpx(16), - paddingVertical: rpx(8), - }, - text: { - marginLeft: rpx(8), - }, -}); +import React from 'react'; +import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from './themeText'; +import {iconSizeConst} from '@/constants/uiConst'; +import useColors from '@/hooks/useColors'; +import {TouchableOpacity} from 'react-native-gesture-handler'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; + +interface IProps { + icon: IIconName; + onPress?: () => void; + containerStyle?: StyleProp; + children?: string; +} +export default function (props: IProps) { + const {icon, children, onPress, containerStyle} = props; + const colors = useColors(); + + return ( + + + + {children} + + + ); +} + +const style = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: rpx(16), + paddingVertical: rpx(8), + }, + text: { + marginLeft: rpx(8), + }, +}); diff --git a/src/components/base/imageBtn.tsx b/src/components/base/imageBtn.tsx index cd2c99a9..78230328 100644 --- a/src/components/base/imageBtn.tsx +++ b/src/components/base/imageBtn.tsx @@ -1,7 +1,6 @@ import React from 'react'; -import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; +import {StyleProp, StyleSheet, TouchableOpacity, ViewStyle} from 'react-native'; import rpx from '@/utils/rpx'; -import {TouchableOpacity} from 'react-native'; import Image from './image'; import {ImgAsset} from '@/constants/assetsConst'; import ThemeText from './themeText'; diff --git a/src/components/base/listItem.tsx b/src/components/base/listItem.tsx index abfb89b2..bf3b39c5 100644 --- a/src/components/base/listItem.tsx +++ b/src/components/base/listItem.tsx @@ -1,346 +1,346 @@ -import React, {ReactNode} from 'react'; -import { - StyleProp, - StyleSheet, - TextProps, - TextStyle, - TouchableHighlight, - TouchableOpacity, - View, - ViewStyle, -} from 'react-native'; -import rpx from '@/utils/rpx'; -import useColors from '@/hooks/useColors'; -import ThemeText from './themeText'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import { - fontSizeConst, - fontWeightConst, - iconSizeConst, -} from '@/constants/uiConst'; -import FastImage from './fastImage'; -import {ImageStyle} from 'react-native-fast-image'; - -interface IListItemProps { - // 是否有左右边距 - withHorizonalPadding?: boolean; - // 左边距 - leftPadding?: number; - // 右边距 - rightPadding?: number; - // height: - style?: StyleProp; - // 高度类型 - heightType?: 'big' | 'small' | 'smallest' | 'normal' | 'none'; - children?: ReactNode; - onPress?: () => void; - onLongPress?: () => void; -} - -const defaultPadding = rpx(24); -const defaultActionWidth = rpx(80); - -const Size = { - big: rpx(120), - normal: rpx(108), - small: rpx(96), - smallest: rpx(72), - none: undefined, -}; - -function ListItem(props: IListItemProps) { - const { - withHorizonalPadding, - leftPadding = defaultPadding, - rightPadding = defaultPadding, - style, - heightType = 'normal', - children, - onPress, - onLongPress, - } = props; - - const defaultStyle: StyleProp = { - paddingLeft: withHorizonalPadding ? leftPadding : 0, - paddingRight: withHorizonalPadding ? rightPadding : 0, - height: Size[heightType], - }; - - const colors = useColors(); - - return ( - - - {children} - - - ); -} - -interface IListItemTextProps { - children?: number | string; - fontSize?: keyof typeof fontSizeConst; - fontWeight?: keyof typeof fontWeightConst; - width?: number; - position?: 'left' | 'right' | 'none'; - fixedWidth?: boolean; - containerStyle?: StyleProp; - contentStyle?: StyleProp; - contentProps?: TextProps; -} - -function ListItemText(props: IListItemTextProps) { - const { - children, - fontSize, - fontWeight, - position = 'left', - fixedWidth, - width, - containerStyle, - contentStyle, - contentProps = {}, - } = props; - - const defaultStyle: StyleProp = { - marginRight: position === 'left' ? defaultPadding : 0, - marginLeft: position === 'right' ? defaultPadding : 0, - width: fixedWidth ? width ?? defaultActionWidth : undefined, - flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, - }; - - return ( - - - {children} - - - ); -} - -interface IListItemIconProps { - icon: string; - iconSize?: number; - width?: number; - position?: 'left' | 'right' | 'none'; - fixedWidth?: boolean; - containerStyle?: StyleProp; - contentStyle?: StyleProp; - onPress?: () => void; -} - -function ListItemIcon(props: IListItemIconProps) { - const { - icon, - iconSize = iconSizeConst.normal, - position = 'left', - fixedWidth, - width, - containerStyle, - contentStyle, - onPress, - } = props; - - const colors = useColors(); - - const defaultStyle: StyleProp = { - marginRight: position === 'left' ? defaultPadding : 0, - marginLeft: position === 'right' ? defaultPadding : 0, - width: fixedWidth ? width ?? defaultActionWidth : undefined, - flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, - }; - - const innerContent = ( - - - - ); - - return onPress ? ( - {innerContent} - ) : ( - innerContent - ); -} - -interface IListItemImageProps { - uri?: string; - fallbackImg?: number; - imageSize?: number; - width?: number; - position?: 'left' | 'right'; - fixedWidth?: boolean; - containerStyle?: StyleProp; - contentStyle?: StyleProp; - maskIcon?: string | null; -} - -function ListItemImage(props: IListItemImageProps) { - const { - uri, - fallbackImg, - position = 'left', - fixedWidth, - width, - containerStyle, - contentStyle, - maskIcon, - } = props; - - const defaultStyle: StyleProp = { - marginRight: position === 'left' ? defaultPadding : 0, - marginLeft: position === 'right' ? defaultPadding : 0, - width: fixedWidth ? width ?? defaultActionWidth : undefined, - flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, - }; - - return ( - - - {maskIcon ? ( - - - - ) : null} - - ); -} - -interface IContentProps { - title?: ReactNode; - children?: ReactNode; - description?: ReactNode; - containerStyle?: StyleProp; -} - -function Content(props: IContentProps) { - const { - children, - title = children, - description = null, - containerStyle, - } = props; - - let realTitle; - let realDescription; - - if (typeof title === 'string' || typeof title === 'number') { - realTitle = {title}; - } else { - realTitle = title; - } - - if (typeof description === 'string' || typeof description === 'number') { - realDescription = ( - - {description} - - ); - } else { - realDescription = description; - } - - return ( - - {realTitle} - {realDescription} - - ); -} - -export function ListItemHeader(props: {children?: ReactNode}) { - const {children} = props; - return ( - - {typeof children === 'string' ? ( - - {children} - - ) : ( - children - )} - - ); -} - -const styles = StyleSheet.create({ - /** listitem */ - container: { - width: '100%', - flexDirection: 'row', - alignItems: 'center', - }, - /** left */ - actionBase: { - height: '100%', - flexShrink: 0, - flexGrow: 0, - flexBasis: 0, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - }, - - leftImage: { - width: rpx(80), - height: rpx(80), - borderRadius: rpx(16), - }, - imageMask: { - position: 'absolute', - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '#00000022', - }, - itemContentContainer: { - flex: 1, - height: '100%', - justifyContent: 'center', - }, - contentDesc: { - marginTop: rpx(16), - }, - - listItemHeader: { - marginTop: rpx(20), - }, -}); - -ListItem.Size = Size; -ListItem.ListItemIcon = ListItemIcon; -ListItem.ListItemImage = ListItemImage; -ListItem.ListItemText = ListItemText; -ListItem.Content = Content; - -export default ListItem; +import React, {ReactNode} from 'react'; +import { + StyleProp, + StyleSheet, + TextProps, + TextStyle, + TouchableHighlight, + TouchableOpacity, + View, + ViewStyle, +} from 'react-native'; +import rpx from '@/utils/rpx'; +import useColors from '@/hooks/useColors'; +import ThemeText from './themeText'; +import { + fontSizeConst, + fontWeightConst, + iconSizeConst, +} from '@/constants/uiConst'; +import FastImage from './fastImage'; +import {ImageStyle} from 'react-native-fast-image'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; + +interface IListItemProps { + // 是否有左右边距 + withHorizontalPadding?: boolean; + // 左边距 + leftPadding?: number; + // 右边距 + rightPadding?: number; + // height: + style?: StyleProp; + // 高度类型 + heightType?: 'big' | 'small' | 'smallest' | 'normal' | 'none'; + children?: ReactNode; + onPress?: () => void; + onLongPress?: () => void; +} + +const defaultPadding = rpx(24); +const defaultActionWidth = rpx(80); + +const Size = { + big: rpx(120), + normal: rpx(108), + small: rpx(96), + smallest: rpx(72), + none: undefined, +}; + +function ListItem(props: IListItemProps) { + const { + withHorizontalPadding, + leftPadding = defaultPadding, + rightPadding = defaultPadding, + style, + heightType = 'normal', + children, + onPress, + onLongPress, + } = props; + + const defaultStyle: StyleProp = { + paddingLeft: withHorizontalPadding ? leftPadding : 0, + paddingRight: withHorizontalPadding ? rightPadding : 0, + height: Size[heightType], + }; + + const colors = useColors(); + + return ( + + + {children} + + + ); +} + +interface IListItemTextProps { + children?: number | string; + fontSize?: keyof typeof fontSizeConst; + fontWeight?: keyof typeof fontWeightConst; + width?: number; + position?: 'left' | 'right' | 'none'; + fixedWidth?: boolean; + containerStyle?: StyleProp; + contentStyle?: StyleProp; + contentProps?: TextProps; +} + +function ListItemText(props: IListItemTextProps) { + const { + children, + fontSize, + fontWeight, + position = 'left', + fixedWidth, + width, + containerStyle, + contentStyle, + contentProps = {}, + } = props; + + const defaultStyle: StyleProp = { + marginRight: position === 'left' ? defaultPadding : 0, + marginLeft: position === 'right' ? defaultPadding : 0, + width: fixedWidth ? width ?? defaultActionWidth : undefined, + flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, + }; + + return ( + + + {children} + + + ); +} + +interface IListItemIconProps { + icon: IIconName; + iconSize?: number; + width?: number; + position?: 'left' | 'right' | 'none'; + fixedWidth?: boolean; + containerStyle?: StyleProp; + contentStyle?: StyleProp; + onPress?: () => void; +} + +function ListItemIcon(props: IListItemIconProps) { + const { + icon, + iconSize = iconSizeConst.normal, + position = 'left', + fixedWidth, + width, + containerStyle, + contentStyle, + onPress, + } = props; + + const colors = useColors(); + + const defaultStyle: StyleProp = { + marginRight: position === 'left' ? defaultPadding : 0, + marginLeft: position === 'right' ? defaultPadding : 0, + width: fixedWidth ? width ?? defaultActionWidth : undefined, + flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, + }; + + const innerContent = ( + + + + ); + + return onPress ? ( + {innerContent} + ) : ( + innerContent + ); +} + +interface IListItemImageProps { + uri?: string; + fallbackImg?: number; + imageSize?: number; + width?: number; + position?: 'left' | 'right'; + fixedWidth?: boolean; + containerStyle?: StyleProp; + contentStyle?: StyleProp; + maskIcon?: IIconName | null; +} + +function ListItemImage(props: IListItemImageProps) { + const { + uri, + fallbackImg, + position = 'left', + fixedWidth, + width, + containerStyle, + contentStyle, + maskIcon, + } = props; + + const defaultStyle: StyleProp = { + marginRight: position === 'left' ? defaultPadding : 0, + marginLeft: position === 'right' ? defaultPadding : 0, + width: fixedWidth ? width ?? defaultActionWidth : undefined, + flexBasis: fixedWidth ? width ?? defaultActionWidth : undefined, + }; + + return ( + + + {maskIcon ? ( + + + + ) : null} + + ); +} + +interface IContentProps { + title?: ReactNode; + children?: ReactNode; + description?: ReactNode; + containerStyle?: StyleProp; +} + +function Content(props: IContentProps) { + const { + children, + title = children, + description = null, + containerStyle, + } = props; + + let realTitle; + let realDescription; + + if (typeof title === 'string' || typeof title === 'number') { + realTitle = {title}; + } else { + realTitle = title; + } + + if (typeof description === 'string' || typeof description === 'number') { + realDescription = ( + + {description} + + ); + } else { + realDescription = description; + } + + return ( + + {realTitle} + {realDescription} + + ); +} + +export function ListItemHeader(props: {children?: ReactNode}) { + const {children} = props; + return ( + + {typeof children === 'string' ? ( + + {children} + + ) : ( + children + )} + + ); +} + +const styles = StyleSheet.create({ + /** listitem */ + container: { + width: '100%', + flexDirection: 'row', + alignItems: 'center', + }, + /** left */ + actionBase: { + height: '100%', + flexShrink: 0, + flexGrow: 0, + flexBasis: 0, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, + + leftImage: { + width: rpx(80), + height: rpx(80), + borderRadius: rpx(16), + }, + imageMask: { + position: 'absolute', + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '#00000022', + }, + itemContentContainer: { + flex: 1, + height: '100%', + justifyContent: 'center', + }, + contentDesc: { + marginTop: rpx(16), + }, + + listItemHeader: { + marginTop: rpx(20), + }, +}); + +ListItem.Size = Size; +ListItem.ListItemIcon = ListItemIcon; +ListItem.ListItemImage = ListItemImage; +ListItem.ListItemText = ListItemText; +ListItem.Content = Content; + +export default ListItem; diff --git a/src/components/base/loading.tsx b/src/components/base/loading.tsx index 0d9f80ab..fae9bf8c 100644 --- a/src/components/base/loading.tsx +++ b/src/components/base/loading.tsx @@ -1,7 +1,6 @@ import React from 'react'; -import {StyleSheet, View} from 'react-native'; +import {ActivityIndicator, StyleSheet, View} from 'react-native'; import rpx from '@/utils/rpx'; -import {ActivityIndicator} from 'react-native'; import ThemeText from './themeText'; import useColors from '@/hooks/useColors'; diff --git a/src/components/base/playAllBar.tsx b/src/components/base/playAllBar.tsx index 8ce80ab1..6a5812ec 100644 --- a/src/components/base/playAllBar.tsx +++ b/src/components/base/playAllBar.tsx @@ -1,116 +1,116 @@ -import React from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import {iconSizeConst} from '@/constants/uiConst'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import ThemeText from './themeText'; -import useColors from '@/hooks/useColors'; -import {showPanel} from '../panels/usePanel'; -import IconButton from './iconButton'; -import TrackPlayer from '@/core/trackPlayer'; -import MusicSheet from '@/core/musicSheet'; -import Toast from '@/utils/toast'; - -interface IProps { - musicList: IMusic.IMusicItem[] | null; - canStar?: boolean; - musicSheet?: IMusic.IMusicSheetItem | null; -} -export default function (props: IProps) { - const {musicList, canStar, musicSheet} = props; - - const sheetName = musicSheet?.title; - const sheetId = musicSheet?.id; - - const colors = useColors(); - const navigate = useNavigate(); - - const starred = MusicSheet.useSheetStarred(musicSheet); - - return ( - - { - if (musicList) { - TrackPlayer.playWithReplacePlayList( - musicList[0], - musicList, - ); - } - }}> - - 播放全部 - - {canStar && musicSheet ? ( - { - if (!starred) { - MusicSheet.starMusicSheet(musicSheet); - Toast.success('收藏歌单成功'); - } else { - MusicSheet.unstarMusicSheet(musicSheet); - Toast.success('已取消收藏歌单'); - } - }} - /> - ) : null} - { - showPanel('AddToMusicSheet', { - musicItem: musicList ?? [], - newSheetDefaultName: sheetName, - }); - }} - /> - { - navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { - musicList: musicList, - musicSheet: { - title: sheetName, - id: sheetId, - }, - }); - }} - /> - - ); -} - -const style = StyleSheet.create({ - /** playall */ - topWrapper: { - height: rpx(84), - paddingHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'center', - }, - playAll: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - }, - playAllIcon: { - marginRight: rpx(12), - }, - optionButton: { - marginLeft: rpx(36), - }, -}); +import React from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import {iconSizeConst} from '@/constants/uiConst'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import ThemeText from './themeText'; +import useColors from '@/hooks/useColors'; +import {showPanel} from '../panels/usePanel'; +import IconButton from './iconButton'; +import TrackPlayer from '@/core/trackPlayer'; +import MusicSheet from '@/core/musicSheet'; +import Toast from '@/utils/toast'; +import Icon from '@/components/base/icon.tsx'; + +interface IProps { + musicList: IMusic.IMusicItem[] | null; + canStar?: boolean; + musicSheet?: IMusic.IMusicSheetItem | null; +} +export default function (props: IProps) { + const {musicList, canStar, musicSheet} = props; + + const sheetName = musicSheet?.title; + const sheetId = musicSheet?.id; + + const colors = useColors(); + const navigate = useNavigate(); + + const starred = MusicSheet.useSheetStarred(musicSheet); + + return ( + + { + if (musicList) { + TrackPlayer.playWithReplacePlayList( + musicList[0], + musicList, + ); + } + }}> + + 播放全部 + + {canStar && musicSheet ? ( + { + if (!starred) { + MusicSheet.starMusicSheet(musicSheet); + Toast.success('收藏歌单成功'); + } else { + MusicSheet.unstarMusicSheet(musicSheet); + Toast.success('已取消收藏歌单'); + } + }} + /> + ) : null} + { + showPanel('AddToMusicSheet', { + musicItem: musicList ?? [], + newSheetDefaultName: sheetName, + }); + }} + /> + { + navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { + musicList: musicList, + musicSheet: { + title: sheetName, + id: sheetId, + }, + }); + }} + /> + + ); +} + +const style = StyleSheet.create({ + /** playall */ + topWrapper: { + height: rpx(84), + paddingHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'center', + }, + playAll: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + playAllIcon: { + marginRight: rpx(12), + }, + optionButton: { + marginLeft: rpx(36), + }, +}); diff --git a/src/components/base/toast.tsx b/src/components/base/toast.tsx index ed568835..9b10f167 100644 --- a/src/components/base/toast.tsx +++ b/src/components/base/toast.tsx @@ -1,223 +1,219 @@ -import {timingConfig} from '@/constants/commonConst'; -import {fontSizeConst} from '@/constants/uiConst'; -import useColors from '@/hooks/useColors'; -import rpx from '@/utils/rpx'; -import {GlobalState} from '@/utils/stateMapper'; -import {nanoid} from 'nanoid'; -import React, {useCallback, useEffect} from 'react'; -import {Pressable, StyleSheet, Text, View} from 'react-native'; -import { - Directions, - Gesture, - GestureDetector, -} from 'react-native-gesture-handler'; -import Animated, { - cancelAnimation, - runOnJS, - useAnimatedStyle, - useSharedValue, - withDelay, - withTiming, -} from 'react-native-reanimated'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -export interface IToastConfig { - /** 类型 */ - type: 'success' | 'warn'; - /** 消息内容 */ - message?: string; - /** 行动点 */ - actionText?: string; - /** 行动点按钮行为 */ - onActionClick?: () => void; - /** 展示时间 */ - duration?: number; -} - -type IToastConfigInner = IToastConfig & { - id: string; -}; - -const toastQueue: IToastConfigInner[] = []; - -const fixedTop = rpx(250); - -const activeToastStore = new GlobalState(null); - -const typeConfig = { - success: { - name: 'check-circle', - color: '#457236', - }, - warn: { - name: 'alert-circle', - color: '#de7622', - }, -}; - -export function ToastBaseComponent() { - const activeToast = activeToastStore.useValue(); - const colors = useColors(); - - const toastAnim = useSharedValue(0); - - const setNextToast = useCallback(() => { - activeToastStore.setValue(toastQueue.shift() || null); - }, []); - - useEffect(() => { - if (activeToast) { - toastAnim.value = withTiming(1, timingConfig.animationSlow, () => { - toastAnim.value = withDelay( - activeToast.duration || 1200, - withTiming(0, timingConfig.animationSlow, finished => { - if (finished) { - runOnJS(setNextToast)(); - } - }), - ); - }); - } - }, [activeToast]); - - function removeCurrentToast() { - if (toastAnim.value === 1) { - cancelAnimation(toastAnim); - toastAnim.value = withTiming( - 0, - timingConfig.animationSlow, - finished => { - if (finished) { - runOnJS(setNextToast)(); - } - }, - ); - } - } - - const flingGesture = Gesture.Fling() - .direction(Directions.UP) - .onEnd(() => { - removeCurrentToast(); - }) - .runOnJS(true); - - const toastAnimStyle = useAnimatedStyle(() => { - return { - transform: [ - { - translateY: (toastAnim.value - 1) * fixedTop, - }, - ], - opacity: toastAnim.value, - }; - }); - - return activeToast ? ( - - - - - - {activeToast.message} - - {activeToast.actionText && activeToast.onActionClick ? ( - - - {activeToast.actionText} - - - ) : null} - - - - ) : null; -} - -const styles = StyleSheet.create({ - container: { - position: 'absolute', - top: rpx(128), - width: '100%', - alignItems: 'center', - height: rpx(100), - zIndex: 20000, - }, - contentContainer: { - width: rpx(688), - height: '100%', - borderRadius: rpx(12), - backgroundColor: 'blue', - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: rpx(24), - shadowOffset: { - width: 0, - height: 2, - }, - shadowOpacity: 0.2, - shadowRadius: 1.41, - - elevation: 2, - }, - icon: { - fontSize: fontSizeConst.appbar, - includeFontPadding: false, - }, - text: { - fontSize: fontSizeConst.content, - includeFontPadding: false, - flex: 1, - marginLeft: rpx(24), - }, - actionText: { - fontSize: fontSizeConst.content, - includeFontPadding: false, - color: 'white', - }, - actionTextContainer: { - marginLeft: rpx(24), - width: rpx(120), - paddingHorizonal: rpx(12), - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - borderRadius: rpx(30), - height: rpx(58), - }, -}); - -export function showToast(config: IToastConfig) { - const id = nanoid(); - const _config = { - ...config, - id, - }; - const activeToast = activeToastStore.getValue(); - if (!activeToast) { - activeToastStore.setValue(_config); - } else { - toastQueue.push(_config); - } - - return id; -} +import {timingConfig} from '@/constants/commonConst'; +import {fontSizeConst} from '@/constants/uiConst'; +import useColors from '@/hooks/useColors'; +import rpx from '@/utils/rpx'; +import {GlobalState} from '@/utils/stateMapper'; +import {nanoid} from 'nanoid'; +import React, {useCallback, useEffect} from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; +import { + Directions, + Gesture, + GestureDetector, +} from 'react-native-gesture-handler'; +import Animated, { + cancelAnimation, + runOnJS, + useAnimatedStyle, + useSharedValue, + withDelay, + withTiming, +} from 'react-native-reanimated'; +import Icon from '@/components/base/icon.tsx'; + +export interface IToastConfig { + /** 类型 */ + type: 'success' | 'warn'; + /** 消息内容 */ + message?: string; + /** 行动点 */ + actionText?: string; + /** 行动点按钮行为 */ + onActionClick?: () => void; + /** 展示时间 */ + duration?: number; +} + +type IToastConfigInner = IToastConfig & { + id: string; +}; + +const toastQueue: IToastConfigInner[] = []; + +const fixedTop = rpx(250); + +const activeToastStore = new GlobalState(null); + +const typeConfig = { + success: { + name: 'check-circle', + color: '#457236', + }, + warn: { + name: 'exclamation-circle', + color: '#de7622', + }, +} as const; + +export function ToastBaseComponent() { + const activeToast = activeToastStore.useValue(); + const colors = useColors(); + + const toastAnim = useSharedValue(0); + + const setNextToast = useCallback(() => { + activeToastStore.setValue(toastQueue.shift() || null); + }, []); + + useEffect(() => { + if (activeToast) { + toastAnim.value = withTiming(1, timingConfig.animationSlow, () => { + toastAnim.value = withDelay( + activeToast.duration || 1200, + withTiming(0, timingConfig.animationSlow, finished => { + if (finished) { + runOnJS(setNextToast)(); + } + }), + ); + }); + } + }, [activeToast]); + + function removeCurrentToast() { + if (toastAnim.value === 1) { + cancelAnimation(toastAnim); + toastAnim.value = withTiming( + 0, + timingConfig.animationSlow, + finished => { + if (finished) { + runOnJS(setNextToast)(); + } + }, + ); + } + } + + const flingGesture = Gesture.Fling() + .direction(Directions.UP) + .onEnd(() => { + removeCurrentToast(); + }) + .runOnJS(true); + + const toastAnimStyle = useAnimatedStyle(() => { + return { + transform: [ + { + translateY: (toastAnim.value - 1) * fixedTop, + }, + ], + opacity: toastAnim.value, + }; + }); + + return activeToast ? ( + + + + + + {activeToast.message} + + {activeToast.actionText && activeToast.onActionClick ? ( + + + {activeToast.actionText} + + + ) : null} + + + + ) : null; +} + +const styles = StyleSheet.create({ + container: { + position: 'absolute', + top: rpx(128), + width: '100%', + alignItems: 'center', + height: rpx(100), + zIndex: 20000, + }, + contentContainer: { + width: rpx(688), + height: '100%', + borderRadius: rpx(12), + backgroundColor: 'blue', + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: rpx(24), + shadowOffset: { + width: 0, + height: 2, + }, + shadowOpacity: 0.2, + shadowRadius: 1.41, + + elevation: 2, + }, + text: { + fontSize: fontSizeConst.content, + includeFontPadding: false, + flex: 1, + marginLeft: rpx(24), + }, + actionText: { + fontSize: fontSizeConst.content, + includeFontPadding: false, + color: 'white', + }, + actionTextContainer: { + marginLeft: rpx(24), + width: rpx(120), + paddingHorizontal: rpx(12), + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + borderRadius: rpx(30), + height: rpx(58), + }, +}); + +export function showToast(config: IToastConfig) { + const id = nanoid(); + const _config = { + ...config, + id, + }; + const activeToast = activeToastStore.getValue(); + if (!activeToast) { + activeToastStore.setValue(_config); + } else { + toastQueue.push(_config); + } + + return id; +} diff --git a/src/components/base/typeTag.tsx b/src/components/base/typeTag.tsx index 81193f7a..c1b6375d 100644 --- a/src/components/base/typeTag.tsx +++ b/src/components/base/typeTag.tsx @@ -1,9 +1,15 @@ import React from 'react'; -import {ColorValue, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'; +import { + ColorValue, + StyleProp, + StyleSheet, + TouchableOpacity, + View, + ViewStyle, +} from 'react-native'; import rpx from '@/utils/rpx'; import ThemeText from '@/components/base/themeText'; import useColors from '@/hooks/useColors'; -import {TouchableOpacity} from 'react-native'; interface ITypeTagProps { title: string; diff --git a/src/components/dialogs/components/editSheetDetail.tsx b/src/components/dialogs/components/editSheetDetail.tsx index dacb8d55..1e1f290a 100644 --- a/src/components/dialogs/components/editSheetDetail.tsx +++ b/src/components/dialogs/components/editSheetDetail.tsx @@ -1,10 +1,9 @@ import React, {useState} from 'react'; import useColors from '@/hooks/useColors'; import rpx from '@/utils/rpx'; -import {StyleSheet, View} from 'react-native'; +import {StyleSheet, TouchableOpacity, View} from 'react-native'; import ThemeText from '@/components/base/themeText'; import {ImgAsset} from '@/constants/assetsConst'; -import {TouchableOpacity} from 'react-native'; import {launchImageLibrary} from 'react-native-image-picker'; import pathConst from '@/constants/pathConst'; import Image from '@/components/base/image'; diff --git a/src/components/dialogs/components/radioDialog.tsx b/src/components/dialogs/components/radioDialog.tsx index 0c602cc5..bf742603 100644 --- a/src/components/dialogs/components/radioDialog.tsx +++ b/src/components/dialogs/components/radioDialog.tsx @@ -1,56 +1,56 @@ -import React from 'react'; -import {FlatList} from 'react-native-gesture-handler'; -import {hideDialog} from '../useDialog'; -import Dialog from './base'; -import ListItem from '@/components/base/listItem'; -import useOrientation from '@/hooks/useOrientation'; -import {vmax, vmin} from '@/utils/rpx'; - -interface IKV { - key: T; - value: T; -} - -interface IRadioDialogProps { - title: string; - content: Array>; - onOk?: (value: T) => void; -} - -function isObject(v: string | number | IKV): v is IKV { - return typeof v === 'string' || typeof v === 'number' ? false : true; -} - -export default function RadioDialog(props: IRadioDialogProps) { - const {title, content, onOk} = props; - const orientation = useOrientation(); - return ( -

- {title} - ( - { - if (isObject(item)) { - onOk?.(item.value); - } else { - onOk?.(item); - } - hideDialog(); - }} - heightType="small"> - - - )} - /> - - ); -} +import React from 'react'; +import {FlatList} from 'react-native-gesture-handler'; +import {hideDialog} from '../useDialog'; +import Dialog from './base'; +import ListItem from '@/components/base/listItem'; +import useOrientation from '@/hooks/useOrientation'; +import {vmax, vmin} from '@/utils/rpx'; + +interface IKV { + key: T; + value: T; +} + +interface IRadioDialogProps { + title: string; + content: Array>; + onOk?: (value: T) => void; +} + +function isObject(v: string | number | IKV): v is IKV { + return typeof v === 'string' || typeof v === 'number' ? false : true; +} + +export default function RadioDialog(props: IRadioDialogProps) { + const {title, content, onOk} = props; + const orientation = useOrientation(); + return ( + + {title} + ( + { + if (isObject(item)) { + onOk?.(item.value); + } else { + onOk?.(item); + } + hideDialog(); + }} + heightType="small"> + + + )} + /> + + ); +} diff --git a/src/components/dialogs/components/subscribePluginDialog.tsx b/src/components/dialogs/components/subscribePluginDialog.tsx index f84accc0..36b15718 100644 --- a/src/components/dialogs/components/subscribePluginDialog.tsx +++ b/src/components/dialogs/components/subscribePluginDialog.tsx @@ -6,6 +6,7 @@ import {hideDialog} from '../useDialog'; import Dialog from './base'; import Input from '@/components/base/input'; import useColors from '@/hooks/useColors'; + interface ISubscribeItem { name: string; url: string; diff --git a/src/components/mediaItem/LyricItem.tsx b/src/components/mediaItem/LyricItem.tsx index 207bc858..216092f8 100644 --- a/src/components/mediaItem/LyricItem.tsx +++ b/src/components/mediaItem/LyricItem.tsx @@ -1,35 +1,35 @@ -import React from 'react'; -import ListItem from '@/components/base/listItem'; -import {ImgAsset} from '@/constants/assetsConst'; -import TitleAndTag from './titleAndTag'; - -interface IAlbumResultsProps { - lyricItem: ILyric.ILyricItem; - onPress?: (musicItem: ILyric.ILyricItem) => void; -} -export default function LyricItem(props: IAlbumResultsProps) { - const {lyricItem, onPress} = props; - - return ( - { - onPress?.(lyricItem); - }}> - - - } - /> - - ); -} +import React from 'react'; +import ListItem from '@/components/base/listItem'; +import {ImgAsset} from '@/constants/assetsConst'; +import TitleAndTag from './titleAndTag'; + +interface IAlbumResultsProps { + lyricItem: ILyric.ILyricItem; + onPress?: (musicItem: ILyric.ILyricItem) => void; +} +export default function LyricItem(props: IAlbumResultsProps) { + const {lyricItem, onPress} = props; + + return ( + { + onPress?.(lyricItem); + }}> + + + } + /> + + ); +} diff --git a/src/components/mediaItem/albumItem.tsx b/src/components/mediaItem/albumItem.tsx index bb83d133..35879f6c 100644 --- a/src/components/mediaItem/albumItem.tsx +++ b/src/components/mediaItem/albumItem.tsx @@ -1,55 +1,55 @@ -import React from 'react'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import ListItem from '@/components/base/listItem'; -import {ImgAsset} from '@/constants/assetsConst'; -import TitleAndTag from './titleAndTag'; - -interface IAlbumResultsProps { - albumItem: IAlbum.IAlbumItem; -} - -export default function AlbumItem(props: IAlbumResultsProps) { - const {albumItem} = props; - const navigate = useNavigate(); - - return ( - { - navigate(ROUTE_PATH.ALBUM_DETAIL, { - albumItem, - }); - }}> - - - } - description={`${albumItem.artist ?? ''} ${ - albumItem.date ?? '' - }`} - /> - - // { - // navigate(ROUTE_PATH.ALBUM_DETAIL, { - // albumItem, - // }); - // }} - // /> - ); -} +import React from 'react'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import ListItem from '@/components/base/listItem'; +import {ImgAsset} from '@/constants/assetsConst'; +import TitleAndTag from './titleAndTag'; + +interface IAlbumResultsProps { + albumItem: IAlbum.IAlbumItem; +} + +export default function AlbumItem(props: IAlbumResultsProps) { + const {albumItem} = props; + const navigate = useNavigate(); + + return ( + { + navigate(ROUTE_PATH.ALBUM_DETAIL, { + albumItem, + }); + }}> + + + } + description={`${albumItem.artist ?? ''} ${ + albumItem.date ?? '' + }`} + /> + + // { + // navigate(ROUTE_PATH.ALBUM_DETAIL, { + // albumItem, + // }); + // }} + // /> + ); +} diff --git a/src/components/mediaItem/musicItem.tsx b/src/components/mediaItem/musicItem.tsx index 1786b3bf..2b474cef 100644 --- a/src/components/mediaItem/musicItem.tsx +++ b/src/components/mediaItem/musicItem.tsx @@ -1,119 +1,119 @@ -import React, {ReactNode} from 'react'; -import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'; -import rpx from '@/utils/rpx'; -import ListItem from '../base/listItem'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -import LocalMusicSheet from '@/core/localMusicSheet'; -import {showPanel} from '../panels/usePanel'; -import TitleAndTag from './titleAndTag'; -import ThemeText from '../base/themeText'; -import TrackPlayer from '@/core/trackPlayer'; - -interface IMusicItemProps { - index?: string | number; - showMoreIcon?: boolean; - musicItem: IMusic.IMusicItem; - musicSheet?: IMusic.IMusicSheetItem; - onItemPress?: (musicItem: IMusic.IMusicItem) => void; - onItemLongPress?: () => void; - itemPaddingRight?: number; - left?: () => ReactNode; - containerStyle?: StyleProp; -} -export default function MusicItem(props: IMusicItemProps) { - const { - musicItem, - index, - onItemPress, - onItemLongPress, - musicSheet, - itemPaddingRight, - showMoreIcon = true, - left: Left, - containerStyle, - } = props; - - return ( - { - if (onItemPress) { - onItemPress(musicItem); - } else { - TrackPlayer.play(musicItem); - } - }}> - {Left ? : null} - {index !== undefined ? ( - - {index} - - ) : null} - - } - description={ - - {LocalMusicSheet.isLocalMusic(musicItem) && ( - - )} - - {musicItem.artist} - {musicItem.album ? ` - ${musicItem.album}` : ''} - - - } - /> - {showMoreIcon ? ( - { - showPanel('MusicItemOptions', { - musicItem, - musicSheet, - }); - }} - /> - ) : null} - - ); -} - -const styles = StyleSheet.create({ - icon: { - marginRight: rpx(6), - }, - descContainer: { - flexDirection: 'row', - marginTop: rpx(16), - }, - - indexText: { - fontStyle: 'italic', - textAlign: 'center', - }, -}); +import React from 'react'; +import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'; +import rpx from '@/utils/rpx'; +import ListItem from '../base/listItem'; + +import LocalMusicSheet from '@/core/localMusicSheet'; +import {showPanel} from '../panels/usePanel'; +import TitleAndTag from './titleAndTag'; +import ThemeText from '../base/themeText'; +import TrackPlayer from '@/core/trackPlayer'; +import Icon from '@/components/base/icon.tsx'; + +interface IMusicItemProps { + index?: string | number; + showMoreIcon?: boolean; + musicItem: IMusic.IMusicItem; + musicSheet?: IMusic.IMusicSheetItem; + onItemPress?: (musicItem: IMusic.IMusicItem) => void; + onItemLongPress?: () => void; + itemPaddingRight?: number; + left?: () => JSX.Element; + containerStyle?: StyleProp; +} +export default function MusicItem(props: IMusicItemProps) { + const { + musicItem, + index, + onItemPress, + onItemLongPress, + musicSheet, + itemPaddingRight, + showMoreIcon = true, + left: Left, + containerStyle, + } = props; + + return ( + { + if (onItemPress) { + onItemPress(musicItem); + } else { + TrackPlayer.play(musicItem); + } + }}> + {Left ? : null} + {index !== undefined ? ( + + {index} + + ) : null} + + } + description={ + + {LocalMusicSheet.isLocalMusic(musicItem) && ( + + )} + + {musicItem.artist} + {musicItem.album ? ` - ${musicItem.album}` : ''} + + + } + /> + {showMoreIcon ? ( + { + showPanel('MusicItemOptions', { + musicItem, + musicSheet, + }); + }} + /> + ) : null} + + ); +} + +const styles = StyleSheet.create({ + icon: { + marginRight: rpx(6), + }, + descContainer: { + flexDirection: 'row', + marginTop: rpx(16), + }, + + indexText: { + fontStyle: 'italic', + textAlign: 'center', + }, +}); diff --git a/src/components/mediaItem/topListItem.tsx b/src/components/mediaItem/topListItem.tsx index 9ed528fb..337070c9 100644 --- a/src/components/mediaItem/topListItem.tsx +++ b/src/components/mediaItem/topListItem.tsx @@ -1,35 +1,35 @@ -import React from 'react'; -// import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import ListItem from '@/components/base/listItem'; -import {ImgAsset} from '@/constants/assetsConst'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; - -interface ITopListResultsProps { - pluginHash: string; - topListItem: IMusic.IMusicSheetItemBase; -} - -export default function TopListItem(props: ITopListResultsProps) { - const {pluginHash, topListItem} = props; - const navigate = useNavigate(); - - return ( - { - navigate(ROUTE_PATH.TOP_LIST_DETAIL, { - pluginHash: pluginHash, - topList: topListItem, - }); - }}> - - - - ); -} +import React from 'react'; +// import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import ListItem from '@/components/base/listItem'; +import {ImgAsset} from '@/constants/assetsConst'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; + +interface ITopListResultsProps { + pluginHash: string; + topListItem: IMusic.IMusicSheetItemBase; +} + +export default function TopListItem(props: ITopListResultsProps) { + const {pluginHash, topListItem} = props; + const navigate = useNavigate(); + + return ( + { + navigate(ROUTE_PATH.TOP_LIST_DETAIL, { + pluginHash: pluginHash, + topList: topListItem, + }); + }}> + + + + ); +} diff --git a/src/components/musicBar/index.tsx b/src/components/musicBar/index.tsx index 54216d1b..8aebd13c 100644 --- a/src/components/musicBar/index.tsx +++ b/src/components/musicBar/index.tsx @@ -1,133 +1,131 @@ -import React, {memo, useEffect, useState} from 'react'; -import {Keyboard, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {CircularProgressBase} from 'react-native-circular-progress-indicator'; - -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import {showPanel} from '../panels/usePanel'; -import useColors from '@/hooks/useColors'; -import IconButton from '../base/iconButton'; -import TrackPlayer from '@/core/trackPlayer'; -import {musicIsPaused} from '@/utils/trackUtils'; -import MusicInfo from './musicInfo'; - -function CircularPlayBtn() { - const progress = TrackPlayer.useProgress(); - const musicState = TrackPlayer.useMusicState(); - const colors = useColors(); - - const isPaused = musicIsPaused(musicState); - - return ( - - { - if (isPaused) { - await TrackPlayer.play(); - } else { - await TrackPlayer.pause(); - } - }} - /> - - ); -} -function MusicBar() { - const musicItem = TrackPlayer.useCurrentMusic(); - - const [showKeyboard, setKeyboardStatus] = useState(false); - - const colors = useColors(); - const safeAreaInsets = useSafeAreaInsets(); - - useEffect(() => { - const showSubscription = Keyboard.addListener('keyboardDidShow', () => { - setKeyboardStatus(true); - }); - const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { - setKeyboardStatus(false); - }); - - return () => { - showSubscription.remove(); - hideSubscription.remove(); - }; - }, []); - - return ( - <> - {musicItem && !showKeyboard && ( - { - // navigate(ROUTE_PATH.MUSIC_DETAIL); - // }} - > - - - - { - showPanel('PlayList'); - }} - style={[ - style.actionIcon, - {color: colors.musicBarText}, - ]} - /> - - - )} - - ); -} - -export default memo(MusicBar, () => true); - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - height: rpx(132), - flexDirection: 'row', - alignItems: 'center', - paddingRight: rpx(24), - }, - actionGroup: { - width: rpx(200), - justifyContent: 'flex-end', - flexDirection: 'row', - alignItems: 'center', - }, - actionIcon: { - marginLeft: rpx(36), - }, -}); +import React, {memo, useEffect, useState} from 'react'; +import {Keyboard, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import {CircularProgressBase} from 'react-native-circular-progress-indicator'; + +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import {showPanel} from '../panels/usePanel'; +import useColors from '@/hooks/useColors'; +import IconButton from '../base/iconButton'; +import TrackPlayer from '@/core/trackPlayer'; +import {musicIsPaused} from '@/utils/trackUtils'; +import MusicInfo from './musicInfo'; +import Icon from '@/components/base/icon.tsx'; + +function CircularPlayBtn() { + const progress = TrackPlayer.useProgress(); + const musicState = TrackPlayer.useMusicState(); + const colors = useColors(); + + const isPaused = musicIsPaused(musicState); + + return ( + + { + if (isPaused) { + await TrackPlayer.play(); + } else { + await TrackPlayer.pause(); + } + }} + /> + + ); +} +function MusicBar() { + const musicItem = TrackPlayer.useCurrentMusic(); + + const [showKeyboard, setKeyboardStatus] = useState(false); + + const colors = useColors(); + const safeAreaInsets = useSafeAreaInsets(); + + useEffect(() => { + const showSubscription = Keyboard.addListener('keyboardDidShow', () => { + setKeyboardStatus(true); + }); + const hideSubscription = Keyboard.addListener('keyboardDidHide', () => { + setKeyboardStatus(false); + }); + + return () => { + showSubscription.remove(); + hideSubscription.remove(); + }; + }, []); + + return ( + <> + {musicItem && !showKeyboard && ( + { + // navigate(ROUTE_PATH.MUSIC_DETAIL); + // }} + > + + + + { + showPanel('PlayList'); + }} + color={colors.musicBarText} + style={[style.actionIcon]} + /> + + + )} + + ); +} + +export default memo(MusicBar, () => true); + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + height: rpx(132), + flexDirection: 'row', + alignItems: 'center', + paddingRight: rpx(24), + }, + actionGroup: { + width: rpx(200), + justifyContent: 'flex-end', + flexDirection: 'row', + alignItems: 'center', + }, + actionIcon: { + marginLeft: rpx(36), + }, +}); diff --git a/src/components/musicBar/musicInfo.tsx b/src/components/musicBar/musicInfo.tsx index b3a27b5d..aa1caebc 100644 --- a/src/components/musicBar/musicInfo.tsx +++ b/src/components/musicBar/musicInfo.tsx @@ -10,8 +10,8 @@ import {ROUTE_PATH, useNavigate} from '@/entry/router'; import {Gesture, GestureDetector} from 'react-native-gesture-handler'; import TrackPlayer from '@/core/trackPlayer'; import Animated, { - SharedValue, runOnJS, + SharedValue, useAnimatedStyle, useSharedValue, withTiming, diff --git a/src/components/musicSheetPage/components/navBar.tsx b/src/components/musicSheetPage/components/navBar.tsx index 01c80378..62ce3551 100644 --- a/src/components/musicSheetPage/components/navBar.tsx +++ b/src/components/musicSheetPage/components/navBar.tsx @@ -1,44 +1,44 @@ -import React from 'react'; - -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import AppBar from '@/components/base/appBar'; - -interface INavBarProps { - navTitle: string; - musicList: IMusic.IMusicItem[] | null; -} - -export default function (props: INavBarProps) { - const navigate = useNavigate(); - const {navTitle, musicList = []} = props; - - return ( - - {navTitle} - - ); -} +import React from 'react'; + +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import AppBar from '@/components/base/appBar'; + +interface INavBarProps { + navTitle: string; + musicList: IMusic.IMusicItem[] | null; +} + +export default function (props: INavBarProps) { + const navigate = useNavigate(); + const {navTitle, musicList = []} = props; + + return ( + + {navTitle} + + ); +} diff --git a/src/components/panels/types/addToMusicSheet.tsx b/src/components/panels/types/addToMusicSheet.tsx index d1c8de9c..eed82b85 100644 --- a/src/components/panels/types/addToMusicSheet.tsx +++ b/src/components/panels/types/addToMusicSheet.tsx @@ -1,127 +1,127 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx, {vmax} from '@/utils/rpx'; -import ListItem from '@/components/base/listItem'; -import MusicSheet from '@/core/musicSheet'; -import {ImgAsset} from '@/constants/assetsConst'; -import Toast from '@/utils/toast'; - -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import PanelBase from '../base/panelBase'; -import {FlatList} from 'react-native-gesture-handler'; -import {showPanel, hidePanel} from '../usePanel'; -import PanelHeader from '../base/panelHeader'; - -interface IAddToMusicSheetProps { - musicItem: IMusic.IMusicItem | IMusic.IMusicItem[]; - // 如果是新建歌单,可以传入一个默认的名称 - newSheetDefaultName?: string; -} - -export default function AddToMusicSheet(props: IAddToMusicSheetProps) { - const sheets = MusicSheet.useSheets(); - - const {musicItem = [], newSheetDefaultName} = props ?? {}; - const safeAreaInsets = useSafeAreaInsets(); - - return ( - ( - <> - - - sheet.id} - style={{ - marginBottom: safeAreaInsets.bottom, - }} - ListHeaderComponent={ - { - showPanel('NewMusicSheet', { - defaultName: newSheetDefaultName, - async onSheetCreated(sheetId) { - try { - await MusicSheet.addMusic( - sheetId, - musicItem, - ); - Toast.success( - '添加到歌单成功', - ); - } catch { - Toast.warn( - '添加到歌单失败', - ); - } - }, - onCancel() { - showPanel('AddToMusicSheet', { - musicItem: musicItem, - newSheetDefaultName, - }); - }, - }); - }}> - - - - } - renderItem={({item: sheet}) => ( - { - try { - await MusicSheet.addMusic( - sheet.id, - musicItem, - ); - hidePanel(); - Toast.success('添加到歌单成功'); - } catch { - Toast.warn('添加到歌单失败'); - } - }}> - - - - )} - /> - - - )} - height={vmax(70)} - /> - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - flex: 1, - }, - header: { - paddingHorizontal: rpx(24), - marginTop: rpx(36), - marginBottom: rpx(36), - }, -}); +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx, {vmax} from '@/utils/rpx'; +import ListItem from '@/components/base/listItem'; +import MusicSheet from '@/core/musicSheet'; +import {ImgAsset} from '@/constants/assetsConst'; +import Toast from '@/utils/toast'; + +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import PanelBase from '../base/panelBase'; +import {FlatList} from 'react-native-gesture-handler'; +import {hidePanel, showPanel} from '../usePanel'; +import PanelHeader from '../base/panelHeader'; + +interface IAddToMusicSheetProps { + musicItem: IMusic.IMusicItem | IMusic.IMusicItem[]; + // 如果是新建歌单,可以传入一个默认的名称 + newSheetDefaultName?: string; +} + +export default function AddToMusicSheet(props: IAddToMusicSheetProps) { + const sheets = MusicSheet.useSheets(); + + const {musicItem = [], newSheetDefaultName} = props ?? {}; + const safeAreaInsets = useSafeAreaInsets(); + + return ( + ( + <> + + + sheet.id} + style={{ + marginBottom: safeAreaInsets.bottom, + }} + ListHeaderComponent={ + { + showPanel('NewMusicSheet', { + defaultName: newSheetDefaultName, + async onSheetCreated(sheetId) { + try { + await MusicSheet.addMusic( + sheetId, + musicItem, + ); + Toast.success( + '添加到歌单成功', + ); + } catch { + Toast.warn( + '添加到歌单失败', + ); + } + }, + onCancel() { + showPanel('AddToMusicSheet', { + musicItem: musicItem, + newSheetDefaultName, + }); + }, + }); + }}> + + + + } + renderItem={({item: sheet}) => ( + { + try { + await MusicSheet.addMusic( + sheet.id, + musicItem, + ); + hidePanel(); + Toast.success('添加到歌单成功'); + } catch { + Toast.warn('添加到歌单失败'); + } + }}> + + + + )} + /> + + + )} + height={vmax(70)} + /> + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + flex: 1, + }, + header: { + paddingHorizontal: rpx(24), + marginTop: rpx(36), + marginBottom: rpx(36), + }, +}); diff --git a/src/components/panels/types/colorPicker.tsx b/src/components/panels/types/colorPicker.tsx index 469d1845..ef53aceb 100644 --- a/src/components/panels/types/colorPicker.tsx +++ b/src/components/panels/types/colorPicker.tsx @@ -61,7 +61,7 @@ export default function ColorPicker(props: IColorPickerProps) { const slPan = Gesture.Pan() .onUpdate(event => { const newTimeStamp = Date.now(); - if (newTimeStamp - lastTimestampRef.current > 33) { + if (newTimeStamp - lastTimestampRef.current > 60) { lastTimestampRef.current = newTimeStamp; } else { return; diff --git a/src/components/panels/types/importMusicSheet.tsx b/src/components/panels/types/importMusicSheet.tsx index ca8e4573..45e3e411 100644 --- a/src/components/panels/types/importMusicSheet.tsx +++ b/src/components/panels/types/importMusicSheet.tsx @@ -1,95 +1,95 @@ -import React from 'react'; -import {View} from 'react-native'; -import {vmax} from '@/utils/rpx'; -import ListItem from '@/components/base/listItem'; -import Toast from '@/utils/toast'; - -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import PanelBase from '../base/panelBase'; -import {FlatList} from 'react-native-gesture-handler'; -import {showPanel} from '../usePanel'; -import PanelHeader from '../base/panelHeader'; -import PluginManager from '@/core/pluginManager'; -import NoPlugin from '@/components/base/noPlugin'; -import globalStyle from '@/constants/globalStyle'; -import {showDialog} from '@/components/dialogs/useDialog'; - -export default function ImportMusicSheet() { - const plugins = PluginManager.useSortedPlugins() || []; - - const validPlugins = plugins.filter(it => !!it.instance?.importMusicSheet); - - const safeAreaInsets = useSafeAreaInsets(); - - return ( - ( - <> - - {validPlugins.length ? ( - - plugin.hash} - style={{ - marginBottom: safeAreaInsets.bottom, - }} - renderItem={({item: plugin}) => ( - { - showPanel('SimpleInput', { - title: '导入歌单', - placeholder: '输入目标歌单', - hints: plugin.instance.hints - ?.importMusicSheet, - maxLength: 1000, - async onOk(text, closePanel) { - Toast.success( - '正在导入中...', - ); - closePanel(); - const result = - await plugin.methods.importMusicSheet( - text, - ); - if (result.length > 0) { - showDialog( - 'SimpleDialog', - { - title: '准备导入', - content: `发现${result.length}首歌曲! 现在开始导入吗?`, - onOk() { - showPanel( - 'AddToMusicSheet', - { - musicItem: - result, - }, - ); - }, - }, - ); - } else { - Toast.warn( - '链接有误或目标歌单为空', - ); - } - }, - }); - }}> - - - )} - /> - - ) : ( - - )} - - )} - /> - ); -} +import React from 'react'; +import {View} from 'react-native'; +import {vmax} from '@/utils/rpx'; +import ListItem from '@/components/base/listItem'; +import Toast from '@/utils/toast'; + +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import PanelBase from '../base/panelBase'; +import {FlatList} from 'react-native-gesture-handler'; +import {showPanel} from '../usePanel'; +import PanelHeader from '../base/panelHeader'; +import PluginManager from '@/core/pluginManager'; +import NoPlugin from '@/components/base/noPlugin'; +import globalStyle from '@/constants/globalStyle'; +import {showDialog} from '@/components/dialogs/useDialog'; + +export default function ImportMusicSheet() { + const plugins = PluginManager.useSortedPlugins() || []; + + const validPlugins = plugins.filter(it => !!it.instance?.importMusicSheet); + + const safeAreaInsets = useSafeAreaInsets(); + + return ( + ( + <> + + {validPlugins.length ? ( + + plugin.hash} + style={{ + marginBottom: safeAreaInsets.bottom, + }} + renderItem={({item: plugin}) => ( + { + showPanel('SimpleInput', { + title: '导入歌单', + placeholder: '输入目标歌单', + hints: plugin.instance.hints + ?.importMusicSheet, + maxLength: 1000, + async onOk(text, closePanel) { + Toast.success( + '正在导入中...', + ); + closePanel(); + const result = + await plugin.methods.importMusicSheet( + text, + ); + if (result.length > 0) { + showDialog( + 'SimpleDialog', + { + title: '准备导入', + content: `发现${result.length}首歌曲! 现在开始导入吗?`, + onOk() { + showPanel( + 'AddToMusicSheet', + { + musicItem: + result, + }, + ); + }, + }, + ); + } else { + Toast.warn( + '链接有误或目标歌单为空', + ); + } + }, + }); + }}> + + + )} + /> + + ) : ( + + )} + + )} + /> + ); +} diff --git a/src/components/panels/types/musicItemOptions.tsx b/src/components/panels/types/musicItemOptions.tsx index bc59f056..c36d0a8f 100644 --- a/src/components/panels/types/musicItemOptions.tsx +++ b/src/components/panels/types/musicItemOptions.tsx @@ -1,308 +1,316 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import MusicSheet from '@/core/musicSheet'; -import ListItem from '@/components/base/listItem'; -import ThemeText from '@/components/base/themeText'; -import Download from '@/core/download'; -import {ImgAsset} from '@/constants/assetsConst'; -import Clipboard from '@react-native-clipboard/clipboard'; - -import MediaMeta from '@/core/mediaExtra'; -import {getMediaKey} from '@/utils/mediaItem'; -import FastImage from '@/components/base/fastImage'; -import Toast from '@/utils/toast'; -import LocalMusicSheet from '@/core/localMusicSheet'; -import {localMusicSheetId, musicHistorySheetId} from '@/constants/commonConst'; -import {ROUTE_PATH} from '@/entry/router'; - -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import PanelBase from '../base/panelBase'; -import {FlatList} from 'react-native-gesture-handler'; -import musicHistory from '@/core/musicHistory'; -import {showDialog} from '@/components/dialogs/useDialog'; -import {hidePanel, showPanel} from '../usePanel'; -import Divider from '@/components/base/divider'; -import {iconSizeConst} from '@/constants/uiConst'; -import Config from '@/core/config'; -import TrackPlayer from '@/core/trackPlayer'; -import mediaCache from '@/core/mediaCache'; -import LyricManager from '@/core/lyricManager'; - -interface IMusicItemOptionsProps { - /** 歌曲信息 */ - musicItem: IMusic.IMusicItem; - /** 歌曲所在歌单 */ - musicSheet?: IMusic.IMusicSheetItem; - /** 来源 */ - from?: string; -} - -const ITEM_HEIGHT = rpx(96); - -export default function MusicItemOptions(props: IMusicItemOptionsProps) { - const {musicItem, musicSheet, from} = props ?? {}; - - const safeAreaInsets = useSafeAreaInsets(); - - const downloaded = LocalMusicSheet.isLocalMusic(musicItem); - const associatedLrc = MediaMeta.get(musicItem)?.associatedLrc; - - const options = [ - { - icon: 'id-card', - title: `ID: ${getMediaKey(musicItem)}`, - onPress: () => { - mediaCache.setMediaCache(musicItem); - Clipboard.setString( - JSON.stringify( - { - platform: musicItem.platform, - id: musicItem.id, - }, - null, - '', - ), - ); - Toast.success('已复制到剪切板'); - }, - }, - { - icon: 'account-music-outline', - title: `作者: ${musicItem.artist}`, - onPress: () => { - try { - Clipboard.setString(musicItem.artist.toString()); - Toast.success('已复制到剪切板'); - } catch { - Toast.warn('复制失败'); - } - }, - }, - { - icon: 'album', - show: !!musicItem.album, - title: `专辑: ${musicItem.album}`, - onPress: () => { - try { - Clipboard.setString(musicItem.album.toString()); - Toast.success('已复制到剪切板'); - } catch { - Toast.warn('复制失败'); - } - }, - }, - { - icon: 'motion-play-outline', - title: '下一首播放', - onPress: () => { - TrackPlayer.addNext(musicItem); - hidePanel(); - }, - }, - { - icon: 'plus-box-multiple-outline', - title: '添加到歌单', - onPress: () => { - showPanel('AddToMusicSheet', {musicItem}); - }, - }, - { - icon: 'download', - title: '下载', - show: !downloaded, - onPress: async () => { - showPanel('MusicQuality', { - musicItem, - async onQualityPress(quality) { - Download.downloadMusic(musicItem, quality); - }, - }); - }, - }, - { - icon: 'check-circle-outline', - title: '已下载', - show: !!downloaded, - }, - { - icon: 'trash-can-outline', - title: '删除', - show: !!musicSheet, - onPress: async () => { - if (musicSheet?.id === localMusicSheetId) { - await LocalMusicSheet.removeMusic(musicItem); - } else if (musicSheet?.id === musicHistorySheetId) { - await musicHistory.removeMusic(musicItem); - } else { - await MusicSheet.removeMusic(musicSheet!.id, musicItem); - } - Toast.success('已删除'); - hidePanel(); - }, - }, - { - icon: 'delete-forever-outline', - title: '删除本地下载', - show: !!downloaded, - onPress: () => { - showDialog('SimpleDialog', { - title: '删除本地下载', - content: '将会删除已下载的本地文件,确定继续吗?', - async onOk() { - try { - await LocalMusicSheet.removeMusic(musicItem, true); - Toast.success('已删除本地下载'); - } catch (e: any) { - Toast.warn(`删除失败 ${e?.message ?? e}`); - } - }, - }); - hidePanel(); - }, - }, - { - icon: 'link-variant', - title: associatedLrc - ? `已关联歌词 ${associatedLrc.platform}@${associatedLrc.id}` - : '关联歌词', - onPress: async () => { - if ( - Config.get('setting.basic.associateLyricType') === 'input' - ) { - showPanel('AssociateLrc', { - musicItem, - }); - } else { - showPanel('SearchLrc', { - musicItem, - }); - } - }, - }, - { - icon: 'link-variant-remove', - title: '解除关联歌词', - show: !!associatedLrc, - onPress: async () => { - MediaMeta.update(musicItem, { - associatedLrc: undefined, - }); - LyricManager.refreshLyric(false, true); - Toast.success('已解除关联歌词'); - hidePanel(); - }, - }, - { - icon: 'timer-outline', - title: '定时关闭', - show: from === ROUTE_PATH.MUSIC_DETAIL, - onPress: () => { - showPanel('TimingClose'); - }, - }, - { - icon: 'file-remove-outline', - title: '清除插件缓存(播放异常时使用)', - onPress: () => { - mediaCache.removeMediaCache(musicItem); - Toast.success('缓存已清除'); - }, - }, - ]; - - return ( - ( - <> - - - - - {musicItem?.title} - - - {musicItem?.artist}{' '} - {musicItem?.album ? `- ${musicItem.album}` : ''} - - - - - - ({ - length: ITEM_HEIGHT, - offset: ITEM_HEIGHT * index, - index, - })} - ListFooterComponent={} - style={[ - style.listWrapper, - { - marginBottom: safeAreaInsets.bottom, - }, - ]} - keyExtractor={_ => _.title} - renderItem={({item}) => - item.show !== false ? ( - - - - - ) : null - } - /> - - - )} - /> - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: rpx(750), - flex: 1, - }, - header: { - width: rpx(750), - height: rpx(200), - flexDirection: 'row', - padding: rpx(24), - }, - listWrapper: { - paddingTop: rpx(12), - }, - artwork: { - width: rpx(140), - height: rpx(140), - borderRadius: rpx(16), - }, - content: { - marginLeft: rpx(36), - width: rpx(526), - height: rpx(140), - justifyContent: 'space-around', - }, - title: { - paddingRight: rpx(24), - }, - footer: { - width: rpx(750), - height: rpx(30), - }, -}); +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import MusicSheet from '@/core/musicSheet'; +import ListItem from '@/components/base/listItem'; +import ThemeText from '@/components/base/themeText'; +import Download from '@/core/download'; +import {ImgAsset} from '@/constants/assetsConst'; +import Clipboard from '@react-native-clipboard/clipboard'; + +import MediaMeta from '@/core/mediaExtra'; +import {getMediaKey} from '@/utils/mediaItem'; +import FastImage from '@/components/base/fastImage'; +import Toast from '@/utils/toast'; +import LocalMusicSheet from '@/core/localMusicSheet'; +import {localMusicSheetId, musicHistorySheetId} from '@/constants/commonConst'; +import {ROUTE_PATH} from '@/entry/router'; + +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import PanelBase from '../base/panelBase'; +import {FlatList} from 'react-native-gesture-handler'; +import musicHistory from '@/core/musicHistory'; +import {showDialog} from '@/components/dialogs/useDialog'; +import {hidePanel, showPanel} from '../usePanel'; +import Divider from '@/components/base/divider'; +import {iconSizeConst} from '@/constants/uiConst'; +import Config from '@/core/config'; +import TrackPlayer from '@/core/trackPlayer'; +import mediaCache from '@/core/mediaCache'; +import LyricManager from '@/core/lyricManager'; +import {IIconName} from '@/components/base/icon.tsx'; + +interface IMusicItemOptionsProps { + /** 歌曲信息 */ + musicItem: IMusic.IMusicItem; + /** 歌曲所在歌单 */ + musicSheet?: IMusic.IMusicSheetItem; + /** 来源 */ + from?: string; +} + +const ITEM_HEIGHT = rpx(96); + +interface IOption { + icon: IIconName; + title: string; + onPress?: () => void; + show?: boolean; +} + +export default function MusicItemOptions(props: IMusicItemOptionsProps) { + const {musicItem, musicSheet, from} = props ?? {}; + + const safeAreaInsets = useSafeAreaInsets(); + + const downloaded = LocalMusicSheet.isLocalMusic(musicItem); + const associatedLrc = MediaMeta.get(musicItem)?.associatedLrc; + + const options: IOption[] = [ + { + icon: 'identification', + title: `ID: ${getMediaKey(musicItem)}`, + onPress: () => { + mediaCache.setMediaCache(musicItem); + Clipboard.setString( + JSON.stringify( + { + platform: musicItem.platform, + id: musicItem.id, + }, + null, + '', + ), + ); + Toast.success('已复制到剪切板'); + }, + }, + { + icon: 'user', + title: `作者: ${musicItem.artist}`, + onPress: () => { + try { + Clipboard.setString(musicItem.artist.toString()); + Toast.success('已复制到剪切板'); + } catch { + Toast.warn('复制失败'); + } + }, + }, + { + icon: 'album-outline', + show: !!musicItem.album, + title: `专辑: ${musicItem.album}`, + onPress: () => { + try { + Clipboard.setString(musicItem.album.toString()); + Toast.success('已复制到剪切板'); + } catch { + Toast.warn('复制失败'); + } + }, + }, + { + icon: 'motion-play', + title: '下一首播放', + onPress: () => { + TrackPlayer.addNext(musicItem); + hidePanel(); + }, + }, + { + icon: 'folder-plus', + title: '添加到歌单', + onPress: () => { + showPanel('AddToMusicSheet', {musicItem}); + }, + }, + { + icon: 'arrow-down-tray', + title: '下载', + show: !downloaded, + onPress: async () => { + showPanel('MusicQuality', { + musicItem, + async onQualityPress(quality) { + Download.downloadMusic(musicItem, quality); + }, + }); + }, + }, + { + icon: 'check-circle-outline', + title: '已下载', + show: !!downloaded, + }, + { + icon: 'trash-outline', + title: '删除', + show: !!musicSheet, + onPress: async () => { + if (musicSheet?.id === localMusicSheetId) { + await LocalMusicSheet.removeMusic(musicItem); + } else if (musicSheet?.id === musicHistorySheetId) { + await musicHistory.removeMusic(musicItem); + } else { + await MusicSheet.removeMusic(musicSheet!.id, musicItem); + } + Toast.success('已删除'); + hidePanel(); + }, + }, + { + icon: 'trash-outline', + title: '删除本地下载', + show: !!downloaded, + onPress: () => { + showDialog('SimpleDialog', { + title: '删除本地下载', + content: '将会删除已下载的本地文件,确定继续吗?', + async onOk() { + try { + await LocalMusicSheet.removeMusic(musicItem, true); + Toast.success('已删除本地下载'); + } catch (e: any) { + Toast.warn(`删除失败 ${e?.message ?? e}`); + } + }, + }); + hidePanel(); + }, + }, + { + icon: 'link', + title: associatedLrc + ? `已关联歌词 ${associatedLrc.platform}@${associatedLrc.id}` + : '关联歌词', + onPress: async () => { + if ( + Config.get('setting.basic.associateLyricType') === 'input' + ) { + showPanel('AssociateLrc', { + musicItem, + }); + } else { + showPanel('SearchLrc', { + musicItem, + }); + } + }, + }, + { + icon: 'link-slash', + title: '解除关联歌词', + show: !!associatedLrc, + onPress: async () => { + MediaMeta.update(musicItem, { + associatedLrc: undefined, + }); + LyricManager.refreshLyric(false, true); + Toast.success('已解除关联歌词'); + hidePanel(); + }, + }, + { + icon: 'alarm-outline', + title: '定时关闭', + show: from === ROUTE_PATH.MUSIC_DETAIL, + onPress: () => { + showPanel('TimingClose'); + }, + }, + { + icon: 'archive-box-x-mark', + title: '清除插件缓存(播放异常时使用)', + onPress: () => { + mediaCache.removeMediaCache(musicItem); + Toast.success('缓存已清除'); + }, + }, + ]; + + return ( + ( + <> + + + + + {musicItem?.title} + + + {musicItem?.artist}{' '} + {musicItem?.album ? `- ${musicItem.album}` : ''} + + + + + + ({ + length: ITEM_HEIGHT, + offset: ITEM_HEIGHT * index, + index, + })} + ListFooterComponent={} + style={[ + style.listWrapper, + { + marginBottom: safeAreaInsets.bottom, + }, + ]} + keyExtractor={_ => _.title} + renderItem={({item}) => + item.show !== false ? ( + + + + + ) : null + } + /> + + + )} + /> + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: rpx(750), + flex: 1, + }, + header: { + width: rpx(750), + height: rpx(200), + flexDirection: 'row', + padding: rpx(24), + }, + listWrapper: { + paddingTop: rpx(12), + }, + artwork: { + width: rpx(140), + height: rpx(140), + borderRadius: rpx(16), + }, + content: { + marginLeft: rpx(36), + width: rpx(526), + height: rpx(140), + justifyContent: 'space-around', + }, + title: { + paddingRight: rpx(24), + }, + footer: { + width: rpx(750), + height: rpx(30), + }, +}); diff --git a/src/components/panels/types/playList/body.tsx b/src/components/panels/types/playList/body.tsx index dffb701b..136eec0a 100644 --- a/src/components/panels/types/playList/body.tsx +++ b/src/components/panels/types/playList/body.tsx @@ -1,153 +1,153 @@ -import React, {useMemo, useRef} from 'react'; -import {Pressable, StyleSheet, Text, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Tag from '@/components/base/tag'; -import ThemeText from '@/components/base/themeText'; -import {fontSizeConst} from '@/constants/uiConst'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {isSameMediaItem} from '@/utils/mediaItem'; -import IconButton from '@/components/base/iconButton'; -import Loading from '@/components/base/loading'; -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import useColors from '@/hooks/useColors'; -import TrackPlayer from '@/core/trackPlayer'; -import {FlashList} from '@shopify/flash-list'; - -const ITEM_HEIGHT = rpx(108); -const ITEM_WIDTH = rpx(750); - -interface IPlayListProps { - item: IMusic.IMusicItem; - isCurrentMusic: boolean; -} - -function _PlayListItem(props: IPlayListProps) { - const colors = useColors(); - const {item, isCurrentMusic} = props; - - return ( - { - TrackPlayer.play(item); - }} - style={style.musicItem}> - {isCurrentMusic && ( - - )} - - {item.title} - {item.artist && ( - - {' '} - - {item.artist} - - )} - - - { - TrackPlayer.remove(item); - }} - /> - - ); -} - -const PlayListItem = React.memo( - _PlayListItem, - (prev, next) => - !!isSameMediaItem(prev.item, next.item) && - prev.isCurrentMusic === next.isCurrentMusic, -); - -interface IBodyProps { - loading?: boolean; -} -export default function Body(props: IBodyProps) { - const {loading} = props; - const playList = TrackPlayer.usePlayList(); - const currentMusicItem = TrackPlayer.useCurrentMusic(); - const listRef = useRef | null>(); - const safeAreaInsets = useSafeAreaInsets(); - - const initIndex = useMemo(() => { - const id = playList.findIndex(_ => - isSameMediaItem(currentMusicItem, _), - ); - - if (id !== -1) { - return id; - } - return undefined; - }, []); - - const renderItem = ({item}: {item: IMusic.IMusicItem; index: number}) => { - return ( - - ); - }; - - return loading ? ( - - ) : ( - - { - listRef.current = _; - }} - extraData={{currentMusicItem}} - estimatedItemSize={ITEM_HEIGHT} - data={playList} - initialScrollIndex={initIndex} - renderItem={renderItem} - /> - - ); -} - -const style = StyleSheet.create({ - playList: { - width: rpx(750), - flex: 1, - }, - currentPlaying: { - marginRight: rpx(6), - }, - musicItem: { - width: ITEM_WIDTH, - height: ITEM_HEIGHT, - paddingHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'center', - }, - musicItemTitle: { - flex: 1, - }, -}); +import React, {useMemo, useRef} from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import Tag from '@/components/base/tag'; +import ThemeText from '@/components/base/themeText'; +import {fontSizeConst} from '@/constants/uiConst'; +import {isSameMediaItem} from '@/utils/mediaItem'; +import IconButton from '@/components/base/iconButton'; +import Loading from '@/components/base/loading'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import useColors from '@/hooks/useColors'; +import TrackPlayer from '@/core/trackPlayer'; +import {FlashList} from '@shopify/flash-list'; +import Icon from '@/components/base/icon.tsx'; + +const ITEM_HEIGHT = rpx(108); +const ITEM_WIDTH = rpx(750); + +interface IPlayListProps { + item: IMusic.IMusicItem; + isCurrentMusic: boolean; +} + +function _PlayListItem(props: IPlayListProps) { + const colors = useColors(); + const {item, isCurrentMusic} = props; + + return ( + { + TrackPlayer.play(item); + }} + style={style.musicItem}> + {isCurrentMusic && ( + + )} + + {item.title} + {item.artist && ( + + {' '} + - {item.artist} + + )} + + + { + TrackPlayer.remove(item); + }} + /> + + ); +} + +const PlayListItem = React.memo( + _PlayListItem, + (prev, next) => + !!isSameMediaItem(prev.item, next.item) && + prev.isCurrentMusic === next.isCurrentMusic, +); + +interface IBodyProps { + loading?: boolean; +} +export default function Body(props: IBodyProps) { + const {loading} = props; + const playList = TrackPlayer.usePlayList(); + const currentMusicItem = TrackPlayer.useCurrentMusic(); + const listRef = useRef | null>(); + const safeAreaInsets = useSafeAreaInsets(); + + const initIndex = useMemo(() => { + const id = playList.findIndex(_ => + isSameMediaItem(currentMusicItem, _), + ); + + if (id !== -1) { + return id; + } + return undefined; + }, []); + + const renderItem = ({item}: {item: IMusic.IMusicItem; index: number}) => { + return ( + + ); + }; + + return loading ? ( + + ) : ( + + { + listRef.current = _; + }} + extraData={{currentMusicItem}} + estimatedItemSize={ITEM_HEIGHT} + data={playList} + initialScrollIndex={initIndex} + renderItem={renderItem} + /> + + ); +} + +const style = StyleSheet.create({ + playList: { + width: rpx(750), + flex: 1, + }, + currentPlaying: { + marginRight: rpx(6), + }, + musicItem: { + width: ITEM_WIDTH, + height: ITEM_HEIGHT, + paddingHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'center', + }, + musicItemTitle: { + flex: 1, + }, +}); diff --git a/src/components/panels/types/playList/header.tsx b/src/components/panels/types/playList/header.tsx index 27800b8d..0027256a 100644 --- a/src/components/panels/types/playList/header.tsx +++ b/src/components/panels/types/playList/header.tsx @@ -1,59 +1,59 @@ -import React from 'react'; -import {InteractionManager, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; -import repeatModeConst from '@/constants/repeatModeConst'; -import IconTextButton from '@/components/base/iconTextButton'; -import TrackPlayer from '@/core/trackPlayer'; - -export default function Header() { - const repeatMode = TrackPlayer.useRepeatMode(); - const playList = TrackPlayer.usePlayList(); - - return ( - - - 播放列表 - - {' '} - ({playList.length}首) - - - { - InteractionManager.runAfterInteractions(() => { - TrackPlayer.toggleRepeatMode(); - }); - }} - icon={repeatModeConst[repeatMode].icon}> - {repeatModeConst[repeatMode].text} - - { - TrackPlayer.clear(); - }}> - 清空 - - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: rpx(750), - height: rpx(80), - paddingHorizontal: rpx(24), - marginTop: rpx(18), - marginBottom: rpx(12), - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - }, - headerText: { - flex: 1, - }, -}); +import React from 'react'; +import {InteractionManager, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import repeatModeConst from '@/constants/repeatModeConst'; +import IconTextButton from '@/components/base/iconTextButton'; +import TrackPlayer from '@/core/trackPlayer'; + +export default function Header() { + const repeatMode = TrackPlayer.useRepeatMode(); + const playList = TrackPlayer.usePlayList(); + + return ( + + + 播放列表 + + {' '} + ({playList.length}首) + + + { + InteractionManager.runAfterInteractions(() => { + TrackPlayer.toggleRepeatMode(); + }); + }} + icon={repeatModeConst[repeatMode].icon}> + {repeatModeConst[repeatMode].text} + + { + TrackPlayer.clear(); + }}> + 清空 + + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: rpx(750), + height: rpx(80), + paddingHorizontal: rpx(24), + marginTop: rpx(18), + marginBottom: rpx(12), + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + headerText: { + flex: 1, + }, +}); diff --git a/src/components/panels/types/searchLrc/useSearchLrc.ts b/src/components/panels/types/searchLrc/useSearchLrc.ts index 6974cfb6..d1365b30 100644 --- a/src/components/panels/types/searchLrc/useSearchLrc.ts +++ b/src/components/panels/types/searchLrc/useSearchLrc.ts @@ -1,6 +1,6 @@ import {devLog, errorLog} from '@/utils/log'; import {RequestStateCode} from '@/constants/commonConst'; -import produce from 'immer'; +import {produce} from 'immer'; import {useCallback, useRef} from 'react'; import PluginManager, {Plugin} from '@/core/pluginManager'; import searchResultStore from './searchResultStore'; diff --git a/src/components/panels/types/setLyricOffset.tsx b/src/components/panels/types/setLyricOffset.tsx index 0cdad9f4..5415213e 100644 --- a/src/components/panels/types/setLyricOffset.tsx +++ b/src/components/panels/types/setLyricOffset.tsx @@ -1,115 +1,115 @@ -import React, {useState} from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; - -import PanelBase from '../base/panelBase'; -import MediaExtra from '@/core/mediaExtra'; -import {iconSizeConst} from '@/constants/uiConst'; -import PanelHeader from '../base/panelHeader'; -import {TouchableOpacity} from 'react-native-gesture-handler'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {hidePanel} from '../usePanel'; -import useColors from '@/hooks/useColors'; - -interface IProps { - musicItem: IMusic.IMusicItem; - /** 点击回调 */ - onSubmit?: (offset: number) => void; -} - -export default function SetLyricOffset(props: IProps) { - const {musicItem, onSubmit} = props ?? {}; - - const [offset, setOffset] = useState( - MediaExtra.get(musicItem)?.lyricOffset ?? 0, - ); - - const colors = useColors(); - - let titleStr = - offset === 0 - ? '正常' - : offset < 0 - ? `延后${(-offset).toFixed(1)}s` - : `提前${offset.toFixed(1)}s`; - - return ( - ( - <> - { - onSubmit?.(offset); - }} - onCancel={hidePanel} - /> - - { - setOffset(prev => prev - 0.2); - }}> - - -0.2s - - { - setOffset(0); - }}> - - 重置 - - { - setOffset(prev => prev + 0.2); - }}> - - +0.2s - - - - )} - /> - ); -} - -const styles = StyleSheet.create({ - header: { - width: '100%', - flexDirection: 'row', - padding: rpx(24), - }, - container: { - flex: 1, - paddingHorizontal: rpx(24), - paddingBottom: rpx(36), - width: '100%', - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-around', - }, - btn: { - width: rpx(144), - height: rpx(144), - alignItems: 'center', - justifyContent: 'space-around', - }, -}); +import React, {useState} from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; + +import PanelBase from '../base/panelBase'; +import MediaExtra from '@/core/mediaExtra'; +import {iconSizeConst} from '@/constants/uiConst'; +import PanelHeader from '../base/panelHeader'; +import {TouchableOpacity} from 'react-native-gesture-handler'; +import {hidePanel} from '../usePanel'; +import useColors from '@/hooks/useColors'; +import Icon from '@/components/base/icon.tsx'; + +interface IProps { + musicItem: IMusic.IMusicItem; + /** 点击回调 */ + onSubmit?: (offset: number) => void; +} + +export default function SetLyricOffset(props: IProps) { + const {musicItem, onSubmit} = props ?? {}; + + const [offset, setOffset] = useState( + MediaExtra.get(musicItem)?.lyricOffset ?? 0, + ); + + const colors = useColors(); + + let titleStr = + offset === 0 + ? '正常' + : offset < 0 + ? `延后${(-offset).toFixed(1)}s` + : `提前${offset.toFixed(1)}s`; + + return ( + ( + <> + { + onSubmit?.(offset); + }} + onCancel={hidePanel} + /> + + { + setOffset(prev => prev - 0.2); + }}> + + -0.2s + + { + setOffset(0); + }}> + + 重置 + + { + setOffset(prev => prev + 0.2); + }}> + + +0.2s + + + + )} + /> + ); +} + +const styles = StyleSheet.create({ + header: { + width: '100%', + flexDirection: 'row', + padding: rpx(24), + }, + container: { + flex: 1, + paddingHorizontal: rpx(24), + paddingBottom: rpx(36), + width: '100%', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-around', + }, + btn: { + width: rpx(144), + height: rpx(144), + alignItems: 'center', + justifyContent: 'space-around', + }, +}); diff --git a/src/components/panels/types/setUserVariables.tsx b/src/components/panels/types/setUserVariables.tsx index 8c64327f..7907cba7 100644 --- a/src/components/panels/types/setUserVariables.tsx +++ b/src/components/panels/types/setUserVariables.tsx @@ -1,110 +1,110 @@ -import React, {useRef} from 'react'; -import {KeyboardAvoidingView, StyleSheet} from 'react-native'; -import rpx, {vmax} from '@/utils/rpx'; -import useColors from '@/hooks/useColors'; - -import ThemeText from '@/components/base/themeText'; -import {ScrollView} from 'react-native-gesture-handler'; -import PanelBase from '../base/panelBase'; -import {hidePanel} from '../usePanel'; -import ListItem from '@/components/base/listItem'; -import Input from '@/components/base/input'; -import globalStyle from '@/constants/globalStyle'; -import PanelHeader from '../base/panelHeader'; - -interface IUserVariablesProps { - onOk: (values: Record, closePanel: () => void) => void; - variables: IPlugin.IUserVariable[]; - initValues?: Record; - onCancel?: () => void; -} - -export default function SetUserVariables(props: IUserVariablesProps) { - const {onOk, onCancel, variables, initValues = {}} = props; - - const colors = useColors(); - - const resultRef = useRef({...initValues}); - - return ( - ( - <> - { - onCancel?.(); - hidePanel(); - }} - onOk={async () => { - onOk(resultRef.current, hidePanel); - }} - /> - - - {variables.map(it => ( - - - {it.name ?? it.key} - - { - resultRef.current[it.key] = e; - }} - style={[ - styles.input, - { - backgroundColor: - colors.placeholder, - }, - ]} - placeholder={it.hint} - /> - - ))} - - - - )} - /> - ); -} - -const styles = StyleSheet.create({ - wrapper: { - width: rpx(750), - }, - opeartions: { - width: rpx(750), - paddingHorizontal: rpx(24), - flexDirection: 'row', - height: rpx(100), - alignItems: 'center', - justifyContent: 'space-between', - }, - listItem: { - justifyContent: 'space-between', - }, - varName: { - maxWidth: '35%', - }, - input: { - width: '50%', - paddingVertical: rpx(8), - paddingHorizontal: rpx(12), - borderRadius: rpx(8), - }, -}); +import React, {useRef} from 'react'; +import {KeyboardAvoidingView, StyleSheet} from 'react-native'; +import rpx, {vmax} from '@/utils/rpx'; +import useColors from '@/hooks/useColors'; + +import ThemeText from '@/components/base/themeText'; +import {ScrollView} from 'react-native-gesture-handler'; +import PanelBase from '../base/panelBase'; +import {hidePanel} from '../usePanel'; +import ListItem from '@/components/base/listItem'; +import Input from '@/components/base/input'; +import globalStyle from '@/constants/globalStyle'; +import PanelHeader from '../base/panelHeader'; + +interface IUserVariablesProps { + onOk: (values: Record, closePanel: () => void) => void; + variables: IPlugin.IUserVariable[]; + initValues?: Record; + onCancel?: () => void; +} + +export default function SetUserVariables(props: IUserVariablesProps) { + const {onOk, onCancel, variables, initValues = {}} = props; + + const colors = useColors(); + + const resultRef = useRef({...initValues}); + + return ( + ( + <> + { + onCancel?.(); + hidePanel(); + }} + onOk={async () => { + onOk(resultRef.current, hidePanel); + }} + /> + + + {variables.map(it => ( + + + {it.name ?? it.key} + + { + resultRef.current[it.key] = e; + }} + style={[ + styles.input, + { + backgroundColor: + colors.placeholder, + }, + ]} + placeholder={it.hint} + /> + + ))} + + + + )} + /> + ); +} + +const styles = StyleSheet.create({ + wrapper: { + width: rpx(750), + }, + opeartions: { + width: rpx(750), + paddingHorizontal: rpx(24), + flexDirection: 'row', + height: rpx(100), + alignItems: 'center', + justifyContent: 'space-between', + }, + listItem: { + justifyContent: 'space-between', + }, + varName: { + maxWidth: '35%', + }, + input: { + width: '50%', + paddingVertical: rpx(8), + paddingHorizontal: rpx(12), + borderRadius: rpx(8), + }, +}); diff --git a/src/components/panels/types/simpleSelect.tsx b/src/components/panels/types/simpleSelect.tsx index f50a5229..1de73667 100644 --- a/src/components/panels/types/simpleSelect.tsx +++ b/src/components/panels/types/simpleSelect.tsx @@ -1,81 +1,81 @@ -import React, {Fragment} from 'react'; -import {ScrollView, StyleSheet} from 'react-native'; -import rpx from '@/utils/rpx'; -import {useSafeAreaInsets} from 'react-native-safe-area-context'; -import PanelBase from '../base/panelBase'; -import {hidePanel} from '../usePanel'; -import ListItem from '@/components/base/listItem'; -import PanelHeader from '../base/panelHeader'; - -interface ICandidateItem { - title?: string; - value: any; -} - -interface ISimpleSelectProps { - height?: number; - header?: string; - candidates?: Array; - onPress?: (item: ICandidateItem) => void; -} - -export default function SimpleSelect(props: ISimpleSelectProps) { - const { - height = rpx(520), - header = '', - candidates = [], - onPress, - } = props ?? {}; - - const safeAreaInsets = useSafeAreaInsets(); - - return ( - ( - <> - - - - {candidates.map((it, index) => { - return ( - - { - onPress?.(it); - hidePanel(); - }}> - - - - ); - })} - - - )} - /> - ); -} - -const styles = StyleSheet.create({ - header: { - width: '100%', - flexDirection: 'row', - padding: rpx(24), - }, - body: { - flex: 1, - }, - item: { - height: rpx(96), - justifyContent: 'center', - }, -}); +import React, {Fragment} from 'react'; +import {ScrollView, StyleSheet} from 'react-native'; +import rpx from '@/utils/rpx'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; +import PanelBase from '../base/panelBase'; +import {hidePanel} from '../usePanel'; +import ListItem from '@/components/base/listItem'; +import PanelHeader from '../base/panelHeader'; + +interface ICandidateItem { + title?: string; + value: any; +} + +interface ISimpleSelectProps { + height?: number; + header?: string; + candidates?: Array; + onPress?: (item: ICandidateItem) => void; +} + +export default function SimpleSelect(props: ISimpleSelectProps) { + const { + height = rpx(520), + header = '', + candidates = [], + onPress, + } = props ?? {}; + + const safeAreaInsets = useSafeAreaInsets(); + + return ( + ( + <> + + + + {candidates.map((it, index) => { + return ( + + { + onPress?.(it); + hidePanel(); + }}> + + + + ); + })} + + + )} + /> + ); +} + +const styles = StyleSheet.create({ + header: { + width: '100%', + flexDirection: 'row', + padding: rpx(24), + }, + body: { + flex: 1, + }, + item: { + height: rpx(96), + justifyContent: 'center', + }, +}); diff --git a/src/components/panels/types/timingClose.tsx b/src/components/panels/types/timingClose.tsx index f086a5e8..5011ec21 100644 --- a/src/components/panels/types/timingClose.tsx +++ b/src/components/panels/types/timingClose.tsx @@ -1,5 +1,5 @@ import React, {useCallback, useEffect, useRef} from 'react'; -import {StyleSheet, View, TouchableOpacity} from 'react-native'; +import {StyleSheet, TouchableOpacity, View} from 'react-native'; import rpx from '@/utils/rpx'; import ThemeText from '@/components/base/themeText'; diff --git a/src/constants/assetsConst.ts b/src/constants/assetsConst.ts index ec085b08..f3e0046b 100644 --- a/src/constants/assetsConst.ts +++ b/src/constants/assetsConst.ts @@ -3,7 +3,6 @@ export const ImgAsset = { addBackground: require('@/assets/imgs/add-image.png'), add: require('@/assets/imgs/add.png'), logo: require('@/assets/imgs/logo.png'), - logo1: require('@/assets/imgs/logo1.png'), author: require('@/assets/imgs/author.jpg'), logoTransparent: require('@/assets/imgs/logo-transparent.png'), wechatChannel: require('@/assets/imgs/wechat_channel.jpg'), diff --git a/src/constants/repeatModeConst.ts b/src/constants/repeatModeConst.ts index 51f1dda0..a7cfe56b 100644 --- a/src/constants/repeatModeConst.ts +++ b/src/constants/repeatModeConst.ts @@ -2,15 +2,15 @@ import {MusicRepeatMode} from '@/core/trackPlayer'; export default { [MusicRepeatMode.QUEUE]: { - icon: 'repeat', + icon: 'repeat-song-1', text: '列表循环', }, [MusicRepeatMode.SINGLE]: { - icon: 'repeat-once', + icon: 'repeat-song', text: '单曲循环', }, [MusicRepeatMode.SHUFFLE]: { - icon: 'shuffle-variant', + icon: 'shuffle', text: '随机播放', }, -}; +} as const; diff --git a/src/constants/uiConst.ts b/src/constants/uiConst.ts index b43dca26..f3cabbe9 100644 --- a/src/constants/uiConst.ts +++ b/src/constants/uiConst.ts @@ -25,11 +25,11 @@ const fontWeightConst = { } as const; const iconSizeConst = { - small: rpx(32), - light: rpx(40), - normal: rpx(48), - big: rpx(64), - large: rpx(88), + small: rpx(30), + light: rpx(36), + normal: rpx(42), + big: rpx(60), + large: rpx(72), }; type ColorKey = 'normal' | 'secondary' | 'highlight' | 'primary'; diff --git a/src/core/cache.old.ts b/src/core/cache.old.ts deleted file mode 100644 index e06e248f..00000000 --- a/src/core/cache.old.ts +++ /dev/null @@ -1,126 +0,0 @@ -import {internalSerializeKey, StorageKeys} from '@/constants/commonConst'; -import {addFileScheme} from '@/utils/fileUtils'; -import {trace} from '@/utils/log'; -import {getMediaKey} from '@/utils/mediaItem'; -import {getStorage, setStorage} from '@/utils/storage'; -import produce from 'immer'; -import LRUCache from 'lru-cache'; -import objectPath from 'object-path'; -import {exists, unlink} from 'react-native-fs'; -import MediaMeta from './mediaMeta.old'; -import PluginManager from './pluginManager'; - -/** 缓存一些解析结果、临时的歌词文件等等 - * 触发缓存的时机:播放、部分特殊设置 - */ -// const localPathKey = []; -const cache = new LRUCache({ - max: 800, - maxSize: 5 * 1024 * 1024, //5MB - sizeCalculation: value => { - // todo: bytelength - return JSON.stringify(value, null, '').length; - }, - dispose: async (value, key) => { - // todo: 如果meta中也用到了,就不删除了 - // 全都放在internalkey/local中 - const localFiles = value?.[internalSerializeKey]?.local; - if (localFiles) { - const localMeta = - MediaMeta.getByMediaKey(key)?.[internalSerializeKey]?.local; - for (let [k, fp] of Object.entries(localFiles)) { - if (!localMeta?.[k] && fp) { - trace('清理缓存', fp); - fp = addFileScheme(fp); - if (await exists(fp)) { - unlink(fp); - } - } - } - } - syncCache(); - }, - allowStale: false, -}); - -async function setupCache() { - const cacheStorage = await getStorage(StorageKeys.MediaCache); - if (cacheStorage && Array.isArray(cacheStorage)) { - cache.load(cacheStorage); - } -} - -function getCache( - mediaItem: ICommon.IMediaBase, -): ICommon.IMediaMeta | undefined { - // sync - const result = cache.get(getMediaKey(mediaItem)); - syncCache(); - return result; -} - -function getCacheInternal( - mediaItem: ICommon.IMediaBase, -): Record | undefined { - return getCache(mediaItem)?.[internalSerializeKey]; -} - -async function clearCache() { - cache.clear(); - return setStorage(StorageKeys.MediaCache, undefined); -} - -function updateCache( - mediaItem: ICommon.IMediaBase, - patch: ICommon.IMediaMeta | Array<[string, any]>, -) { - const mediaKey = getMediaKey(mediaItem); - let cacheData = cache.get(mediaKey); - if (!cacheData || !patch) { - // 自动写入主键 - const primaryKey = PluginManager.getByMedia(mediaItem)?.instance - ?.primaryKey ?? ['id']; - cacheData = {}; - for (let k of primaryKey) { - cacheData[k] = mediaItem[k]; - } - } - if (Array.isArray(patch)) { - cache.set( - mediaKey, - produce(cacheData, draft => { - for (let [objPath, value] of patch) { - objectPath.set(draft, objPath, value); - } - }), - ); - } else { - cache.set(mediaKey, { - ...cacheData, - ...patch, - }); - } - if (__DEV__) { - console.log('CACHE UPDATE, ', cache.dump()); - } - syncCache(); -} - -function syncCache() { - setStorage(StorageKeys.MediaCache, cache.dump()); -} - -function removeCache(mediaItem: ICommon.IMediaBase) { - return cache.delete(getMediaKey(mediaItem)); -} - -const Cache = { - setup: setupCache, - get: getCache, - getInternal: getCacheInternal, - clear: clearCache, - update: updateCache, - remove: removeCache, -}; - -export default Cache; diff --git a/src/core/config.ts b/src/core/config.ts index 871bc6cf..c3bf2220 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -1,7 +1,7 @@ // import {Quality} from '@/constants/commonConst'; import {CustomizedColors} from '@/hooks/useColors'; import {getStorage, setStorage} from '@/utils/storage'; -import produce from 'immer'; +import {produce} from 'immer'; import {useEffect, useState} from 'react'; type ExceptionType = IMusic.IMusicItem | IMusic.IMusicItem[] | IMusic.IQuality; diff --git a/src/core/download.ts b/src/core/download.ts index 9c300fa7..8ad87a97 100644 --- a/src/core/download.ts +++ b/src/core/download.ts @@ -9,7 +9,7 @@ import {isSameMediaItem} from '@/utils/mediaItem'; import {getQualityOrder} from '@/utils/qualities'; import StateMapper from '@/utils/stateMapper'; import Toast from '@/utils/toast'; -import produce from 'immer'; +import {produce} from 'immer'; import {InteractionManager} from 'react-native'; import {downloadFile, exists} from 'react-native-fs'; @@ -18,28 +18,13 @@ import LocalMusicSheet from './localMusicSheet'; import MediaMeta from './mediaExtra'; import Network from './network'; import PluginManager from './pluginManager'; -import {PERMISSIONS, check} from 'react-native-permissions'; +import {check, PERMISSIONS} from 'react-native-permissions'; import path from 'path-browserify'; import { getCurrentDialog, hideDialog, showDialog, } from '@/components/dialogs/useDialog'; -// import PQueue from 'p-queue/dist'; -// import PriorityQueue from 'p-queue/dist/priority-queue'; - -// interface IDownloadProgress { -// progress: number; -// size: number; -// } - -// const downloadQueue = new PQueue({ -// concurrency: 3 -// }); - -// const downloadProgress = new Map(); -// downloadQueue.concurrency = 3; -// console.log(downloadQueue.concurrency); /** 队列中的元素 */ interface IDownloadMusicOptions { diff --git a/src/core/localMusicSheet.ts b/src/core/localMusicSheet.ts index f90ddb78..1da204e9 100644 --- a/src/core/localMusicSheet.ts +++ b/src/core/localMusicSheet.ts @@ -1,262 +1,262 @@ -import { - internalSerializeKey, - StorageKeys, - supportLocalMediaType, -} from '@/constants/commonConst'; -import mp3Util, {IBasicMeta} from '@/native/mp3Util'; -import { - getInternalData, - InternalDataType, - isSameMediaItem, -} from '@/utils/mediaItem'; -import StateMapper from '@/utils/stateMapper'; -import {getStorage, setStorage} from '@/utils/storage'; -import {nanoid} from 'nanoid'; -import {useEffect, useState} from 'react'; -import {FileStat, FileSystem} from 'react-native-file-access'; -import {unlink} from 'react-native-fs'; - -let localSheet: IMusic.IMusicItem[] = []; -const localSheetStateMapper = new StateMapper(() => localSheet); - -export async function setup() { - const sheet = await getStorage(StorageKeys.LocalMusicSheet); - if (sheet) { - let validSheet = []; - for (let musicItem of sheet) { - const localPath = getInternalData( - musicItem, - InternalDataType.LOCALPATH, - ); - if (localPath && (await FileSystem.exists(localPath))) { - validSheet.push(musicItem); - } - } - if (validSheet.length !== sheet.length) { - await setStorage(StorageKeys.LocalMusicSheet, validSheet); - } - localSheet = validSheet; - } else { - await setStorage(StorageKeys.LocalMusicSheet, []); - } - localSheetStateMapper.notify(); -} - -export async function addMusic( - musicItem: IMusic.IMusicItem | IMusic.IMusicItem[], -) { - if (!Array.isArray(musicItem)) { - musicItem = [musicItem]; - } - let newSheet = [...localSheet]; - musicItem.forEach(mi => { - if (localSheet.findIndex(_ => isSameMediaItem(mi, _)) === -1) { - newSheet.push(mi); - } - }); - await setStorage(StorageKeys.LocalMusicSheet, newSheet); - localSheet = newSheet; - localSheetStateMapper.notify(); -} - -function addMusicDraft(musicItem: IMusic.IMusicItem | IMusic.IMusicItem[]) { - if (!Array.isArray(musicItem)) { - musicItem = [musicItem]; - } - let newSheet = [...localSheet]; - musicItem.forEach(mi => { - if (localSheet.findIndex(_ => isSameMediaItem(mi, _)) === -1) { - newSheet.push(mi); - } - }); - localSheet = newSheet; - localSheetStateMapper.notify(); -} - -async function saveLocalSheet() { - await setStorage(StorageKeys.LocalMusicSheet, localSheet); -} - -export async function removeMusic( - musicItem: IMusic.IMusicItem, - deleteOriginalFile = false, -) { - const idx = localSheet.findIndex(_ => isSameMediaItem(_, musicItem)); - let newSheet = [...localSheet]; - if (idx !== -1) { - const localMusicItem = localSheet[idx]; - newSheet.splice(idx, 1); - const localPath = - musicItem[internalSerializeKey]?.localPath ?? - localMusicItem[internalSerializeKey]?.localPath; - if (deleteOriginalFile && localPath) { - try { - await unlink(localPath); - } catch (e: any) { - if (e.message !== 'File does not exist') { - throw e; - } - } - } - } - localSheet = newSheet; - localSheetStateMapper.notify(); - saveLocalSheet(); -} - -function parseFilename(fn: string): Partial | null { - const data = fn.slice(0, fn.lastIndexOf('.')).split('@'); - const [platform, id, title, artist] = data; - if (!platform || !id) { - return null; - } - return { - id, - platform: platform, - title: title ?? '', - artist: artist ?? '', - }; -} - -function localMediaFilter(_: FileStat) { - return supportLocalMediaType.some(ext => _.filename.endsWith(ext)); -} - -let importToken: string | null = null; -// 获取本地的文件列表 -async function getMusicStats(folderPaths: string[]) { - const _importToken = nanoid(); - importToken = _importToken; - const musicList: FileStat[] = []; - let peek: string | undefined; - let dirFiles: FileStat[] = []; - while (folderPaths.length !== 0) { - if (importToken !== _importToken) { - throw new Error('Import Broken'); - } - peek = folderPaths.shift() as string; - try { - dirFiles = await FileSystem.statDir(peek); - } catch { - dirFiles = []; - } - - dirFiles.forEach(item => { - if (item.type === 'directory' && !folderPaths.includes(item.path)) { - folderPaths.push(item.path); - } else if (localMediaFilter(item)) { - musicList.push(item); - } - }); - } - return {musicList, token: _importToken}; -} - -function cancelImportLocal() { - importToken = null; -} - -// 导入本地音乐 -const groupNum = 25; -async function importLocal(_folderPaths: string[]) { - const folderPaths = [..._folderPaths]; - const {musicList, token} = await getMusicStats(folderPaths); - if (token !== importToken) { - throw new Error('Import Broken'); - } - // 分组请求,不然序列化可能出问题 - let metas: IBasicMeta[] = []; - const groups = Math.ceil(musicList.length / groupNum); - for (let i = 0; i < groups; ++i) { - metas = metas.concat( - await mp3Util.getMediaMeta( - musicList - .slice(i * groupNum, (i + 1) * groupNum) - .map(_ => _.path), - ), - ); - } - if (token !== importToken) { - throw new Error('Import Broken'); - } - const musicItems = await Promise.all( - musicList.map(async (musicStat, index) => { - let {platform, id, title, artist} = - parseFilename(musicStat.filename) ?? {}; - const meta = metas[index]; - if (!platform || !id) { - platform = '本地'; - id = await FileSystem.hash(musicStat.path, 'MD5'); - } - return { - id, - platform, - title: title ?? meta?.title ?? musicStat.filename, - artist: artist ?? meta?.artist ?? '未知歌手', - duration: parseInt(meta?.duration ?? '0') / 1000, - album: meta?.album ?? '未知专辑', - artwork: '', - [internalSerializeKey]: { - localPath: musicStat.path, - }, - }; - }), - ); - if (token !== importToken) { - throw new Error('Import Broken'); - } - addMusic(musicItems); -} - -/** 是否为本地音乐 */ -function isLocalMusic( - musicItem: ICommon.IMediaBase | null, -): IMusic.IMusicItem | undefined { - return musicItem - ? localSheet.find(_ => isSameMediaItem(_, musicItem)) - : undefined; -} - -/** 状态-是否为本地音乐 */ -function useIsLocal(musicItem: IMusic.IMusicItem | null) { - const localMusicState = localSheetStateMapper.useMappedState(); - const [isLocal, setIsLocal] = useState(!!isLocalMusic(musicItem)); - useEffect(() => { - if (!musicItem) { - setIsLocal(false); - } else { - setIsLocal(!!isLocalMusic(musicItem)); - } - }, [localMusicState, musicItem]); - return isLocal; -} - -function getMusicList() { - return localSheet; -} - -async function updateMusicList(newSheet: IMusic.IMusicItem[]) { - const _localSheet = [...newSheet]; - try { - await setStorage(StorageKeys.LocalMusicSheet, _localSheet); - localSheet = _localSheet; - localSheetStateMapper.notify(); - } catch {} -} - -const LocalMusicSheet = { - setup, - addMusic, - removeMusic, - addMusicDraft, - saveLocalSheet, - importLocal, - cancelImportLocal, - isLocalMusic, - useIsLocal, - getMusicList, - useMusicList: localSheetStateMapper.useMappedState, - updateMusicList, -}; - -export default LocalMusicSheet; +import { + internalSerializeKey, + StorageKeys, + supportLocalMediaType, +} from '@/constants/commonConst'; +import mp3Util, {IBasicMeta} from '@/native/mp3Util'; +import { + getInternalData, + InternalDataType, + isSameMediaItem, +} from '@/utils/mediaItem'; +import StateMapper from '@/utils/stateMapper'; +import {getStorage, setStorage} from '@/utils/storage'; +import {nanoid} from 'nanoid'; +import {useEffect, useState} from 'react'; +import {FileStat, FileSystem} from 'react-native-file-access'; +import {unlink} from 'react-native-fs'; + +let localSheet: IMusic.IMusicItem[] = []; +const localSheetStateMapper = new StateMapper(() => localSheet); + +export async function setup() { + const sheet = await getStorage(StorageKeys.LocalMusicSheet); + if (sheet) { + let validSheet: IMusic.IMusicItem[] = []; + for (let musicItem of sheet) { + const localPath = getInternalData( + musicItem, + InternalDataType.LOCALPATH, + ); + if (localPath && (await FileSystem.exists(localPath))) { + validSheet.push(musicItem); + } + } + if (validSheet.length !== sheet.length) { + await setStorage(StorageKeys.LocalMusicSheet, validSheet); + } + localSheet = validSheet; + } else { + await setStorage(StorageKeys.LocalMusicSheet, []); + } + localSheetStateMapper.notify(); +} + +export async function addMusic( + musicItem: IMusic.IMusicItem | IMusic.IMusicItem[], +) { + if (!Array.isArray(musicItem)) { + musicItem = [musicItem]; + } + let newSheet = [...localSheet]; + musicItem.forEach(mi => { + if (localSheet.findIndex(_ => isSameMediaItem(mi, _)) === -1) { + newSheet.push(mi); + } + }); + await setStorage(StorageKeys.LocalMusicSheet, newSheet); + localSheet = newSheet; + localSheetStateMapper.notify(); +} + +function addMusicDraft(musicItem: IMusic.IMusicItem | IMusic.IMusicItem[]) { + if (!Array.isArray(musicItem)) { + musicItem = [musicItem]; + } + let newSheet = [...localSheet]; + musicItem.forEach(mi => { + if (localSheet.findIndex(_ => isSameMediaItem(mi, _)) === -1) { + newSheet.push(mi); + } + }); + localSheet = newSheet; + localSheetStateMapper.notify(); +} + +async function saveLocalSheet() { + await setStorage(StorageKeys.LocalMusicSheet, localSheet); +} + +export async function removeMusic( + musicItem: IMusic.IMusicItem, + deleteOriginalFile = false, +) { + const idx = localSheet.findIndex(_ => isSameMediaItem(_, musicItem)); + let newSheet = [...localSheet]; + if (idx !== -1) { + const localMusicItem = localSheet[idx]; + newSheet.splice(idx, 1); + const localPath = + musicItem[internalSerializeKey]?.localPath ?? + localMusicItem[internalSerializeKey]?.localPath; + if (deleteOriginalFile && localPath) { + try { + await unlink(localPath); + } catch (e: any) { + if (e.message !== 'File does not exist') { + throw e; + } + } + } + } + localSheet = newSheet; + localSheetStateMapper.notify(); + saveLocalSheet(); +} + +function parseFilename(fn: string): Partial | null { + const data = fn.slice(0, fn.lastIndexOf('.')).split('@'); + const [platform, id, title, artist] = data; + if (!platform || !id) { + return null; + } + return { + id, + platform: platform, + title: title ?? '', + artist: artist ?? '', + }; +} + +function localMediaFilter(_: FileStat) { + return supportLocalMediaType.some(ext => _.filename.endsWith(ext)); +} + +let importToken: string | null = null; +// 获取本地的文件列表 +async function getMusicStats(folderPaths: string[]) { + const _importToken = nanoid(); + importToken = _importToken; + const musicList: FileStat[] = []; + let peek: string | undefined; + let dirFiles: FileStat[] = []; + while (folderPaths.length !== 0) { + if (importToken !== _importToken) { + throw new Error('Import Broken'); + } + peek = folderPaths.shift() as string; + try { + dirFiles = await FileSystem.statDir(peek); + } catch { + dirFiles = []; + } + + dirFiles.forEach(item => { + if (item.type === 'directory' && !folderPaths.includes(item.path)) { + folderPaths.push(item.path); + } else if (localMediaFilter(item)) { + musicList.push(item); + } + }); + } + return {musicList, token: _importToken}; +} + +function cancelImportLocal() { + importToken = null; +} + +// 导入本地音乐 +const groupNum = 25; +async function importLocal(_folderPaths: string[]) { + const folderPaths = [..._folderPaths]; + const {musicList, token} = await getMusicStats(folderPaths); + if (token !== importToken) { + throw new Error('Import Broken'); + } + // 分组请求,不然序列化可能出问题 + let metas: IBasicMeta[] = []; + const groups = Math.ceil(musicList.length / groupNum); + for (let i = 0; i < groups; ++i) { + metas = metas.concat( + await mp3Util.getMediaMeta( + musicList + .slice(i * groupNum, (i + 1) * groupNum) + .map(_ => _.path), + ), + ); + } + if (token !== importToken) { + throw new Error('Import Broken'); + } + const musicItems = await Promise.all( + musicList.map(async (musicStat, index) => { + let {platform, id, title, artist} = + parseFilename(musicStat.filename) ?? {}; + const meta = metas[index]; + if (!platform || !id) { + platform = '本地'; + id = await FileSystem.hash(musicStat.path, 'MD5'); + } + return { + id, + platform, + title: title ?? meta?.title ?? musicStat.filename, + artist: artist ?? meta?.artist ?? '未知歌手', + duration: parseInt(meta?.duration ?? '0') / 1000, + album: meta?.album ?? '未知专辑', + artwork: '', + [internalSerializeKey]: { + localPath: musicStat.path, + }, + }; + }), + ); + if (token !== importToken) { + throw new Error('Import Broken'); + } + addMusic(musicItems); +} + +/** 是否为本地音乐 */ +function isLocalMusic( + musicItem: ICommon.IMediaBase | null, +): IMusic.IMusicItem | undefined { + return musicItem + ? localSheet.find(_ => isSameMediaItem(_, musicItem)) + : undefined; +} + +/** 状态-是否为本地音乐 */ +function useIsLocal(musicItem: IMusic.IMusicItem | null) { + const localMusicState = localSheetStateMapper.useMappedState(); + const [isLocal, setIsLocal] = useState(!!isLocalMusic(musicItem)); + useEffect(() => { + if (!musicItem) { + setIsLocal(false); + } else { + setIsLocal(!!isLocalMusic(musicItem)); + } + }, [localMusicState, musicItem]); + return isLocal; +} + +function getMusicList() { + return localSheet; +} + +async function updateMusicList(newSheet: IMusic.IMusicItem[]) { + const _localSheet = [...newSheet]; + try { + await setStorage(StorageKeys.LocalMusicSheet, _localSheet); + localSheet = _localSheet; + localSheetStateMapper.notify(); + } catch {} +} + +const LocalMusicSheet = { + setup, + addMusic, + removeMusic, + addMusicDraft, + saveLocalSheet, + importLocal, + cancelImportLocal, + isLocalMusic, + useIsLocal, + getMusicList, + useMusicList: localSheetStateMapper.useMappedState, + updateMusicList, +}; + +export default LocalMusicSheet; diff --git a/src/core/mediaMeta.old.ts b/src/core/mediaMeta.old.ts index ada3b588..0df7a3e6 100644 --- a/src/core/mediaMeta.old.ts +++ b/src/core/mediaMeta.old.ts @@ -1,7 +1,7 @@ /** * 歌单管理 */ -import produce from 'immer'; +import {produce} from 'immer'; import {nanoid} from 'nanoid'; import { getMultiStorage, diff --git a/src/core/musicSheet.ts b/src/core/musicSheet.ts index 40c9892a..cccde22f 100644 --- a/src/core/musicSheet.ts +++ b/src/core/musicSheet.ts @@ -1,477 +1,477 @@ -/** - * 歌单管理 - */ -import produce from 'immer'; -import {useEffect, useState} from 'react'; -import {nanoid} from 'nanoid'; -import {isSameMediaItem, sortByTimestampAndIndex} from '@/utils/mediaItem'; -import shuffle from 'lodash.shuffle'; -import {GlobalState} from '@/utils/stateMapper'; -import getOrCreateMMKV from '@/utils/getOrCreateMMKV'; -import safeParse from '@/utils/safeParse'; -import {InteractionManager} from 'react-native'; -import safeStringify from '@/utils/safeStringify'; -import {createMediaIndexMap} from '@/utils/mediaIndexMap'; -import Config from './config'; -import {getAppMeta, setAppMeta} from './appMeta'; -import {getStorage as oldGetStorage} from '@/utils/storage'; -import AsyncStorage from '@react-native-async-storage/async-storage'; - -const defaultSheet: IMusic.IMusicSheetItemBase = { - id: 'favorite', - coverImg: undefined, - title: '我喜欢', -}; - -let musicSheets = [defaultSheet]; -let sheetMusicMap: Record = {}; - -const favoriteMusicMapStore = new GlobalState(null); - -const sheetsCallBacks: Set = new Set([]); -function notifyMusicSheets() { - sheetsCallBacks.forEach(cb => { - cb(); - }); -} -const getSheets = () => ({ - musicSheets, - sheetMusicMap, -}); - -function getStorage(key: string) { - const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); - - return safeParse(mmkv.getString('data')); -} - -async function setStorage(key: string, value: any) { - return InteractionManager.runAfterInteractions(() => { - const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); - mmkv.set('data', safeStringify(value)); - }); -} - -async function removeStorage(key: string) { - const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); - mmkv.clearAll(); -} - -async function setup() { - // 升级逻辑 - const dbUpdated = getAppMeta('MusicSheetVersion') === '1'; - try { - async function getStorageWithMigrate(key: string) { - if (dbUpdated) { - return getStorage(key); - } else { - const oldResult = await oldGetStorage(key); - setStorage(key, oldResult); - AsyncStorage.removeItem(key); - return oldResult; - } - } - - const _musicSheets: IMusic.IMusicSheetItemBase[] = - await getStorageWithMigrate('music-sheets'); - - if (!Array.isArray(_musicSheets)) { - throw new Error('not exist'); - } - - for (let sheet of _musicSheets) { - const musicList = await getStorageWithMigrate(sheet.id); - sheetMusicMap = produce(sheetMusicMap, _ => { - _[sheet.id] = musicList; - return _; - }); - if (sheet.id === 'favorite') { - favoriteMusicMapStore.setValue( - createMediaIndexMap(musicList || []), - ); - } - } - - musicSheets = _musicSheets; - setupStarredMusicSheets(); - } catch (e: any) { - if (e.message === 'not exist') { - await setStorage('music-sheets', [defaultSheet]); - await setStorage(defaultSheet.id, []); - musicSheets = [defaultSheet]; - sheetMusicMap[defaultSheet.id] = []; - } - } - if (!dbUpdated) { - setAppMeta('MusicSheetVersion', '1'); - } - notifyMusicSheets(); -} - -async function updateAndSaveSheet( - id: string, - { - basic, - musicList, - }: { - basic?: Partial; - musicList?: IMusic.IMusicItem[]; - }, -) { - const targetSheetIndex = musicSheets.findIndex(_ => _.id === id); - if (targetSheetIndex === -1) { - return; - } - if (basic) { - const newMusicSheet = produce(musicSheets, draft => { - draft[targetSheetIndex] = { - ...draft[targetSheetIndex], - ...basic, - id, - }; - return draft; - }); - await setStorage('music-sheets', newMusicSheet); - musicSheets = newMusicSheet; - } - if (musicList) { - await setStorage(id, musicList); - sheetMusicMap = produce(sheetMusicMap, _ => { - _[id] = musicList; - }); - - // 默认歌单 - if (id === 'favorite' && musicList) { - favoriteMusicMapStore.setValue(createMediaIndexMap(musicList)); - } - } - notifyMusicSheets(); -} - -async function addSheet(title: string) { - const newId = nanoid(); - const newSheets: IMusic.IMusicSheetItemBase[] = [ - ...musicSheets, - { - title, - id: newId, - coverImg: undefined, - }, - ]; - await setStorage('music-sheets', newSheets); - await setStorage(newId, []); - - musicSheets = newSheets; - sheetMusicMap = produce(sheetMusicMap, _ => { - _[newId] = []; - }); - notifyMusicSheets(); - return newId; -} - -async function resumeSheets( - sheets: ICommon.WithMusicList[], - overwrite?: boolean, -) { - let newSheets = overwrite ? [{...defaultSheet}] : [...musicSheets]; - let newSheetMusicMap: Record = overwrite - ? {} - : { - ...sheetMusicMap, - }; - const needUpdatedIds = []; - for (let i = 0; i < sheets.length; ++i) { - const musicSheet = sheets[i]; - if (musicSheet.id === 'favorite') { - needUpdatedIds.push('favorite'); - - if (!overwrite) { - const originalMusicList = sheetMusicMap[musicSheet.id] ?? []; - const indexMap = createMediaIndexMap(originalMusicList); - newSheetMusicMap[musicSheet.id] = originalMusicList.concat( - musicSheet.musicList?.filter(item => !indexMap.has(item)) ?? - [], - ); - } else { - newSheetMusicMap[musicSheet.id] = [ - ...(musicSheet.musicList || []), - ]; - } - } else { - const newId = nanoid(); - needUpdatedIds.push(newId); - - newSheets = [ - ...newSheets, - { - id: newId, - title: musicSheet.title, - coverImg: musicSheet.coverImg?.startsWith('http') - ? musicSheet.coverImg - : (musicSheet.musicList ?? [])[ - (musicSheet.musicList?.length ?? 0) - 1 - ]?.artwork, - }, - ]; - newSheetMusicMap[newId] = musicSheet.musicList ?? []; - } - } - await setStorage('music-sheets', newSheets); - - await Promise.all( - needUpdatedIds.map(k => setStorage(k, newSheetMusicMap[k] ?? [])), - ); - - musicSheets = newSheets; - sheetMusicMap = newSheetMusicMap; - notifyMusicSheets(); -} - -async function removeSheet(sheetId: string) { - if (sheetId !== 'favorite') { - const newSheets = musicSheets.filter(item => item.id !== sheetId); - removeStorage(sheetId); - await setStorage('music-sheets', newSheets); - musicSheets = newSheets; - sheetMusicMap = produce(sheetMusicMap, _ => { - _[sheetId] = []; - delete _[sheetId]; - }); - notifyMusicSheets(); - } -} - -async function addMusic( - sheetId: string, - musicItem: IMusic.IMusicItem | Array, -) { - if (!Array.isArray(musicItem)) { - musicItem = [musicItem]; - } - const musicList = sheetMusicMap[sheetId] ?? []; - const indexMap = createMediaIndexMap(musicList); - - musicItem = musicItem.filter(item => !indexMap.has(item)); - // TODO: 改成MMKV - const pendAtStart = - Config.get('setting.basic.musicOrderInLocalSheet') === 'start'; - let newMusicList = []; - if (pendAtStart) { - newMusicList = musicItem.concat(musicList); - } else { - newMusicList = musicList.concat(musicItem); - } - let basic; - if ( - !musicSheets - .find(_ => _.id === sheetId) - ?.coverImg?.startsWith('file://') - ) { - basic = { - coverImg: newMusicList[newMusicList.length - 1]?.artwork, - }; - } - updateAndSaveSheet(sheetId, { - basic: basic, - musicList: newMusicList, - }); -} - -async function removeMusicByIndex(sheetId: string, indices: number | number[]) { - if (!Array.isArray(indices)) { - indices = [indices]; - } - const musicList = sheetMusicMap[sheetId] ?? []; - const newMusicList = produce(musicList, draft => { - draft = draft.filter((_, index) => { - return !(indices as number[]).includes(index); - }); - return draft; - }); - updateAndSaveSheet(sheetId, { - basic: { - coverImg: newMusicList[newMusicList.length - 1]?.artwork, - }, - musicList: newMusicList, - }); -} - -async function removeMusic( - sheetId: string, - musicItems: IMusic.IMusicItem | IMusic.IMusicItem[], -) { - if (!Array.isArray(musicItems)) { - musicItems = [musicItems]; - } - - const musicList = sheetMusicMap[sheetId] ?? []; - const indices = musicItems - .map(musicItem => - musicList.findIndex(_ => isSameMediaItem(_, musicItem)), - ) - .filter(_ => _ !== -1); - await removeMusicByIndex(sheetId, indices); -} - -function getSheetItems(): IMusic.IMusicSheetItem[] { - let favIndex = -1; - const result = produce(musicSheets as IMusic.IMusicSheetItem[], draft => { - draft.forEach((_, index) => { - if (_.id === defaultSheet.id) { - favIndex = index; - } - _.musicList = sheetMusicMap[_.id] ?? []; - }); - }); - - if (favIndex === -1) { - result.unshift({ - ...defaultSheet, - musicList: [], - }); - } else if (favIndex !== 0) { - const favSheet = result.splice(favIndex, 1); - result.unshift(favSheet[0]); - } - - return result; -} - -function sortMusicList( - type: - | undefined - | 'a2z' - | 'z2a' - | 'random' - | 'arta2z' - | 'artz2a' - | 'time' - | 'time-rev', - musicSheet: IMusic.IMusicSheetItem, -) { - let musicList = [...(musicSheet.musicList ?? [])]; - if (type === 'a2z') { - musicList.sort((a, b) => a.title.localeCompare(b.title)); - } else if (type === 'z2a') { - musicList.sort((b, a) => a.title.localeCompare(b.title)); - } else if (type === 'random') { - musicList = shuffle(musicList); - } else if (type === 'arta2z') { - musicList.sort((a, b) => a.artist?.localeCompare?.(b.artist)); - } else if (type === 'artz2a') { - musicList.sort((b, a) => a.artist?.localeCompare?.(b.artist)); - } else if (type === 'time') { - sortByTimestampAndIndex(musicList); - musicList.reverse(); - } else if (type === 'time-rev') { - sortByTimestampAndIndex(musicList); - } - - updateAndSaveSheet(musicSheet.id, { - musicList: type ? musicList : undefined, - }); -} - -function useSheets(): IMusic.IMusicSheet; -function useSheets(sheetId: string): IMusic.IMusicSheetItem; -function useSheets(sheetId?: string) { - const [_musicSheets, _setMusicSheets] = - useState(getSheetItems); - - const _notifyCb = () => { - _setMusicSheets(getSheetItems()); - }; - - useEffect(() => { - sheetsCallBacks.add(_notifyCb); - return () => { - sheetsCallBacks.delete(_notifyCb); - }; - }, []); - return sheetId ? _musicSheets?.find(_ => _.id === sheetId) : _musicSheets; -} - -function useUserSheets(): IMusic.IMusicSheet { - const sheets = useSheets(); - return sheets?.filter(_ => _.id !== 'favorite') ?? []; -} - -const starredMusicSheetsStore = new GlobalState([]); - -async function setupStarredMusicSheets() { - const starredSheets: IMusic.IMusicSheetItem[] = - (await getStorage('starred-sheets')) || []; - starredMusicSheetsStore.setValue(starredSheets); -} - -async function starMusicSheet(musicSheet: IMusic.IMusicSheetItem) { - const newVal = [...starredMusicSheetsStore.getValue(), musicSheet]; - - starredMusicSheetsStore.setValue(newVal); - await setStorage('starred-sheets', newVal); -} - -async function unstarMusicSheet(musicSheet: IMusic.IMusicSheetItem) { - const newVal = starredMusicSheetsStore - .getValue() - .filter(it => it.id !== musicSheet.id); - starredMusicSheetsStore.setValue(newVal); - await setStorage('starred-sheets', newVal); -} - -function useSheetStarred( - musicSheet: IMusic.IMusicSheetItem | null | undefined, -) { - // TODO: 类型有问题 - const [starred, setStarred] = useState( - starredMusicSheetsStore - .getValue() - .findIndex(it => isSameMediaItem(musicSheet as any, it as any)) !== - -1, - ); - const allStarredSheet = starredMusicSheetsStore.useValue(); - - useEffect(() => { - setStarred( - allStarredSheet.findIndex(it => - isSameMediaItem(musicSheet as any, it as any), - ) !== -1, - ); - }, [allStarredSheet]); - - return starred; -} - -/** 是否添加到我喜欢歌单 */ -function useMusicFavIndex(musicItem: IMusic.IMusicItem | null) { - const indexMap = favoriteMusicMapStore.useValue(); - - if (!musicItem) { - return -1; - } - - return indexMap?.getIndex?.(musicItem) ?? -1; -} - -const MusicSheet = { - setup, - addSheet, - defaultSheet, - addMusic, - getSheets, - useSheets, - removeSheet, - resumeSheets, - removeMusicByIndex, - updateAndSaveSheet, - removeMusic, - useUserSheets, - sortMusicList, - starMusicSheet, - unstarMusicSheet, - useStarredMusicSheet: starredMusicSheetsStore.useValue, - useSheetStarred, - useMusicFavIndex, -}; - -export default MusicSheet; +/** + * 歌单管理 + */ +import {produce} from 'immer'; +import {useEffect, useState} from 'react'; +import {nanoid} from 'nanoid'; +import {isSameMediaItem, sortByTimestampAndIndex} from '@/utils/mediaItem'; +import shuffle from 'lodash.shuffle'; +import {GlobalState} from '@/utils/stateMapper'; +import getOrCreateMMKV from '@/utils/getOrCreateMMKV'; +import safeParse from '@/utils/safeParse'; +import {InteractionManager} from 'react-native'; +import safeStringify from '@/utils/safeStringify'; +import {createMediaIndexMap} from '@/utils/mediaIndexMap'; +import Config from './config'; +import {getAppMeta, setAppMeta} from './appMeta'; +import {getStorage as oldGetStorage} from '@/utils/storage'; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +const defaultSheet: IMusic.IMusicSheetItemBase = { + id: 'favorite', + coverImg: undefined, + title: '我喜欢', +}; + +let musicSheets = [defaultSheet]; +let sheetMusicMap: Record = {}; + +const favoriteMusicMapStore = new GlobalState(null); + +const sheetsCallBacks: Set = new Set([]); +function notifyMusicSheets() { + sheetsCallBacks.forEach(cb => { + cb(); + }); +} +const getSheets = () => ({ + musicSheets, + sheetMusicMap, +}); + +function getStorage(key: string) { + const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); + + return safeParse(mmkv.getString('data')); +} + +async function setStorage(key: string, value: any) { + return InteractionManager.runAfterInteractions(() => { + const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); + mmkv.set('data', safeStringify(value)); + }); +} + +async function removeStorage(key: string) { + const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); + mmkv.clearAll(); +} + +async function setup() { + // 升级逻辑 + const dbUpdated = getAppMeta('MusicSheetVersion') === '1'; + try { + async function getStorageWithMigrate(key: string) { + if (dbUpdated) { + return getStorage(key); + } else { + const oldResult = await oldGetStorage(key); + setStorage(key, oldResult); + AsyncStorage.removeItem(key); + return oldResult; + } + } + + const _musicSheets: IMusic.IMusicSheetItemBase[] = + await getStorageWithMigrate('music-sheets'); + + if (!Array.isArray(_musicSheets)) { + throw new Error('not exist'); + } + + for (let sheet of _musicSheets) { + const musicList = await getStorageWithMigrate(sheet.id); + sheetMusicMap = produce(sheetMusicMap, _ => { + _[sheet.id] = musicList; + return _; + }); + if (sheet.id === 'favorite') { + favoriteMusicMapStore.setValue( + createMediaIndexMap(musicList || []), + ); + } + } + + musicSheets = _musicSheets; + setupStarredMusicSheets(); + } catch (e: any) { + if (e.message === 'not exist') { + await setStorage('music-sheets', [defaultSheet]); + await setStorage(defaultSheet.id, []); + musicSheets = [defaultSheet]; + sheetMusicMap[defaultSheet.id] = []; + } + } + if (!dbUpdated) { + setAppMeta('MusicSheetVersion', '1'); + } + notifyMusicSheets(); +} + +async function updateAndSaveSheet( + id: string, + { + basic, + musicList, + }: { + basic?: Partial; + musicList?: IMusic.IMusicItem[]; + }, +) { + const targetSheetIndex = musicSheets.findIndex(_ => _.id === id); + if (targetSheetIndex === -1) { + return; + } + if (basic) { + const newMusicSheet = produce(musicSheets, draft => { + draft[targetSheetIndex] = { + ...draft[targetSheetIndex], + ...basic, + id, + }; + return draft; + }); + await setStorage('music-sheets', newMusicSheet); + musicSheets = newMusicSheet; + } + if (musicList) { + await setStorage(id, musicList); + sheetMusicMap = produce(sheetMusicMap, _ => { + _[id] = musicList; + }); + + // 默认歌单 + if (id === 'favorite' && musicList) { + favoriteMusicMapStore.setValue(createMediaIndexMap(musicList)); + } + } + notifyMusicSheets(); +} + +async function addSheet(title: string) { + const newId = nanoid(); + const newSheets: IMusic.IMusicSheetItemBase[] = [ + ...musicSheets, + { + title, + id: newId, + coverImg: undefined, + }, + ]; + await setStorage('music-sheets', newSheets); + await setStorage(newId, []); + + musicSheets = newSheets; + sheetMusicMap = produce(sheetMusicMap, _ => { + _[newId] = []; + }); + notifyMusicSheets(); + return newId; +} + +async function resumeSheets( + sheets: ICommon.WithMusicList[], + overwrite?: boolean, +) { + let newSheets = overwrite ? [{...defaultSheet}] : [...musicSheets]; + let newSheetMusicMap: Record = overwrite + ? {} + : { + ...sheetMusicMap, + }; + const needUpdatedIds: string[] = []; + for (let i = 0; i < sheets.length; ++i) { + const musicSheet = sheets[i]; + if (musicSheet.id === 'favorite') { + needUpdatedIds.push('favorite'); + + if (!overwrite) { + const originalMusicList = sheetMusicMap[musicSheet.id] ?? []; + const indexMap = createMediaIndexMap(originalMusicList); + newSheetMusicMap[musicSheet.id] = originalMusicList.concat( + musicSheet.musicList?.filter(item => !indexMap.has(item)) ?? + [], + ); + } else { + newSheetMusicMap[musicSheet.id] = [ + ...(musicSheet.musicList || []), + ]; + } + } else { + const newId = nanoid(); + needUpdatedIds.push(newId); + + newSheets = [ + ...newSheets, + { + id: newId, + title: musicSheet.title, + coverImg: musicSheet.coverImg?.startsWith('http') + ? musicSheet.coverImg + : (musicSheet.musicList ?? [])[ + (musicSheet.musicList?.length ?? 0) - 1 + ]?.artwork, + }, + ]; + newSheetMusicMap[newId] = musicSheet.musicList ?? []; + } + } + await setStorage('music-sheets', newSheets); + + await Promise.all( + needUpdatedIds.map(k => setStorage(k, newSheetMusicMap[k] ?? [])), + ); + + musicSheets = newSheets; + sheetMusicMap = newSheetMusicMap; + notifyMusicSheets(); +} + +async function removeSheet(sheetId: string) { + if (sheetId !== 'favorite') { + const newSheets = musicSheets.filter(item => item.id !== sheetId); + removeStorage(sheetId); + await setStorage('music-sheets', newSheets); + musicSheets = newSheets; + sheetMusicMap = produce(sheetMusicMap, _ => { + _[sheetId] = []; + delete _[sheetId]; + }); + notifyMusicSheets(); + } +} + +async function addMusic( + sheetId: string, + musicItem: IMusic.IMusicItem | Array, +) { + if (!Array.isArray(musicItem)) { + musicItem = [musicItem]; + } + const musicList = sheetMusicMap[sheetId] ?? []; + const indexMap = createMediaIndexMap(musicList); + + musicItem = musicItem.filter(item => !indexMap.has(item)); + // TODO: 改成MMKV + const pendAtStart = + Config.get('setting.basic.musicOrderInLocalSheet') === 'start'; + let newMusicList: IMusic.IMusicItem[] = []; + if (pendAtStart) { + newMusicList = musicItem.concat(musicList); + } else { + newMusicList = musicList.concat(musicItem); + } + let basic; + if ( + !musicSheets + .find(_ => _.id === sheetId) + ?.coverImg?.startsWith('file://') + ) { + basic = { + coverImg: newMusicList[newMusicList.length - 1]?.artwork, + }; + } + updateAndSaveSheet(sheetId, { + basic: basic, + musicList: newMusicList, + }); +} + +async function removeMusicByIndex(sheetId: string, indices: number | number[]) { + if (!Array.isArray(indices)) { + indices = [indices]; + } + const musicList = sheetMusicMap[sheetId] ?? []; + const newMusicList = produce(musicList, draft => { + draft = draft.filter((_, index) => { + return !(indices as number[]).includes(index); + }); + return draft; + }); + updateAndSaveSheet(sheetId, { + basic: { + coverImg: newMusicList[newMusicList.length - 1]?.artwork, + }, + musicList: newMusicList, + }); +} + +async function removeMusic( + sheetId: string, + musicItems: IMusic.IMusicItem | IMusic.IMusicItem[], +) { + if (!Array.isArray(musicItems)) { + musicItems = [musicItems]; + } + + const musicList = sheetMusicMap[sheetId] ?? []; + const indices = musicItems + .map(musicItem => + musicList.findIndex(_ => isSameMediaItem(_, musicItem)), + ) + .filter(_ => _ !== -1); + await removeMusicByIndex(sheetId, indices); +} + +function getSheetItems(): IMusic.IMusicSheetItem[] { + let favIndex = -1; + const result = produce(musicSheets as IMusic.IMusicSheetItem[], draft => { + draft.forEach((_, index) => { + if (_.id === defaultSheet.id) { + favIndex = index; + } + _.musicList = sheetMusicMap[_.id] ?? []; + }); + }); + + if (favIndex === -1) { + result.unshift({ + ...defaultSheet, + musicList: [], + }); + } else if (favIndex !== 0) { + const favSheet = result.splice(favIndex, 1); + result.unshift(favSheet[0]); + } + + return result; +} + +function sortMusicList( + type: + | undefined + | 'a2z' + | 'z2a' + | 'random' + | 'arta2z' + | 'artz2a' + | 'time' + | 'time-rev', + musicSheet: IMusic.IMusicSheetItem, +) { + let musicList = [...(musicSheet.musicList ?? [])]; + if (type === 'a2z') { + musicList.sort((a, b) => a.title.localeCompare(b.title)); + } else if (type === 'z2a') { + musicList.sort((b, a) => a.title.localeCompare(b.title)); + } else if (type === 'random') { + musicList = shuffle(musicList); + } else if (type === 'arta2z') { + musicList.sort((a, b) => a.artist?.localeCompare?.(b.artist)); + } else if (type === 'artz2a') { + musicList.sort((b, a) => a.artist?.localeCompare?.(b.artist)); + } else if (type === 'time') { + sortByTimestampAndIndex(musicList); + musicList.reverse(); + } else if (type === 'time-rev') { + sortByTimestampAndIndex(musicList); + } + + updateAndSaveSheet(musicSheet.id, { + musicList: type ? musicList : undefined, + }); +} + +function useSheets(): IMusic.IMusicSheet; +function useSheets(sheetId: string): IMusic.IMusicSheetItem; +function useSheets(sheetId?: string) { + const [_musicSheets, _setMusicSheets] = + useState(getSheetItems); + + const _notifyCb = () => { + _setMusicSheets(getSheetItems()); + }; + + useEffect(() => { + sheetsCallBacks.add(_notifyCb); + return () => { + sheetsCallBacks.delete(_notifyCb); + }; + }, []); + return sheetId ? _musicSheets?.find(_ => _.id === sheetId) : _musicSheets; +} + +function useUserSheets(): IMusic.IMusicSheet { + const sheets = useSheets(); + return sheets?.filter(_ => _.id !== 'favorite') ?? []; +} + +const starredMusicSheetsStore = new GlobalState([]); + +async function setupStarredMusicSheets() { + const starredSheets: IMusic.IMusicSheetItem[] = + (await getStorage('starred-sheets')) || []; + starredMusicSheetsStore.setValue(starredSheets); +} + +async function starMusicSheet(musicSheet: IMusic.IMusicSheetItem) { + const newVal = [...starredMusicSheetsStore.getValue(), musicSheet]; + + starredMusicSheetsStore.setValue(newVal); + await setStorage('starred-sheets', newVal); +} + +async function unstarMusicSheet(musicSheet: IMusic.IMusicSheetItem) { + const newVal = starredMusicSheetsStore + .getValue() + .filter(it => it.id !== musicSheet.id); + starredMusicSheetsStore.setValue(newVal); + await setStorage('starred-sheets', newVal); +} + +function useSheetStarred( + musicSheet: IMusic.IMusicSheetItem | null | undefined, +) { + // TODO: 类型有问题 + const [starred, setStarred] = useState( + starredMusicSheetsStore + .getValue() + .findIndex(it => isSameMediaItem(musicSheet as any, it as any)) !== + -1, + ); + const allStarredSheet = starredMusicSheetsStore.useValue(); + + useEffect(() => { + setStarred( + allStarredSheet.findIndex(it => + isSameMediaItem(musicSheet as any, it as any), + ) !== -1, + ); + }, [allStarredSheet]); + + return starred; +} + +/** 是否添加到我喜欢歌单 */ +function useMusicFavIndex(musicItem: IMusic.IMusicItem | null) { + const indexMap = favoriteMusicMapStore.useValue(); + + if (!musicItem) { + return -1; + } + + return indexMap?.getIndex?.(musicItem) ?? -1; +} + +const MusicSheet = { + setup, + addSheet, + defaultSheet, + addMusic, + getSheets, + useSheets, + removeSheet, + resumeSheets, + removeMusicByIndex, + updateAndSaveSheet, + removeMusic, + useUserSheets, + sortMusicList, + starMusicSheet, + unstarMusicSheet, + useStarredMusicSheet: starredMusicSheetsStore.useValue, + useSheetStarred, + useMusicFavIndex, +}; + +export default MusicSheet; diff --git a/src/core/persistStatus.ts b/src/core/persistStatus.ts index 66be7a0c..101125fa 100644 --- a/src/core/persistStatus.ts +++ b/src/core/persistStatus.ts @@ -4,7 +4,7 @@ import {useEffect, useState} from 'react'; // Internal Method const getStore = () => { - return getOrCreateMMKV(`App.PersistStatus`); + return getOrCreateMMKV('App.PersistStatus'); }; interface IPersistConfig { diff --git a/src/core/pluginManager.ts b/src/core/pluginManager.ts index 46e9e36d..97bfa2e5 100644 --- a/src/core/pluginManager.ts +++ b/src/core/pluginManager.ts @@ -17,7 +17,7 @@ import pathConst from '@/constants/pathConst'; import {compare, satisfies} from 'compare-versions'; import DeviceInfo from 'react-native-device-info'; import StateMapper from '@/utils/stateMapper'; -import MediaMeta from './mediaExtra'; +import MediaExtra from './mediaExtra'; import {nanoid} from 'nanoid'; import {devLog, errorLog, trace} from '../utils/log'; import { @@ -47,8 +47,7 @@ import {addFileScheme, getFileName} from '@/utils/fileUtils'; import {URL} from 'react-native-url-polyfill'; import Base64 from '@/utils/base64'; import MediaCache from './mediaCache'; -import produce from 'immer'; -import MediaExtra from './mediaExtra'; +import {produce} from 'immer'; import objectPath from 'object-path'; axios.defaults.timeout = 2000; @@ -457,7 +456,7 @@ class PluginMethods implements IPlugin.IPluginInstanceMethods { originalMusicItem: IMusic.IMusicItemBase, ): Promise { // 1.额外存储的meta信息(关联歌词) - const meta = MediaMeta.get(originalMusicItem); + const meta = MediaExtra.get(originalMusicItem); let musicItem: IMusic.IMusicItem; if (meta && meta.associatedLrc) { musicItem = meta.associatedLrc as IMusic.IMusicItem; @@ -1136,7 +1135,7 @@ async function uninstallPlugin(hash: string) { pluginStateMapper.notify(); // 防止其他重名 if (plugins.every(_ => _.name !== pluginName)) { - MediaMeta.removeAll(pluginName); + MediaExtra.removeAll(pluginName); } } catch {} } @@ -1148,7 +1147,7 @@ async function uninstallAllPlugins() { try { const pluginName = plugin.name; await unlink(plugin.path); - MediaMeta.removeAll(pluginName); + MediaExtra.removeAll(pluginName); } catch (e) {} }), ); diff --git a/src/core/pluginMeta.ts b/src/core/pluginMeta.ts index 05f2ffc3..02a74cff 100644 --- a/src/core/pluginMeta.ts +++ b/src/core/pluginMeta.ts @@ -1,7 +1,7 @@ import {StorageKeys} from '@/constants/commonConst'; import StateMapper from '@/utils/stateMapper'; import {getStorage, setStorage} from '@/utils/storage'; -import produce from 'immer'; +import {produce} from 'immer'; import objectPath from 'object-path'; import {Plugin} from './pluginManager'; diff --git a/src/core/trackPlayer/index.ts b/src/core/trackPlayer/index.ts index c9a87e77..414ea020 100644 --- a/src/core/trackPlayer/index.ts +++ b/src/core/trackPlayer/index.ts @@ -1,4 +1,4 @@ -import produce from 'immer'; +import {produce} from 'immer'; import ReactNativeTrackPlayer, { Event, State, diff --git a/src/entry/bootstrap.ts b/src/entry/bootstrap.ts index 3e564c89..bf9974d6 100644 --- a/src/entry/bootstrap.ts +++ b/src/entry/bootstrap.ts @@ -1,253 +1,257 @@ -import MusicSheet from '@/core/musicSheet'; -import {check, PERMISSIONS, request} from 'react-native-permissions'; -import RNTrackPlayer, { - AppKilledPlaybackBehavior, - Capability, -} from 'react-native-track-player'; -import 'react-native-get-random-values'; -import Config from '@/core/config'; -import RNBootSplash from 'react-native-bootsplash'; -import pathConst from '@/constants/pathConst'; -import {checkAndCreateDir} from '@/utils/fileUtils'; -import {errorLog, trace} from '@/utils/log'; -import MediaMeta from '@/core/mediaMeta.old'; -import Cache from '@/core/cache.old'; -import PluginManager from '@/core/pluginManager'; -import Network from '@/core/network'; -import {ImgAsset} from '@/constants/assetsConst'; -import LocalMusicSheet from '@/core/localMusicSheet'; -import {Linking} from 'react-native'; -import Theme from '@/core/theme'; -import LyricManager from '@/core/lyricManager'; -import Toast from '@/utils/toast'; -import {localPluginHash, supportLocalMediaType} from '@/constants/commonConst'; -import TrackPlayer from '@/core/trackPlayer'; -import musicHistory from '@/core/musicHistory'; -import PersistStatus from '@/core/persistStatus'; -import {perfLogger} from '@/utils/perfLogger'; - -/** app加载前执行 - * 1. 检查权限 - * 2. 数据初始化 - * 3. - */ - -async function _bootstrap() { - const logger = perfLogger(); - // 1. 检查权限 - const [readStoragePermission, writeStoragePermission] = await Promise.all([ - check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), - check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), - ]); - if ( - !( - readStoragePermission === 'granted' && - writeStoragePermission === 'granted' - ) - ) { - await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); - await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); - } - logger.mark('权限检查完成'); - - // 2. 数据初始化 - /** 初始化路径 */ - await setupFolder(); - trace('文件夹初始化完成'); - logger.mark('文件夹初始化完成'); - - // 加载配置 - await Promise.all([ - Config.setup().then(() => { - logger.mark('Config'); - }), - MediaMeta.setup().then(() => { - logger.mark('MediaMeta'); - }), - MusicSheet.setup().then(() => { - logger.mark('MusicSheet'); - }), - musicHistory.setupMusicHistory().then(() => { - logger.mark('musicHistory'); - }), - ]); - trace('配置初始化完成'); - logger.mark('配置初始化完成'); - - // 加载插件 - try { - await RNTrackPlayer.setupPlayer({ - maxCacheSize: - Config.get('setting.basic.maxCacheSize') ?? 1024 * 1024 * 512, - }); - } catch (e: any) { - if ( - e?.message !== - 'The player has already been initialized via setupPlayer.' - ) { - throw e; - } - } - logger.mark('加载播放器'); - - const capabilities = Config.get('setting.basic.showExitOnNotification') - ? [ - Capability.Play, - Capability.Pause, - Capability.SkipToNext, - Capability.SkipToPrevious, - Capability.Stop, - ] - : [ - Capability.Play, - Capability.Pause, - Capability.SkipToNext, - Capability.SkipToPrevious, - ]; - await RNTrackPlayer.updateOptions({ - icon: ImgAsset.logoTransparent, - progressUpdateEventInterval: 1, - android: { - alwaysPauseOnInterruption: true, - appKilledPlaybackBehavior: - AppKilledPlaybackBehavior.ContinuePlayback, - }, - capabilities: capabilities, - compactCapabilities: capabilities, - notificationCapabilities: [...capabilities, Capability.SeekTo], - }); - logger.mark('播放器初始化完成'); - trace('播放器初始化完成'); - await Cache.setup(); - logger.mark('缓存初始化完成'); - - trace('缓存初始化完成'); - await PluginManager.setup(); - logger.mark('插件初始化完成'); - - trace('插件初始化完成'); - await TrackPlayer.setupTrackPlayer(); - trace('播放列表初始化完成'); - logger.mark('播放列表初始化完成'); - - await LocalMusicSheet.setup(); - trace('本地音乐初始化完成'); - logger.mark('本地音乐初始化完成'); - - Theme.setup(); - trace('主题初始化完成'); - logger.mark('主题初始化完成'); - - await LyricManager.setup(); - - logger.mark('歌词初始化完成'); - - extraMakeup(); - ErrorUtils.setGlobalHandler(error => { - errorLog('未捕获的错误', error); - }); -} - -/** 初始化 */ -async function setupFolder() { - await Promise.all([ - checkAndCreateDir(pathConst.dataPath), - checkAndCreateDir(pathConst.logPath), - checkAndCreateDir(pathConst.cachePath), - checkAndCreateDir(pathConst.pluginPath), - checkAndCreateDir(pathConst.lrcCachePath), - checkAndCreateDir(pathConst.downloadPath).then(() => { - checkAndCreateDir(pathConst.downloadMusicPath); - }), - ]); -} - -export default async function () { - try { - await _bootstrap(); - } catch (e) { - errorLog('初始化出错', e); - } - // 隐藏开屏动画 - console.log('HIDE'); - RNBootSplash.hide({fade: true}); -} - -/** 不需要阻塞的 */ -async function extraMakeup() { - // 自动更新 - try { - // 初始化网络状态 - Network.setup(); - - if (Config.get('setting.basic.autoUpdatePlugin')) { - const lastUpdated = PersistStatus.get('app.pluginUpdateTime') || 0; - const now = Date.now(); - if (Math.abs(now - lastUpdated) > 86400000) { - PersistStatus.set('app.pluginUpdateTime', now); - const plugins = PluginManager.getValidPlugins(); - for (let i = 0; i < plugins.length; ++i) { - const srcUrl = plugins[i].instance.srcUrl; - if (srcUrl) { - await PluginManager.installPluginFromUrl(srcUrl); - } - } - } - } - } catch {} - - async function handleLinkingUrl(url: string) { - // 插件 - try { - if (url.startsWith('musicfree://install/')) { - const plugins = url - .slice(20) - .split(',') - .map(decodeURIComponent); - await Promise.all( - plugins.map(it => - PluginManager.installPluginFromUrl(it).catch(() => {}), - ), - ); - Toast.success('安装成功~'); - } else if (url.endsWith('.js')) { - PluginManager.installPlugin(url, { - notCheckVersion: Config.get( - 'setting.basic.notCheckPluginVersion', - ), - }) - .then(res => { - Toast.success(`插件「${res.name}」安装成功~`); - }) - .catch(e => { - console.log(e); - Toast.warn(e?.message ?? '无法识别此插件'); - }); - } else if (supportLocalMediaType.some(it => url.endsWith(it))) { - // 本地播放 - const musicItem = await PluginManager.getByHash( - localPluginHash, - )?.instance?.importMusicItem?.(url); - console.log(musicItem); - if (musicItem) { - TrackPlayer.play(musicItem); - } - } - } catch {} - } - - // 开启监听 - Linking.addEventListener('url', data => { - if (data.url) { - handleLinkingUrl(data.url); - } - }); - const initUrl = await Linking.getInitialURL(); - if (initUrl) { - handleLinkingUrl(initUrl); - } - - if (Config.get('setting.basic.autoPlayWhenAppStart')) { - TrackPlayer.play(); - } -} +import MusicSheet from '@/core/musicSheet'; +import {check, PERMISSIONS, request} from 'react-native-permissions'; +import RNTrackPlayer, { + AppKilledPlaybackBehavior, + Capability, +} from 'react-native-track-player'; +import 'react-native-get-random-values'; +import Config from '@/core/config'; +import pathConst from '@/constants/pathConst'; +import {checkAndCreateDir} from '@/utils/fileUtils'; +import {errorLog, trace} from '@/utils/log'; +import MediaMeta from '@/core/mediaMeta.old'; +import PluginManager from '@/core/pluginManager'; +import Network from '@/core/network'; +import {ImgAsset} from '@/constants/assetsConst'; +import LocalMusicSheet from '@/core/localMusicSheet'; +import {Linking} from 'react-native'; +import Theme from '@/core/theme'; +import LyricManager from '@/core/lyricManager'; +import Toast from '@/utils/toast'; +import {localPluginHash, supportLocalMediaType} from '@/constants/commonConst'; +import TrackPlayer from '@/core/trackPlayer'; +import musicHistory from '@/core/musicHistory'; +import PersistStatus from '@/core/persistStatus'; +import {perfLogger} from '@/utils/perfLogger'; +import * as SplashScreen from 'expo-splash-screen'; + +/** app加载前执行 + * 1. 检查权限 + * 2. 数据初始化 + * 3. + */ + +async function _bootstrap() { + await SplashScreen.preventAutoHideAsync() + .then(result => + console.log( + `SplashScreen.preventAutoHideAsync() succeeded: ${result}`, + ), + ) + .catch(console.warn); // it's good to explicitly catch and inspect any error + const logger = perfLogger(); + // 1. 检查权限 + const [readStoragePermission, writeStoragePermission] = await Promise.all([ + check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), + check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), + ]); + if ( + !( + readStoragePermission === 'granted' && + writeStoragePermission === 'granted' + ) + ) { + await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); + await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); + } + logger.mark('权限检查完成'); + + // 2. 数据初始化 + /** 初始化路径 */ + await setupFolder(); + trace('文件夹初始化完成'); + logger.mark('文件夹初始化完成'); + + // 加载配置 + await Promise.all([ + Config.setup().then(() => { + logger.mark('Config'); + }), + MediaMeta.setup().then(() => { + logger.mark('MediaMeta'); + }), + MusicSheet.setup().then(() => { + logger.mark('MusicSheet'); + }), + musicHistory.setupMusicHistory().then(() => { + logger.mark('musicHistory'); + }), + ]); + trace('配置初始化完成'); + logger.mark('配置初始化完成'); + + // 加载插件 + try { + await RNTrackPlayer.setupPlayer({ + maxCacheSize: + Config.get('setting.basic.maxCacheSize') ?? 1024 * 1024 * 512, + }); + } catch (e: any) { + if ( + e?.message !== + 'The player has already been initialized via setupPlayer.' + ) { + throw e; + } + } + logger.mark('加载播放器'); + + const capabilities = Config.get('setting.basic.showExitOnNotification') + ? [ + Capability.Play, + Capability.Pause, + Capability.SkipToNext, + Capability.SkipToPrevious, + Capability.Stop, + ] + : [ + Capability.Play, + Capability.Pause, + Capability.SkipToNext, + Capability.SkipToPrevious, + ]; + await RNTrackPlayer.updateOptions({ + icon: ImgAsset.logoTransparent, + progressUpdateEventInterval: 1, + android: { + alwaysPauseOnInterruption: true, + appKilledPlaybackBehavior: + AppKilledPlaybackBehavior.ContinuePlayback, + }, + capabilities: capabilities, + compactCapabilities: capabilities, + notificationCapabilities: [...capabilities, Capability.SeekTo], + }); + logger.mark('播放器初始化完成'); + trace('播放器初始化完成'); + + await PluginManager.setup(); + logger.mark('插件初始化完成'); + + trace('插件初始化完成'); + await TrackPlayer.setupTrackPlayer(); + trace('播放列表初始化完成'); + logger.mark('播放列表初始化完成'); + + await LocalMusicSheet.setup(); + trace('本地音乐初始化完成'); + logger.mark('本地音乐初始化完成'); + + Theme.setup(); + trace('主题初始化完成'); + logger.mark('主题初始化完成'); + + await LyricManager.setup(); + + logger.mark('歌词初始化完成'); + + extraMakeup(); + ErrorUtils.setGlobalHandler(error => { + errorLog('未捕获的错误', error); + }); +} + +/** 初始化 */ +async function setupFolder() { + await Promise.all([ + checkAndCreateDir(pathConst.dataPath), + checkAndCreateDir(pathConst.logPath), + checkAndCreateDir(pathConst.cachePath), + checkAndCreateDir(pathConst.pluginPath), + checkAndCreateDir(pathConst.lrcCachePath), + checkAndCreateDir(pathConst.downloadPath).then(() => { + checkAndCreateDir(pathConst.downloadMusicPath); + }), + ]); +} + +export default async function () { + try { + await _bootstrap(); + } catch (e) { + errorLog('初始化出错', e); + } + // 隐藏开屏动画 + console.log('HIDE'); + await SplashScreen.hideAsync(); + // RNBootSplash.hide({fade: true}); +} + +/** 不需要阻塞的 */ +async function extraMakeup() { + // 自动更新 + try { + // 初始化网络状态 + Network.setup(); + + if (Config.get('setting.basic.autoUpdatePlugin')) { + const lastUpdated = PersistStatus.get('app.pluginUpdateTime') || 0; + const now = Date.now(); + if (Math.abs(now - lastUpdated) > 86400000) { + PersistStatus.set('app.pluginUpdateTime', now); + const plugins = PluginManager.getValidPlugins(); + for (let i = 0; i < plugins.length; ++i) { + const srcUrl = plugins[i].instance.srcUrl; + if (srcUrl) { + await PluginManager.installPluginFromUrl(srcUrl); + } + } + } + } + } catch {} + + async function handleLinkingUrl(url: string) { + // 插件 + try { + if (url.startsWith('musicfree://install/')) { + const plugins = url + .slice(20) + .split(',') + .map(decodeURIComponent); + await Promise.all( + plugins.map(it => + PluginManager.installPluginFromUrl(it).catch(() => {}), + ), + ); + Toast.success('安装成功~'); + } else if (url.endsWith('.js')) { + PluginManager.installPlugin(url, { + notCheckVersion: Config.get( + 'setting.basic.notCheckPluginVersion', + ), + }) + .then(res => { + Toast.success(`插件「${res.name}」安装成功~`); + }) + .catch(e => { + console.log(e); + Toast.warn(e?.message ?? '无法识别此插件'); + }); + } else if (supportLocalMediaType.some(it => url.endsWith(it))) { + // 本地播放 + const musicItem = await PluginManager.getByHash( + localPluginHash, + )?.instance?.importMusicItem?.(url); + console.log(musicItem); + if (musicItem) { + TrackPlayer.play(musicItem); + } + } + } catch {} + } + + // 开启监听 + Linking.addEventListener('url', data => { + if (data.url) { + handleLinkingUrl(data.url); + } + }); + const initUrl = await Linking.getInitialURL(); + if (initUrl) { + handleLinkingUrl(initUrl); + } + + if (Config.get('setting.basic.autoPlayWhenAppStart')) { + TrackPlayer.play(); + } +} diff --git a/src/hooks/useColors.ts b/src/hooks/useColors.ts index 0652e478..7423afec 100644 --- a/src/hooks/useColors.ts +++ b/src/hooks/useColors.ts @@ -1,4 +1,4 @@ -import {useTheme, Theme} from '@react-navigation/native'; +import {Theme, useTheme} from '@react-navigation/native'; import Color from 'color'; import {useMemo} from 'react'; diff --git a/src/hooks/useMounted.ts b/src/hooks/useMounted.ts index 7ab0581f..a0e8f0e2 100644 --- a/src/hooks/useMounted.ts +++ b/src/hooks/useMounted.ts @@ -1,4 +1,4 @@ -import {useRef, useState, useEffect, useCallback} from 'react'; +import {useCallback, useEffect, useRef, useState} from 'react'; export function useOnMounted() { const onMounted = useRef(false); diff --git a/src/lib/react-native-vdebug/index.js b/src/lib/react-native-vdebug/index.js index 75db0d25..d4f32308 100644 --- a/src/lib/react-native-vdebug/index.js +++ b/src/lib/react-native-vdebug/index.js @@ -1,552 +1,552 @@ -/// 魔改自 https://github.com/itenl/react-native-vdebug -import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; -import { - ScrollView, - View, - Text, - TouchableOpacity, - PanResponder, - Animated, - Dimensions, - StyleSheet, - TextInput, - Keyboard, - NativeModules, - Platform, - KeyboardAvoidingView, -} from 'react-native'; -import event from './src/event'; -// import Network, { traceNetwork } from './src/network'; -import Log, {traceLog} from './src/log'; -import HocComp from './src/hoc'; -import Storage from './src/storage'; -import {replaceReg} from './src/tool'; - -const {width, height} = Dimensions.get('window'); - -let commandContext = global; - -export const setExternalContext = externalContext => { - if (externalContext) commandContext = externalContext; -}; - -// Log/network trace when Element is not initialized. -export const initTrace = () => { - traceLog(); - // traceNetwork(); -}; - -class VDebug extends PureComponent { - static propTypes = { - // Expansion panel (Optional) - panels: PropTypes.array, - }; - - static defaultProps = { - panels: null, - }; - - constructor(props) { - super(props); - initTrace(); - this.containerHeight = (height / 3) * 2; - this.refsObj = {}; - this.state = { - commandValue: '', - showPanel: false, - currentPageIndex: 0, - pan: new Animated.ValueXY(), - scale: new Animated.Value(1), - panelHeight: new Animated.Value(0), - panels: this.addPanels(), - history: [], - historyFilter: [], - showHistory: false, - }; - this.panResponder = PanResponder.create({ - onStartShouldSetPanResponder: () => true, - onPanResponderGrant: () => { - this.state.pan.setOffset({ - x: this.state.pan.x._value, - y: this.state.pan.y._value, - }); - this.state.pan.setValue({x: 0, y: 0}); - Animated.spring(this.state.scale, { - useNativeDriver: true, - toValue: 1.3, - friction: 7, - }).start(); - }, - onPanResponderMove: Animated.event([ - null, - {dx: this.state.pan.x, dy: this.state.pan.y}, - ]), - onPanResponderRelease: ({nativeEvent}, gestureState) => { - if ( - Math.abs(gestureState.dx) < 5 && - Math.abs(gestureState.dy) < 5 - ) - this.togglePanel(); - setTimeout(() => { - Animated.spring(this.state.scale, { - useNativeDriver: true, - toValue: 1, - friction: 7, - }).start(() => { - this.setState({ - top: nativeEvent.pageY, - }); - }); - this.state.pan.flattenOffset(); - }, 0); - }, - }); - } - - componentDidMount() { - this.state.pan.setValue({x: 0, y: 0}); - Storage.support() && - Storage.get('react-native-vdebug@history').then(res => { - if (res) { - this.setState({ - history: res, - }); - } - }); - } - - getRef(index) { - return ref => { - if (!this.refsObj[index]) this.refsObj[index] = ref; - }; - } - - addPanels() { - let defaultPanels = [ - { - title: 'Log', - component: HocComp(Log, this.getRef(0)), - }, - // { - // title: 'Network', - // component: HocComp(Network, this.getRef(1)) - // }, - ]; - if (this.props.panels && this.props.panels.length) { - this.props.panels.forEach((item, index) => { - // support up to five extended panels - if (index >= 3) return; - if (item.title && item.component) { - item.component = HocComp( - item.component, - this.getRef(defaultPanels.length), - ); - defaultPanels.push(item); - } - }); - } - return defaultPanels; - } - - togglePanel() { - this.state.panelHeight.setValue( - this.state.panelHeight._value ? 0 : this.containerHeight, - ); - } - - clearLogs() { - const tabName = this.state.panels[this.state.currentPageIndex].title; - event.trigger('clear', tabName); - } - - showDev() { - NativeModules?.DevMenu?.show(); - } - - reloadDev() { - NativeModules?.DevMenu?.reload(); - } - - evalInContext(js, context) { - return function (str) { - let result = ''; - try { - // eslint-disable-next-line no-eval - result = eval(str); - } catch (err) { - result = 'Invalid input'; - } - return event.trigger('addLog', result); - }.call(context, `with(this) { ${js} } `); - } - - execCommand() { - if (!this.state.commandValue) return; - this.evalInContext(this.state.commandValue, commandContext); - this.syncHistory(); - Keyboard.dismiss(); - } - - clearCommand() { - this.textInput.clear(); - this.setState({ - historyFilter: [], - }); - } - - scrollToPage(index, animated = true) { - this.scrollToCard(index, animated); - } - - scrollToCard(cardIndex, animated = true) { - if (cardIndex < 0) cardIndex = 0; - else if (cardIndex >= this.cardCount) cardIndex = this.cardCount - 1; - if (this.scrollView) { - this.scrollView.scrollTo({ - x: width * cardIndex, - y: 0, - animated: animated, - }); - } - } - - scrollToTop() { - const item = this.refsObj[this.state.currentPageIndex]; - const instance = item?.getScrollRef && item?.getScrollRef(); - if (instance) { - // FlatList - instance.scrollToOffset && - instance.scrollToOffset({ - animated: true, - viewPosition: 0, - index: 0, - }); - // ScrollView - instance.scrollTo && - instance.scrollTo({x: 0, y: 0, animated: true}); - } - } - - renderPanelHeader() { - return ( - - {this.state.panels.map((item, index) => ( - { - if (index != this.state.currentPageIndex) { - this.scrollToPage(index); - this.setState({currentPageIndex: index}); - } else { - this.scrollToTop(); - } - }} - style={[ - styles.panelHeaderItem, - index === this.state.currentPageIndex && - styles.activeTab, - ]}> - - {item.title} - - - ))} - - ); - } - - syncHistory() { - if (!Storage.support()) return; - const res = this.state.history.filter(f => { - return f == this.state.commandValue; - }); - if (res && res.length) return; - this.state.history.splice(0, 0, this.state.commandValue); - this.state.historyFilter.splice(0, 0, this.state.commandValue); - this.setState( - { - history: this.state.history, - historyFilter: this.state.historyFilter, - }, - () => { - Storage.save('react-native-vdebug@history', this.state.history); - this.forceUpdate(); - }, - ); - } - - onChange(text) { - const state = {commandValue: text}; - if (text) { - const res = this.state.history.filter(f => - f.toLowerCase().match(replaceReg(text)), - ); - if (res && res.length) state.historyFilter = res; - } else { - state.historyFilter = []; - } - this.setState(state); - } - - renderCommandBar() { - return ( - - - - {this.state.historyFilter.map(text => { - return ( - { - if (text && text.toString) { - this.setState({ - commandValue: text.toString(), - }); - } - }}> - {text} - - ); - })} - - - - { - this.textInput = ref; - }} - style={styles.commandBarInput} - placeholderTextColor={'#000000a1'} - placeholder="Command..." - onChangeText={this.onChange.bind(this)} - value={this.state.commandValue} - onFocus={() => { - this.setState({showHistory: true}); - }} - onSubmitEditing={this.execCommand.bind(this)} - /> - - X - - - OK - - - - ); - } - - renderPanelFooter() { - return ( - - - Clear - - {__DEV__ && Platform.OS == 'ios' && ( - - Dev - - )} - - Hide - - - ); - } - - onScrollAnimationEnd({nativeEvent}) { - const currentPageIndex = Math.floor( - nativeEvent.contentOffset.x / Math.floor(width), - ); - currentPageIndex != this.state.currentPageIndex && - this.setState({ - currentPageIndex: currentPageIndex, - }); - } - - renderPanel() { - return ( - - {this.renderPanelHeader()} - { - this.scrollView = ref; - }} - pagingEnabled={true} - showsHorizontalScrollIndicator={false} - horizontal={true} - style={styles.panelContent}> - {this.state.panels.map((item, index) => { - return ( - - - - ); - })} - - {this.renderCommandBar()} - {this.renderPanelFooter()} - - ); - } - - renderDebugBtn() { - const {pan, scale} = this.state; - const [translateX, translateY] = [pan.x, pan.y]; - const btnStyle = {transform: [{translateX}, {translateY}, {scale}]}; - - return ( - - 调试 - - ); - } - - render() { - return ( - - {this.renderPanel()} - {this.renderDebugBtn()} - - ); - } -} - -const styles = StyleSheet.create({ - activeTab: { - backgroundColor: '#fff', - }, - panel: { - position: 'absolute', - zIndex: 99998, - elevation: 99998, - backgroundColor: '#fff', - width, - bottom: 0, - right: 0, - }, - panelHeader: { - width, - backgroundColor: '#eee', - flexDirection: 'row', - borderWidth: StyleSheet.hairlineWidth, - borderColor: '#d9d9d9', - }, - panelHeaderItem: { - flex: 1, - height: 40, - color: '#000', - borderRightWidth: StyleSheet.hairlineWidth, - borderColor: '#d9d9d9', - justifyContent: 'center', - }, - panelHeaderItemText: { - textAlign: 'center', - }, - panelContent: { - width, - flex: 0.9, - }, - panelBottom: { - width, - borderWidth: StyleSheet.hairlineWidth, - borderColor: '#d9d9d9', - flexDirection: 'row', - alignItems: 'center', - backgroundColor: '#eee', - height: 40, - }, - panelBottomBtn: { - flex: 1, - height: 40, - borderRightWidth: StyleSheet.hairlineWidth, - borderColor: '#d9d9d9', - justifyContent: 'center', - }, - panelBottomBtnText: { - color: '#000', - fontSize: 14, - textAlign: 'center', - }, - panelEmpty: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - }, - homeBtn: { - width: 60, - paddingVertical: 5, - backgroundColor: '#04be02', - borderRadius: 4, - alignItems: 'center', - justifyContent: 'center', - position: 'absolute', - zIndex: 99999, - bottom: height / 2, - right: 0, - shadowColor: 'rgb(18,34,74)', - shadowOffset: {width: 0, height: 1}, - shadowOpacity: 0.08, - elevation: 99999, - }, - homeBtnText: { - color: '#fff', - }, - commandBar: { - borderWidth: StyleSheet.hairlineWidth, - borderColor: '#d9d9d9', - flexDirection: 'row', - height: 40, - }, - commandBarInput: { - flex: 1, - paddingLeft: 10, - backgroundColor: '#ffffff', - color: '#000000', - }, - commandBarBtn: { - width: 40, - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '#eee', - }, - historyContainer: { - borderTopWidth: 1, - borderTopColor: '#d9d9d9', - backgroundColor: '#ffffff', - paddingHorizontal: 10, - }, -}); - -export default VDebug; +/// 魔改自 https://github.com/itenl/react-native-vdebug +import PropTypes from 'prop-types'; +import React, {PureComponent} from 'react'; +import { + Animated, + Dimensions, + Keyboard, + KeyboardAvoidingView, + NativeModules, + PanResponder, + Platform, + ScrollView, + StyleSheet, + Text, + TextInput, + TouchableOpacity, + View, +} from 'react-native'; +import event from './src/event'; +// import Network, { traceNetwork } from './src/network'; +import Log, {traceLog} from './src/log'; +import HocComp from './src/hoc'; +import Storage from './src/storage'; +import {replaceReg} from './src/tool'; + +const {width, height} = Dimensions.get('window'); + +let commandContext = global; + +export const setExternalContext = externalContext => { + if (externalContext) commandContext = externalContext; +}; + +// Log/network trace when Element is not initialized. +export const initTrace = () => { + traceLog(); + // traceNetwork(); +}; + +class VDebug extends PureComponent { + static propTypes = { + // Expansion panel (Optional) + panels: PropTypes.array, + }; + + static defaultProps = { + panels: null, + }; + + constructor(props) { + super(props); + initTrace(); + this.containerHeight = (height / 3) * 2; + this.refsObj = {}; + this.state = { + commandValue: '', + showPanel: false, + currentPageIndex: 0, + pan: new Animated.ValueXY(), + scale: new Animated.Value(1), + panelHeight: new Animated.Value(0), + panels: this.addPanels(), + history: [], + historyFilter: [], + showHistory: false, + }; + this.panResponder = PanResponder.create({ + onStartShouldSetPanResponder: () => true, + onPanResponderGrant: () => { + this.state.pan.setOffset({ + x: this.state.pan.x._value, + y: this.state.pan.y._value, + }); + this.state.pan.setValue({x: 0, y: 0}); + Animated.spring(this.state.scale, { + useNativeDriver: true, + toValue: 1.3, + friction: 7, + }).start(); + }, + onPanResponderMove: Animated.event([ + null, + {dx: this.state.pan.x, dy: this.state.pan.y}, + ]), + onPanResponderRelease: ({nativeEvent}, gestureState) => { + if ( + Math.abs(gestureState.dx) < 5 && + Math.abs(gestureState.dy) < 5 + ) + this.togglePanel(); + setTimeout(() => { + Animated.spring(this.state.scale, { + useNativeDriver: true, + toValue: 1, + friction: 7, + }).start(() => { + this.setState({ + top: nativeEvent.pageY, + }); + }); + this.state.pan.flattenOffset(); + }, 0); + }, + }); + } + + componentDidMount() { + this.state.pan.setValue({x: 0, y: 0}); + Storage.support() && + Storage.get('react-native-vdebug@history').then(res => { + if (res) { + this.setState({ + history: res, + }); + } + }); + } + + getRef(index) { + return ref => { + if (!this.refsObj[index]) this.refsObj[index] = ref; + }; + } + + addPanels() { + let defaultPanels = [ + { + title: 'Log', + component: HocComp(Log, this.getRef(0)), + }, + // { + // title: 'Network', + // component: HocComp(Network, this.getRef(1)) + // }, + ]; + if (this.props.panels && this.props.panels.length) { + this.props.panels.forEach((item, index) => { + // support up to five extended panels + if (index >= 3) return; + if (item.title && item.component) { + item.component = HocComp( + item.component, + this.getRef(defaultPanels.length), + ); + defaultPanels.push(item); + } + }); + } + return defaultPanels; + } + + togglePanel() { + this.state.panelHeight.setValue( + this.state.panelHeight._value ? 0 : this.containerHeight, + ); + } + + clearLogs() { + const tabName = this.state.panels[this.state.currentPageIndex].title; + event.trigger('clear', tabName); + } + + showDev() { + NativeModules?.DevMenu?.show(); + } + + reloadDev() { + NativeModules?.DevMenu?.reload(); + } + + evalInContext(js, context) { + return function (str) { + let result = ''; + try { + // eslint-disable-next-line no-eval + result = eval(str); + } catch (err) { + result = 'Invalid input'; + } + return event.trigger('addLog', result); + }.call(context, `with(this) { ${js} } `); + } + + execCommand() { + if (!this.state.commandValue) return; + this.evalInContext(this.state.commandValue, commandContext); + this.syncHistory(); + Keyboard.dismiss(); + } + + clearCommand() { + this.textInput.clear(); + this.setState({ + historyFilter: [], + }); + } + + scrollToPage(index, animated = true) { + this.scrollToCard(index, animated); + } + + scrollToCard(cardIndex, animated = true) { + if (cardIndex < 0) cardIndex = 0; + else if (cardIndex >= this.cardCount) cardIndex = this.cardCount - 1; + if (this.scrollView) { + this.scrollView.scrollTo({ + x: width * cardIndex, + y: 0, + animated: animated, + }); + } + } + + scrollToTop() { + const item = this.refsObj[this.state.currentPageIndex]; + const instance = item?.getScrollRef && item?.getScrollRef(); + if (instance) { + // FlatList + instance.scrollToOffset && + instance.scrollToOffset({ + animated: true, + viewPosition: 0, + index: 0, + }); + // ScrollView + instance.scrollTo && + instance.scrollTo({x: 0, y: 0, animated: true}); + } + } + + renderPanelHeader() { + return ( + + {this.state.panels.map((item, index) => ( + { + if (index != this.state.currentPageIndex) { + this.scrollToPage(index); + this.setState({currentPageIndex: index}); + } else { + this.scrollToTop(); + } + }} + style={[ + styles.panelHeaderItem, + index === this.state.currentPageIndex && + styles.activeTab, + ]}> + + {item.title} + + + ))} + + ); + } + + syncHistory() { + if (!Storage.support()) return; + const res = this.state.history.filter(f => { + return f == this.state.commandValue; + }); + if (res && res.length) return; + this.state.history.splice(0, 0, this.state.commandValue); + this.state.historyFilter.splice(0, 0, this.state.commandValue); + this.setState( + { + history: this.state.history, + historyFilter: this.state.historyFilter, + }, + () => { + Storage.save('react-native-vdebug@history', this.state.history); + this.forceUpdate(); + }, + ); + } + + onChange(text) { + const state = {commandValue: text}; + if (text) { + const res = this.state.history.filter(f => + f.toLowerCase().match(replaceReg(text)), + ); + if (res && res.length) state.historyFilter = res; + } else { + state.historyFilter = []; + } + this.setState(state); + } + + renderCommandBar() { + return ( + + + + {this.state.historyFilter.map(text => { + return ( + { + if (text && text.toString) { + this.setState({ + commandValue: text.toString(), + }); + } + }}> + {text} + + ); + })} + + + + { + this.textInput = ref; + }} + style={styles.commandBarInput} + placeholderTextColor={'#000000a1'} + placeholder="Command..." + onChangeText={this.onChange.bind(this)} + value={this.state.commandValue} + onFocus={() => { + this.setState({showHistory: true}); + }} + onSubmitEditing={this.execCommand.bind(this)} + /> + + X + + + OK + + + + ); + } + + renderPanelFooter() { + return ( + + + Clear + + {__DEV__ && Platform.OS == 'ios' && ( + + Dev + + )} + + Hide + + + ); + } + + onScrollAnimationEnd({nativeEvent}) { + const currentPageIndex = Math.floor( + nativeEvent.contentOffset.x / Math.floor(width), + ); + currentPageIndex != this.state.currentPageIndex && + this.setState({ + currentPageIndex: currentPageIndex, + }); + } + + renderPanel() { + return ( + + {this.renderPanelHeader()} + { + this.scrollView = ref; + }} + pagingEnabled={true} + showsHorizontalScrollIndicator={false} + horizontal={true} + style={styles.panelContent}> + {this.state.panels.map((item, index) => { + return ( + + + + ); + })} + + {this.renderCommandBar()} + {this.renderPanelFooter()} + + ); + } + + renderDebugBtn() { + const {pan, scale} = this.state; + const [translateX, translateY] = [pan.x, pan.y]; + const btnStyle = {transform: [{translateX}, {translateY}, {scale}]}; + + return ( + + 调试 + + ); + } + + render() { + return ( + + {this.renderPanel()} + {this.renderDebugBtn()} + + ); + } +} + +const styles = StyleSheet.create({ + activeTab: { + backgroundColor: '#fff', + }, + panel: { + position: 'absolute', + zIndex: 99998, + elevation: 99998, + backgroundColor: '#fff', + width, + bottom: 0, + right: 0, + }, + panelHeader: { + width, + backgroundColor: '#eee', + flexDirection: 'row', + borderWidth: StyleSheet.hairlineWidth, + borderColor: '#d9d9d9', + }, + panelHeaderItem: { + flex: 1, + height: 40, + color: '#000', + borderRightWidth: StyleSheet.hairlineWidth, + borderColor: '#d9d9d9', + justifyContent: 'center', + }, + panelHeaderItemText: { + textAlign: 'center', + }, + panelContent: { + width, + flex: 0.9, + }, + panelBottom: { + width, + borderWidth: StyleSheet.hairlineWidth, + borderColor: '#d9d9d9', + flexDirection: 'row', + alignItems: 'center', + backgroundColor: '#eee', + height: 40, + }, + panelBottomBtn: { + flex: 1, + height: 40, + borderRightWidth: StyleSheet.hairlineWidth, + borderColor: '#d9d9d9', + justifyContent: 'center', + }, + panelBottomBtnText: { + color: '#000', + fontSize: 14, + textAlign: 'center', + }, + panelEmpty: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + homeBtn: { + width: 60, + paddingVertical: 5, + backgroundColor: '#04be02', + borderRadius: 4, + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + zIndex: 99999, + bottom: height / 2, + right: 0, + shadowColor: 'rgb(18,34,74)', + shadowOffset: {width: 0, height: 1}, + shadowOpacity: 0.08, + elevation: 99999, + }, + homeBtnText: { + color: '#fff', + }, + commandBar: { + borderWidth: StyleSheet.hairlineWidth, + borderColor: '#d9d9d9', + flexDirection: 'row', + height: 40, + }, + commandBarInput: { + flex: 1, + paddingLeft: 10, + backgroundColor: '#ffffff', + color: '#000000', + }, + commandBarBtn: { + width: 40, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '#eee', + }, + historyContainer: { + borderTopWidth: 1, + borderTopColor: '#d9d9d9', + backgroundColor: '#ffffff', + paddingHorizontal: 10, + }, +}); + +export default VDebug; diff --git a/src/lib/react-native-vdebug/src/event.js b/src/lib/react-native-vdebug/src/event.js index 1267c8cf..3e0f5677 100644 --- a/src/lib/react-native-vdebug/src/event.js +++ b/src/lib/react-native-vdebug/src/event.js @@ -1,52 +1,52 @@ -export default class Event { - constructor() { - this.eventList = {}; - } - - on(eventName, callback) { - if (!this.eventList[eventName]) { - this.eventList[eventName] = []; - } - this.eventList[eventName].push(callback); - return this; - } - - trigger(...args) { - const key = Array.prototype.shift.call(args); - const fns = this.eventList[key]; - if (!fns || fns.length === 0) { - return this; - } - for (let i = 0, fn; (fn = fns[i++]); ) { - fn.apply(this, args); - } - return this; - } - - off(key, fn) { - const fns = this.eventList[key]; - if (!fns) { - return this; - } - if (!fn) { - if (fns) { - fns.length = 0; - } - } else { - for (let i = fns.length - 1; i >= 0; i--) { - const _fn = fns[i]; - if (_fn === fn) { - fns.splice(i, 1); - } - } - } - return this; - } -} -let event; -module.exports = (function () { - if (!event) { - event = new Event(); - } - return event; -})(); +export default class Event { + constructor() { + this.eventList = {}; + } + + on(eventName, callback) { + if (!this.eventList[eventName]) { + this.eventList[eventName] = []; + } + this.eventList[eventName].push(callback); + return this; + } + + trigger(...args) { + const key = Array.prototype.shift.call(args); + const fns = this.eventList[key]; + if (!fns || fns.length === 0) { + return this; + } + for (let i = 0, fn; (fn = fns[i++]); ) { + fn.apply(this, args); + } + return this; + } + + off(key, fn) { + const fns = this.eventList[key]; + if (!fns) { + return this; + } + if (!fn) { + if (fns) { + fns.length = 0; + } + } else { + for (let i = fns.length - 1; i >= 0; i--) { + const _fn = fns[i]; + if (_fn === fn) { + fns.splice(i, 1); + } + } + } + return this; + } +} +let event; +module.exports = (function () { + if (!event) { + event = new Event(); + } + return event; +})(); diff --git a/src/lib/react-native-vdebug/src/hoc.js b/src/lib/react-native-vdebug/src/hoc.js index 83ce03dc..8a333664 100644 --- a/src/lib/react-native-vdebug/src/hoc.js +++ b/src/lib/react-native-vdebug/src/hoc.js @@ -1,20 +1,20 @@ -import React, {PureComponent} from 'react'; - -export default (WrappedComponent, getRef = () => {}) => { - return class Hoc extends PureComponent { - constructor(props) { - super(props); - } - render() { - return ( - { - this.comp = comp; - getRef && getRef(comp); - }} - {...this.props} - /> - ); - } - }; -}; +import React, {PureComponent} from 'react'; + +export default (WrappedComponent, getRef = () => {}) => { + return class Hoc extends PureComponent { + constructor(props) { + super(props); + } + render() { + return ( + { + this.comp = comp; + getRef && getRef(comp); + }} + {...this.props} + /> + ); + } + }; +}; diff --git a/src/lib/react-native-vdebug/src/log.js b/src/lib/react-native-vdebug/src/log.js index 713668b3..96096ec4 100644 --- a/src/lib/react-native-vdebug/src/log.js +++ b/src/lib/react-native-vdebug/src/log.js @@ -1,369 +1,369 @@ -import React, {Component} from 'react'; -import { - TextInput, - FlatList, - Text, - StyleSheet, - View, - TouchableOpacity, - TouchableWithoutFeedback, - Alert, -} from 'react-native'; -import event from './event'; -import {debounce} from './tool'; - -const LEVEL_ENUM = { - All: '', - Log: 'log', - Info: 'info', - Warn: 'warn', - Error: 'error', -}; - -let logStack = null; - -class LogStack { - constructor() { - this.logs = []; - this.maxLength = 200; - this.listeners = []; - this.notify = debounce(10, false, this.notify); - } - - getLogs() { - return this.logs; - } - - addLog(method, data) { - if (this.logs.length > this.maxLength) { - this.logs.splice(this.logs.length - 1, 1); - } - const date = new Date(); - this.logs.splice(0, 0, { - index: this.logs.length + 1, - method, - data: strLog(data), - time: `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}:${date.getMilliseconds()}`, - id: unixId(), - }); - this.notify(); - } - - clearLogs() { - this.logs = []; - this.notify(); - } - - notify() { - this.listeners.forEach(callback => { - callback(); - }); - } - - attach(callback) { - this.listeners.push(callback); - } -} - -class Log extends Component { - constructor(props) { - super(props); - - this.name = 'Log'; - this.mountState = false; - this.state = { - logs: [], - filterLevel: '', - // filterValue: '' - }; - logStack.attach(() => { - if (this.mountState) { - const logs = logStack.getLogs(); - this.setState({ - logs, - }); - } - }); - } - - getScrollRef() { - return this.flatList; - } - - componentDidMount() { - this.mountState = true; - this.setState({ - logs: logStack.getLogs(), - }); - // 类方法用bind会指向不同地址,导致off失败 - event.on('clear', this.clearLogs); - event.on('addLog', this.addLog); - } - - componentWillUnmount() { - this.mountState = false; - event.off('clear', this.clearLogs); - event.off('addLog', this.addLog); - } - - addLog = msg => { - logStack.addLog('log', [msg]); - }; - - clearLogs = name => { - if (name === this.name) { - logStack.clearLogs(); - } - }; - - ListHeaderComponent() { - return ( - - - Index - Method - - {Object.keys(LEVEL_ENUM).map((key, index) => { - return ( - { - this.setState({ - filterLevel: LEVEL_ENUM[key], - }); - }} - style={[ - styles.headerBtnLevel, - this.state.filterLevel == - LEVEL_ENUM[key] && { - backgroundColor: '#eeeeee', - borderColor: '#959595a1', - borderWidth: 1, - }, - ]}> - - {key} - - - ); - })} - - - - { - this.textInput = ref; - }} - style={styles.filterValueBarInput} - placeholderTextColor={'#000000a1'} - placeholder="输入过滤条件..." - onSubmitEditing={({nativeEvent}) => { - if (nativeEvent) { - this.regInstance = new RegExp( - nativeEvent.text, - 'ig', - ); - this.setState({filterValue: nativeEvent.text}); - } - }} - /> - - X - - - - ); - } - - clearFilterValue() { - this.setState( - { - filterValue: '', - }, - () => { - this.textInput.clear(); - }, - ); - } - - renderItem({item}) { - if (this.state.filterLevel && this.state.filterLevel != item.method) - return null; - if ( - this.state.filterValue && - this.regInstance && - !this.regInstance.test(item.data) - ) - return null; - return ( - { - try { - Alert.alert('提示', '复制成功', [{text: '确认'}]); - } catch (error) {} - }}> - - - - {item.index} - - - - {item.method} - - - - {item.time} - - - - {item.data} - - - - ); - } - - render() { - return ( - { - this.flatList = ref; - }} - legacyImplementation - // initialNumToRender={20} - showsVerticalScrollIndicator - extraData={this.state} - data={this.state.logs} - stickyHeaderIndices={[0]} - ListHeaderComponent={this.ListHeaderComponent.bind(this)} - renderItem={this.renderItem.bind(this)} - ListEmptyComponent={() => Loading...} - keyExtractor={item => item.id} - /> - ); - } -} - -const styles = StyleSheet.create({ - log: { - color: '#000', - }, - info: { - color: '#000', - }, - warn: { - color: 'orange', - backgroundColor: '#fffacd', - borderColor: '#ffb930', - }, - error: { - color: '#dc143c', - backgroundColor: '#ffe4e1', - borderColor: '#f4a0ab', - }, - logItem: { - borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: '#eee', - }, - logItemText: { - fontSize: 12, - paddingHorizontal: 10, - paddingVertical: 8, - }, - logItemTime: { - marginLeft: 5, - fontSize: 11, - fontWeight: '700', - }, - filterValueBarBtn: { - width: 40, - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '#eee', - }, - filterValueBarInput: { - flex: 1, - paddingLeft: 10, - backgroundColor: '#ffffff', - color: '#000000', - }, - filterValueBar: { - flexDirection: 'row', - height: 40, - borderWidth: 1, - borderColor: '#eee', - }, - headerText: { - flex: 0.8, - borderColor: '#eee', - borderWidth: StyleSheet.hairlineWidth, - paddingVertical: 4, - paddingHorizontal: 2, - fontWeight: '700', - }, - headerBtnLevel: { - flex: 1, - borderColor: '#eee', - borderWidth: StyleSheet.hairlineWidth, - paddingHorizontal: 2, - }, - headerTextLevel: { - fontWeight: '700', - textAlign: 'center', - }, -}); - -function unixId() { - return Math.round(Math.random() * 1000000).toString(16); -} - -function strLog(logs) { - const arr = logs.map(data => formatLog(data)); - return arr.join(' '); -} - -function formatLog(obj) { - if ( - obj === null || - obj === undefined || - typeof obj === 'string' || - typeof obj === 'number' || - typeof obj === 'boolean' || - typeof obj === 'function' - ) { - return `"${String(obj)}"`; - } - if (obj instanceof Date) { - return `Date(${obj.toISOString()})`; - } - if (Array.isArray(obj)) { - return `Array(${obj.length})[${obj.map(elem => formatLog(elem))}]`; - } - if (obj.toString) { - try { - return `object(${JSON.stringify(obj, null, 2)})`; - } catch (err) { - return 'Invalid symbol'; - } - } - return 'unknown data'; -} - -export default Log; - -export const traceLog = () => { - if (!logStack) { - logStack = new LogStack(); - } -}; - -export const addLog = (level, ...args) => { - logStack.addLog(level, args); -}; +import React, {Component} from 'react'; +import { + Alert, + FlatList, + StyleSheet, + Text, + TextInput, + TouchableOpacity, + TouchableWithoutFeedback, + View, +} from 'react-native'; +import event from './event'; +import {debounce} from './tool'; + +const LEVEL_ENUM = { + All: '', + Log: 'log', + Info: 'info', + Warn: 'warn', + Error: 'error', +}; + +let logStack = null; + +class LogStack { + constructor() { + this.logs = []; + this.maxLength = 200; + this.listeners = []; + this.notify = debounce(10, false, this.notify); + } + + getLogs() { + return this.logs; + } + + addLog(method, data) { + if (this.logs.length > this.maxLength) { + this.logs.splice(this.logs.length - 1, 1); + } + const date = new Date(); + this.logs.splice(0, 0, { + index: this.logs.length + 1, + method, + data: strLog(data), + time: `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}:${date.getMilliseconds()}`, + id: unixId(), + }); + this.notify(); + } + + clearLogs() { + this.logs = []; + this.notify(); + } + + notify() { + this.listeners.forEach(callback => { + callback(); + }); + } + + attach(callback) { + this.listeners.push(callback); + } +} + +class Log extends Component { + constructor(props) { + super(props); + + this.name = 'Log'; + this.mountState = false; + this.state = { + logs: [], + filterLevel: '', + // filterValue: '' + }; + logStack.attach(() => { + if (this.mountState) { + const logs = logStack.getLogs(); + this.setState({ + logs, + }); + } + }); + } + + getScrollRef() { + return this.flatList; + } + + componentDidMount() { + this.mountState = true; + this.setState({ + logs: logStack.getLogs(), + }); + // 类方法用bind会指向不同地址,导致off失败 + event.on('clear', this.clearLogs); + event.on('addLog', this.addLog); + } + + componentWillUnmount() { + this.mountState = false; + event.off('clear', this.clearLogs); + event.off('addLog', this.addLog); + } + + addLog = msg => { + logStack.addLog('log', [msg]); + }; + + clearLogs = name => { + if (name === this.name) { + logStack.clearLogs(); + } + }; + + ListHeaderComponent() { + return ( + + + Index + Method + + {Object.keys(LEVEL_ENUM).map((key, index) => { + return ( + { + this.setState({ + filterLevel: LEVEL_ENUM[key], + }); + }} + style={[ + styles.headerBtnLevel, + this.state.filterLevel == + LEVEL_ENUM[key] && { + backgroundColor: '#eeeeee', + borderColor: '#959595a1', + borderWidth: 1, + }, + ]}> + + {key} + + + ); + })} + + + + { + this.textInput = ref; + }} + style={styles.filterValueBarInput} + placeholderTextColor={'#000000a1'} + placeholder="输入过滤条件..." + onSubmitEditing={({nativeEvent}) => { + if (nativeEvent) { + this.regInstance = new RegExp( + nativeEvent.text, + 'ig', + ); + this.setState({filterValue: nativeEvent.text}); + } + }} + /> + + X + + + + ); + } + + clearFilterValue() { + this.setState( + { + filterValue: '', + }, + () => { + this.textInput.clear(); + }, + ); + } + + renderItem({item}) { + if (this.state.filterLevel && this.state.filterLevel != item.method) + return null; + if ( + this.state.filterValue && + this.regInstance && + !this.regInstance.test(item.data) + ) + return null; + return ( + { + try { + Alert.alert('提示', '复制成功', [{text: '确认'}]); + } catch (error) {} + }}> + + + + {item.index} + + + + {item.method} + + + + {item.time} + + + + {item.data} + + + + ); + } + + render() { + return ( + { + this.flatList = ref; + }} + legacyImplementation + // initialNumToRender={20} + showsVerticalScrollIndicator + extraData={this.state} + data={this.state.logs} + stickyHeaderIndices={[0]} + ListHeaderComponent={this.ListHeaderComponent.bind(this)} + renderItem={this.renderItem.bind(this)} + ListEmptyComponent={() => Loading...} + keyExtractor={item => item.id} + /> + ); + } +} + +const styles = StyleSheet.create({ + log: { + color: '#000', + }, + info: { + color: '#000', + }, + warn: { + color: 'orange', + backgroundColor: '#fffacd', + borderColor: '#ffb930', + }, + error: { + color: '#dc143c', + backgroundColor: '#ffe4e1', + borderColor: '#f4a0ab', + }, + logItem: { + borderBottomWidth: StyleSheet.hairlineWidth, + borderColor: '#eee', + }, + logItemText: { + fontSize: 12, + paddingHorizontal: 10, + paddingVertical: 8, + }, + logItemTime: { + marginLeft: 5, + fontSize: 11, + fontWeight: '700', + }, + filterValueBarBtn: { + width: 40, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '#eee', + }, + filterValueBarInput: { + flex: 1, + paddingLeft: 10, + backgroundColor: '#ffffff', + color: '#000000', + }, + filterValueBar: { + flexDirection: 'row', + height: 40, + borderWidth: 1, + borderColor: '#eee', + }, + headerText: { + flex: 0.8, + borderColor: '#eee', + borderWidth: StyleSheet.hairlineWidth, + paddingVertical: 4, + paddingHorizontal: 2, + fontWeight: '700', + }, + headerBtnLevel: { + flex: 1, + borderColor: '#eee', + borderWidth: StyleSheet.hairlineWidth, + paddingHorizontal: 2, + }, + headerTextLevel: { + fontWeight: '700', + textAlign: 'center', + }, +}); + +function unixId() { + return Math.round(Math.random() * 1000000).toString(16); +} + +function strLog(logs) { + const arr = logs.map(data => formatLog(data)); + return arr.join(' '); +} + +function formatLog(obj) { + if ( + obj === null || + obj === undefined || + typeof obj === 'string' || + typeof obj === 'number' || + typeof obj === 'boolean' || + typeof obj === 'function' + ) { + return `"${String(obj)}"`; + } + if (obj instanceof Date) { + return `Date(${obj.toISOString()})`; + } + if (Array.isArray(obj)) { + return `Array(${obj.length})[${obj.map(elem => formatLog(elem))}]`; + } + if (obj.toString) { + try { + return `object(${JSON.stringify(obj, null, 2)})`; + } catch (err) { + return 'Invalid symbol'; + } + } + return 'unknown data'; +} + +export default Log; + +export const traceLog = () => { + if (!logStack) { + logStack = new LogStack(); + } +}; + +export const addLog = (level, ...args) => { + logStack.addLog(level, args); +}; diff --git a/src/lib/react-native-vdebug/src/network.js b/src/lib/react-native-vdebug/src/network.js index 10455bbf..42988b7a 100644 --- a/src/lib/react-native-vdebug/src/network.js +++ b/src/lib/react-native-vdebug/src/network.js @@ -1,722 +1,714 @@ -import React, {Component} from 'react'; -import { - TextInput, - Clipboard, - View, - Text, - StyleSheet, - FlatList, - TouchableOpacity, -} from 'react-native'; -import event from './event'; -import {debounce} from './tool'; - -let ajaxStack = null; - -class AjaxStack { - constructor() { - this.requestIds = []; - this.requests = {}; - this.maxLength = 200; - this.listeners = []; - this.notify = debounce(10, false, this.notify); - } - - getRequestIds() { - return this.requestIds; - } - - getRequests() { - return this.requests; - } - - getRequest(id) { - return this.requests[id] || {}; - } - - readBlobAsText(blob, encoding = 'utf-8') { - return new Promise((resolve, reject) => { - resolve('undefined'); - // const fr = new FileReader(); - // fr.onload = event => { - // resolve(fr.result); - // }; - // fr.onerror = err => { - // reject(err); - // }; - // fr.readAsText(blob, encoding); - }); - } - - JSONTryParse(jsonStr) { - try { - return JSON.parse(jsonStr); - } catch (error) { - return {}; - } - } - - formatResponse(response) { - if (response) { - if (typeof response === 'string') - response = this.JSONTryParse(response); - return JSON.stringify(response, null, 2); - } else { - return '{}'; - } - } - - updateRequest(id, data) { - // update item - const item = this.requests[id] || {}; - - if (this.requestIds.length > this.maxLength) { - const _id = this.requestIds[this.requestIds.length - 1]; - this.requestIds.splice(this.requestIds.length - 1, 1); - this.requests[id] && delete this.requests[_id]; - } - for (const key in data) { - item[key] = data[key]; - } - // update dom - const domData = { - id, - index: item.index ?? this.requestIds.length + 1, - host: item.host, - url: item.url, - status: item.status, - method: item.method || '-', - costTime: item.costTime > 0 ? `${item.costTime} ms` : '-', - resHeaders: item.resHeaders || null, - reqHeaders: item.reqHeaders || null, - getData: item.getData || null, - postData: item.postData || null, - response: null, - actived: !!item.actived, - startTime: item.startTime, - endTime: item.endTime, - }; - switch (item.responseType) { - case '': - case 'text': - // try to parse JSON - if (typeof item.response === 'string') { - try { - domData.response = this.formatResponse(item.response); - } catch (e) { - // not a JSON string - domData.response = item.response; - } - } else if (typeof item.response !== 'undefined') { - domData.response = Object.prototype.toString.call( - item.response, - ); - } - break; - case 'json': - if (typeof item.response !== 'undefined') { - domData.response = this.formatResponse(item.response); - } - break; - case 'blob': - case 'document': - case 'arraybuffer': - default: - if (item.response && typeof item.response !== 'undefined') { - this.readBlobAsText(item.response).then(res => { - domData.response = this.formatResponse(res); - }); - } - break; - } - if (item.readyState === 0 || item.readyState === 1) { - domData.status = 'Pending'; - } else if (item.readyState === 2 || item.readyState === 3) { - domData.status = 'Loading'; - } else if (item.readyState === 4) { - // do nothing - } else { - domData.status = 'Unknown'; - } - if (this.requestIds.indexOf(id) === -1) { - this.requestIds.splice(0, 0, id); - } - this.requests[id] = domData; - this.notify(this.requests[id]); - } - - clearRequests() { - this.requestIds = []; - this.requests = {}; - this.notify(); - } - - notify(args) { - this.listeners.forEach(callback => { - callback(args); - }); - } - - attach(callback) { - this.listeners.push(callback); - } -} - -class Network extends Component { - constructor(props) { - super(props); - this.name = 'Network'; - this.mountState = false; - this.state = { - showingId: null, - requestIds: [], - requests: {}, - filterValue: '', - }; - ajaxStack.attach(currentRequest => { - if (this.mountState) { - this.setState({ - requestIds: ajaxStack.getRequestIds(), - requests: ajaxStack.getRequests(), - }); - } - }); - } - - getScrollRef() { - return this.flatList; - } - - componentDidMount() { - this.mountState = true; - this.setState({ - requestIds: ajaxStack.getRequestIds(), - requests: ajaxStack.getRequests(), - }); - event.on('clear', this.clearRequests.bind(this)); - } - - componentWillUnmount() { - this.mountState = false; - event.off('clear', this.clearRequests.bind(this)); - } - - clearRequests(name) { - if (name === this.name) { - ajaxStack.clearRequests(); - } - } - - ListHeaderComponent() { - const count = Object.keys(this.state.requests).length || 0; - return ( - - - - ({count})Host - - - Method - - - Status - - - Time/Retry - - - - { - this.textInput = ref; - }} - style={styles.filterValueBarInput} - placeholderTextColor={'#000000a1'} - placeholder="输入过滤条件..." - onSubmitEditing={({nativeEvent}) => { - if (nativeEvent) { - this.regInstance = new RegExp( - nativeEvent.text, - 'ig', - ); - this.setState({filterValue: nativeEvent.text}); - } - }} - /> - - X - - - - ); - } - - clearFilterValue() { - this.setState( - { - filterValue: '', - }, - () => { - this.textInput.clear(); - }, - ); - } - - copy2cURL(item) { - let headerStr = ''; - if (item.reqHeaders) { - Object.keys(item.reqHeaders).forEach(key => { - let reqHeaders = item.reqHeaders[key]; - if (reqHeaders) { - headerStr += ` -H '${key}: ${reqHeaders}'`; - } - }); - } - let cURL = `curl -X ${item.method} '${item.url}' ${headerStr}`; - if (item.method === 'POST' && item.postData) - cURL += ` --data-binary '${item.postData}'`; - Clipboard.setString(cURL); - } - - retryFetch(item) { - let options = { - method: item.method, - }; - if (item.reqHeaders) options.headers = item.reqHeaders; - if (item.method == 'POST' && item.postData) - options.body = item.postData; - fetch(item.url, options); - } - - renderItem({item}) { - const _item = this.state.requests[item] || {}; - if ( - this.state.filterValue && - this.regInstance && - !this.regInstance.test(_item.url) - ) - return null; - return ( - - { - this.setState(state => ({ - showingId: - state.showingId === _item.id ? null : _item.id, - })); - }}> - = 400 && styles.error, - ]}> - - {`(${_item.index})${_item.host}`} - - - {_item.method} - - - {_item.status} - - { - this.retryFetch(_item); - }} - style={[ - styles.nwHeaderTitle, - { - width: 90, - borderRadius: 20, - borderColor: '#eeeeee', - borderWidth: 1, - }, - ]}> - {_item.costTime} - - - - {this.state.showingId === _item.id && ( - - - - Operate - - { - this.copy2cURL(_item); - }}> - {'[ Copy cURL to clipboard ]'} - - { - Clipboard.setString(_item.response); - }}> - {'[ Copy response to clipboard ]'} - - - - - General - - - URL: - {_item.url} - - - startTime: - {_item.startTime} - - - endTime: - {_item.endTime} - - - {_item.reqHeaders && ( - - - Request Header - - {Object.keys(_item.reqHeaders).map(key => ( - - {key}: - {_item.reqHeaders[key]} - - ))} - - )} - {_item.resHeaders && ( - - - Response Header - - {Object.keys(_item.resHeaders).map(key => ( - - {key}: - {_item.resHeaders[key]} - - ))} - - )} - {_item.getData && ( - - - Query String Parameters - - {Object.keys(_item.getData).map(key => ( - - {key}: - {_item.getData[key]} - - ))} - - )} - {_item.postData && ( - - - Form Data - - {_item.postData} - - )} - - - Response - - - {_item.response || ''} - - - - )} - - ); - } - - render() { - return ( - { - this.flatList = ref; - }} - showsVerticalScrollIndicator={true} - ListHeaderComponent={this.ListHeaderComponent.bind(this)} - extraData={this.state} - data={this.state.requestIds} - stickyHeaderIndices={[0]} - renderItem={this.renderItem.bind(this)} - ListEmptyComponent={() => Loading...} - keyExtractor={item => item} - /> - ); - } -} - -const styles = StyleSheet.create({ - bold: { - fontWeight: '700', - }, - active: { - backgroundColor: '#fffacd', - }, - flex3: { - flex: 3, - }, - flex1: { - flex: 1, - }, - error: { - backgroundColor: '#ffe4e1', - borderColor: '#ffb930', - }, - nwHeader: { - flexDirection: 'row', - backgroundColor: '#fff', - }, - nwHeaderTitle: { - borderColor: '#eee', - borderWidth: StyleSheet.hairlineWidth, - paddingVertical: 4, - paddingHorizontal: 2, - }, - nwItem: {}, - nwItemDetail: { - borderColor: '#eee', - borderLeftWidth: StyleSheet.hairlineWidth, - }, - nwItemDetailHeader: { - paddingLeft: 5, - paddingVertical: 4, - backgroundColor: '#eee', - }, - nwDetailItem: { - paddingLeft: 5, - flexDirection: 'row', - }, - filterValueBarBtn: { - width: 40, - alignItems: 'center', - justifyContent: 'center', - backgroundColor: '#eee', - }, - filterValueBarInput: { - flex: 1, - paddingLeft: 10, - backgroundColor: '#ffffff', - color: '#000000', - }, - filterValueBar: { - flexDirection: 'row', - height: 40, - borderWidth: 1, - borderColor: '#eee', - }, -}); - -function unixId() { - return Math.round(Math.random() * 1000000).toString(16); -} - -function proxyAjax(XHR, stack) { - if (!XHR) { - return; - } - const _open = XHR.prototype.open; - const _send = XHR.prototype.send; - this._open = _open; - this._send = _send; - - // mock open() - XHR.prototype.open = function (...args) { - const XMLReq = this; - const method = args[0]; - const url = args[1]; - const id = unixId(); - let timer = null; - - // may be used by other functions - XMLReq._requestID = id; - XMLReq._method = method; - XMLReq._url = url; - - // mock onreadystatechange - const _onreadystatechange = XMLReq.onreadystatechange || function () {}; - const onreadystatechange = function () { - const item = stack.getRequest(id); - - // update status - item.readyState = XMLReq.readyState; - item.status = 0; - if (XMLReq.readyState > 1) { - item.status = XMLReq.status; - } - item.responseType = XMLReq.responseType; - - if (XMLReq.readyState === 0) { - // UNSENT - if (!item.startTime) { - item.startTime = +new Date(); - } - } else if (XMLReq.readyState === 1) { - // OPENED - if (!item.startTime) { - item.startTime = +new Date(); - } - } else if (XMLReq.readyState === 2) { - // HEADERS_RECEIVED - item.resHeaders = {}; - const resHeaders = XMLReq.getAllResponseHeaders() || ''; - const resHeadersArr = resHeaders.split('\n'); - // extract plain text to key-value format - for (let i = 0; i < resHeadersArr.length; i++) { - const line = resHeadersArr[i]; - if (!line) { - // eslint-disable-next-line no-continue - continue; - } - const arr = line.split(': '); - const key = arr[0]; - const value = arr.slice(1).join(': '); - item.resHeaders[key] = value; - } - } else if (XMLReq.readyState === 3) { - // LOADING - } else if (XMLReq.readyState === 4) { - // DONE - clearInterval(timer); - item.endTime = +new Date(); - item.costTime = item.endTime - (item.startTime || item.endTime); - item.response = XMLReq.response; - } else { - clearInterval(timer); - } - - if (!XMLReq._noVConsole) { - stack.updateRequest(id, item); - } - return _onreadystatechange.apply(XMLReq, args); - }; - XMLReq.onreadystatechange = onreadystatechange; - - // some 3rd libraries will change XHR's default function - // so we use a timer to avoid lost tracking of readyState - let preState = -1; - timer = setInterval(() => { - if (preState !== XMLReq.readyState) { - preState = XMLReq.readyState; - onreadystatechange.call(XMLReq); - } - }, 10); - - return _open.apply(XMLReq, args); - }; - - // mock send() - XHR.prototype.send = function (...args) { - const XMLReq = this; - const data = args[0]; - - const item = stack.getRequest(XMLReq._requestID); - item.method = XMLReq._method.toUpperCase(); - - let query = XMLReq._url.split('?'); // a.php?b=c&d=?e => ['a.php', 'b=c&d=', '?e'] - item.url = XMLReq._url; - item.host = query[0]; - - if (query.length == 2) { - item.getData = {}; - query = query[1].split('&'); // => ['b=c', 'd=?e'] - for (let q of query) { - q = q.split('='); - item.getData[q[0]] = decodeURIComponent(q[1]); - } - } - - item.reqHeaders = XMLReq._headers; - - if (item.method === 'POST' && data) { - // save POST data - if (typeof data === 'string') { - item.postData = data; - } else { - try { - item.postData = JSON.stringify(data); - } catch (error) {} - } - } - - if (!XMLReq._noVConsole) { - stack.updateRequest(XMLReq._requestID, item); - } - - return _send.apply(XMLReq, args); - }; -} - -export default Network; - -export const traceNetwork = () => { - if (!ajaxStack) { - ajaxStack = new AjaxStack(); - proxyAjax( - global.originalXMLHttpRequest || global.XMLHttpRequest, - ajaxStack, - ); - } -}; +import React, {Component} from 'react'; +import {Clipboard, FlatList, StyleSheet, Text, TextInput, TouchableOpacity, View,} from 'react-native'; +import event from './event'; +import {debounce} from './tool'; + +let ajaxStack = null; + +class AjaxStack { + constructor() { + this.requestIds = []; + this.requests = {}; + this.maxLength = 200; + this.listeners = []; + this.notify = debounce(10, false, this.notify); + } + + getRequestIds() { + return this.requestIds; + } + + getRequests() { + return this.requests; + } + + getRequest(id) { + return this.requests[id] || {}; + } + + readBlobAsText(blob, encoding = 'utf-8') { + return new Promise((resolve, reject) => { + resolve('undefined'); + // const fr = new FileReader(); + // fr.onload = event => { + // resolve(fr.result); + // }; + // fr.onerror = err => { + // reject(err); + // }; + // fr.readAsText(blob, encoding); + }); + } + + JSONTryParse(jsonStr) { + try { + return JSON.parse(jsonStr); + } catch (error) { + return {}; + } + } + + formatResponse(response) { + if (response) { + if (typeof response === 'string') + response = this.JSONTryParse(response); + return JSON.stringify(response, null, 2); + } else { + return '{}'; + } + } + + updateRequest(id, data) { + // update item + const item = this.requests[id] || {}; + + if (this.requestIds.length > this.maxLength) { + const _id = this.requestIds[this.requestIds.length - 1]; + this.requestIds.splice(this.requestIds.length - 1, 1); + this.requests[id] && delete this.requests[_id]; + } + for (const key in data) { + item[key] = data[key]; + } + // update dom + const domData = { + id, + index: item.index ?? this.requestIds.length + 1, + host: item.host, + url: item.url, + status: item.status, + method: item.method || '-', + costTime: item.costTime > 0 ? `${item.costTime} ms` : '-', + resHeaders: item.resHeaders || null, + reqHeaders: item.reqHeaders || null, + getData: item.getData || null, + postData: item.postData || null, + response: null, + actived: !!item.actived, + startTime: item.startTime, + endTime: item.endTime, + }; + switch (item.responseType) { + case '': + case 'text': + // try to parse JSON + if (typeof item.response === 'string') { + try { + domData.response = this.formatResponse(item.response); + } catch (e) { + // not a JSON string + domData.response = item.response; + } + } else if (typeof item.response !== 'undefined') { + domData.response = Object.prototype.toString.call( + item.response, + ); + } + break; + case 'json': + if (typeof item.response !== 'undefined') { + domData.response = this.formatResponse(item.response); + } + break; + case 'blob': + case 'document': + case 'arraybuffer': + default: + if (item.response && typeof item.response !== 'undefined') { + this.readBlobAsText(item.response).then(res => { + domData.response = this.formatResponse(res); + }); + } + break; + } + if (item.readyState === 0 || item.readyState === 1) { + domData.status = 'Pending'; + } else if (item.readyState === 2 || item.readyState === 3) { + domData.status = 'Loading'; + } else if (item.readyState === 4) { + // do nothing + } else { + domData.status = 'Unknown'; + } + if (this.requestIds.indexOf(id) === -1) { + this.requestIds.splice(0, 0, id); + } + this.requests[id] = domData; + this.notify(this.requests[id]); + } + + clearRequests() { + this.requestIds = []; + this.requests = {}; + this.notify(); + } + + notify(args) { + this.listeners.forEach(callback => { + callback(args); + }); + } + + attach(callback) { + this.listeners.push(callback); + } +} + +class Network extends Component { + constructor(props) { + super(props); + this.name = 'Network'; + this.mountState = false; + this.state = { + showingId: null, + requestIds: [], + requests: {}, + filterValue: '', + }; + ajaxStack.attach(currentRequest => { + if (this.mountState) { + this.setState({ + requestIds: ajaxStack.getRequestIds(), + requests: ajaxStack.getRequests(), + }); + } + }); + } + + getScrollRef() { + return this.flatList; + } + + componentDidMount() { + this.mountState = true; + this.setState({ + requestIds: ajaxStack.getRequestIds(), + requests: ajaxStack.getRequests(), + }); + event.on('clear', this.clearRequests.bind(this)); + } + + componentWillUnmount() { + this.mountState = false; + event.off('clear', this.clearRequests.bind(this)); + } + + clearRequests(name) { + if (name === this.name) { + ajaxStack.clearRequests(); + } + } + + ListHeaderComponent() { + const count = Object.keys(this.state.requests).length || 0; + return ( + + + + ({count})Host + + + Method + + + Status + + + Time/Retry + + + + { + this.textInput = ref; + }} + style={styles.filterValueBarInput} + placeholderTextColor={'#000000a1'} + placeholder="输入过滤条件..." + onSubmitEditing={({nativeEvent}) => { + if (nativeEvent) { + this.regInstance = new RegExp( + nativeEvent.text, + 'ig', + ); + this.setState({filterValue: nativeEvent.text}); + } + }} + /> + + X + + + + ); + } + + clearFilterValue() { + this.setState( + { + filterValue: '', + }, + () => { + this.textInput.clear(); + }, + ); + } + + copy2cURL(item) { + let headerStr = ''; + if (item.reqHeaders) { + Object.keys(item.reqHeaders).forEach(key => { + let reqHeaders = item.reqHeaders[key]; + if (reqHeaders) { + headerStr += ` -H '${key}: ${reqHeaders}'`; + } + }); + } + let cURL = `curl -X ${item.method} '${item.url}' ${headerStr}`; + if (item.method === 'POST' && item.postData) + cURL += ` --data-binary '${item.postData}'`; + Clipboard.setString(cURL); + } + + retryFetch(item) { + let options = { + method: item.method, + }; + if (item.reqHeaders) options.headers = item.reqHeaders; + if (item.method == 'POST' && item.postData) + options.body = item.postData; + fetch(item.url, options); + } + + renderItem({item}) { + const _item = this.state.requests[item] || {}; + if ( + this.state.filterValue && + this.regInstance && + !this.regInstance.test(_item.url) + ) + return null; + return ( + + { + this.setState(state => ({ + showingId: + state.showingId === _item.id ? null : _item.id, + })); + }}> + = 400 && styles.error, + ]}> + + {`(${_item.index})${_item.host}`} + + + {_item.method} + + + {_item.status} + + { + this.retryFetch(_item); + }} + style={[ + styles.nwHeaderTitle, + { + width: 90, + borderRadius: 20, + borderColor: '#eeeeee', + borderWidth: 1, + }, + ]}> + {_item.costTime} + + + + {this.state.showingId === _item.id && ( + + + + Operate + + { + this.copy2cURL(_item); + }}> + {'[ Copy cURL to clipboard ]'} + + { + Clipboard.setString(_item.response); + }}> + {'[ Copy response to clipboard ]'} + + + + + General + + + URL: + {_item.url} + + + startTime: + {_item.startTime} + + + endTime: + {_item.endTime} + + + {_item.reqHeaders && ( + + + Request Header + + {Object.keys(_item.reqHeaders).map(key => ( + + {key}: + {_item.reqHeaders[key]} + + ))} + + )} + {_item.resHeaders && ( + + + Response Header + + {Object.keys(_item.resHeaders).map(key => ( + + {key}: + {_item.resHeaders[key]} + + ))} + + )} + {_item.getData && ( + + + Query String Parameters + + {Object.keys(_item.getData).map(key => ( + + {key}: + {_item.getData[key]} + + ))} + + )} + {_item.postData && ( + + + Form Data + + {_item.postData} + + )} + + + Response + + + {_item.response || ''} + + + + )} + + ); + } + + render() { + return ( + { + this.flatList = ref; + }} + showsVerticalScrollIndicator={true} + ListHeaderComponent={this.ListHeaderComponent.bind(this)} + extraData={this.state} + data={this.state.requestIds} + stickyHeaderIndices={[0]} + renderItem={this.renderItem.bind(this)} + ListEmptyComponent={() => Loading...} + keyExtractor={item => item} + /> + ); + } +} + +const styles = StyleSheet.create({ + bold: { + fontWeight: '700', + }, + active: { + backgroundColor: '#fffacd', + }, + flex3: { + flex: 3, + }, + flex1: { + flex: 1, + }, + error: { + backgroundColor: '#ffe4e1', + borderColor: '#ffb930', + }, + nwHeader: { + flexDirection: 'row', + backgroundColor: '#fff', + }, + nwHeaderTitle: { + borderColor: '#eee', + borderWidth: StyleSheet.hairlineWidth, + paddingVertical: 4, + paddingHorizontal: 2, + }, + nwItem: {}, + nwItemDetail: { + borderColor: '#eee', + borderLeftWidth: StyleSheet.hairlineWidth, + }, + nwItemDetailHeader: { + paddingLeft: 5, + paddingVertical: 4, + backgroundColor: '#eee', + }, + nwDetailItem: { + paddingLeft: 5, + flexDirection: 'row', + }, + filterValueBarBtn: { + width: 40, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '#eee', + }, + filterValueBarInput: { + flex: 1, + paddingLeft: 10, + backgroundColor: '#ffffff', + color: '#000000', + }, + filterValueBar: { + flexDirection: 'row', + height: 40, + borderWidth: 1, + borderColor: '#eee', + }, +}); + +function unixId() { + return Math.round(Math.random() * 1000000).toString(16); +} + +function proxyAjax(XHR, stack) { + if (!XHR) { + return; + } + const _open = XHR.prototype.open; + const _send = XHR.prototype.send; + this._open = _open; + this._send = _send; + + // mock open() + XHR.prototype.open = function (...args) { + const XMLReq = this; + const method = args[0]; + const url = args[1]; + const id = unixId(); + let timer = null; + + // may be used by other functions + XMLReq._requestID = id; + XMLReq._method = method; + XMLReq._url = url; + + // mock onreadystatechange + const _onreadystatechange = XMLReq.onreadystatechange || function () {}; + const onreadystatechange = function () { + const item = stack.getRequest(id); + + // update status + item.readyState = XMLReq.readyState; + item.status = 0; + if (XMLReq.readyState > 1) { + item.status = XMLReq.status; + } + item.responseType = XMLReq.responseType; + + if (XMLReq.readyState === 0) { + // UNSENT + if (!item.startTime) { + item.startTime = +new Date(); + } + } else if (XMLReq.readyState === 1) { + // OPENED + if (!item.startTime) { + item.startTime = +new Date(); + } + } else if (XMLReq.readyState === 2) { + // HEADERS_RECEIVED + item.resHeaders = {}; + const resHeaders = XMLReq.getAllResponseHeaders() || ''; + const resHeadersArr = resHeaders.split('\n'); + // extract plain text to key-value format + for (let i = 0; i < resHeadersArr.length; i++) { + const line = resHeadersArr[i]; + if (!line) { + // eslint-disable-next-line no-continue + continue; + } + const arr = line.split(': '); + const key = arr[0]; + const value = arr.slice(1).join(': '); + item.resHeaders[key] = value; + } + } else if (XMLReq.readyState === 3) { + // LOADING + } else if (XMLReq.readyState === 4) { + // DONE + clearInterval(timer); + item.endTime = +new Date(); + item.costTime = item.endTime - (item.startTime || item.endTime); + item.response = XMLReq.response; + } else { + clearInterval(timer); + } + + if (!XMLReq._noVConsole) { + stack.updateRequest(id, item); + } + return _onreadystatechange.apply(XMLReq, args); + }; + XMLReq.onreadystatechange = onreadystatechange; + + // some 3rd libraries will change XHR's default function + // so we use a timer to avoid lost tracking of readyState + let preState = -1; + timer = setInterval(() => { + if (preState !== XMLReq.readyState) { + preState = XMLReq.readyState; + onreadystatechange.call(XMLReq); + } + }, 10); + + return _open.apply(XMLReq, args); + }; + + // mock send() + XHR.prototype.send = function (...args) { + const XMLReq = this; + const data = args[0]; + + const item = stack.getRequest(XMLReq._requestID); + item.method = XMLReq._method.toUpperCase(); + + let query = XMLReq._url.split('?'); // a.php?b=c&d=?e => ['a.php', 'b=c&d=', '?e'] + item.url = XMLReq._url; + item.host = query[0]; + + if (query.length == 2) { + item.getData = {}; + query = query[1].split('&'); // => ['b=c', 'd=?e'] + for (let q of query) { + q = q.split('='); + item.getData[q[0]] = decodeURIComponent(q[1]); + } + } + + item.reqHeaders = XMLReq._headers; + + if (item.method === 'POST' && data) { + // save POST data + if (typeof data === 'string') { + item.postData = data; + } else { + try { + item.postData = JSON.stringify(data); + } catch (error) {} + } + } + + if (!XMLReq._noVConsole) { + stack.updateRequest(XMLReq._requestID, item); + } + + return _send.apply(XMLReq, args); + }; +} + +export default Network; + +export const traceNetwork = () => { + if (!ajaxStack) { + ajaxStack = new AjaxStack(); + proxyAjax( + global.originalXMLHttpRequest || global.XMLHttpRequest, + ajaxStack, + ); + } +}; diff --git a/src/lib/react-native-vdebug/src/storage.js b/src/lib/react-native-vdebug/src/storage.js index f984961b..ed7f0ddf 100644 --- a/src/lib/react-native-vdebug/src/storage.js +++ b/src/lib/react-native-vdebug/src/storage.js @@ -1,7 +1,7 @@ -const storage = { - support: function () { - return false; - }, -}; - -export default storage; +const storage = { + support: function () { + return false; + }, +}; + +export default storage; diff --git a/src/lib/react-native-vdebug/src/tool.js b/src/lib/react-native-vdebug/src/tool.js index 4e2015ee..3feb11f3 100644 --- a/src/lib/react-native-vdebug/src/tool.js +++ b/src/lib/react-native-vdebug/src/tool.js @@ -1,61 +1,61 @@ -function throttle(delay, noTrailing, callback, debounceMode) { - let timeoutID; - let lastExec = 0; - if (typeof noTrailing !== 'boolean') { - debounceMode = callback; - callback = noTrailing; - noTrailing = undefined; - } - - function wrapper(...args) { - const self = this; - const elapsed = Number(new Date()) - lastExec; - - function exec() { - lastExec = Number(new Date()); - callback.apply(self, args); - } - - function clear() { - timeoutID = undefined; - } - - if (debounceMode && !timeoutID) { - exec(); - } - - if (timeoutID) { - clearTimeout(timeoutID); - } - - if (!debounceMode && elapsed > delay) { - exec(); - } else if (noTrailing !== true) { - timeoutID = setTimeout( - debounceMode ? clear : exec, - !debounceMode ? delay - elapsed : delay, - ); - } - } - - return wrapper; -} - -function debounce(delay, atBegin, callback) { - return callback === undefined - ? throttle(delay, atBegin, false) - : throttle(delay, callback, atBegin !== false); -} - -function replaceReg(str) { - const regStr = /\\|\$|\(|\)|\*|\+|\.|\[|\]|\?|\^|\{|\}|\|/gi; - return str.replace(regStr, function (input) { - return `\\${input}`; - }); -} - -module.exports = { - throttle, - debounce, - replaceReg, -}; +function throttle(delay, noTrailing, callback, debounceMode) { + let timeoutID; + let lastExec = 0; + if (typeof noTrailing !== 'boolean') { + debounceMode = callback; + callback = noTrailing; + noTrailing = undefined; + } + + function wrapper(...args) { + const self = this; + const elapsed = Number(new Date()) - lastExec; + + function exec() { + lastExec = Number(new Date()); + callback.apply(self, args); + } + + function clear() { + timeoutID = undefined; + } + + if (debounceMode && !timeoutID) { + exec(); + } + + if (timeoutID) { + clearTimeout(timeoutID); + } + + if (!debounceMode && elapsed > delay) { + exec(); + } else if (noTrailing !== true) { + timeoutID = setTimeout( + debounceMode ? clear : exec, + !debounceMode ? delay - elapsed : delay, + ); + } + } + + return wrapper; +} + +function debounce(delay, atBegin, callback) { + return callback === undefined + ? throttle(delay, atBegin, false) + : throttle(delay, callback, atBegin !== false); +} + +function replaceReg(str) { + const regStr = /\\|\$|\(|\)|\*|\+|\.|\[|\]|\?|\^|\{|\}|\|/gi; + return str.replace(regStr, function (input) { + return `\\${input}`; + }); +} + +module.exports = { + throttle, + debounce, + replaceReg, +}; diff --git a/src/native/appIconUtil/index.ts b/src/native/appIconUtil/index.ts deleted file mode 100644 index fc3b412d..00000000 --- a/src/native/appIconUtil/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {NativeModule, NativeModules} from 'react-native'; - -interface IAppIconUtil extends NativeModule { - /** 修改图标 */ - changeIcon: (icon: 'Default' | 'Logo1') => Promise; - /** 获取当前图标 */ - getIcon: () => Promise; -} - -const AppIconUtil: IAppIconUtil = NativeModules.AppIconUtil; - -export default AppIconUtil; diff --git a/src/pages/artistDetail/hooks/useQuery.ts b/src/pages/artistDetail/hooks/useQuery.ts index 45cd3753..14618f9d 100644 --- a/src/pages/artistDetail/hooks/useQuery.ts +++ b/src/pages/artistDetail/hooks/useQuery.ts @@ -1,6 +1,6 @@ import {errorLog} from '@/utils/log'; import {RequestStateCode} from '@/constants/commonConst'; -import produce from 'immer'; +import {produce} from 'immer'; import {useAtom} from 'jotai'; import {useCallback} from 'react'; import {queryResultAtom} from '../store/atoms'; diff --git a/src/pages/artistDetail/index.tsx b/src/pages/artistDetail/index.tsx index 30c4890f..e25a93cf 100644 --- a/src/pages/artistDetail/index.tsx +++ b/src/pages/artistDetail/index.tsx @@ -1,68 +1,68 @@ -import React, {useEffect} from 'react'; -import {StyleSheet, View} from 'react-native'; -import MusicBar from '@/components/musicBar'; -import Header from './components/header'; -import Body from './components/body'; -import {useAtom, useSetAtom} from 'jotai'; -import {initQueryResult, queryResultAtom, scrollToTopAtom} from './store/atoms'; -import {ROUTE_PATH, useNavigate, useParams} from '@/entry/router'; -import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; -import globalStyle from '@/constants/globalStyle'; -import useOrientation from '@/hooks/useOrientation'; -import AppBar from '@/components/base/appBar'; - -export default function ArtistDetail() { - const [queryResult, setQueryResult] = useAtom(queryResultAtom); - const {artistItem} = useParams<'artist-detail'>(); - const setScrollToTopState = useSetAtom(scrollToTopAtom); - const navigate = useNavigate(); - const orientation = useOrientation(); - - useEffect(() => { - return () => { - setQueryResult(initQueryResult); - setScrollToTopState(true); - }; - }, []); - - return ( - - - 作者 - - -
- - - - - - ); -} - -const style = StyleSheet.create({ - horizonal: { - flexDirection: 'row', - flex: 1, - }, -}); +import React, {useEffect} from 'react'; +import {StyleSheet, View} from 'react-native'; +import MusicBar from '@/components/musicBar'; +import Header from './components/header'; +import Body from './components/body'; +import {useAtom, useSetAtom} from 'jotai'; +import {initQueryResult, queryResultAtom, scrollToTopAtom} from './store/atoms'; +import {ROUTE_PATH, useNavigate, useParams} from '@/entry/router'; +import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; +import globalStyle from '@/constants/globalStyle'; +import useOrientation from '@/hooks/useOrientation'; +import AppBar from '@/components/base/appBar'; + +export default function ArtistDetail() { + const [queryResult, setQueryResult] = useAtom(queryResultAtom); + const {artistItem} = useParams<'artist-detail'>(); + const setScrollToTopState = useSetAtom(scrollToTopAtom); + const navigate = useNavigate(); + const orientation = useOrientation(); + + useEffect(() => { + return () => { + setQueryResult(initQueryResult); + setScrollToTopState(true); + }; + }, []); + + return ( + + + 作者 + + +
+ + + + + + ); +} + +const style = StyleSheet.create({ + horizonal: { + flexDirection: 'row', + flex: 1, + }, +}); diff --git a/src/pages/downloading/downloadingList.tsx b/src/pages/downloading/downloadingList.tsx index cea3c463..f2d101d9 100644 --- a/src/pages/downloading/downloadingList.tsx +++ b/src/pages/downloading/downloadingList.tsx @@ -1,63 +1,63 @@ -import React from 'react'; -import {FlatList, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Download from '@/core/download'; -import ListItem from '@/components/base/listItem'; -import {sizeFormatter} from '@/utils/fileUtils'; - -export default function DownloadingList() { - const downloading = Download.useDownloadingMusic(); - const pending = Download.usePendingMusic(); - const progress = Download.useDownloadingProgress(); // progress没有更新同步 - - return ( - - `dl${_.filename}`} - extraData={progress} - renderItem={({item, index}) => { - if (index < downloading.length) { - const prog = progress[item.filename]; - return ( - - - - ); - } else { - return ( - - - - ); - } - }} - /> - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: rpx(750), - flex: 1, - }, - downloading: { - flexGrow: 0, - }, -}); +import React from 'react'; +import {FlatList, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import Download from '@/core/download'; +import ListItem from '@/components/base/listItem'; +import {sizeFormatter} from '@/utils/fileUtils'; + +export default function DownloadingList() { + const downloading = Download.useDownloadingMusic(); + const pending = Download.usePendingMusic(); + const progress = Download.useDownloadingProgress(); // progress没有更新同步 + + return ( + + `dl${_.filename}`} + extraData={progress} + renderItem={({item, index}) => { + if (index < downloading.length) { + const prog = progress[item.filename]; + return ( + + + + ); + } else { + return ( + + + + ); + } + }} + /> + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: rpx(750), + flex: 1, + }, + downloading: { + flexGrow: 0, + }, +}); diff --git a/src/pages/fileSelector/fileItem.tsx b/src/pages/fileSelector/fileItem.tsx index 9957e60c..407b9500 100644 --- a/src/pages/fileSelector/fileItem.tsx +++ b/src/pages/fileSelector/fileItem.tsx @@ -1,101 +1,105 @@ -import React, {memo} from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import useTextColor from '@/hooks/useTextColor'; -import Checkbox from '@/components/base/checkbox'; -import {TouchableOpacity} from 'react-native-gesture-handler'; - -const ITEM_HEIGHT = rpx(96); - -interface IProps { - type: 'folder' | 'file'; - path: string; - parentPath: string; - checked?: boolean; - onItemPress: (currentChecked?: boolean) => void; - onCheckedChange: (checked: boolean) => void; -} -function FileItem(props: IProps) { - const { - type, - path, - parentPath, - checked, - onItemPress, - onCheckedChange: onCheckChange, - } = props; - - const textColor = useTextColor(); - - // 返回逻辑 - - return ( - - { - onItemPress(checked); - }} - style={styles.pathWrapper}> - - - {path.substring( - parentPath === '/' ? 1 : parentPath.length + 1, - )} - - - { - onCheckChange(!checked); - }} - style={styles.checkIcon}> - - - - ); -} - -export default memo( - FileItem, - (prev, curr) => - prev.checked === curr.checked && - prev.parentPath === curr.parentPath && - prev.path === curr.path, -); - -const styles = StyleSheet.create({ - container: { - width: '100%', - height: ITEM_HEIGHT, - paddingHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - }, - folderIcon: { - fontSize: rpx(32), - marginRight: rpx(14), - }, - pathWrapper: { - flexDirection: 'row', - flex: 1, - alignItems: 'center', - height: '100%', - marginRight: rpx(60), - }, - path: { - height: '100%', - textAlignVertical: 'center', - }, - checkIcon: { - padding: rpx(14), - }, -}); +import React, {memo} from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import useTextColor from '@/hooks/useTextColor'; +import Checkbox from '@/components/base/checkbox'; +import {TouchableOpacity} from 'react-native-gesture-handler'; +import Icon from '@/components/base/icon.tsx'; + +const ITEM_HEIGHT = rpx(96); + +interface IProps { + type: 'folder' | 'file'; + path: string; + parentPath: string; + checked?: boolean; + onItemPress: (currentChecked?: boolean) => void; + onCheckedChange: (checked: boolean) => void; +} +function FileItem(props: IProps) { + const { + type, + path, + parentPath, + checked, + onItemPress, + onCheckedChange: onCheckChange, + } = props; + + const textColor = useTextColor(); + + // 返回逻辑 + + return ( + + { + onItemPress(checked); + }} + style={styles.pathWrapper}> + + + {path.substring( + parentPath === '/' ? 1 : parentPath.length + 1, + )} + + + { + onCheckChange(!checked); + }} + style={styles.checkIcon}> + + + + ); +} + +export default memo( + FileItem, + (prev, curr) => + prev.checked === curr.checked && + prev.parentPath === curr.parentPath && + prev.path === curr.path, +); + +const styles = StyleSheet.create({ + container: { + width: '100%', + height: ITEM_HEIGHT, + paddingHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + folderIcon: { + fontSize: rpx(32), + marginRight: rpx(14), + }, + pathWrapper: { + flexDirection: 'row', + flex: 1, + alignItems: 'center', + height: '100%', + marginRight: rpx(60), + }, + path: { + height: '100%', + textAlignVertical: 'center', + }, + checkIcon: { + padding: rpx(14), + }, +}); diff --git a/src/pages/fileSelector/index.tsx b/src/pages/fileSelector/index.tsx index ca3e4590..1b9156f5 100644 --- a/src/pages/fileSelector/index.tsx +++ b/src/pages/fileSelector/index.tsx @@ -1,319 +1,319 @@ -import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; -import { - ExternalStorageDirectoryPath, - readDir, - getAllExternalFilesDirs, - exists, -} from 'react-native-fs'; -import {FlatList} from 'react-native-gesture-handler'; -import useColors from '@/hooks/useColors'; -import IconButton from '@/components/base/iconButton'; -import FileItem from './fileItem'; -import Empty from '@/components/base/empty'; -import useHardwareBack from '@/hooks/useHardwareBack'; -import {useNavigation} from '@react-navigation/native'; -import Loading from '@/components/base/loading'; -import {useParams} from '@/entry/router'; -import StatusBar from '@/components/base/statusBar'; -import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; -import globalStyle from '@/constants/globalStyle'; -import Button from '@/components/base/button'; - -interface IPathItem { - path: string; - parent: null | IPathItem; -} - -interface IFileItem { - path: string; - type: 'file' | 'folder'; -} - -const ITEM_HEIGHT = rpx(96); - -export default function FileSelector() { - const { - fileType = 'file-and-folder', - multi = true, - actionText = '确定', - matchExtension, - onAction, - } = useParams<'file-selector'>() ?? {}; - - const [currentPath, setCurrentPath] = useState({ - path: '/', - parent: null, - }); - const currentPathRef = useRef(currentPath); - const [filesData, setFilesData] = useState([]); - const [checkedItems, setCheckedItems] = useState([]); - - const checkedPaths = useMemo( - () => checkedItems.map(_ => _.path), - [checkedItems], - ); - const navigation = useNavigation(); - const colors = useColors(); - const [loading, setLoading] = useState(false); - - useEffect(() => { - (async () => { - // 路径变化时,重新读取 - setLoading(true); - try { - if (currentPath.path === '/') { - try { - const allExt = await getAllExternalFilesDirs(); - if (allExt.length > 1) { - const sdCardPaths = allExt.map(sdp => - sdp.substring(0, sdp.indexOf('/Android')), - ); - if ( - ( - await Promise.all( - sdCardPaths.map(_ => exists(_)), - ) - ).every(val => val) - ) { - setFilesData( - sdCardPaths.map(_ => ({ - type: 'folder', - path: _, - })), - ); - } - } else { - setCurrentPath({ - path: ExternalStorageDirectoryPath, - parent: null, - }); - return; - } - } catch { - setCurrentPath({ - path: ExternalStorageDirectoryPath, - parent: null, - }); - return; - } - } else { - const res = (await readDir(currentPath.path)) ?? []; - let folders: IFileItem[] = []; - let files: IFileItem[] = []; - if ( - fileType === 'folder' || - fileType === 'file-and-folder' - ) { - folders = res - .filter(_ => _.isDirectory()) - .map(_ => ({ - type: 'folder', - path: _.path, - })); - } - if (fileType === 'file' || fileType === 'file-and-folder') { - files = res - .filter( - _ => - _.isFile() && - (matchExtension - ? matchExtension(_.path) - : true), - ) - .map(_ => ({ - type: 'file', - path: _.path, - })); - } - setFilesData([...folders, ...files]); - } - } catch { - setFilesData([]); - } - setLoading(false); - currentPathRef.current = currentPath; - })(); - }, [currentPath.path]); - - useHardwareBack(() => { - // 注意闭包 - const _currentPath = currentPathRef.current; - if (_currentPath.parent !== null) { - setCurrentPath(_currentPath.parent); - } else { - navigation.goBack(); - } - return true; - }); - - const selectPath = useCallback( - (item: IFileItem | IFileItem[], nextChecked: boolean) => { - if (multi) { - if (!Array.isArray(item)) { - item = [item]; - } - setCheckedItems(prev => { - const itemPaths = (item as IFileItem[]).map(_ => _.path); - const newCheckedItem = prev.filter( - _ => !itemPaths.includes(_.path), - ); - if (nextChecked) { - return [...newCheckedItem, ...(item as IFileItem[])]; - } else { - return newCheckedItem; - } - }); - } else { - setCheckedItems( - nextChecked ? (Array.isArray(item) ? item : [item]) : [], - ); - } - }, - [], - ); - - const renderItem = ({item}: {item: IFileItem}) => ( - { - if (item.type === 'folder') { - setCurrentPath(prev => ({ - parent: prev, - path: item.path, - })); - } else { - selectPath(item, !currentChecked); - } - }} - checked={checkedPaths.includes(item.path)} - onCheckedChange={checked => { - selectPath(item, checked); - }} - /> - ); - - const currentPageAllChecked = useMemo(() => { - return ( - filesData.length && - filesData.every(file => checkedPaths.includes(file.path)) - ); - }, [filesData, checkedPaths]); - - const renderHeader = () => { - return multi ? ( - - - - ) : null; - }; - - return ( - - - - { - // 返回上一级 - if (currentPath.parent !== null) { - setCurrentPath(currentPath.parent); - } - }} - /> - - {currentPath.path} - - - {loading ? ( - - ) : ( - <> - ({ - length: ITEM_HEIGHT, - offset: ITEM_HEIGHT * index, - index, - })} - renderItem={renderItem} - /> - - )} - { - if (checkedItems.length) { - const shouldBack = await onAction?.(checkedItems); - if (shouldBack) { - navigation.goBack(); - } - } - }}> - - 0 ? undefined : 0.6}> - {actionText} - {multi && checkedItems?.length > 0 - ? ` (选中${checkedItems.length})` - : ''} - - - - - ); -} - -const style = StyleSheet.create({ - header: { - height: rpx(88), - flexDirection: 'row', - alignItems: 'center', - width: '100%', - paddingHorizontal: rpx(24), - }, - headerPath: { - marginLeft: rpx(28), - }, - scanBtn: { - width: '100%', - height: rpx(120), - alignItems: 'center', - justifyContent: 'center', - }, - selectAll: { - width: '100%', - height: ITEM_HEIGHT, - paddingHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'center', - }, -}); +import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import { + exists, + ExternalStorageDirectoryPath, + getAllExternalFilesDirs, + readDir, +} from 'react-native-fs'; +import {FlatList} from 'react-native-gesture-handler'; +import useColors from '@/hooks/useColors'; +import IconButton from '@/components/base/iconButton'; +import FileItem from './fileItem'; +import Empty from '@/components/base/empty'; +import useHardwareBack from '@/hooks/useHardwareBack'; +import {useNavigation} from '@react-navigation/native'; +import Loading from '@/components/base/loading'; +import {useParams} from '@/entry/router'; +import StatusBar from '@/components/base/statusBar'; +import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; +import globalStyle from '@/constants/globalStyle'; +import Button from '@/components/base/button'; + +interface IPathItem { + path: string; + parent: null | IPathItem; +} + +interface IFileItem { + path: string; + type: 'file' | 'folder'; +} + +const ITEM_HEIGHT = rpx(96); + +export default function FileSelector() { + const { + fileType = 'file-and-folder', + multi = true, + actionText = '确定', + matchExtension, + onAction, + } = useParams<'file-selector'>() ?? {}; + + const [currentPath, setCurrentPath] = useState({ + path: '/', + parent: null, + }); + const currentPathRef = useRef(currentPath); + const [filesData, setFilesData] = useState([]); + const [checkedItems, setCheckedItems] = useState([]); + + const checkedPaths = useMemo( + () => checkedItems.map(_ => _.path), + [checkedItems], + ); + const navigation = useNavigation(); + const colors = useColors(); + const [loading, setLoading] = useState(false); + + useEffect(() => { + (async () => { + // 路径变化时,重新读取 + setLoading(true); + try { + if (currentPath.path === '/') { + try { + const allExt = await getAllExternalFilesDirs(); + if (allExt.length > 1) { + const sdCardPaths = allExt.map(sdp => + sdp.substring(0, sdp.indexOf('/Android')), + ); + if ( + ( + await Promise.all( + sdCardPaths.map(_ => exists(_)), + ) + ).every(val => val) + ) { + setFilesData( + sdCardPaths.map(_ => ({ + type: 'folder', + path: _, + })), + ); + } + } else { + setCurrentPath({ + path: ExternalStorageDirectoryPath, + parent: null, + }); + return; + } + } catch { + setCurrentPath({ + path: ExternalStorageDirectoryPath, + parent: null, + }); + return; + } + } else { + const res = (await readDir(currentPath.path)) ?? []; + let folders: IFileItem[] = []; + let files: IFileItem[] = []; + if ( + fileType === 'folder' || + fileType === 'file-and-folder' + ) { + folders = res + .filter(_ => _.isDirectory()) + .map(_ => ({ + type: 'folder', + path: _.path, + })); + } + if (fileType === 'file' || fileType === 'file-and-folder') { + files = res + .filter( + _ => + _.isFile() && + (matchExtension + ? matchExtension(_.path) + : true), + ) + .map(_ => ({ + type: 'file', + path: _.path, + })); + } + setFilesData([...folders, ...files]); + } + } catch { + setFilesData([]); + } + setLoading(false); + currentPathRef.current = currentPath; + })(); + }, [currentPath.path]); + + useHardwareBack(() => { + // 注意闭包 + const _currentPath = currentPathRef.current; + if (_currentPath.parent !== null) { + setCurrentPath(_currentPath.parent); + } else { + navigation.goBack(); + } + return true; + }); + + const selectPath = useCallback( + (item: IFileItem | IFileItem[], nextChecked: boolean) => { + if (multi) { + if (!Array.isArray(item)) { + item = [item]; + } + setCheckedItems(prev => { + const itemPaths = (item as IFileItem[]).map(_ => _.path); + const newCheckedItem = prev.filter( + _ => !itemPaths.includes(_.path), + ); + if (nextChecked) { + return [...newCheckedItem, ...(item as IFileItem[])]; + } else { + return newCheckedItem; + } + }); + } else { + setCheckedItems( + nextChecked ? (Array.isArray(item) ? item : [item]) : [], + ); + } + }, + [], + ); + + const renderItem = ({item}: {item: IFileItem}) => ( + { + if (item.type === 'folder') { + setCurrentPath(prev => ({ + parent: prev, + path: item.path, + })); + } else { + selectPath(item, !currentChecked); + } + }} + checked={checkedPaths.includes(item.path)} + onCheckedChange={checked => { + selectPath(item, checked); + }} + /> + ); + + const currentPageAllChecked = useMemo(() => { + return ( + filesData.length && + filesData.every(file => checkedPaths.includes(file.path)) + ); + }, [filesData, checkedPaths]); + + const renderHeader = () => { + return multi ? ( + + + + ) : null; + }; + + return ( + + + + { + // 返回上一级 + if (currentPath.parent !== null) { + setCurrentPath(currentPath.parent); + } + }} + /> + + {currentPath.path} + + + {loading ? ( + + ) : ( + <> + ({ + length: ITEM_HEIGHT, + offset: ITEM_HEIGHT * index, + index, + })} + renderItem={renderItem} + /> + + )} + { + if (checkedItems.length) { + const shouldBack = await onAction?.(checkedItems); + if (shouldBack) { + navigation.goBack(); + } + } + }}> + + 0 ? undefined : 0.6}> + {actionText} + {multi && checkedItems?.length > 0 + ? ` (选中${checkedItems.length})` + : ''} + + + + + ); +} + +const style = StyleSheet.create({ + header: { + height: rpx(88), + flexDirection: 'row', + alignItems: 'center', + width: '100%', + paddingHorizontal: rpx(24), + }, + headerPath: { + marginLeft: rpx(28), + }, + scanBtn: { + width: '100%', + height: rpx(120), + alignItems: 'center', + justifyContent: 'center', + }, + selectAll: { + width: '100%', + height: ITEM_HEIGHT, + paddingHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'center', + }, +}); diff --git a/src/pages/history/index.tsx b/src/pages/history/index.tsx index cd4e8344..79ec844e 100644 --- a/src/pages/history/index.tsx +++ b/src/pages/history/index.tsx @@ -1,59 +1,59 @@ -import React from 'react'; -import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; -import globalStyle from '@/constants/globalStyle'; -import StatusBar from '@/components/base/statusBar'; -import musicHistory from '@/core/musicHistory'; -import MusicList from '@/components/musicList'; -import {musicHistorySheetId} from '@/constants/commonConst'; -import MusicBar from '@/components/musicBar'; -import AppBar from '@/components/base/appBar'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; - -export default function History() { - const musicHistoryList = musicHistory.useMusicHistory(); - - const navigate = useNavigate(); - - return ( - - - - 播放记录 - - - - - ); -} +import React from 'react'; +import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; +import globalStyle from '@/constants/globalStyle'; +import StatusBar from '@/components/base/statusBar'; +import musicHistory from '@/core/musicHistory'; +import MusicList from '@/components/musicList'; +import {musicHistorySheetId} from '@/constants/commonConst'; +import MusicBar from '@/components/musicBar'; +import AppBar from '@/components/base/appBar'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; + +export default function History() { + const musicHistoryList = musicHistory.useMusicHistory(); + + const navigate = useNavigate(); + + return ( + + + + 播放记录 + + + + + ); +} diff --git a/src/pages/home/components/ActionButton.tsx b/src/pages/home/components/ActionButton.tsx index 229424ae..5c76e5ba 100644 --- a/src/pages/home/components/ActionButton.tsx +++ b/src/pages/home/components/ActionButton.tsx @@ -1,64 +1,64 @@ -import ThemeText from '@/components/base/themeText'; -import useColors from '@/hooks/useColors'; -import rpx from '@/utils/rpx'; -import React from 'react'; -import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; -import {TouchableOpacity} from 'react-native-gesture-handler'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -interface IActionButtonProps { - iconName: string; - iconColor?: string; - title: string; - action: () => void; - style?: StyleProp; -} - -export default function ActionButton(props: IActionButtonProps) { - const {iconName, iconColor, title, action, style} = props; - const colors = useColors(); - // rippleColor="rgba(0, 0, 0, .32)" - return ( - - <> - - - {title} - - - - ); -} - -const styles = StyleSheet.create({ - wrapper: { - width: rpx(140), - height: rpx(144), - borderRadius: rpx(12), - flexGrow: 1, - flexShrink: 0, - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - }, - text: { - marginTop: rpx(12), - }, -}); +import ThemeText from '@/components/base/themeText'; +import useColors from '@/hooks/useColors'; +import rpx from '@/utils/rpx'; +import React from 'react'; +import {StyleProp, StyleSheet, ViewStyle} from 'react-native'; +import {TouchableOpacity} from 'react-native-gesture-handler'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; + +interface IActionButtonProps { + iconName: IIconName; + iconColor?: string; + title: string; + action?: () => void; + style?: StyleProp; +} + +export default function ActionButton(props: IActionButtonProps) { + const {iconName, iconColor, title, action, style} = props; + const colors = useColors(); + // rippleColor="rgba(0, 0, 0, .32)" + return ( + + <> + + + {title} + + + + ); +} + +const styles = StyleSheet.create({ + wrapper: { + width: rpx(140), + height: rpx(144), + borderRadius: rpx(12), + flexGrow: 1, + flexShrink: 0, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + }, + text: { + marginTop: rpx(12), + }, +}); diff --git a/src/pages/home/components/drawer/index.tsx b/src/pages/home/components/drawer/index.tsx index 52d2d38e..032d0952 100644 --- a/src/pages/home/components/drawer/index.tsx +++ b/src/pages/home/components/drawer/index.tsx @@ -1,5 +1,5 @@ import React, {memo} from 'react'; -import {StyleSheet, View, BackHandler, Platform} from 'react-native'; +import {BackHandler, Platform, StyleSheet, View} from 'react-native'; import rpx from '@/utils/rpx'; import {DrawerContentScrollView} from '@react-navigation/drawer'; import ListItem from '@/components/base/listItem'; @@ -7,16 +7,24 @@ import {ROUTE_PATH, useNavigate} from '@/entry/router'; import ThemeText from '@/components/base/themeText'; import PageBackground from '@/components/base/pageBackground'; import DeviceInfo from 'react-native-device-info'; +import deviceInfoModule from 'react-native-device-info'; import NativeUtils from '@/native/utils'; import {useTimingClose} from '@/utils/timingClose'; import timeformat from '@/utils/timeformat'; import {showPanel} from '@/components/panels/usePanel'; import Divider from '@/components/base/divider'; import TrackPlayer from '@/core/trackPlayer'; -import deviceInfoModule from 'react-native-device-info'; import {checkUpdateAndShowResult} from '@/hooks/useCheckUpdate'; +import {IIconName} from '@/components/base/icon.tsx'; const ITEM_HEIGHT = rpx(108); + +interface ISettingOptions { + icon: IIconName; + title: string; + onPress?: () => void; +} + function HomeDrawer(props: any) { const navigate = useNavigate(); function navigateToSetting(settingType: string) { @@ -25,33 +33,33 @@ function HomeDrawer(props: any) { }); } - const basicSetting = [ + const basicSetting: ISettingOptions[] = [ { - icon: 'cog-outline', + icon: 'cog-8-tooth', title: '基本设置', onPress: () => { navigateToSetting('basic'); }, }, { - icon: 'language-javascript', + icon: 'javascript', title: '插件管理', onPress: () => { navigateToSetting('plugin'); }, }, { - icon: 'tshirt-v-outline', + icon: 't-shirt-outline', title: '主题设置', onPress: () => { navigateToSetting('theme'); }, }, - ] as const; + ]; - const otherSetting = [ + const otherSetting: ISettingOptions[] = [ { - icon: 'backup-restore', + icon: 'circle-stack', title: '备份与恢复', onPress: () => { navigateToSetting('backup'); @@ -61,7 +69,7 @@ function HomeDrawer(props: any) { if (Platform.OS === 'android') { otherSetting.push({ - icon: 'cellphone-key', + icon: 'shield-keyhole-outline', title: '权限管理', onPress: () => { navigate(ROUTE_PATH.PERMISSIONS); @@ -80,7 +88,7 @@ function HomeDrawer(props: any) { {/* */} - + @@ -89,7 +97,7 @@ function HomeDrawer(props: any) { {basicSetting.map(item => ( - + @@ -111,7 +119,7 @@ function HomeDrawer(props: any) { {otherSetting.map(item => ( - + @@ -133,13 +141,13 @@ function HomeDrawer(props: any) { { checkUpdateAndShowResult(true); }}> @@ -150,13 +158,13 @@ function HomeDrawer(props: any) { { navigateToSetting('about'); }}> { // 仅安卓生效 BackHandler.exitApp(); @@ -179,12 +187,15 @@ function HomeDrawer(props: any) { { await TrackPlayer.reset(); NativeUtils.exitApp(); }}> - + @@ -230,11 +241,11 @@ function _CountDownItem() { return ( { showPanel('TimingClose'); }}> - + {countDown ? timeformat(countDown) : ''} diff --git a/src/pages/home/components/homeBody/operations.tsx b/src/pages/home/components/homeBody/operations.tsx index e9d299bd..11ebe14e 100644 --- a/src/pages/home/components/homeBody/operations.tsx +++ b/src/pages/home/components/homeBody/operations.tsx @@ -16,14 +16,14 @@ export default function Operations() { }, }, { - iconName: 'trophy-outline', + iconName: 'trophy', title: '榜单', action() { navigate(ROUTE_PATH.TOP_LIST); }, }, { - iconName: 'history', + iconName: 'clock-outline', title: '播放记录', action() { navigate(ROUTE_PATH.HISTORY); @@ -36,7 +36,7 @@ export default function Operations() { navigate(ROUTE_PATH.LOCAL); }, }, - ]; + ] as const; return ( diff --git a/src/pages/home/components/homeBody/sheets.tsx b/src/pages/home/components/homeBody/sheets.tsx index c901b969..ab309ea5 100644 --- a/src/pages/home/components/homeBody/sheets.tsx +++ b/src/pages/home/components/homeBody/sheets.tsx @@ -1,217 +1,217 @@ -import React, {useMemo, useState} from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; -import useColors from '@/hooks/useColors'; -import {TouchableWithoutFeedback} from 'react-native-gesture-handler'; -import MusicSheet from '@/core/musicSheet'; -import {FlashList} from '@shopify/flash-list'; -import ListItem from '@/components/base/listItem'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import {ImgAsset} from '@/constants/assetsConst'; -import {showDialog} from '@/components/dialogs/useDialog'; -import Toast from '@/utils/toast'; -import Empty from '@/components/base/empty'; -import IconButton from '@/components/base/iconButton'; -import {showPanel} from '@/components/panels/usePanel'; -import {localPluginPlatform} from '@/constants/commonConst'; - -export default function Sheets() { - const [index, setIndex] = useState(0); - const colors = useColors(); - const navigate = useNavigate(); - - const allSheets = MusicSheet.useSheets(); - const staredSheets = MusicSheet.useStarredMusicSheet(); - - const selectedTabTextStyle = useMemo(() => { - return [ - styles.selectTabText, - { - borderBottomColor: colors.primary, - }, - ]; - }, [colors]); - - return ( - <> - - { - setIndex(0); - }}> - - 我的歌单 - - - {' '} - ({allSheets.length}) - - - { - setIndex(1); - }}> - - 收藏歌单 - - - {' '} - ({staredSheets.length}) - - - - { - showPanel('NewMusicSheet'); - }} - /> - { - showPanel('ImportMusicSheet'); - }} - /> - - - } - data={(index === 0 ? allSheets : staredSheets) ?? []} - estimatedItemSize={ListItem.Size.big} - renderItem={({item: sheet}) => { - const isLocalSheet = !( - sheet.platform && sheet.platform !== localPluginPlatform - ); - - return ( - { - if (isLocalSheet) { - navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { - id: sheet.id, - }); - } else { - navigate(ROUTE_PATH.PLUGIN_SHEET_DETAIL, { - sheetInfo: sheet, - }); - } - }}> - - - {sheet.id !== MusicSheet.defaultSheet.id ? ( - { - showDialog('SimpleDialog', { - title: '删除歌单', - content: `确定删除歌单「${sheet.title}」吗?`, - onOk: async () => { - if (isLocalSheet) { - await MusicSheet.removeSheet( - sheet.id, - ); - Toast.success('已删除'); - } else { - await MusicSheet.unstarMusicSheet( - sheet, - ); - Toast.success('已取消收藏'); - } - }, - }); - }} - /> - ) : null} - - ); - }} - nestedScrollEnabled - /> - - ); -} - -const styles = StyleSheet.create({ - subTitleContainer: { - paddingHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'flex-start', - marginBottom: rpx(12), - }, - subTitleLeft: { - flexDirection: 'row', - }, - tabContainer: { - flexDirection: 'row', - marginRight: rpx(32), - }, - - tabText: { - lineHeight: rpx(64), - }, - selectTabText: { - borderBottomWidth: rpx(6), - fontWeight: 'bold', - }, - more: { - height: rpx(64), - marginTop: rpx(3), - flexGrow: 1, - flexDirection: 'row', - justifyContent: 'flex-end', - }, - newSheetButton: { - marginRight: rpx(24), - }, -}); +import React, {useMemo, useState} from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import useColors from '@/hooks/useColors'; +import {TouchableWithoutFeedback} from 'react-native-gesture-handler'; +import MusicSheet from '@/core/musicSheet'; +import {FlashList} from '@shopify/flash-list'; +import ListItem from '@/components/base/listItem'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import {ImgAsset} from '@/constants/assetsConst'; +import {showDialog} from '@/components/dialogs/useDialog'; +import Toast from '@/utils/toast'; +import Empty from '@/components/base/empty'; +import IconButton from '@/components/base/iconButton'; +import {showPanel} from '@/components/panels/usePanel'; +import {localPluginPlatform} from '@/constants/commonConst'; + +export default function Sheets() { + const [index, setIndex] = useState(0); + const colors = useColors(); + const navigate = useNavigate(); + + const allSheets = MusicSheet.useSheets(); + const staredSheets = MusicSheet.useStarredMusicSheet(); + + const selectedTabTextStyle = useMemo(() => { + return [ + styles.selectTabText, + { + borderBottomColor: colors.primary, + }, + ]; + }, [colors]); + + return ( + <> + + { + setIndex(0); + }}> + + 我的歌单 + + + {' '} + ({allSheets.length}) + + + { + setIndex(1); + }}> + + 收藏歌单 + + + {' '} + ({staredSheets.length}) + + + + { + showPanel('NewMusicSheet'); + }} + /> + { + showPanel('ImportMusicSheet'); + }} + /> + + + } + data={(index === 0 ? allSheets : staredSheets) ?? []} + estimatedItemSize={ListItem.Size.big} + renderItem={({item: sheet}) => { + const isLocalSheet = !( + sheet.platform && sheet.platform !== localPluginPlatform + ); + + return ( + { + if (isLocalSheet) { + navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { + id: sheet.id, + }); + } else { + navigate(ROUTE_PATH.PLUGIN_SHEET_DETAIL, { + sheetInfo: sheet, + }); + } + }}> + + + {sheet.id !== MusicSheet.defaultSheet.id ? ( + { + showDialog('SimpleDialog', { + title: '删除歌单', + content: `确定删除歌单「${sheet.title}」吗?`, + onOk: async () => { + if (isLocalSheet) { + await MusicSheet.removeSheet( + sheet.id, + ); + Toast.success('已删除'); + } else { + await MusicSheet.unstarMusicSheet( + sheet, + ); + Toast.success('已取消收藏'); + } + }, + }); + }} + /> + ) : null} + + ); + }} + nestedScrollEnabled + /> + + ); +} + +const styles = StyleSheet.create({ + subTitleContainer: { + paddingHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'flex-start', + marginBottom: rpx(12), + }, + subTitleLeft: { + flexDirection: 'row', + }, + tabContainer: { + flexDirection: 'row', + marginRight: rpx(32), + }, + + tabText: { + lineHeight: rpx(64), + }, + selectTabText: { + borderBottomWidth: rpx(6), + fontWeight: 'bold', + }, + more: { + height: rpx(64), + marginTop: rpx(3), + flexGrow: 1, + flexDirection: 'row', + justifyContent: 'flex-end', + }, + newSheetButton: { + marginRight: rpx(24), + }, +}); diff --git a/src/pages/home/components/homeBodyHorizonal/operations.tsx b/src/pages/home/components/homeBodyHorizonal/operations.tsx index ee28cf77..646aa6a1 100644 --- a/src/pages/home/components/homeBodyHorizonal/operations.tsx +++ b/src/pages/home/components/homeBodyHorizonal/operations.tsx @@ -1,76 +1,76 @@ -import React from 'react'; -import {StyleSheet} from 'react-native'; -import rpx from '@/utils/rpx'; -import ActionButton from '../ActionButton'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import {ScrollView} from 'react-native-gesture-handler'; - -export default function Operations() { - const navigate = useNavigate(); - - const actionButtons = [ - { - iconName: 'fire', - title: '推荐歌单', - action() { - navigate(ROUTE_PATH.RECOMMEND_SHEETS); - }, - }, - { - iconName: 'trophy-outline', - title: '榜单', - action() { - navigate(ROUTE_PATH.TOP_LIST); - }, - }, - { - iconName: 'history', - title: '播放记录', - action() { - navigate(ROUTE_PATH.HISTORY); - }, - }, - { - iconName: 'folder-music-outline', - title: '本地音乐', - action() { - navigate(ROUTE_PATH.LOCAL); - }, - }, - ]; - - return ( - - {actionButtons.map((action, index) => ( - - ))} - - ); -} - -const styles = StyleSheet.create({ - container: { - width: rpx(200), - flexGrow: 0, - flexShrink: 0, - paddingHorizontal: rpx(24), - marginVertical: rpx(32), - flexDirection: 'row', - flexWrap: 'wrap', - }, - actionButtonStyle: { - width: rpx(157.5), - height: rpx(160), - borderRadius: rpx(18), - }, - actionMarginLeft: { - marginTop: rpx(24), - }, -}); +import React from 'react'; +import {StyleSheet} from 'react-native'; +import rpx from '@/utils/rpx'; +import ActionButton from '../ActionButton'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import {ScrollView} from 'react-native-gesture-handler'; + +export default function Operations() { + const navigate = useNavigate(); + + const actionButtons = [ + { + iconName: 'fire', + title: '推荐歌单', + action() { + navigate(ROUTE_PATH.RECOMMEND_SHEETS); + }, + }, + { + iconName: 'trophy', + title: '榜单', + action() { + navigate(ROUTE_PATH.TOP_LIST); + }, + }, + { + iconName: 'clock-outline', + title: '播放记录', + action() { + navigate(ROUTE_PATH.HISTORY); + }, + }, + { + iconName: 'folder-music-outline', + title: '本地音乐', + action() { + navigate(ROUTE_PATH.LOCAL); + }, + }, + ] as const; + + return ( + + {actionButtons.map((action, index) => ( + + ))} + + ); +} + +const styles = StyleSheet.create({ + container: { + width: rpx(200), + flexGrow: 0, + flexShrink: 0, + paddingHorizontal: rpx(24), + marginVertical: rpx(32), + flexDirection: 'row', + flexWrap: 'wrap', + }, + actionButtonStyle: { + width: rpx(157.5), + height: rpx(160), + borderRadius: rpx(18), + }, + actionMarginLeft: { + marginTop: rpx(24), + }, +}); diff --git a/src/pages/home/components/mySheets/index.tsx b/src/pages/home/components/mySheets/index.tsx index ab7dde42..b3c4728d 100644 --- a/src/pages/home/components/mySheets/index.tsx +++ b/src/pages/home/components/mySheets/index.tsx @@ -1,85 +1,85 @@ -import React, {memo} from 'react'; -import {FlatList, StyleSheet, ListRenderItem} from 'react-native'; -import MusicSheet from '@/core/musicSheet'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import ListItem from '@/components/base/listItem'; -import {ImgAsset} from '@/constants/assetsConst'; -import Toast from '@/utils/toast'; -import sheetHeader from './sheetHeader'; -import rpx from '@/utils/rpx'; -import useOrientation from '@/hooks/useOrientation'; -import {showDialog} from '@/components/dialogs/useDialog'; - -function MySheets() { - const orientation = useOrientation(); - const musicSheets = MusicSheet.useUserSheets(); - const navigate = useNavigate(); - - const renderMySheetItem: ListRenderItem = - function ({item: sheet}) { - return ( - { - navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { - id: sheet.id, - }); - }}> - - - { - showDialog('SimpleDialog', { - title: '删除歌单', - content: `确定删除歌单「${sheet.title}」吗?`, - onOk: async () => { - await MusicSheet.removeSheet(sheet.id); - Toast.success('已删除'); - }, - }); - }} - /> - - ); - }; - - return ( - sheet.id} - renderItem={renderMySheetItem} - /> - ); -} - -export default memo(MySheets, () => true); - -const style = StyleSheet.create({ - wrapper: { - flexGrow: 1, - marginHorizontal: rpx(24), - paddingBottom: rpx(64), - marginBottom: rpx(24), - borderRadius: rpx(24), - }, - horizonalWrapper: { - marginTop: rpx(12), - }, -}); +import React, {memo} from 'react'; +import {FlatList, ListRenderItem, StyleSheet} from 'react-native'; +import MusicSheet from '@/core/musicSheet'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import ListItem from '@/components/base/listItem'; +import {ImgAsset} from '@/constants/assetsConst'; +import Toast from '@/utils/toast'; +import sheetHeader from './sheetHeader'; +import rpx from '@/utils/rpx'; +import useOrientation from '@/hooks/useOrientation'; +import {showDialog} from '@/components/dialogs/useDialog'; + +function MySheets() { + const orientation = useOrientation(); + const musicSheets = MusicSheet.useUserSheets(); + const navigate = useNavigate(); + + const renderMySheetItem: ListRenderItem = + function ({item: sheet}) { + return ( + { + navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { + id: sheet.id, + }); + }}> + + + { + showDialog('SimpleDialog', { + title: '删除歌单', + content: `确定删除歌单「${sheet.title}」吗?`, + onOk: async () => { + await MusicSheet.removeSheet(sheet.id); + Toast.success('已删除'); + }, + }); + }} + /> + + ); + }; + + return ( + sheet.id} + renderItem={renderMySheetItem} + /> + ); +} + +export default memo(MySheets, () => true); + +const style = StyleSheet.create({ + wrapper: { + flexGrow: 1, + marginHorizontal: rpx(24), + paddingBottom: rpx(64), + marginBottom: rpx(24), + borderRadius: rpx(24), + }, + horizonalWrapper: { + marginTop: rpx(12), + }, +}); diff --git a/src/pages/home/components/navBar.tsx b/src/pages/home/components/navBar.tsx index 200f852a..6b382336 100644 --- a/src/pages/home/components/navBar.tsx +++ b/src/pages/home/components/navBar.tsx @@ -1,83 +1,83 @@ -import {ROUTE_PATH} from '@/entry/router'; -import {useNavigation} from '@react-navigation/native'; -import React from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import rpx from '@/utils/rpx'; -import useColors from '@/hooks/useColors'; -import ThemeText from '@/components/base/themeText'; -import Color from 'color'; -import IconButton from '@/components/base/iconButton'; - -// todo icon: = musicFree(引入自定义字体 居中) search -export default function NavBar() { - const navigation = useNavigation(); - const colors = useColors(); - return ( - - { - navigation?.openDrawer(); - }} - /> - - { - navigation.navigate(ROUTE_PATH.SEARCH_PAGE); - }}> - - - 点击这里开始搜索 - - - - ); -} - -const styles = StyleSheet.create({ - appbar: { - backgroundColor: 'transparent', - shadowColor: 'transparent', - flexDirection: 'row', - alignItems: 'center', - width: '100%', - height: rpx(88), - }, - searchBar: { - marginHorizontal: rpx(24), - flexDirection: 'row', - alignItems: 'center', - flex: 1, - height: '72%', - maxHeight: rpx(64), - borderRadius: rpx(36), - paddingHorizontal: rpx(20), - }, - text: { - marginLeft: rpx(12), - opacity: 0.6, - }, - menu: { - marginLeft: rpx(24), - }, -}); +import {ROUTE_PATH} from '@/entry/router'; +import {useNavigation} from '@react-navigation/native'; +import React from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import useColors from '@/hooks/useColors'; +import ThemeText from '@/components/base/themeText'; +import Color from 'color'; +import IconButton from '@/components/base/iconButton'; +import Icon from '@/components/base/icon.tsx'; + +// todo icon: = musicFree(引入自定义字体 居中) search +export default function NavBar() { + const navigation = useNavigation(); + const colors = useColors(); + return ( + + { + navigation?.openDrawer(); + }} + /> + + { + navigation.navigate(ROUTE_PATH.SEARCH_PAGE); + }}> + + + 点击这里开始搜索 + + + + ); +} + +const styles = StyleSheet.create({ + appbar: { + backgroundColor: 'transparent', + shadowColor: 'transparent', + flexDirection: 'row', + alignItems: 'center', + width: '100%', + height: rpx(88), + }, + searchBar: { + marginHorizontal: rpx(24), + flexDirection: 'row', + alignItems: 'center', + flex: 1, + height: '72%', + maxHeight: rpx(64), + borderRadius: rpx(36), + paddingHorizontal: rpx(20), + }, + text: { + marginLeft: rpx(12), + opacity: 0.6, + }, + menu: { + marginLeft: rpx(24), + }, +}); diff --git a/src/pages/home/components/operations/index.tsx b/src/pages/home/components/operations/index.tsx index 580c49d5..d9f50e8c 100644 --- a/src/pages/home/components/operations/index.tsx +++ b/src/pages/home/components/operations/index.tsx @@ -1,103 +1,111 @@ -import React from 'react'; -import {StyleSheet} from 'react-native'; -import rpx from '@/utils/rpx'; -import ActionButton from '../ActionButton'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import {ScrollView} from 'react-native-gesture-handler'; - -interface IOperationsProps { - orientation?: 'horizonal' | 'vertical'; -} - -export default function Operations(props: IOperationsProps) { - const navigate = useNavigate(); - const {orientation} = props; - - const actionButtons = [ - { - iconName: 'heart', - iconColor: 'red', - title: '我喜欢', - action() { - navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { - id: 'favorite', - }); - }, - }, - { - iconName: 'folder-music-outline', - title: '本地音乐', - action() { - navigate(ROUTE_PATH.LOCAL); - }, - }, - { - iconName: 'fire', - title: '推荐歌单', - action() { - navigate(ROUTE_PATH.RECOMMEND_SHEETS); - }, - }, - { - iconName: 'trophy-outline', - title: '榜单', - action() { - navigate(ROUTE_PATH.TOP_LIST); - }, - }, - { - iconName: 'history', - title: '播放记录', - action() { - navigate(ROUTE_PATH.HISTORY); - }, - }, - ]; - - return ( - - {actionButtons.map(action => ( - - ))} - - ); -} - -const style = StyleSheet.create({ - wrapper: { - marginTop: rpx(20), - marginBottom: rpx(20), - flexGrow: 0, - flexShrink: 0, - }, - horizonalWrapper: { - marginTop: rpx(20), - marginBottom: rpx(20), - flexGrow: 0, - flexShrink: 0, - }, - contentWrapper: { - flexDirection: 'row', - height: rpx(144), - paddingHorizontal: rpx(24), - }, - horizonalContentWrapper: { - width: rpx(170), - flexDirection: 'column', - paddingVertical: rpx(24), - paddingLeft: rpx(15), - }, -}); +import React from 'react'; +import {StyleSheet} from 'react-native'; +import rpx from '@/utils/rpx'; +import ActionButton from '../ActionButton'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import {ScrollView} from 'react-native-gesture-handler'; +import {IIconName} from '@/components/base/icon.tsx'; + +interface IOperationsProps { + orientation?: 'horizonal' | 'vertical'; +} + +interface IActionOption { + iconName: IIconName; + iconColor?: string; + title: string; + action?: () => void; +} + +export default function Operations(props: IOperationsProps) { + const navigate = useNavigate(); + const {orientation} = props; + + const actionButtons: IActionOption[] = [ + { + iconName: 'heart', + iconColor: 'red', + title: '我喜欢', + action() { + navigate(ROUTE_PATH.LOCAL_SHEET_DETAIL, { + id: 'favorite', + }); + }, + }, + { + iconName: 'folder-music-outline', + title: '本地音乐', + action() { + navigate(ROUTE_PATH.LOCAL); + }, + }, + { + iconName: 'fire', + title: '推荐歌单', + action() { + navigate(ROUTE_PATH.RECOMMEND_SHEETS); + }, + }, + { + iconName: 'trophy', + title: '榜单', + action() { + navigate(ROUTE_PATH.TOP_LIST); + }, + }, + { + iconName: 'clock-outline', + title: '播放记录', + action() { + navigate(ROUTE_PATH.HISTORY); + }, + }, + ]; + + return ( + + {actionButtons.map(action => ( + + ))} + + ); +} + +const style = StyleSheet.create({ + wrapper: { + marginTop: rpx(20), + marginBottom: rpx(20), + flexGrow: 0, + flexShrink: 0, + }, + horizonalWrapper: { + marginTop: rpx(20), + marginBottom: rpx(20), + flexGrow: 0, + flexShrink: 0, + }, + contentWrapper: { + flexDirection: 'row', + height: rpx(144), + paddingHorizontal: rpx(24), + }, + horizonalContentWrapper: { + width: rpx(170), + flexDirection: 'column', + paddingVertical: rpx(24), + paddingLeft: rpx(15), + }, +}); diff --git a/src/pages/localMusic/mainPage/index.tsx b/src/pages/localMusic/mainPage/index.tsx index 0bcbd7a9..842531cf 100644 --- a/src/pages/localMusic/mainPage/index.tsx +++ b/src/pages/localMusic/mainPage/index.tsx @@ -1,88 +1,88 @@ -import React from 'react'; -import LocalMusicSheet from '@/core/localMusicSheet'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import LocalMusicList from './localMusicList'; -import MusicBar from '@/components/musicBar'; -import {localMusicSheetId} from '@/constants/commonConst'; -import Toast from '@/utils/toast'; -import {showDialog} from '@/components/dialogs/useDialog'; -import AppBar from '@/components/base/appBar'; - -export default function MainPage() { - const navigate = useNavigate(); - return ( - <> - { - showDialog('LoadingDialog', { - title: '扫描本地音乐', - promise: - LocalMusicSheet.importLocal( - selectedFiles.map( - _ => _.path, - ), - ), - onResolve(data, hideDialog) { - Toast.success('导入成功~'); - hideDialog(); - resolve(true); - }, - onCancel(hideDialog) { - LocalMusicSheet.cancelImportLocal(); - hideDialog(); - resolve(false); - }, - }); - }); - }, - }); - }, - }, - { - icon: 'playlist-edit', - title: '批量编辑', - async onPress() { - navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { - musicList: LocalMusicSheet.getMusicList(), - musicSheet: { - id: localMusicSheetId, - }, - }); - }, - }, - { - icon: 'download', - title: '下载列表', - async onPress() { - navigate(ROUTE_PATH.DOWNLOADING); - }, - }, - ]}> - 本地音乐 - - - - - ); -} +import React from 'react'; +import LocalMusicSheet from '@/core/localMusicSheet'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import LocalMusicList from './localMusicList'; +import MusicBar from '@/components/musicBar'; +import {localMusicSheetId} from '@/constants/commonConst'; +import Toast from '@/utils/toast'; +import {showDialog} from '@/components/dialogs/useDialog'; +import AppBar from '@/components/base/appBar'; + +export default function MainPage() { + const navigate = useNavigate(); + return ( + <> + { + showDialog('LoadingDialog', { + title: '扫描本地音乐', + promise: + LocalMusicSheet.importLocal( + selectedFiles.map( + _ => _.path, + ), + ), + onResolve(data, hideDialog) { + Toast.success('导入成功~'); + hideDialog(); + resolve(true); + }, + onCancel(hideDialog) { + LocalMusicSheet.cancelImportLocal(); + hideDialog(); + resolve(false); + }, + }); + }); + }, + }); + }, + }, + { + icon: 'pencil-square', + title: '批量编辑', + async onPress() { + navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { + musicList: LocalMusicSheet.getMusicList(), + musicSheet: { + id: localMusicSheetId, + }, + }); + }, + }, + { + icon: 'arrow-down-tray', + title: '下载列表', + async onPress() { + navigate(ROUTE_PATH.DOWNLOADING); + }, + }, + ]}> + 本地音乐 + + + + + ); +} diff --git a/src/pages/musicDetail/components/bottom/playControl.tsx b/src/pages/musicDetail/components/bottom/playControl.tsx index 14e9b283..f237803c 100644 --- a/src/pages/musicDetail/components/bottom/playControl.tsx +++ b/src/pages/musicDetail/components/bottom/playControl.tsx @@ -1,91 +1,91 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import repeatModeConst from '@/constants/repeatModeConst'; - -import useOrientation from '@/hooks/useOrientation'; -import {showPanel} from '@/components/panels/usePanel'; -import TrackPlayer from '@/core/trackPlayer'; -import {musicIsPaused} from '@/utils/trackUtils'; - -export default function () { - const repeatMode = TrackPlayer.useRepeatMode(); - const musicState = TrackPlayer.useMusicState(); - - const orientation = useOrientation(); - - return ( - <> - - { - TrackPlayer.toggleRepeatMode(); - }} - /> - { - TrackPlayer.skipToPrevious(); - }} - /> - { - if (musicIsPaused(musicState)) { - TrackPlayer.play(); - } else { - TrackPlayer.pause(); - } - }} - /> - { - TrackPlayer.skipToNext(); - }} - /> - { - showPanel('PlayList'); - }} - /> - - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - marginTop: rpx(36), - height: rpx(100), - flexDirection: 'row', - justifyContent: 'space-around', - alignItems: 'center', - }, -}); +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import repeatModeConst from '@/constants/repeatModeConst'; + +import useOrientation from '@/hooks/useOrientation'; +import {showPanel} from '@/components/panels/usePanel'; +import TrackPlayer from '@/core/trackPlayer'; +import {musicIsPaused} from '@/utils/trackUtils'; +import Icon from '@/components/base/icon.tsx'; + +export default function () { + const repeatMode = TrackPlayer.useRepeatMode(); + const musicState = TrackPlayer.useMusicState(); + + const orientation = useOrientation(); + + return ( + <> + + { + TrackPlayer.toggleRepeatMode(); + }} + /> + { + TrackPlayer.skipToPrevious(); + }} + /> + { + if (musicIsPaused(musicState)) { + TrackPlayer.play(); + } else { + TrackPlayer.pause(); + } + }} + /> + { + TrackPlayer.skipToNext(); + }} + /> + { + showPanel('PlayList'); + }} + /> + + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + marginTop: rpx(36), + height: rpx(100), + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center', + }, +}); diff --git a/src/pages/musicDetail/components/content/albumCover/operations.tsx b/src/pages/musicDetail/components/content/albumCover/operations.tsx index 98efd207..390be9c5 100644 --- a/src/pages/musicDetail/components/content/albumCover/operations.tsx +++ b/src/pages/musicDetail/components/content/albumCover/operations.tsx @@ -1,122 +1,122 @@ -import React from 'react'; -import {Image, Pressable, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -import Download from '@/core/download'; -import LocalMusicSheet from '@/core/localMusicSheet'; -import {ROUTE_PATH} from '@/entry/router'; -import {ImgAsset} from '@/constants/assetsConst'; -import Toast from '@/utils/toast'; -import useOrientation from '@/hooks/useOrientation'; -import {showPanel} from '@/components/panels/usePanel'; -import TrackPlayer from '@/core/trackPlayer'; -import {iconSizeConst} from '@/constants/uiConst'; -import PersistStatus from '@/core/persistStatus'; -import HeartIcon from '../heartIcon'; - -export default function Operations() { - //briefcase-download-outline briefcase-check-outline checkbox-marked-circle-outline - const musicItem = TrackPlayer.useCurrentMusic(); - const currentQuality = TrackPlayer.useCurrentQuality(); - const isDownloaded = LocalMusicSheet.useIsLocal(musicItem); - - const rate = PersistStatus.useValue('music.rate', 100); - const orientation = useOrientation(); - - return ( - - - { - if (!musicItem) { - return; - } - showPanel('MusicQuality', { - musicItem, - async onQualityPress(quality) { - const changeResult = - await TrackPlayer.changeQuality(quality); - if (!changeResult) { - Toast.warn('当前暂无此音质音乐'); - } - }, - }); - }}> - - - { - if (musicItem && !isDownloaded) { - showPanel('MusicQuality', { - musicItem, - async onQualityPress(quality) { - Download.downloadMusic(musicItem, quality); - }, - }); - } - }} - /> - { - if (!musicItem) { - return; - } - showPanel('PlayRate', { - async onRatePress(newRate) { - if (rate !== newRate) { - try { - await TrackPlayer.setRate(newRate / 100); - PersistStatus.set('music.rate', newRate); - } catch {} - } - }, - }); - }}> - - - { - if (musicItem) { - showPanel('MusicItemOptions', { - musicItem: musicItem, - from: ROUTE_PATH.MUSIC_DETAIL, - }); - } - }} - /> - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - height: rpx(80), - marginBottom: rpx(24), - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-around', - }, - quality: { - width: rpx(52), - height: rpx(52), - }, -}); +import React from 'react'; +import {Image, Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; + +import Download from '@/core/download'; +import LocalMusicSheet from '@/core/localMusicSheet'; +import {ROUTE_PATH} from '@/entry/router'; +import {ImgAsset} from '@/constants/assetsConst'; +import Toast from '@/utils/toast'; +import useOrientation from '@/hooks/useOrientation'; +import {showPanel} from '@/components/panels/usePanel'; +import TrackPlayer from '@/core/trackPlayer'; +import {iconSizeConst} from '@/constants/uiConst'; +import PersistStatus from '@/core/persistStatus'; +import HeartIcon from '../heartIcon'; +import Icon from '@/components/base/icon.tsx'; + +export default function Operations() { + //briefcase-download-outline briefcase-check-outline checkbox-marked-circle-outline + const musicItem = TrackPlayer.useCurrentMusic(); + const currentQuality = TrackPlayer.useCurrentQuality(); + const isDownloaded = LocalMusicSheet.useIsLocal(musicItem); + + const rate = PersistStatus.useValue('music.rate', 100); + const orientation = useOrientation(); + + return ( + + + { + if (!musicItem) { + return; + } + showPanel('MusicQuality', { + musicItem, + async onQualityPress(quality) { + const changeResult = + await TrackPlayer.changeQuality(quality); + if (!changeResult) { + Toast.warn('当前暂无此音质音乐'); + } + }, + }); + }}> + + + { + if (musicItem && !isDownloaded) { + showPanel('MusicQuality', { + musicItem, + async onQualityPress(quality) { + Download.downloadMusic(musicItem, quality); + }, + }); + } + }} + /> + { + if (!musicItem) { + return; + } + showPanel('PlayRate', { + async onRatePress(newRate) { + if (rate !== newRate) { + try { + await TrackPlayer.setRate(newRate / 100); + PersistStatus.set('music.rate', newRate); + } catch {} + } + }, + }); + }}> + + + { + if (musicItem) { + showPanel('MusicItemOptions', { + musicItem: musicItem, + from: ROUTE_PATH.MUSIC_DETAIL, + }); + } + }} + /> + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + height: rpx(80), + marginBottom: rpx(24), + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-around', + }, + quality: { + width: rpx(52), + height: rpx(52), + }, +}); diff --git a/src/pages/musicDetail/components/content/heartIcon/index.tsx b/src/pages/musicDetail/components/content/heartIcon/index.tsx index f97c460f..4bbb1d98 100644 --- a/src/pages/musicDetail/components/content/heartIcon/index.tsx +++ b/src/pages/musicDetail/components/content/heartIcon/index.tsx @@ -1,33 +1,33 @@ -import React from 'react'; -import {iconSizeConst} from '@/constants/uiConst'; -import MusicSheet from '@/core/musicSheet'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import TrackPlayer from '@/core/trackPlayer'; - -export default function () { - const musicItem = TrackPlayer.useCurrentMusic(); - - const favIndex = MusicSheet.useMusicFavIndex(musicItem); - - return favIndex !== -1 ? ( - { - MusicSheet.removeMusicByIndex('favorite', favIndex); - }} - /> - ) : ( - { - if (musicItem) { - MusicSheet.addMusic('favorite', musicItem); - } - }} - /> - ); -} +import React from 'react'; +import {iconSizeConst} from '@/constants/uiConst'; +import MusicSheet from '@/core/musicSheet'; +import TrackPlayer from '@/core/trackPlayer'; +import Icon from '@/components/base/icon.tsx'; + +export default function () { + const musicItem = TrackPlayer.useCurrentMusic(); + + const favIndex = MusicSheet.useMusicFavIndex(musicItem); + + return favIndex !== -1 ? ( + { + MusicSheet.removeMusicByIndex('favorite', favIndex); + }} + /> + ) : ( + { + if (musicItem) { + MusicSheet.addMusic('favorite', musicItem); + } + }} + /> + ); +} diff --git a/src/pages/musicDetail/components/content/lyric/lyricOperations.tsx b/src/pages/musicDetail/components/content/lyric/lyricOperations.tsx index 17e458c0..14ff49aa 100644 --- a/src/pages/musicDetail/components/content/lyric/lyricOperations.tsx +++ b/src/pages/musicDetail/components/content/lyric/lyricOperations.tsx @@ -1,170 +1,170 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import {iconSizeConst} from '@/constants/uiConst'; -import LyricIcon from '@/assets/icons/lyric.svg'; -import TranslationIcon from '@/assets/icons/translation.svg'; -import Config from '@/core/config'; -import useColors from '@/hooks/useColors'; -import LyricManager from '@/core/lyricManager'; -import LyricUtil from '@/native/lyricUtil'; -import Toast from '@/utils/toast'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {hidePanel, showPanel} from '@/components/panels/usePanel'; -import TrackPlayer from '@/core/trackPlayer'; -import MediaExtra from '@/core/mediaExtra'; -import PersistStatus from '@/core/persistStatus'; -import useOrientation from '@/hooks/useOrientation'; -import HeartIcon from '../heartIcon'; - -interface ILyricOperationsProps { - scrollToCurrentLrcItem: () => void; -} - -export default function LyricOperations(props: ILyricOperationsProps) { - const {scrollToCurrentLrcItem} = props; - - const lyricConfig = Config.useConfig('setting.lyric'); - - const hasTranslation = LyricManager.useLyricState()?.hasTranslation; - const showTranslation = PersistStatus.useValue( - 'lyric.showTranslation', - false, - ); - const colors = useColors(); - const orientation = useOrientation(); - - return ( - - {orientation === 'vertical' ? : null} - { - showPanel('SetFontSize', { - defaultSelect: lyricConfig?.detailFontSize ?? 1, - onSelectChange(value) { - PersistStatus.set('lyric.detailFontSize', value); - scrollToCurrentLrcItem(); - }, - }); - }} - /> - { - const currentMusicItem = TrackPlayer.getCurrentMusic(); - - if (currentMusicItem) { - showPanel('SetLyricOffset', { - musicItem: currentMusicItem, - onSubmit(offset) { - MediaExtra.update(currentMusicItem, { - lyricOffset: offset, - }); - LyricManager.refreshLyric(); - scrollToCurrentLrcItem(); - hidePanel(); - }, - }); - } - }} - /> - - { - const currentMusic = TrackPlayer.getCurrentMusic(); - if (!currentMusic) { - return; - } - // if ( - // Config.get('setting.basic.associateLyricType') === - // 'input' - // ) { - // showPanel('AssociateLrc', { - // musicItem: currentMusic, - // }); - // } else { - showPanel('SearchLrc', { - musicItem: currentMusic, - }); - // } - }} - /> - { - if (!lyricConfig?.showStatusBarLyric) { - const hasPermission = - await LyricUtil.checkSystemAlertPermission(); - - if (hasPermission) { - LyricUtil.showStatusBarLyric( - LyricManager.getCurrentLyric()?.lrc ?? - 'MusicFree', - Config.get('setting.lyric') ?? {}, - ); - Config.set( - 'setting.lyric.showStatusBarLyric', - true, - ); - } else { - LyricUtil.requestSystemAlertPermission().finally( - () => { - Toast.warn( - '开启桌面歌词失败,无悬浮窗权限', - ); - }, - ); - } - } else { - LyricUtil.hideStatusBarLyric(); - Config.set('setting.lyric.showStatusBarLyric', false); - } - }} - width={iconSizeConst.normal} - height={iconSizeConst.normal} - color={ - lyricConfig?.showStatusBarLyric ? colors.primary : 'white' - } - /> - { - if (!hasTranslation) { - Toast.warn('当前歌曲无翻译'); - return; - } - - PersistStatus.set( - 'lyric.showTranslation', - !showTranslation, - ); - scrollToCurrentLrcItem(); - }} - /> - - ); -} - -const styles = StyleSheet.create({ - container: { - height: rpx(80), - marginBottom: rpx(24), - width: '100%', - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-around', - }, -}); +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import {iconSizeConst} from '@/constants/uiConst'; +import LyricIcon from '@/assets/icons/lyric.svg'; +import TranslationIcon from '@/assets/icons/translation.svg'; +import Config from '@/core/config'; +import useColors from '@/hooks/useColors'; +import LyricManager from '@/core/lyricManager'; +import LyricUtil from '@/native/lyricUtil'; +import Toast from '@/utils/toast'; +import {hidePanel, showPanel} from '@/components/panels/usePanel'; +import TrackPlayer from '@/core/trackPlayer'; +import MediaExtra from '@/core/mediaExtra'; +import PersistStatus from '@/core/persistStatus'; +import useOrientation from '@/hooks/useOrientation'; +import HeartIcon from '../heartIcon'; +import Icon from '@/components/base/icon.tsx'; + +interface ILyricOperationsProps { + scrollToCurrentLrcItem: () => void; +} + +export default function LyricOperations(props: ILyricOperationsProps) { + const {scrollToCurrentLrcItem} = props; + + const lyricConfig = Config.useConfig('setting.lyric'); + + const hasTranslation = LyricManager.useLyricState()?.hasTranslation; + const showTranslation = PersistStatus.useValue( + 'lyric.showTranslation', + false, + ); + const colors = useColors(); + const orientation = useOrientation(); + + return ( + + {orientation === 'vertical' ? : null} + { + showPanel('SetFontSize', { + defaultSelect: lyricConfig?.detailFontSize ?? 1, + onSelectChange(value) { + PersistStatus.set('lyric.detailFontSize', value); + scrollToCurrentLrcItem(); + }, + }); + }} + /> + { + const currentMusicItem = TrackPlayer.getCurrentMusic(); + + if (currentMusicItem) { + showPanel('SetLyricOffset', { + musicItem: currentMusicItem, + onSubmit(offset) { + MediaExtra.update(currentMusicItem, { + lyricOffset: offset, + }); + LyricManager.refreshLyric(); + scrollToCurrentLrcItem(); + hidePanel(); + }, + }); + } + }} + /> + + { + const currentMusic = TrackPlayer.getCurrentMusic(); + if (!currentMusic) { + return; + } + // if ( + // Config.get('setting.basic.associateLyricType') === + // 'input' + // ) { + // showPanel('AssociateLrc', { + // musicItem: currentMusic, + // }); + // } else { + showPanel('SearchLrc', { + musicItem: currentMusic, + }); + // } + }} + /> + { + if (!lyricConfig?.showStatusBarLyric) { + const hasPermission = + await LyricUtil.checkSystemAlertPermission(); + + if (hasPermission) { + LyricUtil.showStatusBarLyric( + LyricManager.getCurrentLyric()?.lrc ?? + 'MusicFree', + Config.get('setting.lyric') ?? {}, + ); + Config.set( + 'setting.lyric.showStatusBarLyric', + true, + ); + } else { + LyricUtil.requestSystemAlertPermission().finally( + () => { + Toast.warn( + '开启桌面歌词失败,无悬浮窗权限', + ); + }, + ); + } + } else { + LyricUtil.hideStatusBarLyric(); + Config.set('setting.lyric.showStatusBarLyric', false); + } + }} + width={iconSizeConst.normal} + height={iconSizeConst.normal} + color={ + lyricConfig?.showStatusBarLyric ? colors.primary : 'white' + } + /> + { + if (!hasTranslation) { + Toast.warn('当前歌曲无翻译'); + return; + } + + PersistStatus.set( + 'lyric.showTranslation', + !showTranslation, + ); + scrollToCurrentLrcItem(); + }} + /> + + ); +} + +const styles = StyleSheet.create({ + container: { + height: rpx(80), + marginBottom: rpx(24), + width: '100%', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-around', + }, +}); diff --git a/src/pages/musicListEditor/components/bottom.tsx b/src/pages/musicListEditor/components/bottom.tsx index 6cd782eb..1ee38235 100644 --- a/src/pages/musicListEditor/components/bottom.tsx +++ b/src/pages/musicListEditor/components/bottom.tsx @@ -1,148 +1,148 @@ -import React, {useMemo} from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import ThemeText from '@/components/base/themeText'; -import {iconSizeConst} from '@/constants/uiConst'; -import useColors from '@/hooks/useColors'; -import {useAtom, useSetAtom} from 'jotai'; -import {editingMusicListAtom, musicListChangedAtom} from '../store/atom'; -import Toast from '@/utils/toast'; -import Download from '@/core/download'; - -import produce from 'immer'; -import {useParams} from '@/entry/router'; -import {showPanel} from '@/components/panels/usePanel'; -import TrackPlayer from '@/core/trackPlayer'; - -export default function Bottom() { - const {musicSheet} = useParams<'music-list-editor'>(); - const [editingMusicList, setEditingMusicList] = - useAtom(editingMusicListAtom); - const setMusicListChanged = useSetAtom(musicListChangedAtom); - - const selectedEditorItems = useMemo( - () => editingMusicList.filter(_ => _.checked), - [editingMusicList], - ); - - const selectedItems = useMemo( - () => selectedEditorItems.map(_ => _.musicItem), - [selectedEditorItems], - ); - - function resetSelectedIndices() { - setEditingMusicList( - editingMusicList.map(_ => ({ - musicItem: _.musicItem, - checked: false, - })), - ); - } - - return ( - - { - TrackPlayer.addNext(selectedItems); - resetSelectedIndices(); - Toast.success('已添加到下一首播放'); - }} - /> - { - if (selectedItems.length) { - showPanel('AddToMusicSheet', { - musicItem: selectedItems, - }); - resetSelectedIndices(); - } - }} - /> - { - if (selectedItems.length) { - Download.downloadMusic(selectedItems); - Toast.success( - '开始下载;全部下载完成之前请不要关闭应用', - ); - resetSelectedIndices(); - } - }} - /> - { - if (selectedItems.length && musicSheet?.id) { - setEditingMusicList( - produce(prev => prev.filter(_ => !_.checked)), - ); - setMusicListChanged(true); - Toast.warn('记得保存哦'); - } - }} - /> - - ); -} - -interface IBottomIconProps { - icon: string; - title: string; - color?: 'text' | 'textSecondary'; - onPress: () => void; -} -function BottomIcon(props: IBottomIconProps) { - const {icon, title, onPress, color = 'text'} = props; - const colors = useColors(); - return ( - - - - {title} - - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - height: rpx(144), - flexDirection: 'row', - }, - - bottomIconWrapper: { - flex: 1, - height: '100%', - alignItems: 'center', - justifyContent: 'center', - }, - bottomIconText: { - marginTop: rpx(12), - }, -}); +import React, {useMemo} from 'react'; +import {Pressable, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import {iconSizeConst} from '@/constants/uiConst'; +import useColors from '@/hooks/useColors'; +import {useAtom, useSetAtom} from 'jotai'; +import {editingMusicListAtom, musicListChangedAtom} from '../store/atom'; +import Toast from '@/utils/toast'; +import Download from '@/core/download'; + +import {useParams} from '@/entry/router'; +import {showPanel} from '@/components/panels/usePanel'; +import TrackPlayer from '@/core/trackPlayer'; +import {produce} from 'immer'; +import Icon, {IIconName} from '@/components/base/icon.tsx'; + +export default function Bottom() { + const {musicSheet} = useParams<'music-list-editor'>(); + const [editingMusicList, setEditingMusicList] = + useAtom(editingMusicListAtom); + const setMusicListChanged = useSetAtom(musicListChangedAtom); + + const selectedEditorItems = useMemo( + () => editingMusicList.filter(_ => _.checked), + [editingMusicList], + ); + + const selectedItems = useMemo( + () => selectedEditorItems.map(_ => _.musicItem), + [selectedEditorItems], + ); + + function resetSelectedIndices() { + setEditingMusicList( + editingMusicList.map(_ => ({ + musicItem: _.musicItem, + checked: false, + })), + ); + } + + return ( + + { + TrackPlayer.addNext(selectedItems); + resetSelectedIndices(); + Toast.success('已添加到下一首播放'); + }} + /> + { + if (selectedItems.length) { + showPanel('AddToMusicSheet', { + musicItem: selectedItems, + }); + resetSelectedIndices(); + } + }} + /> + { + if (selectedItems.length) { + Download.downloadMusic(selectedItems); + Toast.success( + '开始下载;全部下载完成之前请不要关闭应用', + ); + resetSelectedIndices(); + } + }} + /> + { + if (selectedItems.length && musicSheet?.id) { + setEditingMusicList( + produce(prev => prev.filter(_ => !_.checked)), + ); + setMusicListChanged(true); + Toast.warn('记得保存哦'); + } + }} + /> + + ); +} + +interface IBottomIconProps { + icon: IIconName; + title: string; + color?: 'text' | 'textSecondary'; + onPress: () => void; +} +function BottomIcon(props: IBottomIconProps) { + const {icon, title, onPress, color = 'text'} = props; + const colors = useColors(); + return ( + + + + {title} + + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + height: rpx(144), + flexDirection: 'row', + }, + + bottomIconWrapper: { + flex: 1, + height: '100%', + alignItems: 'center', + justifyContent: 'center', + }, + bottomIconText: { + marginTop: rpx(12), + }, +}); diff --git a/src/pages/musicListEditor/components/musicList.tsx b/src/pages/musicListEditor/components/musicList.tsx index a9614b7a..cf041522 100644 --- a/src/pages/musicListEditor/components/musicList.tsx +++ b/src/pages/musicListEditor/components/musicList.tsx @@ -2,7 +2,7 @@ import React, {memo, useCallback} from 'react'; import {StatusBar, StyleSheet, View} from 'react-native'; import rpx from '@/utils/rpx'; import MusicItem from '@/components/mediaItem/musicItem'; -import produce from 'immer'; +import {produce} from 'immer'; import {useAtom, useSetAtom} from 'jotai'; import { editingMusicListAtom, diff --git a/src/pages/permissions/index.tsx b/src/pages/permissions/index.tsx index af05e512..c2f9d591 100644 --- a/src/pages/permissions/index.tsx +++ b/src/pages/permissions/index.tsx @@ -1,115 +1,115 @@ -import React, {useEffect, useRef, useState} from 'react'; -import {AppState, StyleSheet} from 'react-native'; -import rpx from '@/utils/rpx'; -import AppBar from '@/components/base/appBar'; -import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; -import globalStyle from '@/constants/globalStyle'; -import StatusBar from '@/components/base/statusBar'; -import ThemeText from '@/components/base/themeText'; -import ListItem from '@/components/base/listItem'; -import ThemeSwitch from '@/components/base/switch'; -import LyricUtil from '@/native/lyricUtil'; -import NativeUtils from '@/native/utils'; - -type IPermissionTypes = 'floatingWindow' | 'fileStorage'; - -export default function Permissions() { - const appState = useRef(AppState.currentState); - const [permissions, setPermissions] = useState< - Record - >({ - floatingWindow: false, - fileStorage: false, - // background: false, - }); - - async function checkPermission(type?: IPermissionTypes) { - let newPermission = { - ...permissions, - }; - if (!type || type === 'floatingWindow') { - const hasPermission = await LyricUtil.checkSystemAlertPermission(); - newPermission.floatingWindow = hasPermission; - } - if (!type || type === 'fileStorage') { - const hasPermission = await NativeUtils.checkStoragePermission(); - console.log('HAS', hasPermission); - newPermission.fileStorage = hasPermission; - } - // if (!type || type === 'background') { - - // } - - setPermissions(newPermission); - } - - useEffect(() => { - checkPermission(); - const subscription = AppState.addEventListener( - 'change', - nextAppState => { - if ( - appState.current.match(/inactive|background/) && - nextAppState === 'active' - ) { - checkPermission(); - } - - appState.current = nextAppState; - }, - ); - - return () => { - subscription.remove(); - }; - }, []); - - return ( - - - 权限管理 - - 此处列出了本 APP - 需要的所有权限,你可以从这里开启或关闭某些权限。 - - { - LyricUtil.requestSystemAlertPermission(); - }}> - - - - { - NativeUtils.requestStoragePermission(); - }}> - - - - {/* - - - */} - - ); -} - -const styles = StyleSheet.create({ - description: { - width: '100%', - paddingHorizontal: rpx(24), - marginVertical: rpx(36), - }, -}); +import React, {useEffect, useRef, useState} from 'react'; +import {AppState, StyleSheet} from 'react-native'; +import rpx from '@/utils/rpx'; +import AppBar from '@/components/base/appBar'; +import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; +import globalStyle from '@/constants/globalStyle'; +import StatusBar from '@/components/base/statusBar'; +import ThemeText from '@/components/base/themeText'; +import ListItem from '@/components/base/listItem'; +import ThemeSwitch from '@/components/base/switch'; +import LyricUtil from '@/native/lyricUtil'; +import NativeUtils from '@/native/utils'; + +type IPermissionTypes = 'floatingWindow' | 'fileStorage'; + +export default function Permissions() { + const appState = useRef(AppState.currentState); + const [permissions, setPermissions] = useState< + Record + >({ + floatingWindow: false, + fileStorage: false, + // background: false, + }); + + async function checkPermission(type?: IPermissionTypes) { + let newPermission = { + ...permissions, + }; + if (!type || type === 'floatingWindow') { + const hasPermission = await LyricUtil.checkSystemAlertPermission(); + newPermission.floatingWindow = hasPermission; + } + if (!type || type === 'fileStorage') { + const hasPermission = await NativeUtils.checkStoragePermission(); + console.log('HAS', hasPermission); + newPermission.fileStorage = hasPermission; + } + // if (!type || type === 'background') { + + // } + + setPermissions(newPermission); + } + + useEffect(() => { + checkPermission(); + const subscription = AppState.addEventListener( + 'change', + nextAppState => { + if ( + appState.current.match(/inactive|background/) && + nextAppState === 'active' + ) { + checkPermission(); + } + + appState.current = nextAppState; + }, + ); + + return () => { + subscription.remove(); + }; + }, []); + + return ( + + + 权限管理 + + 此处列出了本 APP + 需要的所有权限,你可以从这里开启或关闭某些权限。 + + { + LyricUtil.requestSystemAlertPermission(); + }}> + + + + { + NativeUtils.requestStoragePermission(); + }}> + + + + {/* + + + */} + + ); +} + +const styles = StyleSheet.create({ + description: { + width: '100%', + paddingHorizontal: rpx(24), + marginVertical: rpx(36), + }, +}); diff --git a/src/pages/recommendSheets/components/body/sheetBody.tsx b/src/pages/recommendSheets/components/body/sheetBody.tsx index 4202a16a..10814f18 100644 --- a/src/pages/recommendSheets/components/body/sheetBody.tsx +++ b/src/pages/recommendSheets/components/body/sheetBody.tsx @@ -7,7 +7,7 @@ import TypeTag from '../../../../components/base/typeTag'; import useRecommendList from '../../hooks/useRecommendListTags'; import SheetList from './sheetList'; -import {showPanel, hidePanel} from '@/components/panels/usePanel'; +import {hidePanel, showPanel} from '@/components/panels/usePanel'; interface IProps { hash: string; diff --git a/src/pages/searchPage/components/navBar.tsx b/src/pages/searchPage/components/navBar.tsx index 5025b3ca..5a8e6af9 100644 --- a/src/pages/searchPage/components/navBar.tsx +++ b/src/pages/searchPage/components/navBar.tsx @@ -1,135 +1,135 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import {useAtom, useSetAtom} from 'jotai'; -import { - pageStatusAtom, - PageStatus, - queryAtom, - searchResultsAtom, - initSearchResults, -} from '../store/atoms'; -import useSearch from '../hooks/useSearch'; -import {addHistory} from '../common/historySearch'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import useColors from '@/hooks/useColors'; -import AppBar from '@/components/base/appBar'; -import Input from '@/components/base/input'; -import Color from 'color'; -import Button from '@/components/base/button'; -import IconButton from '@/components/base/iconButton'; -import {iconSizeConst} from '@/constants/uiConst'; - -export default function NavBar() { - const search = useSearch(); - const [query, setQuery] = useAtom(queryAtom); - const setPageStatus = useSetAtom(pageStatusAtom); - const colors = useColors(); - const setSearchResultsState = useSetAtom(searchResultsAtom); - - const onSearchSubmit = async () => { - if (query === '') { - return; - } - setSearchResultsState(initSearchResults); - setPageStatus(prev => - prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev, - ); - await search(query, 1); - await addHistory(query); - }; - - const hintTextColor = Color(colors.text).alpha(0.6).toString(); - - return ( - - - - { - setPageStatus(PageStatus.EDITING); - }} - placeholderTextColor={hintTextColor} - placeholder="输入要搜索的歌曲" - onSubmitEditing={onSearchSubmit} - onChangeText={_ => { - if (_ === '') { - setPageStatus(PageStatus.EDITING); - } - setQuery(_); - }} - value={query} - /> - {query.length ? ( - { - setQuery(''); - setPageStatus(PageStatus.EDITING); - }} - color={hintTextColor} - name="close" - /> - ) : null} - - - - ); -} - -const style = StyleSheet.create({ - appbar: { - paddingRight: 0, - }, - button: { - paddingHorizontal: rpx(24), - height: '100%', - justifyContent: 'center', - }, - searchBarContainer: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - }, - searchBar: { - minWidth: rpx(375), - flex: 1, - paddingHorizontal: rpx(64), - borderRadius: rpx(64), - height: rpx(64), - maxHeight: rpx(64), - alignItems: 'center', - }, - magnify: { - position: 'absolute', - left: rpx(16), - zIndex: 100, - }, - close: { - position: 'absolute', - right: rpx(16), - }, -}); +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import {useAtom, useSetAtom} from 'jotai'; +import { + initSearchResults, + PageStatus, + pageStatusAtom, + queryAtom, + searchResultsAtom, +} from '../store/atoms'; +import useSearch from '../hooks/useSearch'; +import {addHistory} from '../common/historySearch'; +import useColors from '@/hooks/useColors'; +import AppBar from '@/components/base/appBar'; +import Input from '@/components/base/input'; +import Color from 'color'; +import Button from '@/components/base/button'; +import IconButton from '@/components/base/iconButton'; +import {iconSizeConst} from '@/constants/uiConst'; +import Icon from '@/components/base/icon.tsx'; + +export default function NavBar() { + const search = useSearch(); + const [query, setQuery] = useAtom(queryAtom); + const setPageStatus = useSetAtom(pageStatusAtom); + const colors = useColors(); + const setSearchResultsState = useSetAtom(searchResultsAtom); + + const onSearchSubmit = async () => { + if (query === '') { + return; + } + setSearchResultsState(initSearchResults); + setPageStatus(prev => + prev === PageStatus.EDITING ? PageStatus.SEARCHING : prev, + ); + await search(query, 1); + await addHistory(query); + }; + + const hintTextColor = Color(colors.text).alpha(0.6).toString(); + + return ( + + + + { + setPageStatus(PageStatus.EDITING); + }} + placeholderTextColor={hintTextColor} + placeholder="输入要搜索的歌曲" + onSubmitEditing={onSearchSubmit} + onChangeText={_ => { + if (_ === '') { + setPageStatus(PageStatus.EDITING); + } + setQuery(_); + }} + value={query} + /> + {query.length ? ( + { + setQuery(''); + setPageStatus(PageStatus.EDITING); + }} + color={hintTextColor} + name="x-mark" + /> + ) : null} + + + + ); +} + +const style = StyleSheet.create({ + appbar: { + paddingRight: 0, + }, + button: { + paddingHorizontal: rpx(24), + height: '100%', + justifyContent: 'center', + }, + searchBarContainer: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, + searchBar: { + minWidth: rpx(375), + flex: 1, + paddingHorizontal: rpx(64), + borderRadius: rpx(64), + height: rpx(64), + maxHeight: rpx(64), + alignItems: 'center', + }, + magnify: { + position: 'absolute', + left: rpx(16), + zIndex: 100, + }, + close: { + position: 'absolute', + right: rpx(16), + }, +}); diff --git a/src/pages/searchPage/components/resultPanel/results/artistResultItem.tsx b/src/pages/searchPage/components/resultPanel/results/artistResultItem.tsx index f3ae1e32..b26fb821 100644 --- a/src/pages/searchPage/components/resultPanel/results/artistResultItem.tsx +++ b/src/pages/searchPage/components/resultPanel/results/artistResultItem.tsx @@ -1,48 +1,48 @@ -import React from 'react'; -import ListItem from '@/components/base/listItem'; -import {ImgAsset} from '@/constants/assetsConst'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import TitleAndTag from '@/components/mediaItem/titleAndTag'; - -interface IArtistResultsProps { - item: IArtist.IArtistItem; - index: number; - pluginHash: string; -} -export default function ArtistResultItem(props: IArtistResultsProps) { - const {item: artistItem, pluginHash} = props; - const navigate = useNavigate(); - return ( - { - navigate(ROUTE_PATH.ARTIST_DETAIL, { - artistItem: artistItem, - pluginHash, - }); - }}> - - - } - /> - - ); -} +import React from 'react'; +import ListItem from '@/components/base/listItem'; +import {ImgAsset} from '@/constants/assetsConst'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import TitleAndTag from '@/components/mediaItem/titleAndTag'; + +interface IArtistResultsProps { + item: IArtist.IArtistItem; + index: number; + pluginHash: string; +} +export default function ArtistResultItem(props: IArtistResultsProps) { + const {item: artistItem, pluginHash} = props; + const navigate = useNavigate(); + return ( + { + navigate(ROUTE_PATH.ARTIST_DETAIL, { + artistItem: artistItem, + pluginHash, + }); + }}> + + + } + /> + + ); +} diff --git a/src/pages/searchPage/hooks/useSearch.ts b/src/pages/searchPage/hooks/useSearch.ts index da10a44c..85c23e92 100644 --- a/src/pages/searchPage/hooks/useSearch.ts +++ b/src/pages/searchPage/hooks/useSearch.ts @@ -1,6 +1,6 @@ import {devLog, errorLog, trace} from '@/utils/log'; import {RequestStateCode} from '@/constants/commonConst'; -import produce from 'immer'; +import {produce} from 'immer'; import {getDefaultStore, useAtom, useSetAtom} from 'jotai'; import {useCallback, useRef} from 'react'; import {PageStatus, pageStatusAtom, searchResultsAtom} from '../store/atoms'; diff --git a/src/pages/setting/settingTypes/backupSetting.tsx b/src/pages/setting/settingTypes/backupSetting.tsx index 935948fe..833cf74a 100644 --- a/src/pages/setting/settingTypes/backupSetting.tsx +++ b/src/pages/setting/settingTypes/backupSetting.tsx @@ -1,259 +1,259 @@ -import React from 'react'; -import {ScrollView, StyleSheet} from 'react-native'; -import DocumentPicker from 'react-native-document-picker'; -import ListItem, {ListItemHeader} from '@/components/base/listItem'; -import Toast from '@/utils/toast'; -import Backup from '@/core/backup'; -import {readFile, writeFile} from 'react-native-fs'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; - -import axios from 'axios'; -import {showDialog} from '@/components/dialogs/useDialog'; -import {showPanel} from '@/components/panels/usePanel'; - -import {AuthType, createClient} from 'webdav'; -import Config from '@/core/config'; - -export default function BackupSetting() { - const navigate = useNavigate(); - const webdavConfig = Config.useConfig('setting.webdav'); - const backupConfig = Config.useConfig('setting.backup'); - - const onBackupToLocal = async () => { - navigate(ROUTE_PATH.FILE_SELECTOR, { - fileType: 'folder', - multi: false, - actionText: '开始备份', - async onAction(selectedFiles) { - const raw = Backup.backup(); - const folder = selectedFiles[0]?.path; - return new Promise(resolve => { - showDialog('LoadingDialog', { - title: '备份本地音乐', - promise: writeFile( - `${folder}${ - folder?.endsWith('/') ? '' : '/' - }backup.json`, - raw, - ), - onResolve(_, hideDialog) { - Toast.success('备份成功~'); - hideDialog(); - resolve(true); - }, - onCancel(hideDialog) { - hideDialog(); - resolve(false); - }, - onReject(reason, hideDialog) { - hideDialog(); - resolve(false); - Toast.success( - `备份失败 ${reason?.message ?? reason}`, - ); - }, - }); - }); - }, - }); - }; - - async function onResumeFromLocal() { - try { - let filePath: string | undefined; - try { - filePath = (await DocumentPicker.pickSingle()).uri; - } catch { - return; - } - const raw = await readFile(filePath); - await Backup.resume(raw); - Toast.success('恢复成功~'); - } catch (e: any) { - Toast.warn(`恢复失败 ${e?.message ?? e}`); - } - } - - // const [webDavState, setWebDavState] = useState(''); - async function onResumeFromUrl() { - showPanel('SimpleInput', { - title: '恢复数据', - placeholder: '输入以json或txt结尾的URL', - maxLength: 1024, - async onOk(text, closePanel) { - try { - const url = text.trim(); - if (url.endsWith('.json') || url.endsWith('.txt')) { - const raw = (await axios.get(text)).data; - await Backup.resume(raw); - Toast.success('恢复成功~'); - closePanel(); - } else { - throw '无效的URL'; - } - } catch (e: any) { - Toast.warn(`恢复失败 ${e?.message ?? e}`); - } - }, - }); - } - - async function onResumeFromWebdav() { - const {username, password, url} = Config.get('setting.webdav') ?? {}; - if (!(username && password && url)) { - Toast.warn('请先在「Webdav设置」中完成配置,再执行恢复'); - return; - } - const client = createClient(url, { - authType: AuthType.Password, - username: username, - password: password, - }); - - if (!(await client.exists('/MusicFree/MusicFreeBackup.json'))) { - Toast.warn('备份文件不存在'); - return; - } - - try { - const resumeData = await client.getFileContents( - '/MusicFree/MusicFreeBackup.json', - { - format: 'text', - }, - ); - await Backup.resume( - resumeData, - Config.get('setting.backup.resumeMode') === 'overwrite', - ); - Toast.success('恢复成功~'); - } catch (e: any) { - Toast.warn(`恢复失败: ${e?.message ?? e}`); - } - } - - async function onBackupToWebdav() { - const {username, password, url} = Config.get('setting.webdav') ?? {}; - if (!(username && password && url)) { - Toast.warn('请先在「Webdav设置」中完成配置,再执行恢复'); - return; - } - try { - const client = createClient(url, { - authType: AuthType.Password, - username: username, - password: password, - }); - - const raw = Backup.backup(); - if (!(await client.exists('/MusicFree'))) { - await client.createDirectory('/MusicFree'); - } - // 临时文件 - await client.putFileContents( - `/MusicFree/MusicFreeBackup.json`, - raw, - { - overwrite: true, - }, - ); - Toast.success('备份成功'); - } catch (e: any) { - Toast.warn(`备份失败: ${e?.message ?? e}`); - } - } - - return ( - - 备份&恢复设置 - - { - showDialog('RadioDialog', { - title: '设置恢复方式', - content: [ - { - key: '追加到歌单末尾', - value: 'append', - }, - { - key: '覆盖歌单', - value: 'overwrite', - }, - ], - onOk(value) { - Config.set( - 'setting.backup.resumeMode', - value as any, - ); - }, - }); - }}> - - - {backupConfig?.resumeMode === 'overwrite' - ? '覆盖歌单' - : '追加到歌单末尾'} - - - 本地备份 - - - - - - - - - - Webdav - { - showPanel('SetUserVariables', { - initValues: { - url: webdavConfig?.url ?? '', - username: webdavConfig?.username ?? '', - password: webdavConfig?.password ?? '', - }, - variables: [ - { - key: 'url', - name: 'URL', - hint: 'webdav服务地址', - }, - { - key: 'username', - name: '用户名', - }, - { - key: 'password', - name: '密码', - }, - ], - onOk(values, closePanel) { - Config.set('setting.webdav', values); - Toast.success('保存成功'); - closePanel(); - }, - }); - }}> - - - - - - - - - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - flex: 1, - }, -}); +import React from 'react'; +import {ScrollView, StyleSheet} from 'react-native'; +import DocumentPicker from 'react-native-document-picker'; +import ListItem, {ListItemHeader} from '@/components/base/listItem'; +import Toast from '@/utils/toast'; +import Backup from '@/core/backup'; +import {readFile, writeFile} from 'react-native-fs'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; + +import axios from 'axios'; +import {showDialog} from '@/components/dialogs/useDialog'; +import {showPanel} from '@/components/panels/usePanel'; + +import {AuthType, createClient} from 'webdav'; +import Config from '@/core/config'; + +export default function BackupSetting() { + const navigate = useNavigate(); + const webdavConfig = Config.useConfig('setting.webdav'); + const backupConfig = Config.useConfig('setting.backup'); + + const onBackupToLocal = async () => { + navigate(ROUTE_PATH.FILE_SELECTOR, { + fileType: 'folder', + multi: false, + actionText: '开始备份', + async onAction(selectedFiles) { + const raw = Backup.backup(); + const folder = selectedFiles[0]?.path; + return new Promise(resolve => { + showDialog('LoadingDialog', { + title: '备份本地音乐', + promise: writeFile( + `${folder}${ + folder?.endsWith('/') ? '' : '/' + }backup.json`, + raw, + ), + onResolve(_, hideDialog) { + Toast.success('备份成功~'); + hideDialog(); + resolve(true); + }, + onCancel(hideDialog) { + hideDialog(); + resolve(false); + }, + onReject(reason, hideDialog) { + hideDialog(); + resolve(false); + Toast.success( + `备份失败 ${reason?.message ?? reason}`, + ); + }, + }); + }); + }, + }); + }; + + async function onResumeFromLocal() { + try { + let filePath: string | undefined; + try { + filePath = (await DocumentPicker.pickSingle()).uri; + } catch { + return; + } + const raw = await readFile(filePath); + await Backup.resume(raw); + Toast.success('恢复成功~'); + } catch (e: any) { + Toast.warn(`恢复失败 ${e?.message ?? e}`); + } + } + + // const [webDavState, setWebDavState] = useState(''); + async function onResumeFromUrl() { + showPanel('SimpleInput', { + title: '恢复数据', + placeholder: '输入以json或txt结尾的URL', + maxLength: 1024, + async onOk(text, closePanel) { + try { + const url = text.trim(); + if (url.endsWith('.json') || url.endsWith('.txt')) { + const raw = (await axios.get(text)).data; + await Backup.resume(raw); + Toast.success('恢复成功~'); + closePanel(); + } else { + throw '无效的URL'; + } + } catch (e: any) { + Toast.warn(`恢复失败 ${e?.message ?? e}`); + } + }, + }); + } + + async function onResumeFromWebdav() { + const {username, password, url} = Config.get('setting.webdav') ?? {}; + if (!(username && password && url)) { + Toast.warn('请先在「Webdav设置」中完成配置,再执行恢复'); + return; + } + const client = createClient(url, { + authType: AuthType.Password, + username: username, + password: password, + }); + + if (!(await client.exists('/MusicFree/MusicFreeBackup.json'))) { + Toast.warn('备份文件不存在'); + return; + } + + try { + const resumeData = await client.getFileContents( + '/MusicFree/MusicFreeBackup.json', + { + format: 'text', + }, + ); + await Backup.resume( + resumeData, + Config.get('setting.backup.resumeMode') === 'overwrite', + ); + Toast.success('恢复成功~'); + } catch (e: any) { + Toast.warn(`恢复失败: ${e?.message ?? e}`); + } + } + + async function onBackupToWebdav() { + const {username, password, url} = Config.get('setting.webdav') ?? {}; + if (!(username && password && url)) { + Toast.warn('请先在「Webdav设置」中完成配置,再执行恢复'); + return; + } + try { + const client = createClient(url, { + authType: AuthType.Password, + username: username, + password: password, + }); + + const raw = Backup.backup(); + if (!(await client.exists('/MusicFree'))) { + await client.createDirectory('/MusicFree'); + } + // 临时文件 + await client.putFileContents( + '/MusicFree/MusicFreeBackup.json', + raw, + { + overwrite: true, + }, + ); + Toast.success('备份成功'); + } catch (e: any) { + Toast.warn(`备份失败: ${e?.message ?? e}`); + } + } + + return ( + + 备份&恢复设置 + + { + showDialog('RadioDialog', { + title: '设置恢复方式', + content: [ + { + key: '追加到歌单末尾', + value: 'append', + }, + { + key: '覆盖歌单', + value: 'overwrite', + }, + ], + onOk(value) { + Config.set( + 'setting.backup.resumeMode', + value as any, + ); + }, + }); + }}> + + + {backupConfig?.resumeMode === 'overwrite' + ? '覆盖歌单' + : '追加到歌单末尾'} + + + 本地备份 + + + + + + + + + + Webdav + { + showPanel('SetUserVariables', { + initValues: { + url: webdavConfig?.url ?? '', + username: webdavConfig?.username ?? '', + password: webdavConfig?.password ?? '', + }, + variables: [ + { + key: 'url', + name: 'URL', + hint: 'webdav服务地址', + }, + { + key: 'username', + name: '用户名', + }, + { + key: 'password', + name: '密码', + }, + ], + onOk(values, closePanel) { + Config.set('setting.webdav', values); + Toast.success('保存成功'); + closePanel(); + }, + }); + }}> + + + + + + + + + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + flex: 1, + }, +}); diff --git a/src/pages/setting/settingTypes/basicSetting.tsx b/src/pages/setting/settingTypes/basicSetting.tsx index 0bcce195..dad8eaf2 100644 --- a/src/pages/setting/settingTypes/basicSetting.tsx +++ b/src/pages/setting/settingTypes/basicSetting.tsx @@ -1,802 +1,802 @@ -import React, {useCallback, useEffect, useRef, useState} from 'react'; -import {SectionList, StyleSheet, TouchableOpacity, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import Config, {IConfigPaths} from '@/core/config'; -import ListItem from '@/components/base/listItem'; -import ThemeText from '@/components/base/themeText'; -import ThemeSwitch from '@/components/base/switch'; -import {clearCache, getCacheSize, sizeFormatter} from '@/utils/fileUtils'; - -import Toast from '@/utils/toast'; -import pathConst from '@/constants/pathConst'; -import {ROUTE_PATH, useNavigate} from '@/entry/router'; -import {readdir} from 'react-native-fs'; -import {qualityKeys, qualityText} from '@/utils/qualities'; -import {clearLog, getErrorLogContent} from '@/utils/log'; -import {FlatList, ScrollView} from 'react-native-gesture-handler'; -import {showDialog} from '@/components/dialogs/useDialog'; -import {showPanel} from '@/components/panels/usePanel'; -import Paragraph from '@/components/base/paragraph'; -import LyricUtil, {NativeTextAlignment} from '@/native/lyricUtil'; -import Slider from '@react-native-community/slider'; -import useColors from '@/hooks/useColors'; -import ColorBlock from '@/components/base/colorBlock'; -import LyricManager from '@/core/lyricManager'; - -function createSwitch( - title: string, - changeKey: IConfigPaths, - value: boolean, - callback?: (newValue: boolean) => void, -) { - const onPress = () => { - if (callback) { - callback(!value); - } else { - Config.set(changeKey, !value); - } - }; - return { - title, - onPress, - right: , - }; -} - -const createRadio = function ( - title: string, - changeKey: IConfigPaths, - candidates: Array, - value: string | number, - valueMap?: Record, - onChange?: (value: string | number) => void, -) { - const onPress = () => { - showDialog('RadioDialog', { - title, - content: valueMap - ? candidates.map(_ => ({ - key: valueMap[_], - value: _, - })) - : candidates, - onOk(val) { - Config.set(changeKey, val); - onChange?.(val); - }, - }); - }; - return { - title, - right: ( - - {valueMap ? valueMap[value] : value} - - ), - onPress, - }; -}; - -function useCacheSize() { - const [cacheSize, setCacheSize] = useState({ - music: 0, - lyric: 0, - image: 0, - }); - - const refreshCacheSize = useCallback(async () => { - const [musicCache, lyricCache, imageCache] = await Promise.all([ - getCacheSize('music'), - getCacheSize('lyric'), - getCacheSize('image'), - ]); - setCacheSize({ - music: musicCache, - lyric: lyricCache, - image: imageCache, - }); - }, []); - - return [cacheSize, refreshCacheSize] as const; -} - -export default function BasicSetting() { - const basicSetting = Config.useConfig('setting.basic'); - - const navigate = useNavigate(); - - const [cacheSize, refreshCacheSize] = useCacheSize(); - - const sectionListRef = useRef(null); - // const titleListRef = useRef(null); - - useEffect(() => { - refreshCacheSize(); - }, []); - - const basicOptions = [ - { - title: '常规', - data: [ - createRadio( - '历史记录最多保存条数', - 'setting.basic.maxHistoryLen', - [20, 50, 100, 200, 500], - basicSetting?.maxHistoryLen ?? 50, - ), - createRadio( - '打开歌曲详情页时', - 'setting.basic.musicDetailDefault', - ['album', 'lyric'], - basicSetting?.musicDetailDefault ?? 'album', - { - album: '默认展示歌曲封面', - lyric: '默认展示歌词页', - }, - ), - createSwitch( - '处于歌曲详情页时常亮', - 'setting.basic.musicDetailAwake', - basicSetting?.musicDetailAwake ?? false, - ), - createRadio( - '关联歌词方式', - 'setting.basic.associateLyricType', - ['input', 'search'], - basicSetting?.associateLyricType ?? 'search', - { - input: '输入歌曲ID', - search: '搜索歌词', - }, - ), - createSwitch( - '通知栏显示关闭按钮 (重启后生效)', - 'setting.basic.showExitOnNotification', - basicSetting?.showExitOnNotification ?? false, - ), - ], - }, - { - title: '歌单&专辑', - data: [ - createRadio( - '点击搜索结果内单曲时', - 'setting.basic.clickMusicInSearch', - ['播放歌曲', '播放歌曲并替换播放列表'], - basicSetting?.clickMusicInSearch ?? '播放歌曲', - ), - createRadio( - '点击专辑内单曲时', - 'setting.basic.clickMusicInAlbum', - ['播放单曲', '播放专辑'], - basicSetting?.clickMusicInAlbum ?? '播放专辑', - ), - createRadio( - '打开歌曲详情页时', - 'setting.basic.musicDetailDefault', - ['album', 'lyric'], - basicSetting?.musicDetailDefault ?? 'album', - { - album: '默认展示歌曲封面', - lyric: '默认展示歌词页', - }, - ), - createRadio( - '本地歌单添加歌曲顺序', - 'setting.basic.musicOrderInLocalSheet', - ['start', 'end'], - basicSetting?.musicOrderInLocalSheet ?? 'end', - { - start: '添加到歌单开头', - end: '添加到歌单末尾', - }, - ), - ], - }, - { - title: '插件', - data: [ - createSwitch( - '软件启动时自动更新插件', - 'setting.basic.autoUpdatePlugin', - basicSetting?.autoUpdatePlugin ?? false, - ), - createSwitch( - '安装插件时不校验版本', - 'setting.basic.notCheckPluginVersion', - basicSetting?.notCheckPluginVersion ?? false, - ), - ], - }, - { - title: '播放', - data: [ - createSwitch( - '允许与其他应用同时播放', - 'setting.basic.notInterrupt', - basicSetting?.notInterrupt ?? false, - ), - createSwitch( - '软件启动时自动播放歌曲', - 'setting.basic.autoPlayWhenAppStart', - basicSetting?.autoPlayWhenAppStart ?? false, - ), - createSwitch( - '播放失败时尝试更换音源', - 'setting.basic.tryChangeSourceWhenPlayFail', - basicSetting?.tryChangeSourceWhenPlayFail ?? false, - ), - createSwitch( - '播放失败时自动暂停', - 'setting.basic.autoStopWhenError', - basicSetting?.autoStopWhenError ?? false, - ), - createRadio( - '播放被暂时打断时', - 'setting.basic.tempRemoteDuck', - ['暂停', '降低音量'], - basicSetting?.tempRemoteDuck ?? '暂停', - ), - createRadio( - '默认播放音质', - 'setting.basic.defaultPlayQuality', - qualityKeys, - basicSetting?.defaultPlayQuality ?? 'standard', - qualityText, - ), - createRadio( - '默认播放音质缺失时', - 'setting.basic.playQualityOrder', - ['asc', 'desc'], - basicSetting?.playQualityOrder ?? 'asc', - { - asc: '播放更高音质', - desc: '播放更低音质', - }, - ), - ], - }, - { - title: '下载', - data: [ - { - title: '下载路径', - right: ( - - {basicSetting?.downloadPath ?? - pathConst.downloadMusicPath} - - ), - onPress() { - navigate<'file-selector'>(ROUTE_PATH.FILE_SELECTOR, { - fileType: 'folder', - multi: false, - actionText: '选择文件夹', - async onAction(selectedFiles) { - try { - const targetDir = selectedFiles[0]; - await readdir(targetDir.path); - Config.set( - 'setting.basic.downloadPath', - targetDir.path, - ); - return true; - } catch { - Toast.warn('文件夹不存在或无权限'); - return false; - } - }, - }); - }, - }, - createRadio( - '最大同时下载数目', - 'setting.basic.maxDownload', - [1, 3, 5, 7], - basicSetting?.maxDownload ?? 3, - ), - createRadio( - '默认下载音质', - 'setting.basic.defaultDownloadQuality', - qualityKeys, - basicSetting?.defaultDownloadQuality ?? 'standard', - qualityText, - ), - createRadio( - '默认下载音质缺失时', - 'setting.basic.downloadQualityOrder', - ['asc', 'desc'], - basicSetting?.downloadQualityOrder ?? 'asc', - { - asc: '下载更高音质', - desc: '下载更低音质', - }, - ), - ], - }, - { - title: '网络', - data: [ - createSwitch( - '使用移动网络播放', - 'setting.basic.useCelluarNetworkPlay', - basicSetting?.useCelluarNetworkPlay ?? false, - ), - createSwitch( - '使用移动网络下载', - 'setting.basic.useCelluarNetworkDownload', - basicSetting?.useCelluarNetworkDownload ?? false, - ), - ], - }, - { - title: '歌词', - data: [], - footer: , - }, - { - title: '缓存', - data: [ - { - title: '音乐缓存上限', - right: ( - - {basicSetting?.maxCacheSize - ? sizeFormatter(basicSetting.maxCacheSize) - : '512M'} - - ), - onPress() { - showPanel('SimpleInput', { - title: '设置缓存', - placeholder: '输入缓存占用上限,100M-8192M,单位M', - onOk(text, closePanel) { - let val = parseInt(text); - if (val < 100) { - val = 100; - } else if (val > 8192) { - val = 8192; - } - if (val >= 100 && val <= 8192) { - Config.set( - 'setting.basic.maxCacheSize', - val * 1024 * 1024, - ); - closePanel(); - Toast.success('设置成功'); - } - }, - }); - }, - }, - - { - title: '清除音乐缓存', - right: ( - - {sizeFormatter(cacheSize.music)} - - ), - onPress() { - showDialog('SimpleDialog', { - title: '清除音乐缓存', - content: '确定清除音乐缓存吗?', - async onOk() { - await clearCache('music'); - Toast.success('已清除音乐缓存'); - refreshCacheSize(); - }, - }); - }, - }, - { - title: '清除歌词缓存', - right: ( - - {sizeFormatter(cacheSize.lyric)} - - ), - onPress() { - showDialog('SimpleDialog', { - title: '清除歌词缓存', - content: '确定清除歌词缓存吗?', - async onOk() { - await clearCache('lyric'); - Toast.success('已清除歌词缓存'); - refreshCacheSize(); - }, - }); - }, - }, - { - title: '清除图片缓存', - right: ( - - {sizeFormatter(cacheSize.image)} - - ), - onPress() { - showDialog('SimpleDialog', { - title: '清除图片缓存', - content: '确定清除图片缓存吗?', - async onOk() { - await clearCache('image'); - Toast.success('已清除图片缓存'); - refreshCacheSize(); - }, - }); - }, - }, - ], - }, - { - title: '开发选项', - data: [ - createSwitch( - '记录错误日志', - 'setting.basic.debug.errorLog', - basicSetting?.debug?.errorLog ?? false, - ), - createSwitch( - '记录详细日志', - 'setting.basic.debug.traceLog', - basicSetting?.debug?.traceLog ?? false, - ), - createSwitch( - '调试面板', - 'setting.basic.debug.devLog', - basicSetting?.debug?.devLog ?? false, - ), - { - title: '查看错误日志', - right: undefined, - async onPress() { - // 获取日志文件夹 - const errorLogContent = await getErrorLogContent(); - showDialog('SimpleDialog', { - title: '错误日志', - content: ( - - - {errorLogContent || '暂无记录'} - - - ), - }); - }, - }, - { - title: '清空日志', - right: undefined, - async onPress() { - try { - await clearLog(); - Toast.success('日志已清空'); - } catch {} - }, - }, - ], - }, - ]; - - return ( - - it.title)} - renderItem={({item, index}) => ( - { - sectionListRef.current?.scrollToLocation({ - sectionIndex: index, - itemIndex: 0, - }); - }} - activeOpacity={0.7} - style={styles.headerItemStyle}> - {item} - - )} - /> - ( - - - {section.title} - - - )} - ref={sectionListRef} - renderSectionFooter={({section}) => { - return section.footer ?? null; - }} - renderItem={({item}) => { - const Right = item.right; - - return ( - - - {Right} - - ); - }} - /> - - ); -} - -const styles = StyleSheet.create({ - wrapper: { - width: '100%', - paddingBottom: rpx(24), - flex: 1, - }, - centerText: { - textAlignVertical: 'center', - maxWidth: rpx(400), - }, - sectionHeader: { - paddingHorizontal: rpx(24), - height: rpx(72), - flexDirection: 'row', - alignItems: 'center', - marginTop: rpx(20), - }, - headerContainer: { - height: rpx(80), - }, - headerContentContainer: { - height: rpx(80), - alignItems: 'center', - paddingHorizontal: rpx(24), - }, - headerItemStyle: { - paddingHorizontal: rpx(36), - height: rpx(80), - justifyContent: 'center', - alignItems: 'center', - }, -}); - -function LyricSetting() { - const lyricSetting = Config.useConfig('setting.lyric'); - - const colors = useColors(); - - const autoSearchLyric = createSwitch( - '歌词缺失时自动搜索歌词', - 'setting.lyric.autoSearchLyric', - lyricSetting?.autoSearchLyric ?? false, - ); - - const openStatusBarLyric = createSwitch( - '开启桌面歌词', - 'setting.lyric.showStatusBarLyric', - lyricSetting?.showStatusBarLyric ?? false, - async newValue => { - try { - if (newValue) { - const hasPermission = - await LyricUtil.checkSystemAlertPermission(); - - if (hasPermission) { - LyricUtil.showStatusBarLyric( - LyricManager.getCurrentLyric()?.lrc ?? 'MusicFree', - lyricSetting ?? {}, - ); - Config.set('setting.lyric.showStatusBarLyric', true); - } else { - LyricUtil.requestSystemAlertPermission().finally(() => { - Toast.warn('无悬浮窗权限'); - }); - } - } else { - LyricUtil.hideStatusBarLyric(); - Config.set('setting.lyric.showStatusBarLyric', false); - } - } catch {} - }, - ); - - const alignStatusBarLyric = createRadio( - '对齐方式', - 'setting.lyric.align', - [ - NativeTextAlignment.LEFT, - NativeTextAlignment.CENTER, - NativeTextAlignment.RIGHT, - ], - lyricSetting?.align ?? NativeTextAlignment.CENTER, - { - [NativeTextAlignment.LEFT]: '左对齐', - [NativeTextAlignment.CENTER]: '居中对齐', - [NativeTextAlignment.RIGHT]: '右对齐', - }, - newVal => { - if (lyricSetting?.showStatusBarLyric) { - LyricUtil.setStatusBarLyricAlign(newVal as any); - } - }, - ); - - return ( - - - - {autoSearchLyric.right} - - - - {openStatusBarLyric.right} - - - 左右距离 - { - if (lyricSetting?.showStatusBarLyric) { - LyricUtil.setStatusBarLyricLeft(val); - } - }} - onSlidingComplete={val => { - Config.set('setting.lyric.leftPercent', val); - }} - /> - - - 上下距离 - { - if (lyricSetting?.showStatusBarLyric) { - LyricUtil.setStatusBarLyricTop(val); - } - }} - onSlidingComplete={val => { - Config.set('setting.lyric.topPercent', val); - }} - /> - - - 歌词宽度 - { - if (lyricSetting?.showStatusBarLyric) { - LyricUtil.setStatusBarLyricWidth(val); - } - }} - onSlidingComplete={val => { - Config.set('setting.lyric.widthPercent', val); - }} - /> - - - 字体大小 - { - if (lyricSetting?.showStatusBarLyric) { - LyricUtil.setStatusBarLyricFontSize(val); - } - }} - onSlidingComplete={val => { - Config.set('setting.lyric.fontSize', val); - }} - /> - - - - {alignStatusBarLyric.right} - - { - showPanel('ColorPicker', { - closePanelWhenSelected: true, - defaultColor: lyricSetting?.color ?? 'transparent', - onSelected(color) { - if (lyricSetting?.showStatusBarLyric) { - const colorStr = color.hexa(); - LyricUtil.setStatusBarColors(colorStr, null); - Config.set('setting.lyric.color', colorStr); - } - }, - }); - }}> - - - - { - showPanel('ColorPicker', { - closePanelWhenSelected: true, - defaultColor: - lyricSetting?.backgroundColor ?? 'transparent', - onSelected(color) { - if (lyricSetting?.showStatusBarLyric) { - const colorStr = color.hexa(); - LyricUtil.setStatusBarColors(null, colorStr); - Config.set( - 'setting.lyric.backgroundColor', - colorStr, - ); - } - }, - }); - }}> - - - - - ); -} - -const lyricStyles = StyleSheet.create({ - slider: { - flex: 1, - marginLeft: rpx(24), - }, - sliderContainer: { - height: rpx(96), - width: '100%', - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: rpx(24), - }, -}); +import React, {useCallback, useEffect, useRef, useState} from 'react'; +import {SectionList, StyleSheet, TouchableOpacity, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import Config, {IConfigPaths} from '@/core/config'; +import ListItem from '@/components/base/listItem'; +import ThemeText from '@/components/base/themeText'; +import ThemeSwitch from '@/components/base/switch'; +import {clearCache, getCacheSize, sizeFormatter} from '@/utils/fileUtils'; + +import Toast from '@/utils/toast'; +import pathConst from '@/constants/pathConst'; +import {ROUTE_PATH, useNavigate} from '@/entry/router'; +import {readdir} from 'react-native-fs'; +import {qualityKeys, qualityText} from '@/utils/qualities'; +import {clearLog, getErrorLogContent} from '@/utils/log'; +import {FlatList, ScrollView} from 'react-native-gesture-handler'; +import {showDialog} from '@/components/dialogs/useDialog'; +import {showPanel} from '@/components/panels/usePanel'; +import Paragraph from '@/components/base/paragraph'; +import LyricUtil, {NativeTextAlignment} from '@/native/lyricUtil'; +import Slider from '@react-native-community/slider'; +import useColors from '@/hooks/useColors'; +import ColorBlock from '@/components/base/colorBlock'; +import LyricManager from '@/core/lyricManager'; + +function createSwitch( + title: string, + changeKey: IConfigPaths, + value: boolean, + callback?: (newValue: boolean) => void, +) { + const onPress = () => { + if (callback) { + callback(!value); + } else { + Config.set(changeKey, !value); + } + }; + return { + title, + onPress, + right: , + }; +} + +const createRadio = function ( + title: string, + changeKey: IConfigPaths, + candidates: Array, + value: string | number, + valueMap?: Record, + onChange?: (value: string | number) => void, +) { + const onPress = () => { + showDialog('RadioDialog', { + title, + content: valueMap + ? candidates.map(_ => ({ + key: valueMap[_], + value: _, + })) + : candidates, + onOk(val) { + Config.set(changeKey, val); + onChange?.(val); + }, + }); + }; + return { + title, + right: ( + + {valueMap ? valueMap[value] : value} + + ), + onPress, + }; +}; + +function useCacheSize() { + const [cacheSize, setCacheSize] = useState({ + music: 0, + lyric: 0, + image: 0, + }); + + const refreshCacheSize = useCallback(async () => { + const [musicCache, lyricCache, imageCache] = await Promise.all([ + getCacheSize('music'), + getCacheSize('lyric'), + getCacheSize('image'), + ]); + setCacheSize({ + music: musicCache, + lyric: lyricCache, + image: imageCache, + }); + }, []); + + return [cacheSize, refreshCacheSize] as const; +} + +export default function BasicSetting() { + const basicSetting = Config.useConfig('setting.basic'); + + const navigate = useNavigate(); + + const [cacheSize, refreshCacheSize] = useCacheSize(); + + const sectionListRef = useRef(null); + // const titleListRef = useRef(null); + + useEffect(() => { + refreshCacheSize(); + }, []); + + const basicOptions = [ + { + title: '常规', + data: [ + createRadio( + '历史记录最多保存条数', + 'setting.basic.maxHistoryLen', + [20, 50, 100, 200, 500], + basicSetting?.maxHistoryLen ?? 50, + ), + createRadio( + '打开歌曲详情页时', + 'setting.basic.musicDetailDefault', + ['album', 'lyric'], + basicSetting?.musicDetailDefault ?? 'album', + { + album: '默认展示歌曲封面', + lyric: '默认展示歌词页', + }, + ), + createSwitch( + '处于歌曲详情页时常亮', + 'setting.basic.musicDetailAwake', + basicSetting?.musicDetailAwake ?? false, + ), + createRadio( + '关联歌词方式', + 'setting.basic.associateLyricType', + ['input', 'search'], + basicSetting?.associateLyricType ?? 'search', + { + input: '输入歌曲ID', + search: '搜索歌词', + }, + ), + createSwitch( + '通知栏显示关闭按钮 (重启后生效)', + 'setting.basic.showExitOnNotification', + basicSetting?.showExitOnNotification ?? false, + ), + ], + }, + { + title: '歌单&专辑', + data: [ + createRadio( + '点击搜索结果内单曲时', + 'setting.basic.clickMusicInSearch', + ['播放歌曲', '播放歌曲并替换播放列表'], + basicSetting?.clickMusicInSearch ?? '播放歌曲', + ), + createRadio( + '点击专辑内单曲时', + 'setting.basic.clickMusicInAlbum', + ['播放单曲', '播放专辑'], + basicSetting?.clickMusicInAlbum ?? '播放专辑', + ), + createRadio( + '打开歌曲详情页时', + 'setting.basic.musicDetailDefault', + ['album', 'lyric'], + basicSetting?.musicDetailDefault ?? 'album', + { + album: '默认展示歌曲封面', + lyric: '默认展示歌词页', + }, + ), + createRadio( + '本地歌单添加歌曲顺序', + 'setting.basic.musicOrderInLocalSheet', + ['start', 'end'], + basicSetting?.musicOrderInLocalSheet ?? 'end', + { + start: '添加到歌单开头', + end: '添加到歌单末尾', + }, + ), + ], + }, + { + title: '插件', + data: [ + createSwitch( + '软件启动时自动更新插件', + 'setting.basic.autoUpdatePlugin', + basicSetting?.autoUpdatePlugin ?? false, + ), + createSwitch( + '安装插件时不校验版本', + 'setting.basic.notCheckPluginVersion', + basicSetting?.notCheckPluginVersion ?? false, + ), + ], + }, + { + title: '播放', + data: [ + createSwitch( + '允许与其他应用同时播放', + 'setting.basic.notInterrupt', + basicSetting?.notInterrupt ?? false, + ), + createSwitch( + '软件启动时自动播放歌曲', + 'setting.basic.autoPlayWhenAppStart', + basicSetting?.autoPlayWhenAppStart ?? false, + ), + createSwitch( + '播放失败时尝试更换音源', + 'setting.basic.tryChangeSourceWhenPlayFail', + basicSetting?.tryChangeSourceWhenPlayFail ?? false, + ), + createSwitch( + '播放失败时自动暂停', + 'setting.basic.autoStopWhenError', + basicSetting?.autoStopWhenError ?? false, + ), + createRadio( + '播放被暂时打断时', + 'setting.basic.tempRemoteDuck', + ['暂停', '降低音量'], + basicSetting?.tempRemoteDuck ?? '暂停', + ), + createRadio( + '默认播放音质', + 'setting.basic.defaultPlayQuality', + qualityKeys, + basicSetting?.defaultPlayQuality ?? 'standard', + qualityText, + ), + createRadio( + '默认播放音质缺失时', + 'setting.basic.playQualityOrder', + ['asc', 'desc'], + basicSetting?.playQualityOrder ?? 'asc', + { + asc: '播放更高音质', + desc: '播放更低音质', + }, + ), + ], + }, + { + title: '下载', + data: [ + { + title: '下载路径', + right: ( + + {basicSetting?.downloadPath ?? + pathConst.downloadMusicPath} + + ), + onPress() { + navigate<'file-selector'>(ROUTE_PATH.FILE_SELECTOR, { + fileType: 'folder', + multi: false, + actionText: '选择文件夹', + async onAction(selectedFiles) { + try { + const targetDir = selectedFiles[0]; + await readdir(targetDir.path); + Config.set( + 'setting.basic.downloadPath', + targetDir.path, + ); + return true; + } catch { + Toast.warn('文件夹不存在或无权限'); + return false; + } + }, + }); + }, + }, + createRadio( + '最大同时下载数目', + 'setting.basic.maxDownload', + [1, 3, 5, 7], + basicSetting?.maxDownload ?? 3, + ), + createRadio( + '默认下载音质', + 'setting.basic.defaultDownloadQuality', + qualityKeys, + basicSetting?.defaultDownloadQuality ?? 'standard', + qualityText, + ), + createRadio( + '默认下载音质缺失时', + 'setting.basic.downloadQualityOrder', + ['asc', 'desc'], + basicSetting?.downloadQualityOrder ?? 'asc', + { + asc: '下载更高音质', + desc: '下载更低音质', + }, + ), + ], + }, + { + title: '网络', + data: [ + createSwitch( + '使用移动网络播放', + 'setting.basic.useCelluarNetworkPlay', + basicSetting?.useCelluarNetworkPlay ?? false, + ), + createSwitch( + '使用移动网络下载', + 'setting.basic.useCelluarNetworkDownload', + basicSetting?.useCelluarNetworkDownload ?? false, + ), + ], + }, + { + title: '歌词', + data: [], + footer: , + }, + { + title: '缓存', + data: [ + { + title: '音乐缓存上限', + right: ( + + {basicSetting?.maxCacheSize + ? sizeFormatter(basicSetting.maxCacheSize) + : '512M'} + + ), + onPress() { + showPanel('SimpleInput', { + title: '设置缓存', + placeholder: '输入缓存占用上限,100M-8192M,单位M', + onOk(text, closePanel) { + let val = parseInt(text); + if (val < 100) { + val = 100; + } else if (val > 8192) { + val = 8192; + } + if (val >= 100 && val <= 8192) { + Config.set( + 'setting.basic.maxCacheSize', + val * 1024 * 1024, + ); + closePanel(); + Toast.success('设置成功'); + } + }, + }); + }, + }, + + { + title: '清除音乐缓存', + right: ( + + {sizeFormatter(cacheSize.music)} + + ), + onPress() { + showDialog('SimpleDialog', { + title: '清除音乐缓存', + content: '确定清除音乐缓存吗?', + async onOk() { + await clearCache('music'); + Toast.success('已清除音乐缓存'); + refreshCacheSize(); + }, + }); + }, + }, + { + title: '清除歌词缓存', + right: ( + + {sizeFormatter(cacheSize.lyric)} + + ), + onPress() { + showDialog('SimpleDialog', { + title: '清除歌词缓存', + content: '确定清除歌词缓存吗?', + async onOk() { + await clearCache('lyric'); + Toast.success('已清除歌词缓存'); + refreshCacheSize(); + }, + }); + }, + }, + { + title: '清除图片缓存', + right: ( + + {sizeFormatter(cacheSize.image)} + + ), + onPress() { + showDialog('SimpleDialog', { + title: '清除图片缓存', + content: '确定清除图片缓存吗?', + async onOk() { + await clearCache('image'); + Toast.success('已清除图片缓存'); + refreshCacheSize(); + }, + }); + }, + }, + ], + }, + { + title: '开发选项', + data: [ + createSwitch( + '记录错误日志', + 'setting.basic.debug.errorLog', + basicSetting?.debug?.errorLog ?? false, + ), + createSwitch( + '记录详细日志', + 'setting.basic.debug.traceLog', + basicSetting?.debug?.traceLog ?? false, + ), + createSwitch( + '调试面板', + 'setting.basic.debug.devLog', + basicSetting?.debug?.devLog ?? false, + ), + { + title: '查看错误日志', + right: undefined, + async onPress() { + // 获取日志文件夹 + const errorLogContent = await getErrorLogContent(); + showDialog('SimpleDialog', { + title: '错误日志', + content: ( + + + {errorLogContent || '暂无记录'} + + + ), + }); + }, + }, + { + title: '清空日志', + right: undefined, + async onPress() { + try { + await clearLog(); + Toast.success('日志已清空'); + } catch {} + }, + }, + ], + }, + ]; + + return ( + + it.title)} + renderItem={({item, index}) => ( + { + sectionListRef.current?.scrollToLocation({ + sectionIndex: index, + itemIndex: 0, + }); + }} + activeOpacity={0.7} + style={styles.headerItemStyle}> + {item} + + )} + /> + ( + + + {section.title} + + + )} + ref={sectionListRef} + renderSectionFooter={({section}) => { + return section.footer ?? null; + }} + renderItem={({item}) => { + const Right = item.right; + + return ( + + + {Right} + + ); + }} + /> + + ); +} + +const styles = StyleSheet.create({ + wrapper: { + width: '100%', + paddingBottom: rpx(24), + flex: 1, + }, + centerText: { + textAlignVertical: 'center', + maxWidth: rpx(400), + }, + sectionHeader: { + paddingHorizontal: rpx(24), + height: rpx(72), + flexDirection: 'row', + alignItems: 'center', + marginTop: rpx(20), + }, + headerContainer: { + height: rpx(80), + }, + headerContentContainer: { + height: rpx(80), + alignItems: 'center', + paddingHorizontal: rpx(24), + }, + headerItemStyle: { + paddingHorizontal: rpx(36), + height: rpx(80), + justifyContent: 'center', + alignItems: 'center', + }, +}); + +function LyricSetting() { + const lyricSetting = Config.useConfig('setting.lyric'); + + const colors = useColors(); + + const autoSearchLyric = createSwitch( + '歌词缺失时自动搜索歌词', + 'setting.lyric.autoSearchLyric', + lyricSetting?.autoSearchLyric ?? false, + ); + + const openStatusBarLyric = createSwitch( + '开启桌面歌词', + 'setting.lyric.showStatusBarLyric', + lyricSetting?.showStatusBarLyric ?? false, + async newValue => { + try { + if (newValue) { + const hasPermission = + await LyricUtil.checkSystemAlertPermission(); + + if (hasPermission) { + LyricUtil.showStatusBarLyric( + LyricManager.getCurrentLyric()?.lrc ?? 'MusicFree', + lyricSetting ?? {}, + ); + Config.set('setting.lyric.showStatusBarLyric', true); + } else { + LyricUtil.requestSystemAlertPermission().finally(() => { + Toast.warn('无悬浮窗权限'); + }); + } + } else { + LyricUtil.hideStatusBarLyric(); + Config.set('setting.lyric.showStatusBarLyric', false); + } + } catch {} + }, + ); + + const alignStatusBarLyric = createRadio( + '对齐方式', + 'setting.lyric.align', + [ + NativeTextAlignment.LEFT, + NativeTextAlignment.CENTER, + NativeTextAlignment.RIGHT, + ], + lyricSetting?.align ?? NativeTextAlignment.CENTER, + { + [NativeTextAlignment.LEFT]: '左对齐', + [NativeTextAlignment.CENTER]: '居中对齐', + [NativeTextAlignment.RIGHT]: '右对齐', + }, + newVal => { + if (lyricSetting?.showStatusBarLyric) { + LyricUtil.setStatusBarLyricAlign(newVal as any); + } + }, + ); + + return ( + + + + {autoSearchLyric.right} + + + + {openStatusBarLyric.right} + + + 左右距离 + { + if (lyricSetting?.showStatusBarLyric) { + LyricUtil.setStatusBarLyricLeft(val); + } + }} + onSlidingComplete={val => { + Config.set('setting.lyric.leftPercent', val); + }} + /> + + + 上下距离 + { + if (lyricSetting?.showStatusBarLyric) { + LyricUtil.setStatusBarLyricTop(val); + } + }} + onSlidingComplete={val => { + Config.set('setting.lyric.topPercent', val); + }} + /> + + + 歌词宽度 + { + if (lyricSetting?.showStatusBarLyric) { + LyricUtil.setStatusBarLyricWidth(val); + } + }} + onSlidingComplete={val => { + Config.set('setting.lyric.widthPercent', val); + }} + /> + + + 字体大小 + { + if (lyricSetting?.showStatusBarLyric) { + LyricUtil.setStatusBarLyricFontSize(val); + } + }} + onSlidingComplete={val => { + Config.set('setting.lyric.fontSize', val); + }} + /> + + + + {alignStatusBarLyric.right} + + { + showPanel('ColorPicker', { + closePanelWhenSelected: true, + defaultColor: lyricSetting?.color ?? 'transparent', + onSelected(color) { + if (lyricSetting?.showStatusBarLyric) { + const colorStr = color.hexa(); + LyricUtil.setStatusBarColors(colorStr, null); + Config.set('setting.lyric.color', colorStr); + } + }, + }); + }}> + + + + { + showPanel('ColorPicker', { + closePanelWhenSelected: true, + defaultColor: + lyricSetting?.backgroundColor ?? 'transparent', + onSelected(color) { + if (lyricSetting?.showStatusBarLyric) { + const colorStr = color.hexa(); + LyricUtil.setStatusBarColors(null, colorStr); + Config.set( + 'setting.lyric.backgroundColor', + colorStr, + ); + } + }, + }); + }}> + + + + + ); +} + +const lyricStyles = StyleSheet.create({ + slider: { + flex: 1, + marginLeft: rpx(24), + }, + sliderContainer: { + height: rpx(96), + width: '100%', + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: rpx(24), + }, +}); diff --git a/src/pages/setting/settingTypes/pluginSetting/components/pluginItem.tsx b/src/pages/setting/settingTypes/pluginSetting/components/pluginItem.tsx index 6a562c9e..f162d36b 100644 --- a/src/pages/setting/settingTypes/pluginSetting/components/pluginItem.tsx +++ b/src/pages/setting/settingTypes/pluginSetting/components/pluginItem.tsx @@ -1,288 +1,296 @@ -import React from 'react'; - -import useColors from '@/hooks/useColors'; -import PluginManager, {Plugin} from '@/core/pluginManager'; - -import Toast from '@/utils/toast'; -import Clipboard from '@react-native-clipboard/clipboard'; -import {showDialog} from '@/components/dialogs/useDialog'; -import {showPanel} from '@/components/panels/usePanel'; -import rpx from '@/utils/rpx'; -import {StyleSheet, View} from 'react-native'; -import ThemeText from '@/components/base/themeText'; -import IconTextButton from '@/components/base/iconTextButton'; -import {PluginMeta} from '@/core/pluginMeta'; -import ThemeSwitch from '@/components/base/switch'; - -interface IPluginItemProps { - plugin: Plugin; -} - -export default function PluginItem(props: IPluginItemProps) { - const {plugin} = props; - const colors = useColors(); - - const options = [ - { - title: '更新插件', - icon: 'update', - async onPress() { - try { - await PluginManager.updatePlugin(plugin); - Toast.success('已更新到最新版本'); - } catch (e: any) { - Toast.warn(e?.message ?? '更新失败'); - } - }, - show: !!plugin.instance.srcUrl, - }, - { - title: '分享插件', - icon: 'share', - async onPress() { - try { - Clipboard.setString(plugin.instance.srcUrl!); - Toast.success('已复制到剪切板'); - } catch (e: any) { - Toast.warn(e?.message ?? '分享失败'); - } - }, - show: !!plugin.instance.srcUrl, - }, - { - title: '卸载插件', - icon: 'trash-can-outline', - show: true, - onPress() { - showDialog('SimpleDialog', { - title: '卸载插件', - content: `确认卸载插件「${plugin.name}」吗`, - async onOk() { - try { - await PluginManager.uninstallPlugin(plugin.hash); - Toast.success('卸载成功~'); - } catch { - Toast.warn('卸载失败'); - } - }, - }); - }, - }, - { - title: '导入单曲', - icon: 'import', - onPress() { - showPanel('SimpleInput', { - title: '导入单曲', - placeholder: '输入目标歌曲', - hints: plugin.instance.hints?.importMusicItem, - maxLength: 1000, - async onOk(text) { - const result = await plugin.methods.importMusicItem( - text, - ); - if (result) { - showDialog('SimpleDialog', { - title: '准备导入', - content: `发现歌曲 ${result.title} ! 现在开始导入吗?`, - onOk() { - showPanel('AddToMusicSheet', { - musicItem: result, - newSheetDefaultName: `${plugin.name}导入歌曲`, - }); - }, - }); - } else { - Toast.warn('无法导入~'); - } - }, - }); - }, - show: !!plugin.instance.importMusicItem, - }, - { - title: '导入歌单', - icon: 'database-import-outline', - onPress() { - showPanel('SimpleInput', { - title: '导入歌单', - placeholder: '输入目标歌单', - hints: plugin.instance.hints?.importMusicSheet, - maxLength: 1000, - async onOk(text, closePanel) { - Toast.success('正在导入中...'); - closePanel(); - const result = await plugin.methods.importMusicSheet( - text, - ); - if (result.length > 0) { - showDialog('SimpleDialog', { - title: '准备导入', - content: `发现${result.length}首歌曲! 现在开始导入吗?`, - onOk() { - showPanel('AddToMusicSheet', { - musicItem: result, - }); - }, - }); - } else { - Toast.warn('链接有误或目标歌单为空'); - } - }, - }); - }, - show: !!plugin.instance.importMusicSheet, - }, - { - title: '用户变量', - icon: 'application-variable-outline', - onPress() { - if (Array.isArray(plugin.instance.userVariables)) { - showPanel('SetUserVariables', { - async onOk(newValue, closePanel) { - await PluginMeta.setPluginMetaProp( - plugin, - 'userVariables', - newValue, - ); - Toast.success('设置成功~'); - closePanel(); - }, - variables: plugin.instance.userVariables, - initValues: - PluginMeta.getPluginMeta(plugin)?.userVariables, - }); - } - }, - show: Array.isArray(plugin.instance.userVariables), - }, - ]; - - return ( - - - - {plugin.name} - - { - PluginManager.setPluginEnabled(plugin, val); - }} - /> - - - - 版本号: {plugin.instance.version} - - {plugin.instance.author ? ( - - 作者: {plugin.instance.author} - - ) : null} - - - {options.map((it, index) => - it.show !== false ? ( - - {it.title} - - ) : null, - )} - - - // - // {options.map(_ => - // _.show ? ( - // - // - // - // - // ) : null, - // )} - // - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - borderRadius: rpx(8), - marginHorizontal: rpx(24), - paddingTop: rpx(18), - marginTop: rpx(36), - }, - header: { - paddingHorizontal: rpx(16), - flexDirection: 'row', - alignItems: 'center', - }, - headerPluginName: { - flexShrink: 1, - flexGrow: 1, - }, - author: { - marginLeft: rpx(24), - flexShrink: 1, - flexGrow: 1, - }, - description: { - marginHorizontal: rpx(16), - marginVertical: rpx(24), - flexDirection: 'row', - }, - contents: { - flexDirection: 'row', - justifyContent: 'space-between', - flexWrap: 'wrap', - }, -}); +import React from 'react'; + +import useColors from '@/hooks/useColors'; +import PluginManager, {Plugin} from '@/core/pluginManager'; + +import Toast from '@/utils/toast'; +import Clipboard from '@react-native-clipboard/clipboard'; +import {showDialog} from '@/components/dialogs/useDialog'; +import {showPanel} from '@/components/panels/usePanel'; +import rpx from '@/utils/rpx'; +import {StyleSheet, View} from 'react-native'; +import ThemeText from '@/components/base/themeText'; +import IconTextButton from '@/components/base/iconTextButton'; +import {PluginMeta} from '@/core/pluginMeta'; +import ThemeSwitch from '@/components/base/switch'; +import {IIconName} from '@/components/base/icon.tsx'; + +interface IPluginItemProps { + plugin: Plugin; +} + +interface IOption { + title: string; + icon: IIconName; + onPress?: () => void; + show?: boolean; +} + +export default function PluginItem(props: IPluginItemProps) { + const {plugin} = props; + const colors = useColors(); + + const options: IOption[] = [ + { + title: '更新插件', + icon: 'arrow-path', + async onPress() { + try { + await PluginManager.updatePlugin(plugin); + Toast.success('已更新到最新版本'); + } catch (e: any) { + Toast.warn(e?.message ?? '更新失败'); + } + }, + show: !!plugin.instance.srcUrl, + }, + { + title: '分享插件', + icon: 'share', + async onPress() { + try { + Clipboard.setString(plugin.instance.srcUrl!); + Toast.success('已复制到剪切板'); + } catch (e: any) { + Toast.warn(e?.message ?? '分享失败'); + } + }, + show: !!plugin.instance.srcUrl, + }, + { + title: '卸载插件', + icon: 'trash-outline', + show: true, + onPress() { + showDialog('SimpleDialog', { + title: '卸载插件', + content: `确认卸载插件「${plugin.name}」吗`, + async onOk() { + try { + await PluginManager.uninstallPlugin(plugin.hash); + Toast.success('卸载成功~'); + } catch { + Toast.warn('卸载失败'); + } + }, + }); + }, + }, + { + title: '导入单曲', + icon: 'arrow-right-end-on-rectangle', + onPress() { + showPanel('SimpleInput', { + title: '导入单曲', + placeholder: '输入目标歌曲', + hints: plugin.instance.hints?.importMusicItem, + maxLength: 1000, + async onOk(text) { + const result = await plugin.methods.importMusicItem( + text, + ); + if (result) { + showDialog('SimpleDialog', { + title: '准备导入', + content: `发现歌曲 ${result.title} ! 现在开始导入吗?`, + onOk() { + showPanel('AddToMusicSheet', { + musicItem: result, + newSheetDefaultName: `${plugin.name}导入歌曲`, + }); + }, + }); + } else { + Toast.warn('无法导入~'); + } + }, + }); + }, + show: !!plugin.instance.importMusicItem, + }, + { + title: '导入歌单', + icon: 'arrow-right-end-on-rectangle', + onPress() { + showPanel('SimpleInput', { + title: '导入歌单', + placeholder: '输入目标歌单', + hints: plugin.instance.hints?.importMusicSheet, + maxLength: 1000, + async onOk(text, closePanel) { + Toast.success('正在导入中...'); + closePanel(); + const result = await plugin.methods.importMusicSheet( + text, + ); + if (result.length > 0) { + showDialog('SimpleDialog', { + title: '准备导入', + content: `发现${result.length}首歌曲! 现在开始导入吗?`, + onOk() { + showPanel('AddToMusicSheet', { + musicItem: result, + }); + }, + }); + } else { + Toast.warn('链接有误或目标歌单为空'); + } + }, + }); + }, + show: !!plugin.instance.importMusicSheet, + }, + { + title: '用户变量', + icon: 'code-bracket-square', + onPress() { + if (Array.isArray(plugin.instance.userVariables)) { + showPanel('SetUserVariables', { + async onOk(newValue, closePanel) { + await PluginMeta.setPluginMetaProp( + plugin, + 'userVariables', + newValue, + ); + Toast.success('设置成功~'); + closePanel(); + }, + variables: plugin.instance.userVariables, + initValues: + PluginMeta.getPluginMeta(plugin)?.userVariables, + }); + } + }, + show: Array.isArray(plugin.instance.userVariables), + }, + ]; + + return ( + + + + {plugin.name} + + { + PluginManager.setPluginEnabled(plugin, val); + }} + /> + + + + 版本号: {plugin.instance.version} + + {plugin.instance.author ? ( + + 作者: {plugin.instance.author} + + ) : null} + + + {options.map((it, index) => + it.show !== false ? ( + + {it.title} + + ) : null, + )} + + + // + // {options.map(_ => + // _.show ? ( + // + // + // + // + // ) : null, + // )} + // + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + borderRadius: rpx(8), + marginHorizontal: rpx(24), + paddingTop: rpx(18), + marginTop: rpx(36), + }, + header: { + paddingHorizontal: rpx(16), + flexDirection: 'row', + alignItems: 'center', + }, + headerPluginName: { + flexShrink: 1, + flexGrow: 1, + }, + author: { + marginLeft: rpx(24), + flexShrink: 1, + flexGrow: 1, + }, + description: { + marginHorizontal: rpx(16), + marginVertical: rpx(24), + flexDirection: 'row', + }, + contents: { + flexDirection: 'row', + justifyContent: 'space-between', + flexWrap: 'wrap', + }, +}); diff --git a/src/pages/setting/settingTypes/pluginSetting/views/pluginList.tsx b/src/pages/setting/settingTypes/pluginSetting/views/pluginList.tsx index 819b1574..67e4f622 100644 --- a/src/pages/setting/settingTypes/pluginSetting/views/pluginList.tsx +++ b/src/pages/setting/settingTypes/pluginSetting/views/pluginList.tsx @@ -1,300 +1,309 @@ -import React, {useState} from 'react'; -import {FlatList, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import DocumentPicker from 'react-native-document-picker'; -import Loading from '@/components/base/loading'; - -import PluginManager from '@/core/pluginManager'; -import {trace} from '@/utils/log'; - -import Toast from '@/utils/toast'; -import axios from 'axios'; -import {useNavigation} from '@react-navigation/native'; -import Config from '@/core/config'; -import Empty from '@/components/base/empty'; -import HorizonalSafeAreaView from '@/components/base/horizonalSafeAreaView'; -import {showDialog} from '@/components/dialogs/useDialog'; -import {showPanel} from '@/components/panels/usePanel'; -import AppBar from '@/components/base/appBar'; -import Fab from '@/components/base/fab'; -import PluginItem from '../components/pluginItem'; - -export default function PluginList() { - const plugins = PluginManager.useSortedPlugins(); - const [loading, setLoading] = useState(false); - - const navigator = useNavigation(); - - const menuOptions = [ - { - icon: 'book-plus-multiple-outline', - title: '订阅设置', - async onPress() { - navigator.navigate('/pluginsetting/subscribe'); - }, - }, - { - icon: 'menu', - title: '插件排序', - onPress() { - navigator.navigate('/pluginsetting/sort'); - }, - }, - { - icon: 'trash-can-outline', - title: '卸载全部插件', - onPress() { - showDialog('SimpleDialog', { - title: '卸载插件', - content: '确认卸载全部插件吗?此操作不可恢复!', - async onOk() { - setLoading(true); - await PluginManager.uninstallAllPlugins(); - setLoading(false); - }, - }); - }, - }, - ]; - - async function onInstallFromLocalClick() { - try { - const result = await DocumentPicker.pickMultiple(); - setLoading(true); - // 初步过滤 - const validResult = result?.filter( - _ => _.uri.endsWith('.js') || _.name?.endsWith('.js'), - ); - await Promise.all( - validResult.map(_ => PluginManager.installPlugin(_.uri)), - ); - if (validResult.length) { - Toast.success('插件安装成功~'); - } else { - Toast.warn('安装失败'); - } - } catch (e: any) { - if (e?.message?.startsWith('User')) { - setLoading(false); - return; - } - trace('插件安装失败', e?.message); - Toast.warn(`插件安装失败: ${e?.message ?? ''}`); - } - setLoading(false); - } - - async function onInstallFromNetworkClick() { - showPanel('SimpleInput', { - title: '安装插件', - placeholder: '输入插件URL', - maxLength: 120, - async onOk(text, closePanel) { - setLoading(true); - closePanel(); - - const result = await installPluginFromUrl(text.trim()); - - if (result?.code === 'success') { - Toast.success('插件安装成功'); - } else { - Toast.warn(`部分插件安装失败: ${result.message ?? ''}`); - } - setLoading(false); - }, - }); - } - - async function onSubscribeClick() { - const urls = Config.get('setting.plugin.subscribeUrl'); - if (!urls) { - Toast.warn('暂无订阅'); - } - setLoading(true); - try { - const urlItems = JSON.parse(urls!); - let code = 'success'; - if (Array.isArray(urlItems)) { - for (let i = 0; i < urlItems.length; ++i) { - const result = await installPluginFromUrl(urlItems[i].url); - if (result.code === 'fail') { - code = result.message ?? 'fail'; - } - } - } else { - throw new Error(); - } - if (code !== 'success') { - Toast.warn(`部分插件安装失败: ${code ?? ''}`); - } else { - Toast.success('插件安装成功'); - } - } catch { - if (urls?.length) { - const result = await installPluginFromUrl(urls); - if (result.code === 'success') { - Toast.success('插件安装成功'); - } else { - Toast.warn(`部分插件安装失败: ${result.message ?? ''}`); - } - } else { - Toast.warn('订阅无效'); - } - } - setLoading(false); - } - - async function onUpdateAllClick() { - const plugins = PluginManager.getValidPlugins(); - setLoading(true); - try { - let code = 'success'; - for (let i = 0; i < plugins.length; ++i) { - const srcUrl = plugins[i].instance.srcUrl; - if (srcUrl) { - const result = await installPluginFromUrl(srcUrl); - if (result.code === 'fail') { - code = result.message ?? 'fail'; - } - } - } - - if (code !== 'success') { - Toast.warn(`部分插件安装失败: ${code ?? ''}`); - } else { - Toast.success('插件更新成功'); - } - } catch (e: any) { - Toast.warn(`出现未知错误: ${e.message ?? e}`); - } - setLoading(false); - } - - return ( - <> - 插件管理 - - <> - {loading ? ( - - ) : ( - } - data={plugins ?? []} - keyExtractor={_ => _.hash} - renderItem={({item: plugin}) => ( - - )} - /> - )} - - { - showPanel('SimpleSelect', { - header: '安装插件', - candidates: [ - { - value: '从本地安装插件', - }, - { - value: '从网络安装插件', - }, - { - value: '更新全部插件', - }, - { - value: '更新订阅', - }, - ], - onPress(item) { - if (item.value === '从本地安装插件') { - onInstallFromLocalClick(); - } else if ( - item.value === '从网络安装插件' - ) { - onInstallFromNetworkClick(); - } else if (item.value === '更新订阅') { - onSubscribeClick(); - } else if (item.value === '更新全部插件') { - onUpdateAllClick(); - } - }, - }); - }} - /> - - - - ); -} - -const style = StyleSheet.create({ - wrapper: { - width: '100%', - flex: 1, - }, - blank: { - height: rpx(200), - }, -}); - -interface IInstallResult { - code: 'success' | 'fail'; - message?: string; -} - -const reqHeaders = { - 'Cache-Control': 'no-cache', - Pragma: 'no-cache', - Expires: '0', -}; - -async function installPluginFromUrl(text: string): Promise { - try { - let urls: string[] = []; - const iptUrl = text.trim(); - if (text.endsWith('.json')) { - const jsonFile = ( - await axios.get(iptUrl, { - headers: reqHeaders, - }) - ).data; - /** - * { - * plugins: [{ - * version: xxx, - * url: xxx - * }] - * } - */ - urls = (jsonFile?.plugins ?? []).map((_: any) => _.url); - } else { - urls = [iptUrl]; - } - const failedPlugins: Array = []; - await Promise.all( - urls.map(url => - PluginManager.installPluginFromUrl(url, { - notCheckVersion: Config.get( - 'setting.basic.notCheckPluginVersion', - ), - }).catch(e => { - failedPlugins.push(e?.message ?? ''); - }), - ), - ); - if (failedPlugins.length) { - throw new Error(failedPlugins.join('\n')); - } - return { - code: 'success', - }; - } catch (e: any) { - return { - code: 'fail', - message: e?.message, - }; - } -} +import React, {useState} from 'react'; +import {FlatList, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import DocumentPicker from 'react-native-document-picker'; +import Loading from '@/components/base/loading'; + +import PluginManager from '@/core/pluginManager'; +import {trace} from '@/utils/log'; + +import Toast from '@/utils/toast'; +import axios from 'axios'; +import {useNavigation} from '@react-navigation/native'; +import Config from '@/core/config'; +import Empty from '@/components/base/empty'; +import HorizonalSafeAreaView from '@/components/base/horizonalSafeAreaView'; +import {showDialog} from '@/components/dialogs/useDialog'; +import {showPanel} from '@/components/panels/usePanel'; +import AppBar from '@/components/base/appBar'; +import Fab from '@/components/base/fab'; +import PluginItem from '../components/pluginItem'; +import {IIconName} from '@/components/base/icon.tsx'; + +interface IOption { + icon: IIconName; + title: string; + onPress?: () => void; +} + +export default function PluginList() { + const plugins = PluginManager.useSortedPlugins(); + const [loading, setLoading] = useState(false); + + const navigator = useNavigation(); + + const menuOptions: IOption[] = [ + { + icon: 'bookmark-square', + title: '订阅设置', + async onPress() { + navigator.navigate('/pluginsetting/subscribe'); + }, + }, + { + icon: 'bars-3', + title: '插件排序', + onPress() { + navigator.navigate('/pluginsetting/sort'); + }, + }, + { + icon: 'trash-outline', + title: '卸载全部插件', + onPress() { + showDialog('SimpleDialog', { + title: '卸载插件', + content: '确认卸载全部插件吗?此操作不可恢复!', + async onOk() { + setLoading(true); + await PluginManager.uninstallAllPlugins(); + setLoading(false); + }, + }); + }, + }, + ]; + + async function onInstallFromLocalClick() { + try { + const result = await DocumentPicker.pick({ + allowMultiSelection: true, + }); + setLoading(true); + // 初步过滤 + const validResult = result?.filter( + it => it.uri.endsWith('.js') || it.name?.endsWith('.js'), + ); + await Promise.all( + validResult.map(_ => PluginManager.installPlugin(_.uri)), + ); + if (validResult.length) { + Toast.success('插件安装成功~'); + } else { + Toast.warn('安装失败'); + } + } catch (e: any) { + if (e?.message?.startsWith('User')) { + setLoading(false); + return; + } + trace('插件安装失败', e?.message); + Toast.warn(`插件安装失败: ${e?.message ?? ''}`); + } + setLoading(false); + } + + async function onInstallFromNetworkClick() { + showPanel('SimpleInput', { + title: '安装插件', + placeholder: '输入插件URL', + maxLength: 120, + async onOk(text, closePanel) { + setLoading(true); + closePanel(); + + const result = await installPluginFromUrl(text.trim()); + + if (result?.code === 'success') { + Toast.success('插件安装成功'); + } else { + Toast.warn(`部分插件安装失败: ${result.message ?? ''}`); + } + setLoading(false); + }, + }); + } + + async function onSubscribeClick() { + const urls = Config.get('setting.plugin.subscribeUrl'); + if (!urls) { + Toast.warn('暂无订阅'); + } + setLoading(true); + try { + const urlItems = JSON.parse(urls!); + let code = 'success'; + if (Array.isArray(urlItems)) { + for (let i = 0; i < urlItems.length; ++i) { + const result = await installPluginFromUrl(urlItems[i].url); + if (result.code === 'fail') { + code = result.message ?? 'fail'; + } + } + } else { + throw new Error(); + } + if (code !== 'success') { + Toast.warn(`部分插件安装失败: ${code ?? ''}`); + } else { + Toast.success('插件安装成功'); + } + } catch { + if (urls?.length) { + const result = await installPluginFromUrl(urls); + if (result.code === 'success') { + Toast.success('插件安装成功'); + } else { + Toast.warn(`部分插件安装失败: ${result.message ?? ''}`); + } + } else { + Toast.warn('订阅无效'); + } + } + setLoading(false); + } + + async function onUpdateAllClick() { + const plugins = PluginManager.getValidPlugins(); + setLoading(true); + try { + let code = 'success'; + for (let i = 0; i < plugins.length; ++i) { + const srcUrl = plugins[i].instance.srcUrl; + if (srcUrl) { + const result = await installPluginFromUrl(srcUrl); + if (result.code === 'fail') { + code = result.message ?? 'fail'; + } + } + } + + if (code !== 'success') { + Toast.warn(`部分插件安装失败: ${code ?? ''}`); + } else { + Toast.success('插件更新成功'); + } + } catch (e: any) { + Toast.warn(`出现未知错误: ${e.message ?? e}`); + } + setLoading(false); + } + + return ( + <> + 插件管理 + + <> + {loading ? ( + + ) : ( + } + data={plugins ?? []} + keyExtractor={_ => _.hash} + renderItem={({item: plugin}) => ( + + )} + /> + )} + + { + showPanel('SimpleSelect', { + header: '安装插件', + candidates: [ + { + value: '从本地安装插件', + }, + { + value: '从网络安装插件', + }, + { + value: '更新全部插件', + }, + { + value: '更新订阅', + }, + ], + onPress(item) { + if (item.value === '从本地安装插件') { + onInstallFromLocalClick(); + } else if ( + item.value === '从网络安装插件' + ) { + onInstallFromNetworkClick(); + } else if (item.value === '更新订阅') { + onSubscribeClick(); + } else if (item.value === '更新全部插件') { + onUpdateAllClick(); + } + }, + }); + }} + /> + + + + ); +} + +const style = StyleSheet.create({ + wrapper: { + width: '100%', + flex: 1, + }, + blank: { + height: rpx(200), + }, +}); + +interface IInstallResult { + code: 'success' | 'fail'; + message?: string; +} + +const reqHeaders = { + 'Cache-Control': 'no-cache', + Pragma: 'no-cache', + Expires: '0', +}; + +async function installPluginFromUrl(text: string): Promise { + try { + let urls: string[] = []; + const iptUrl = text.trim(); + if (text.endsWith('.json')) { + const jsonFile = ( + await axios.get(iptUrl, { + headers: reqHeaders, + }) + ).data; + /** + * { + * plugins: [{ + * version: xxx, + * url: xxx + * }] + * } + */ + urls = (jsonFile?.plugins ?? []).map((_: any) => _.url); + } else { + urls = [iptUrl]; + } + const failedPlugins: Array = []; + await Promise.all( + urls.map(url => + PluginManager.installPluginFromUrl(url, { + notCheckVersion: Config.get( + 'setting.basic.notCheckPluginVersion', + ), + }).catch(e => { + failedPlugins.push(e?.message ?? ''); + }), + ), + ); + if (failedPlugins.length) { + throw new Error(failedPlugins.join('\n')); + } + return { + code: 'success', + }; + } catch (e: any) { + return { + code: 'fail', + message: e?.message, + }; + } +} diff --git a/src/pages/setting/settingTypes/pluginSetting/views/pluginSort.tsx b/src/pages/setting/settingTypes/pluginSetting/views/pluginSort.tsx index 6f59edab..09dcacb4 100644 --- a/src/pages/setting/settingTypes/pluginSetting/views/pluginSort.tsx +++ b/src/pages/setting/settingTypes/pluginSetting/views/pluginSort.tsx @@ -1,9 +1,9 @@ -import {View, TouchableOpacity, StyleSheet, StatusBar} from 'react-native'; +import {StatusBar, StyleSheet, TouchableOpacity, View} from 'react-native'; import React, {useState} from 'react'; import SortableFlatList from '@/components/base/SortableFlatList'; import ThemeText from '@/components/base/themeText'; import {PluginMeta} from '@/core/pluginMeta'; -import produce from 'immer'; +import {produce} from 'immer'; import objectPath from 'object-path'; import rpx from '@/utils/rpx'; import PluginManager, {Plugin} from '@/core/pluginManager'; diff --git a/src/pages/setting/settingTypes/pluginSetting/views/pluginSubscribe.tsx b/src/pages/setting/settingTypes/pluginSetting/views/pluginSubscribe.tsx index d25b0696..73b409f3 100644 --- a/src/pages/setting/settingTypes/pluginSetting/views/pluginSubscribe.tsx +++ b/src/pages/setting/settingTypes/pluginSetting/views/pluginSubscribe.tsx @@ -87,7 +87,7 @@ export default function PluginSubscribe() { renderItem={({item, index}) => { return ( { showDialog('SubscribePluginDialog', { subscribeItem: item, diff --git a/src/pages/setting/settingTypes/themeSetting/mode.tsx b/src/pages/setting/settingTypes/themeSetting/mode.tsx index 676f1184..e8b41e56 100644 --- a/src/pages/setting/settingTypes/themeSetting/mode.tsx +++ b/src/pages/setting/settingTypes/themeSetting/mode.tsx @@ -1,61 +1,61 @@ -import React from 'react'; -import {Appearance, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; -import ThemeText from '@/components/base/themeText'; -import ListItem from '@/components/base/listItem'; -import ThemeSwitch from '@/components/base/switch'; -import Config from '@/core/config'; -import Theme from '@/core/theme'; - -export default function Mode() { - const mode = Config.useConfig('setting.theme.followSystem') ?? false; - return ( - - - 显示样式 - - - - - - 跟随系统深色设置 - { - if (e) { - const colorScheme = - Appearance.getColorScheme(); - if (colorScheme === 'dark') { - Theme.setTheme('p-dark'); - } else if (colorScheme === 'light') { - Theme.setTheme('p-light'); - } - } - Config.set('setting.theme.followSystem', e); - }} - /> - - - - - - ); -} - -const styles = StyleSheet.create({ - header: { - paddingLeft: rpx(24), - marginTop: rpx(36), - }, - sectionWrapper: { - marginTop: rpx(24), - }, - itemRow: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - }, -}); +import React from 'react'; +import {Appearance, StyleSheet, View} from 'react-native'; +import rpx from '@/utils/rpx'; +import ThemeText from '@/components/base/themeText'; +import ListItem from '@/components/base/listItem'; +import ThemeSwitch from '@/components/base/switch'; +import Config from '@/core/config'; +import Theme from '@/core/theme'; + +export default function Mode() { + const mode = Config.useConfig('setting.theme.followSystem') ?? false; + return ( + + + 显示样式 + + + + + + 跟随系统深色设置 + { + if (e) { + const colorScheme = + Appearance.getColorScheme(); + if (colorScheme === 'dark') { + Theme.setTheme('p-dark'); + } else if (colorScheme === 'light') { + Theme.setTheme('p-light'); + } + } + Config.set('setting.theme.followSystem', e); + }} + /> + + + + + + ); +} + +const styles = StyleSheet.create({ + header: { + paddingLeft: rpx(24), + marginTop: rpx(36), + }, + sectionWrapper: { + marginTop: rpx(24), + }, + itemRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, +}); diff --git a/src/pages/sheetDetail/components/navBar.tsx b/src/pages/sheetDetail/components/navBar.tsx index 8bb6fbe8..87a378b4 100644 --- a/src/pages/sheetDetail/components/navBar.tsx +++ b/src/pages/sheetDetail/components/navBar.tsx @@ -1,114 +1,114 @@ -import React from 'react'; -import {useNavigation} from '@react-navigation/native'; -import MusicSheet from '@/core/musicSheet'; -import {ROUTE_PATH, useParams} from '@/entry/router'; -import Toast from '@/utils/toast'; -import {showDialog} from '@/components/dialogs/useDialog'; -import AppBar from '@/components/base/appBar'; - -export default function () { - const navigation = useNavigation(); - const {id = 'favorite'} = useParams<'local-sheet-detail'>(); - const musicSheet = MusicSheet.useSheets(id); - - return ( - <> - { - await MusicSheet.removeSheet(id); - Toast.success('已删除'); - navigation.goBack(); - }, - }); - }, - }, - { - icon: 'playlist-edit', - title: '批量编辑', - onPress() { - navigation.navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { - musicList: musicSheet.musicList, - musicSheet: musicSheet, - }); - }, - }, - { - icon: 'square-edit-outline', - title: '编辑歌单信息', - onPress() { - showDialog('EditSheetDetailDialog', { - musicSheet: musicSheet, - }); - }, - }, - { - icon: 'sort', - title: '排序', - onPress() { - showDialog('RadioDialog', { - content: [ - { - value: 'random', - key: '随机顺序', - }, - { - value: 'a2z', - key: '歌曲名A-Z', - }, - { - value: 'z2a', - key: '歌曲名Z-A', - }, - { - value: 'arta2z', - key: '作者名A-Z', - }, - { - value: 'artz2a', - key: '作者名Z-A', - }, - { - value: 'time', - key: '加入歌单时间', - }, - { - value: 'time-rev', - key: '加入歌单时间(逆序)', - }, - ], - title: '排序', - async onOk(value) { - MusicSheet.sortMusicList( - value as any, - musicSheet, - ); - }, - }); - }, - }, - ]} - actions={[ - { - icon: 'magnify', - onPress() { - navigation.navigate(ROUTE_PATH.SEARCH_MUSIC_LIST, { - musicList: musicSheet?.musicList, - musicSheet: musicSheet, - }); - }, - }, - ]}> - 歌单 - - - ); -} +import React from 'react'; +import {useNavigation} from '@react-navigation/native'; +import MusicSheet from '@/core/musicSheet'; +import {ROUTE_PATH, useParams} from '@/entry/router'; +import Toast from '@/utils/toast'; +import {showDialog} from '@/components/dialogs/useDialog'; +import AppBar from '@/components/base/appBar'; + +export default function () { + const navigation = useNavigation(); + const {id = 'favorite'} = useParams<'local-sheet-detail'>(); + const musicSheet = MusicSheet.useSheets(id); + + return ( + <> + { + await MusicSheet.removeSheet(id); + Toast.success('已删除'); + navigation.goBack(); + }, + }); + }, + }, + { + icon: 'pencil-square', + title: '批量编辑', + onPress() { + navigation.navigate(ROUTE_PATH.MUSIC_LIST_EDITOR, { + musicList: musicSheet.musicList, + musicSheet: musicSheet, + }); + }, + }, + { + icon: 'pencil-outline', + title: '编辑歌单信息', + onPress() { + showDialog('EditSheetDetailDialog', { + musicSheet: musicSheet, + }); + }, + }, + { + icon: 'sort-outline', + title: '排序', + onPress() { + showDialog('RadioDialog', { + content: [ + { + value: 'random', + key: '随机顺序', + }, + { + value: 'a2z', + key: '歌曲名A-Z', + }, + { + value: 'z2a', + key: '歌曲名Z-A', + }, + { + value: 'arta2z', + key: '作者名A-Z', + }, + { + value: 'artz2a', + key: '作者名Z-A', + }, + { + value: 'time', + key: '加入歌单时间', + }, + { + value: 'time-rev', + key: '加入歌单时间(逆序)', + }, + ], + title: '排序', + async onOk(value) { + MusicSheet.sortMusicList( + value as any, + musicSheet, + ); + }, + }); + }, + }, + ]} + actions={[ + { + icon: 'magnifying-glass', + onPress() { + navigation.navigate(ROUTE_PATH.SEARCH_MUSIC_LIST, { + musicList: musicSheet?.musicList, + musicSheet: musicSheet, + }); + }, + }, + ]}> + 歌单 + + + ); +} diff --git a/src/pages/topList/components/boardPanel.tsx b/src/pages/topList/components/boardPanel.tsx index 6794cdd1..e7155a97 100644 --- a/src/pages/topList/components/boardPanel.tsx +++ b/src/pages/topList/components/boardPanel.tsx @@ -15,12 +15,12 @@ interface IBoardPanelProps { function BoardPanel(props: IBoardPanelProps) { const {hash, topListData} = props ?? {}; - const renderItem: SectionListProps['renderItem'] = + const renderItem: SectionListProps['renderItem'] = ({item}) => { return ; }; - const renderSectionHeader: SectionListProps['renderSectionHeader'] = + const renderSectionHeader: SectionListProps['renderSectionHeader'] = ({section: {title}}) => { return ( @@ -38,7 +38,7 @@ function BoardPanel(props: IBoardPanelProps) { renderItem={renderItem} renderSectionHeader={renderSectionHeader} ListEmptyComponent={} - sections={topListData.data ?? []} + sections={topListData?.data || []} /> ); } diff --git a/src/pages/topList/components/topListBody.tsx b/src/pages/topList/components/topListBody.tsx index 6c5b2ad4..dd5dad5e 100644 --- a/src/pages/topList/components/topListBody.tsx +++ b/src/pages/topList/components/topListBody.tsx @@ -1,5 +1,5 @@ import React, {useCallback, useState} from 'react'; -import {Text} from 'react-native'; +import {StyleSheet, Text} from 'react-native'; import rpx from '@/utils/rpx'; import PluginManager from '@/core/pluginManager'; import {TabBar, TabView} from 'react-native-tab-view'; @@ -36,14 +36,8 @@ export default function TopListBody() { renderTabBar={props => ( ); } + +const styles = StyleSheet.create({ + tabBarStyle: { + backgroundColor: 'transparent', + shadowColor: 'transparent', + borderColor: 'transparent', + }, + tabStyle: { + width: 'auto', + }, +}); diff --git a/src/pages/topList/hooks/useGetTopList.ts b/src/pages/topList/hooks/useGetTopList.ts index 3d0bab23..2f9a8971 100644 --- a/src/pages/topList/hooks/useGetTopList.ts +++ b/src/pages/topList/hooks/useGetTopList.ts @@ -1,6 +1,6 @@ import {RequestStateCode} from '@/constants/commonConst'; import PluginManager from '@/core/pluginManager'; -import produce from 'immer'; +import {produce} from 'immer'; import {useAtom} from 'jotai'; import {useCallback} from 'react'; import {pluginsTopListAtom} from '../store/atoms'; diff --git a/src/utils/base64.ts b/src/utils/base64.ts index 97409780..576b56fb 100644 --- a/src/utils/base64.ts +++ b/src/utils/base64.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise */ // @ts-nocheck // @flow // Inspired by: https://github.com/davidchambers/Base64.js/blob/master/base64.js diff --git a/src/utils/fileUtils.ts b/src/utils/fileUtils.ts index da2e7584..bd5774dc 100644 --- a/src/utils/fileUtils.ts +++ b/src/utils/fileUtils.ts @@ -1,182 +1,184 @@ -import pathConst from '@/constants/pathConst'; -import FastImage from 'react-native-fast-image'; -import { - copyFile, - downloadFile, - exists, - mkdir, - PicturesDirectoryPath, - readDir, - unlink, - writeFile, -} from 'react-native-fs'; -import {errorLog} from './log'; -import path from 'path-browserify'; - -export const galleryBasePath = `${PicturesDirectoryPath}/MusicFree/`; - -export async function saveToGallery(src: string) { - const fileName = `${galleryBasePath}${Date.now()}.png`; - if (!(await exists(galleryBasePath))) { - await mkdir(galleryBasePath); - } - if (await exists(src)) { - try { - await copyFile(src, fileName); - } catch (e) { - console.log('... ', e); - } - } - if (src.startsWith('http')) { - await downloadFile({ - fromUrl: src, - toFile: fileName, - background: true, - }); - } - if (src.startsWith('data')) { - await writeFile(fileName, src); - } -} - -export function sizeFormatter(bytes: number | string) { - if (typeof bytes === 'string') { - return bytes; - } - if (bytes === 0) return '0B'; - let k = 1024, - sizes = ['B', 'KB', 'MB', 'GB'], - i = Math.floor(Math.log(bytes) / Math.log(k)); - return (bytes / Math.pow(k, i)).toFixed(1) + sizes[i]; -} - -export async function checkAndCreateDir(dirPath: string) { - const filePath = dirPath; - try { - if (!(await exists(filePath))) { - await mkdir(filePath); - } - } catch (e) { - errorLog('无法初始化目录', {path: dirPath, e}); - } -} - -async function getFolderSize(dirPath: string): Promise { - let size = 0; - try { - const fns = await readDir(dirPath); - for (let fn of fns) { - if (fn.isFile()) { - size += fn.size; - } - // todo: 可以改成并行 promise.all - if (fn.isDirectory()) { - size += await getFolderSize(fn.path); - } - } - } catch {} - return size; -} - -export async function getCacheSize( - type: 'music' | 'lyric' | 'image', -): Promise { - if (type === 'music') { - return getFolderSize(pathConst.musicCachePath); - } else if (type === 'lyric') { - return getFolderSize(pathConst.lrcCachePath); - } else if (type === 'image') { - return getFolderSize(pathConst.imageCachePath); - } - throw new Error(); -} - -export async function clearCache(type: 'music' | 'lyric' | 'image') { - if (type === 'music') { - try { - if (await exists(pathConst.musicCachePath)) { - return unlink(pathConst.musicCachePath); - } - } catch {} - } else if (type === 'lyric') { - try { - const lrcs = readDir(pathConst.lrcCachePath); - return Promise.all((await lrcs).map(_ => unlink(_.path))); - } catch {} - } else if (type === 'image') { - return FastImage.clearDiskCache(); - } -} - -export function addFileScheme(fileName: string) { - if (fileName.startsWith('/')) { - return `file://${fileName}`; - } - return fileName; -} - -export function addRandomHash(url: string) { - if (url.indexOf('#') === -1) { - return `${url}#${Date.now()}`; - } - return url; -} - -export function trimHash(url: string) { - const index = url.lastIndexOf('#'); - if (index === -1) { - return url; - } - return url.substring(0, index); -} - -export function escapeCharacter(str?: string) { - return str !== undefined ? `${str}`.replace(/[\/|\\?*"<>:]+/g, '_') : ''; -} - -export function getDirectory(dirPath: string) { - const lastSlash = dirPath.lastIndexOf('/'); - if (lastSlash === -1) { - return dirPath; - } - return dirPath.slice(0, lastSlash); -} - -export function getFileName(filePath: string, withoutExt?: boolean) { - const lastSlash = filePath.lastIndexOf('/'); - if (lastSlash === -1) { - return filePath; - } - const fileName = filePath.slice(lastSlash); - if (withoutExt) { - const lastDot = fileName.lastIndexOf('.'); - return lastDot === -1 ? fileName : fileName.slice(0, lastDot); - } else { - return fileName; - } -} - -export async function mkdirR(directory: string) { - let folder = directory; - const checkStack = []; - while (folder.length > 15) { - checkStack.push(folder); - folder = path.dirname(folder); - } - let existPos = 0; - for (let i = 0; i < checkStack.length; ++i) { - const isExist = await exists(checkStack[i]); - if (isExist) { - existPos = i; - break; - } - } - - for (let j = existPos - 1; j >= 0; --j) { - try { - await mkdir(checkStack[j]); - } catch (e) { - console.log('error', e); - } - } -} +import pathConst from '@/constants/pathConst'; +import FastImage from 'react-native-fast-image'; +import { + copyFile, + downloadFile, + exists, + mkdir, + PicturesDirectoryPath, + readDir, + unlink, + writeFile, +} from 'react-native-fs'; +import {errorLog} from './log'; +import path from 'path-browserify'; + +export const galleryBasePath = `${PicturesDirectoryPath}/MusicFree/`; + +export async function saveToGallery(src: string) { + const fileName = `${galleryBasePath}${Date.now()}.png`; + if (!(await exists(galleryBasePath))) { + await mkdir(galleryBasePath); + } + if (await exists(src)) { + try { + await copyFile(src, fileName); + } catch (e) { + console.log('... ', e); + } + } + if (src.startsWith('http')) { + await downloadFile({ + fromUrl: src, + toFile: fileName, + background: true, + }); + } + if (src.startsWith('data')) { + await writeFile(fileName, src); + } +} + +export function sizeFormatter(bytes: number | string) { + if (typeof bytes === 'string') { + return bytes; + } + if (bytes === 0) { + return '0B'; + } + let k = 1024, + sizes = ['B', 'KB', 'MB', 'GB'], + i = Math.floor(Math.log(bytes) / Math.log(k)); + return (bytes / Math.pow(k, i)).toFixed(1) + sizes[i]; +} + +export async function checkAndCreateDir(dirPath: string) { + const filePath = dirPath; + try { + if (!(await exists(filePath))) { + await mkdir(filePath); + } + } catch (e) { + errorLog('无法初始化目录', {path: dirPath, e}); + } +} + +async function getFolderSize(dirPath: string): Promise { + let size = 0; + try { + const fns = await readDir(dirPath); + for (let fn of fns) { + if (fn.isFile()) { + size += fn.size; + } + // todo: 可以改成并行 promise.all + if (fn.isDirectory()) { + size += await getFolderSize(fn.path); + } + } + } catch {} + return size; +} + +export async function getCacheSize( + type: 'music' | 'lyric' | 'image', +): Promise { + if (type === 'music') { + return getFolderSize(pathConst.musicCachePath); + } else if (type === 'lyric') { + return getFolderSize(pathConst.lrcCachePath); + } else if (type === 'image') { + return getFolderSize(pathConst.imageCachePath); + } + throw new Error(); +} + +export async function clearCache(type: 'music' | 'lyric' | 'image') { + if (type === 'music') { + try { + if (await exists(pathConst.musicCachePath)) { + return unlink(pathConst.musicCachePath); + } + } catch {} + } else if (type === 'lyric') { + try { + const lrcs = readDir(pathConst.lrcCachePath); + return Promise.all((await lrcs).map(_ => unlink(_.path))); + } catch {} + } else if (type === 'image') { + return FastImage.clearDiskCache(); + } +} + +export function addFileScheme(fileName: string) { + if (fileName.startsWith('/')) { + return `file://${fileName}`; + } + return fileName; +} + +export function addRandomHash(url: string) { + if (url.indexOf('#') === -1) { + return `${url}#${Date.now()}`; + } + return url; +} + +export function trimHash(url: string) { + const index = url.lastIndexOf('#'); + if (index === -1) { + return url; + } + return url.substring(0, index); +} + +export function escapeCharacter(str?: string) { + return str !== undefined ? `${str}`.replace(/[/|\\?*"<>:]+/g, '_') : ''; +} + +export function getDirectory(dirPath: string) { + const lastSlash = dirPath.lastIndexOf('/'); + if (lastSlash === -1) { + return dirPath; + } + return dirPath.slice(0, lastSlash); +} + +export function getFileName(filePath: string, withoutExt?: boolean) { + const lastSlash = filePath.lastIndexOf('/'); + if (lastSlash === -1) { + return filePath; + } + const fileName = filePath.slice(lastSlash); + if (withoutExt) { + const lastDot = fileName.lastIndexOf('.'); + return lastDot === -1 ? fileName : fileName.slice(0, lastDot); + } else { + return fileName; + } +} + +export async function mkdirR(directory: string) { + let folder = directory; + const checkStack: string[] = []; + while (folder.length > 15) { + checkStack.push(folder); + folder = path.dirname(folder); + } + let existPos = 0; + for (let i = 0; i < checkStack.length; ++i) { + const isExist = await exists(checkStack[i]); + if (isExist) { + existPos = i; + break; + } + } + + for (let j = existPos - 1; j >= 0; --j) { + try { + await mkdir(checkStack[j]); + } catch (e) { + console.log('error', e); + } + } +} diff --git a/src/utils/log.ts b/src/utils/log.ts index 1a0130c9..2ae97633 100644 --- a/src/utils/log.ts +++ b/src/utils/log.ts @@ -1,4 +1,4 @@ -import {logger, fileAsyncTransport} from 'react-native-logs'; +import {fileAsyncTransport, logger} from 'react-native-logs'; import RNFS, {readDir, readFile} from 'react-native-fs'; import pathConst from '@/constants/pathConst'; import Config from '../core/config'; @@ -9,7 +9,7 @@ const config = { transportOptions: { FS: RNFS, filePath: pathConst.logPath, - fileName: `error-log-{date-today}.log`, + fileName: 'error-log-{date-today}.log', }, dateFormat: 'local', }; @@ -19,7 +19,7 @@ const traceConfig = { transportOptions: { FS: RNFS, filePath: pathConst.logPath, - fileName: `trace-log.log`, + fileName: 'trace-log.log', }, dateFormat: 'local', }; diff --git a/src/utils/mediaItem.ts b/src/utils/mediaItem.ts index 9312778a..f0ddac64 100644 --- a/src/utils/mediaItem.ts +++ b/src/utils/mediaItem.ts @@ -5,7 +5,7 @@ import { timeStampSymbol, } from '@/constants/commonConst'; import MediaMeta from '@/core/mediaExtra'; -import produce from 'immer'; +import {produce} from 'immer'; import objectPath from 'object-path'; /** 获取mediakey */ @@ -41,6 +41,7 @@ export function isSameMediaItem( a: ICommon.IMediaBase | null | undefined, b: ICommon.IMediaBase | null | undefined, ) { + // eslint-disable-next-line eqeqeq return a && b && a.id == b.id && a.platform === b.platform; } diff --git a/src/utils/toast.ts b/src/utils/toast.ts index 5150baca..f4270ddc 100644 --- a/src/utils/toast.ts +++ b/src/utils/toast.ts @@ -1,4 +1,4 @@ -import {showToast, IToastConfig} from '@/components/base/toast'; +import {IToastConfig, showToast} from '@/components/base/toast'; function success(message: string, config?: IToastConfig) { showToast({ diff --git a/tsconfig.json b/tsconfig.json index 415afa3f..dd7f0620 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,15 @@ -// prettier-ignore -{ - "extends": "@tsconfig/react-native/tsconfig.json", /* Recommended React Native TSConfig base */ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Completeness */ - "skipLibCheck": true, /* Skip type checking all .d.ts files. */ - "baseUrl": ".", - "paths": { - "@/*": ["./src/*"] - }, - "types": ["node"] - } - -} +{ + "extends": "@react-native/typescript-config/tsconfig.json", + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Completeness */ + "noImplicitAny": false, + "skipLibCheck": true, /* Skip type checking all .d.ts files. */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "types": ["node"] + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..a311a5f4 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,10990 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@0no-co/graphql.web@^1.0.5": + version "1.0.7" + resolved "https://registry.npmmirror.com/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz#c7a762c887b3482a79ffa68f63de5e96059a62e4" + integrity sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ== + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.21.3", "@babel/core@^7.23.9": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/eslint-parser@^7.20.0": + version "7.25.1" + resolved "https://registry.npmmirror.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" + integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + +"@babel/generator@^7.20.0", "@babel/generator@^7.20.5", "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== + dependencies: + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.0" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.20.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-decorators@^7.12.9": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" + integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-decorators" "^7.24.7" + +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz#0b539c46b8ac804f694e338f803c8354c0f788b6" + integrity sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-default-from" "^7.24.7" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.0": + version "7.20.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.0.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.0": + version "7.20.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": + version "7.21.0" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" + integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-async-generator-functions@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz#b785cf35d73437f6276b1e30439a57a50747bddf" + integrity sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" + +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" + +"@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-export-namespace-from@^7.22.11", "@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.24.7": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz#b3aa251db44959b7a7c82abcd6b4225dec7d2258" + integrity sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-flow" "^7.24.7" + +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== + dependencies: + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" + +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== + dependencies: + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" + +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== + dependencies: + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.12.13", "@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.7" + +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-property-in-object@^7.22.11", "@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.24.7" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" + +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-runtime@^7.0.0": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-typescript@^7.24.7", "@babel/plugin-transform-typescript@^7.5.0": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" + +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/preset-env@^7.20.0": + version "7.25.3" + resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.25.3.tgz#0bf4769d84ac51d1073ab4a86f00f30a3a83c67c" + integrity sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.0" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.0" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" + semver "^6.3.1" + +"@babel/preset-flow@^7.13.13": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/preset-flow/-/preset-flow-7.24.7.tgz#eef5cb8e05e97a448fc50c16826f5612fe512c06" + integrity sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-flow-strip-types" "^7.24.7" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.22.15": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.23.0": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" + +"@babel/register@^7.13.16": + version "7.24.6" + resolved "https://registry.npmmirror.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.6" + source-map-support "^0.5.16" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.0.0", "@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": + version "7.25.0" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/traverse@^7.20.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3": + version "7.25.3" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.25.2" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@buttercup/fetch@^0.2.1": + version "0.2.1" + resolved "https://registry.npmmirror.com/@buttercup/fetch/-/fetch-0.2.1.tgz#f38bed5f879231920ed4477bd202695d6e70a867" + integrity sha512-sCgECOx8wiqY8NN1xN22BqqKzXYIG2AicNLlakOAI4f0WgyLVUbAigMf8CZhBtJxdudTcB1gD5lciqi44jwJvg== + optionalDependencies: + node-fetch "^3.3.0" + +"@commitlint/cli@^19.3.0": + version "19.3.0" + resolved "https://registry.npmmirror.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39" + integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g== + dependencies: + "@commitlint/format" "^19.3.0" + "@commitlint/lint" "^19.2.2" + "@commitlint/load" "^19.2.0" + "@commitlint/read" "^19.2.1" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + yargs "^17.0.0" + +"@commitlint/config-conventional@^19.2.2": + version "19.2.2" + resolved "https://registry.npmmirror.com/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz#1f4e6975d428985deacf2b3ff6547e02c9302054" + integrity sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw== + dependencies: + "@commitlint/types" "^19.0.3" + conventional-changelog-conventionalcommits "^7.0.2" + +"@commitlint/config-validator@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/config-validator/-/config-validator-19.0.3.tgz#052b181a30da6b4fc16dc5230f4589ac95e0bc81" + integrity sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q== + dependencies: + "@commitlint/types" "^19.0.3" + ajv "^8.11.0" + +"@commitlint/ensure@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/ensure/-/ensure-19.0.3.tgz#d172b1b72ca88cbd317ea1ee79f3a03dbaccc76e" + integrity sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ== + dependencies: + "@commitlint/types" "^19.0.3" + 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" + +"@commitlint/execute-rule@^19.0.0": + version "19.0.0" + resolved "https://registry.npmmirror.com/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz#928fb239ae8deec82a6e3b05ec9cfe20afa83856" + integrity sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw== + +"@commitlint/format@^19.3.0": + version "19.3.0" + resolved "https://registry.npmmirror.com/@commitlint/format/-/format-19.3.0.tgz#48dd9e6930d41eb0ca19f36159ee940c5b25d857" + integrity sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg== + dependencies: + "@commitlint/types" "^19.0.3" + chalk "^5.3.0" + +"@commitlint/is-ignored@^19.2.2": + version "19.2.2" + resolved "https://registry.npmmirror.com/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz#503ddcf908ac6b2bc4586a49cb53893a1856f5b2" + integrity sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g== + dependencies: + "@commitlint/types" "^19.0.3" + semver "^7.6.0" + +"@commitlint/lint@^19.2.2": + version "19.2.2" + resolved "https://registry.npmmirror.com/@commitlint/lint/-/lint-19.2.2.tgz#57f69e24bd832a7dcce8ebf82d11e3bf03ccc2a9" + integrity sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA== + dependencies: + "@commitlint/is-ignored" "^19.2.2" + "@commitlint/parse" "^19.0.3" + "@commitlint/rules" "^19.0.3" + "@commitlint/types" "^19.0.3" + +"@commitlint/load@^19.2.0": + version "19.2.0" + resolved "https://registry.npmmirror.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295" + integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/execute-rule" "^19.0.0" + "@commitlint/resolve-extends" "^19.1.0" + "@commitlint/types" "^19.0.3" + chalk "^5.3.0" + cosmiconfig "^9.0.0" + cosmiconfig-typescript-loader "^5.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + +"@commitlint/message@^19.0.0": + version "19.0.0" + resolved "https://registry.npmmirror.com/@commitlint/message/-/message-19.0.0.tgz#f789dd1b7a1f9c784578e0111f46cc3fecf5a531" + integrity sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw== + +"@commitlint/parse@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/parse/-/parse-19.0.3.tgz#a2d09876d458e17ad0e1695b04f41af8b50a41c2" + integrity sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA== + dependencies: + "@commitlint/types" "^19.0.3" + conventional-changelog-angular "^7.0.0" + conventional-commits-parser "^5.0.0" + +"@commitlint/read@^19.2.1": + version "19.2.1" + resolved "https://registry.npmmirror.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f" + integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw== + dependencies: + "@commitlint/top-level" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + git-raw-commits "^4.0.0" + minimist "^1.2.8" + +"@commitlint/resolve-extends@^19.1.0": + version "19.1.0" + resolved "https://registry.npmmirror.com/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz#fa5b8f921e9c8d76f53624c35bf25b9676bd73fa" + integrity sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg== + dependencies: + "@commitlint/config-validator" "^19.0.3" + "@commitlint/types" "^19.0.3" + global-directory "^4.0.1" + import-meta-resolve "^4.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + +"@commitlint/rules@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/rules/-/rules-19.0.3.tgz#de647a9055847cae4f3ae32b4798096b604584f3" + integrity sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw== + dependencies: + "@commitlint/ensure" "^19.0.3" + "@commitlint/message" "^19.0.0" + "@commitlint/to-lines" "^19.0.0" + "@commitlint/types" "^19.0.3" + execa "^8.0.1" + +"@commitlint/to-lines@^19.0.0": + version "19.0.0" + resolved "https://registry.npmmirror.com/@commitlint/to-lines/-/to-lines-19.0.0.tgz#aa6618eb371bafbc0cd3b48f0db565c4a40462c6" + integrity sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw== + +"@commitlint/top-level@^19.0.0": + version "19.0.0" + resolved "https://registry.npmmirror.com/@commitlint/top-level/-/top-level-19.0.0.tgz#9c44d7cec533bb9598bfae9658737e2d6a903605" + integrity sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ== + dependencies: + find-up "^7.0.0" + +"@commitlint/types@^19.0.3": + version "19.0.3" + resolved "https://registry.npmmirror.com/@commitlint/types/-/types-19.0.3.tgz#feff4ecac2b5c359f2a57f9ab094b2ac80ef0266" + integrity sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA== + dependencies: + "@types/conventional-commits-parser" "^5.0.0" + chalk "^5.3.0" + +"@egjs/hammerjs@^2.0.17": + version "2.0.17" + resolved "https://registry.npmmirror.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124" + integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A== + dependencies: + "@types/hammerjs" "^2.0.36" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.11.0" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@expo/bunyan@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@expo/bunyan/-/bunyan-4.0.0.tgz#be0c1de943c7987a9fbd309ea0b1acd605890c7b" + integrity sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA== + dependencies: + uuid "^8.0.0" + optionalDependencies: + mv "~2" + safe-json-stringify "~1" + +"@expo/cli@0.18.26": + version "0.18.26" + resolved "https://registry.npmmirror.com/@expo/cli/-/cli-0.18.26.tgz#56e60eaae12b82a8aeb33f2050bbfb6683f87187" + integrity sha512-u9bTTXgcjaTloE9CHwxgrb8Me/Al4jiPykbVQpJydakH3GsIZfHy1zaLc7O39CoLjRz37WWi6Y5ZdgtQw9dCPQ== + dependencies: + "@babel/runtime" "^7.20.0" + "@expo/code-signing-certificates" "0.0.5" + "@expo/config" "~9.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" + "@expo/devcert" "^1.0.0" + "@expo/env" "~0.3.0" + "@expo/image-utils" "^0.5.0" + "@expo/json-file" "^8.3.0" + "@expo/metro-config" "~0.18.6" + "@expo/osascript" "^2.0.31" + "@expo/package-manager" "^1.5.0" + "@expo/plist" "^0.1.0" + "@expo/prebuild-config" "7.0.8" + "@expo/rudder-sdk-node" "1.1.1" + "@expo/spawn-async" "^1.7.2" + "@expo/xcpretty" "^4.3.0" + "@react-native/dev-middleware" "0.74.85" + "@urql/core" "2.3.6" + "@urql/exchange-retry" "0.3.0" + accepts "^1.3.8" + arg "5.0.2" + better-opn "~3.0.2" + bplist-creator "0.0.7" + bplist-parser "^0.3.1" + cacache "^18.0.2" + chalk "^4.0.0" + ci-info "^3.3.0" + connect "^3.7.0" + debug "^4.3.4" + env-editor "^0.4.1" + fast-glob "^3.3.2" + find-yarn-workspace-root "~2.0.0" + form-data "^3.0.1" + freeport-async "2.0.0" + fs-extra "~8.1.0" + getenv "^1.0.0" + glob "^7.1.7" + graphql "15.8.0" + graphql-tag "^2.10.1" + https-proxy-agent "^5.0.1" + internal-ip "4.3.0" + is-docker "^2.0.0" + is-wsl "^2.1.1" + js-yaml "^3.13.1" + json-schema-deref-sync "^0.13.0" + lodash.debounce "^4.0.8" + md5hex "^1.0.0" + minimatch "^3.0.4" + node-fetch "^2.6.7" + node-forge "^1.3.1" + npm-package-arg "^7.0.0" + open "^8.3.0" + ora "3.4.0" + picomatch "^3.0.1" + pretty-bytes "5.6.0" + progress "2.0.3" + prompts "^2.3.2" + qrcode-terminal "0.11.0" + require-from-string "^2.0.2" + requireg "^0.2.2" + resolve "^1.22.2" + resolve-from "^5.0.0" + resolve.exports "^2.0.2" + semver "^7.6.0" + send "^0.18.0" + slugify "^1.3.4" + source-map-support "~0.5.21" + stacktrace-parser "^0.1.10" + structured-headers "^0.4.1" + tar "^6.0.5" + temp-dir "^2.0.0" + tempy "^0.7.1" + terminal-link "^2.1.1" + text-table "^0.2.0" + url-join "4.0.0" + wrap-ansi "^7.0.0" + ws "^8.12.1" + +"@expo/code-signing-certificates@0.0.5": + version "0.0.5" + resolved "https://registry.npmmirror.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c" + integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw== + dependencies: + node-forge "^1.2.1" + nullthrows "^1.1.1" + +"@expo/config-plugins@8.0.8", "@expo/config-plugins@~8.0.0-beta.0", "@expo/config-plugins@~8.0.8": + version "8.0.8" + resolved "https://registry.npmmirror.com/@expo/config-plugins/-/config-plugins-8.0.8.tgz#294a71905a498ea02c8b79bea950b5e37ab5d748" + integrity sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw== + dependencies: + "@expo/config-types" "^51.0.0-unreleased" + "@expo/json-file" "~8.3.0" + "@expo/plist" "^0.1.0" + "@expo/sdk-runtime-versions" "^1.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" + getenv "^1.0.0" + glob "7.1.6" + resolve-from "^5.0.0" + semver "^7.5.4" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" + +"@expo/config-types@^51.0.0-unreleased": + version "51.0.2" + resolved "https://registry.npmmirror.com/@expo/config-types/-/config-types-51.0.2.tgz#7385451b180d34d8f2a4eeb5feabe1fe3c5d4f32" + integrity sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ== + +"@expo/config@9.0.3", "@expo/config@~9.0.0", "@expo/config@~9.0.0-beta.0": + version "9.0.3" + resolved "https://registry.npmmirror.com/@expo/config/-/config-9.0.3.tgz#4bc2ec654145e6242f4b1964db2962ee0fee1270" + integrity sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~8.0.8" + "@expo/config-types" "^51.0.0-unreleased" + "@expo/json-file" "^8.3.0" + getenv "^1.0.0" + glob "7.1.6" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + semver "^7.6.0" + slugify "^1.3.4" + sucrase "3.34.0" + +"@expo/devcert@^1.0.0": + version "1.1.2" + resolved "https://registry.npmmirror.com/@expo/devcert/-/devcert-1.1.2.tgz#a4923b8ea5b34fde31d6e006a40d0f594096a0ed" + integrity sha512-FyWghLu7rUaZEZSTLt/XNRukm0c9GFfwP0iFaswoDWpV6alvVg+zRAfCLdIVQEz1SVcQ3zo1hMZFDrnKGvkCuQ== + dependencies: + application-config-path "^0.1.0" + command-exists "^1.2.4" + debug "^3.1.0" + eol "^0.9.1" + get-port "^3.2.0" + glob "^7.1.2" + lodash "^4.17.21" + mkdirp "^0.5.1" + password-prompt "^1.0.4" + rimraf "^2.6.2" + sudo-prompt "^8.2.0" + tmp "^0.0.33" + tslib "^2.4.0" + +"@expo/env@~0.3.0": + version "0.3.0" + resolved "https://registry.npmmirror.com/@expo/env/-/env-0.3.0.tgz#a66064e5656e0e48197525f47f3398034fdf579e" + integrity sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q== + dependencies: + chalk "^4.0.0" + debug "^4.3.4" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + getenv "^1.0.0" + +"@expo/image-utils@^0.5.0": + version "0.5.1" + resolved "https://registry.npmmirror.com/@expo/image-utils/-/image-utils-0.5.1.tgz#06fade141facebcd8431355923d30f3839309942" + integrity sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A== + dependencies: + "@expo/spawn-async" "^1.7.2" + chalk "^4.0.0" + fs-extra "9.0.0" + getenv "^1.0.0" + jimp-compact "0.16.1" + node-fetch "^2.6.0" + parse-png "^2.1.0" + resolve-from "^5.0.0" + semver "^7.6.0" + tempy "0.3.0" + +"@expo/json-file@^8.3.0", "@expo/json-file@~8.3.0": + version "8.3.3" + resolved "https://registry.npmmirror.com/@expo/json-file/-/json-file-8.3.3.tgz#7926e3592f76030ce63d6b1308ac8f5d4d9341f4" + integrity sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.2" + write-file-atomic "^2.3.0" + +"@expo/metro-config@0.18.10", "@expo/metro-config@~0.18.6": + version "0.18.10" + resolved "https://registry.npmmirror.com/@expo/metro-config/-/metro-config-0.18.10.tgz#2b0ec353c38802dd89028432c3a463804df94f24" + integrity sha512-HTYQqKfV0JSuRp5aDvrPHezj5udXOWoXqHOjfTSnce2m13j6D0yYXTJNaKRhlgpPBrkg5DL7z1fL3zwDUpLM4w== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.5" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" + "@expo/config" "~9.0.0-beta.0" + "@expo/env" "~0.3.0" + "@expo/json-file" "~8.3.0" + "@expo/spawn-async" "^1.7.2" + chalk "^4.1.0" + debug "^4.3.2" + find-yarn-workspace-root "~2.0.0" + fs-extra "^9.1.0" + getenv "^1.0.0" + glob "^7.2.3" + jsc-safe-url "^0.2.4" + lightningcss "~1.19.0" + postcss "~8.4.32" + resolve-from "^5.0.0" + +"@expo/osascript@^2.0.31": + version "2.1.3" + resolved "https://registry.npmmirror.com/@expo/osascript/-/osascript-2.1.3.tgz#912b74825cb83f3b958cad81034df9e19f1f2808" + integrity sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA== + dependencies: + "@expo/spawn-async" "^1.7.2" + exec-async "^2.2.0" + +"@expo/package-manager@^1.5.0": + version "1.5.2" + resolved "https://registry.npmmirror.com/@expo/package-manager/-/package-manager-1.5.2.tgz#6015963669977a188bbbac930aa0dc103162ee73" + integrity sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA== + dependencies: + "@expo/json-file" "^8.3.0" + "@expo/spawn-async" "^1.7.2" + ansi-regex "^5.0.0" + chalk "^4.0.0" + find-up "^5.0.0" + find-yarn-workspace-root "~2.0.0" + js-yaml "^3.13.1" + micromatch "^4.0.2" + npm-package-arg "^7.0.0" + ora "^3.4.0" + split "^1.0.1" + sudo-prompt "9.1.1" + +"@expo/plist@^0.1.0": + version "0.1.3" + resolved "https://registry.npmmirror.com/@expo/plist/-/plist-0.1.3.tgz#b4fbee2c4f7a88512a4853d85319f4d95713c529" + integrity sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg== + dependencies: + "@xmldom/xmldom" "~0.7.7" + base64-js "^1.2.3" + xmlbuilder "^14.0.0" + +"@expo/prebuild-config@7.0.6": + version "7.0.6" + resolved "https://registry.npmmirror.com/@expo/prebuild-config/-/prebuild-config-7.0.6.tgz#b9c2c36ee564244da8073ce7bea22ebe57743615" + integrity sha512-Hts+iGBaG6OQ+N8IEMMgwQElzJeSTb7iUJ26xADEHkaexsucAK+V52dM8M4ceicvbZR9q8M+ebJEGj0MCNA3dQ== + dependencies: + "@expo/config" "~9.0.0-beta.0" + "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-types" "^51.0.0-unreleased" + "@expo/image-utils" "^0.5.0" + "@expo/json-file" "^8.3.0" + "@react-native/normalize-colors" "0.74.84" + debug "^4.3.1" + fs-extra "^9.0.0" + resolve-from "^5.0.0" + semver "^7.6.0" + xml2js "0.6.0" + +"@expo/prebuild-config@7.0.8": + version "7.0.8" + resolved "https://registry.npmmirror.com/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz#8af72b19c92f05f1ab6c6c70d31f33159dacac39" + integrity sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg== + dependencies: + "@expo/config" "~9.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" + "@expo/config-types" "^51.0.0-unreleased" + "@expo/image-utils" "^0.5.0" + "@expo/json-file" "^8.3.0" + "@react-native/normalize-colors" "0.74.85" + debug "^4.3.1" + fs-extra "^9.0.0" + resolve-from "^5.0.0" + semver "^7.6.0" + xml2js "0.6.0" + +"@expo/rudder-sdk-node@1.1.1": + version "1.1.1" + resolved "https://registry.npmmirror.com/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz#6aa575f346833eb6290282118766d4919c808c6a" + integrity sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ== + dependencies: + "@expo/bunyan" "^4.0.0" + "@segment/loosely-validate-event" "^2.0.0" + fetch-retry "^4.1.1" + md5 "^2.2.1" + node-fetch "^2.6.1" + remove-trailing-slash "^0.1.0" + uuid "^8.3.2" + +"@expo/sdk-runtime-versions@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" + integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== + +"@expo/spawn-async@^1.7.2": + version "1.7.2" + resolved "https://registry.npmmirror.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" + integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== + dependencies: + cross-spawn "^7.0.3" + +"@expo/vector-icons@^14.0.0": + version "14.0.2" + resolved "https://registry.npmmirror.com/@expo/vector-icons/-/vector-icons-14.0.2.tgz#f7f6c4cb5ef356d1171d2b4e059217556738fd3b" + integrity sha512-70LpmXQu4xa8cMxjp1fydgRPsalefnHaXLzIwaHMEzcZhnyjw2acZz8azRrZOslPVAWlxItOa2Dd7WtD/kI+CA== + dependencies: + prop-types "^15.8.1" + +"@expo/xcpretty@^4.3.0": + version "4.3.1" + resolved "https://registry.npmmirror.com/@expo/xcpretty/-/xcpretty-4.3.1.tgz#e0a6a92d1e46ab5ac5e90d9a8e66ac1a2a2f5920" + integrity sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw== + dependencies: + "@babel/code-frame" "7.10.4" + chalk "^4.1.0" + find-up "^5.0.0" + js-yaml "^4.1.0" + +"@graphql-typed-document-node/core@^3.1.0": + version "3.2.0" + resolved "https://registry.npmmirror.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": + version "9.3.0" + resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.1.0": + version "5.1.0" + resolved "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/ttlcache@^1.4.1": + version "1.4.1" + resolved "https://registry.npmmirror.com/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz#21fb23db34e9b6220c6ba023a0118a2dd3461ea2" + integrity sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/create-cache-key-function@^29.6.3": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" + integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== + dependencies: + "@jest/types" "^29.6.3" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.npmmirror.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.npmmirror.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.npmmirror.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jimp/bmp@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.16.13.tgz#57ffa5b17417b5a181f6f184bdabc8218e8448ef" + integrity sha512-9edAxu7N2FX7vzkdl5Jo1BbACfycUtBQX+XBMcHA2bk62P8R0otgkHg798frgAk/WxQIzwxqOH6wMiCwrlAzdQ== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + bmp-js "^0.1.0" + +"@jimp/core@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/core/-/core-0.16.13.tgz#7171745a912b5b847f8bf53e70b0672c5ca92744" + integrity sha512-qXpA1tzTnlkTku9yqtuRtS/wVntvE6f3m3GNxdTdtmc+O+Wcg9Xo2ABPMh7Nc0AHbMKzwvwgB2JnjZmlmJEObg== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + any-base "^1.1.0" + buffer "^5.2.0" + exif-parser "^0.1.12" + file-type "^16.5.4" + load-bmfont "^1.3.1" + mkdirp "^0.5.1" + phin "^2.9.1" + pixelmatch "^4.0.2" + tinycolor2 "^1.4.1" + +"@jimp/custom@^0.16.1": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/custom/-/custom-0.16.13.tgz#2e4ed447b7410b81fe9103682b4166af904daf84" + integrity sha512-LTATglVUPGkPf15zX1wTMlZ0+AU7cGEGF6ekVF1crA8eHUWsGjrYTB+Ht4E3HTrCok8weQG+K01rJndCp/l4XA== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/core" "^0.16.13" + +"@jimp/gif@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/gif/-/gif-0.16.13.tgz#fa72f35d8ad67d6ce3a3d7ef6c8d04a462afaaf9" + integrity sha512-yFAMZGv3o+YcjXilMWWwS/bv1iSqykFahFMSO169uVMtfQVfa90kt4/kDwrXNR6Q9i6VHpFiGZMlF2UnHClBvg== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + gifwrap "^0.9.2" + omggif "^1.0.9" + +"@jimp/jpeg@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/jpeg/-/jpeg-0.16.13.tgz#e1c128a591bd7f8a26c8731fd0bc65d32d4ba32a" + integrity sha512-BJHlDxzTlCqP2ThqP8J0eDrbBfod7npWCbJAcfkKqdQuFk0zBPaZ6KKaQKyKxmWJ87Z6ohANZoMKEbtvrwz1AA== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + jpeg-js "^0.4.2" + +"@jimp/plugin-resize@^0.16.1": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/plugin-resize/-/plugin-resize-0.16.13.tgz#6267087f724d47e7bb8824c5b842d9315f50b8e7" + integrity sha512-qoqtN8LDknm3fJm9nuPygJv30O3vGhSBD2TxrsCnhtOsxKAqVPJtFVdGd/qVuZ8nqQANQmTlfqTiK9mVWQ7MiQ== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + +"@jimp/png@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/png/-/png-0.16.13.tgz#8b130cc5e1e754c074c42fa3fe2609897cefdf7c" + integrity sha512-8cGqINvbWJf1G0Her9zbq9I80roEX0A+U45xFby3tDWfzn+Zz8XKDF1Nv9VUwVx0N3zpcG1RPs9hfheG4Cq2kg== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/utils" "^0.16.13" + pngjs "^3.3.3" + +"@jimp/tiff@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/tiff/-/tiff-0.16.13.tgz#9cf8d19f2b0b0c46758e81acfc7d656835ee6da1" + integrity sha512-oJY8d9u95SwW00VPHuCNxPap6Q1+E/xM5QThb9Hu+P6EGuu6lIeLaNBMmFZyblwFbwrH+WBOZlvIzDhi4Dm/6Q== + dependencies: + "@babel/runtime" "^7.7.2" + utif "^2.0.1" + +"@jimp/types@^0.16.1": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/types/-/types-0.16.13.tgz#39be1886cbfa4fb5e77e17441a046a1f961d3046" + integrity sha512-mC0yVNUobFDjoYLg4hoUwzMKgNlxynzwt3cDXzumGvRJ7Kb8qQGOWJQjQFo5OxmGExqzPphkirdbBF88RVLBCg== + dependencies: + "@babel/runtime" "^7.7.2" + "@jimp/bmp" "^0.16.13" + "@jimp/gif" "^0.16.13" + "@jimp/jpeg" "^0.16.13" + "@jimp/png" "^0.16.13" + "@jimp/tiff" "^0.16.13" + timm "^1.6.1" + +"@jimp/utils@^0.16.13": + version "0.16.13" + resolved "https://registry.npmmirror.com/@jimp/utils/-/utils-0.16.13.tgz#afde41b9c6cdadfb45d83cb5e16deb65f369bf99" + integrity sha512-VyCpkZzFTHXtKgVO35iKN0sYR10psGpV6SkcSeV4oF7eSYlR8Bl6aQLCzVeFjvESF7mxTmIiI3/XrMobVrtxDA== + dependencies: + "@babel/runtime" "^7.7.2" + regenerator-runtime "^0.13.3" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^3.1.0": + version "3.1.1" + resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== + dependencies: + semver "^7.3.5" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@react-native-async-storage/async-storage@^1.24.0": + version "1.24.0" + resolved "https://registry.npmmirror.com/@react-native-async-storage/async-storage/-/async-storage-1.24.0.tgz#888efbc62a26f7d9464b32f4d3027b7f2771999b" + integrity sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g== + dependencies: + merge-options "^3.0.4" + +"@react-native-clipboard/clipboard@^1.14.1": + version "1.14.1" + resolved "https://registry.npmmirror.com/@react-native-clipboard/clipboard/-/clipboard-1.14.1.tgz#835f82fc86881a0808a8405f2576617bb5383554" + integrity sha512-SM3el0A28SwoeJljVNhF217o0nI4E7RfalLmuRQcT1/7tGcxUjgFa3jyrEndYUct8/uxxK5EUNGUu1YEDqzxqw== + +"@react-native-community/cli-clean@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" + integrity sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA== + dependencies: + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + execa "^5.0.0" + fast-glob "^3.3.2" + +"@react-native-community/cli-config@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" + integrity sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg== + dependencies: + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^4.3.0" + fast-glob "^3.3.2" + joi "^17.2.1" + +"@react-native-community/cli-debugger-ui@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" + integrity sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw== + dependencies: + serve-static "^1.13.1" + +"@react-native-community/cli-doctor@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" + integrity sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A== + dependencies: + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-apple" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + command-exists "^1.2.8" + deepmerge "^4.3.0" + envinfo "^7.10.0" + execa "^5.0.0" + hermes-profile-transformer "^0.0.6" + node-stream-zip "^1.9.1" + ora "^5.4.1" + semver "^7.5.2" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + yaml "^2.2.1" + +"@react-native-community/cli-hermes@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" + integrity sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA== + dependencies: + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + hermes-profile-transformer "^0.0.6" + +"@react-native-community/cli-platform-android@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" + integrity sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw== + dependencies: + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + execa "^5.0.0" + fast-glob "^3.3.2" + fast-xml-parser "^4.2.4" + logkitty "^0.7.1" + +"@react-native-community/cli-platform-apple@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" + integrity sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA== + dependencies: + "@react-native-community/cli-tools" "13.6.9" + chalk "^4.1.2" + execa "^5.0.0" + fast-glob "^3.3.2" + fast-xml-parser "^4.0.12" + ora "^5.4.1" + +"@react-native-community/cli-platform-ios@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" + integrity sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw== + dependencies: + "@react-native-community/cli-platform-apple" "13.6.9" + +"@react-native-community/cli-server-api@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" + integrity sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug== + dependencies: + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.1" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^6.2.2" + +"@react-native-community/cli-tools@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" + integrity sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + execa "^5.0.0" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^7.5.2" + shell-quote "^1.7.3" + sudo-prompt "^9.0.0" + +"@react-native-community/cli-types@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" + integrity sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w== + dependencies: + joi "^17.2.1" + +"@react-native-community/cli@13.6.9": + version "13.6.9" + resolved "https://registry.npmmirror.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" + integrity sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ== + dependencies: + "@react-native-community/cli-clean" "13.6.9" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-doctor" "13.6.9" + "@react-native-community/cli-hermes" "13.6.9" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native-community/cli-types" "13.6.9" + chalk "^4.1.2" + commander "^9.4.1" + deepmerge "^4.3.0" + execa "^5.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + graceful-fs "^4.1.3" + prompts "^2.4.2" + semver "^7.5.2" + +"@react-native-community/netinfo@^11.3.2": + version "11.3.2" + resolved "https://registry.npmmirror.com/@react-native-community/netinfo/-/netinfo-11.3.2.tgz#e63201d0b87ad42d086d1003be48ae7b327f0594" + integrity sha512-YsaS3Dutnzqd1BEoeC+DEcuNJedYRkN6Ef3kftT5Sm8ExnCF94C/nl4laNxuvFli3+Jz8Df3jO25Jn8A9S0h4w== + +"@react-native-community/slider@^4.5.2": + version "4.5.2" + resolved "https://registry.npmmirror.com/@react-native-community/slider/-/slider-4.5.2.tgz#c3835788dbc1bd83d3778b83ca15533c805db149" + integrity sha512-DbFyCyI7rwl0FkBkp0lzEVp+5mNfS5qU/nM2sK2aSguWhj0Odkt1aKHP2iW/ljruOhgS/O4dEixXlne4OdZJDQ== + +"@react-native-cookies/cookies@^6.2.1": + version "6.2.1" + resolved "https://registry.npmmirror.com/@react-native-cookies/cookies/-/cookies-6.2.1.tgz#54d50b9496400bbdc19e43c155f70f8f918999e3" + integrity sha512-D17wCA0DXJkGJIxkL74Qs9sZ3sA+c+kCoGmXVknW7bVw/W+Vv1m/7mWTNi9DLBZSRddhzYw8SU0aJapIaM/g5w== + dependencies: + invariant "^2.2.4" + +"@react-native-masked-view/masked-view@^0.3.1": + version "0.3.1" + resolved "https://registry.npmmirror.com/@react-native-masked-view/masked-view/-/masked-view-0.3.1.tgz#5bd76f17004a6ccbcec03856893777ee91f23d29" + integrity sha512-uVm8U6nwFIlUd1iDIB5cS+lDadApKR+l8k4k84d9hn+GN4lzAIJhUZ9syYX7c022MxNgAlbxoFLt0pqKoyaAGg== + +"@react-native/assets-registry@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/assets-registry/-/assets-registry-0.74.86.tgz#5a9dc5d4c74346194a895b0be6b87a7e6022cf53" + integrity sha512-rNWSa1MTqG3Z7ZfACIDlED+T63tNlt0Lr/ruvxFJL5IX6DRC6sIrb2SrbLrlXgz7C0FbhO0ub9zfHXISgrJOsQ== + +"@react-native/babel-plugin-codegen@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.85.tgz#067224bf5099ee2679babd700c7115822a747004" + integrity sha512-48TSDclRB5OMXiImiJkLxyCfRyLsqkCgI8buugCZzvXcYslfV7gCvcyFyQldtcOmerV+CK4RAj7QS4hmB5Mr8Q== + dependencies: + "@react-native/codegen" "0.74.85" + +"@react-native/babel-plugin-codegen@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.86.tgz#4edbb8887c5cedefd52e8fda973b1da97c779db4" + integrity sha512-fO7exk0pdsOSsK3fvDz4YKe5nMeAMrsIGi525pft/L+dedjdeiWYmEoQVc9NElxwwNCldwRY6eNMw6IhKyjzLA== + dependencies: + "@react-native/codegen" "0.74.86" + +"@react-native/babel-preset@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/babel-preset/-/babel-preset-0.74.85.tgz#3ce6ca77a318dec226fd9e3fff9c2ef7b0aa66e3" + integrity sha512-yMHUlN8INbK5BBwiBuQMftdWkpm1IgCsoJTKcGD2OpSgZhwwm8RUSvGhdRMzB2w7bsqqBmaEMleGtW6aCR7B9w== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + "@react-native/babel-plugin-codegen" "0.74.85" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" + +"@react-native/babel-preset@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/babel-preset/-/babel-preset-0.74.86.tgz#8bb3fbd49ce11470eb8022dea2c1e51bfa8dedd4" + integrity sha512-6A+1NVAHugbBLFNU4iaYrq2lx8P7pINyqoyTtVAqd375PShRmLwu6GvuF3b/4avC97s6LmBljVTJ1xVHukA42g== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + "@react-native/babel-plugin-codegen" "0.74.86" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" + +"@react-native/codegen@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/codegen/-/codegen-0.74.85.tgz#568464071c0b9be741da1a1ab43b1df88180ca5d" + integrity sha512-N7QwoS4Hq/uQmoH83Ewedy6D0M7xbQsOU3OMcQf0eY3ltQ7S2hd9/R4UTalQWRn1OUJfXR6OG12QJ4FStKgV6Q== + dependencies: + "@babel/parser" "^7.20.0" + glob "^7.1.1" + hermes-parser "0.19.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + +"@react-native/codegen@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/codegen/-/codegen-0.74.86.tgz#90933f5ee555ffb95ca27372ba1e836f698c3192" + integrity sha512-BOwABta9035GJ/zLMkxQfgPMr47u1/1HqNIMk10FqmTe0jmROOxKEAeP4FbeS5L1voO4ug3dqr+mcuHrG+HNhA== + dependencies: + "@babel/parser" "^7.20.0" + glob "^7.1.1" + hermes-parser "0.19.1" + invariant "^2.2.4" + jscodeshift "^0.14.0" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + +"@react-native/community-cli-plugin@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.86.tgz#239592475b222e990ac3bb229d7cdfb8f9afcc39" + integrity sha512-q0fPDe6vx1vT5PdE3AiL+DNm0q7opzySiGle8B64bAKsa0ClIoRXAzZqolceiMHbSoCIhUbZxYtNGavrjuPyKw== + dependencies: + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native/dev-middleware" "0.74.86" + "@react-native/metro-babel-transformer" "0.74.86" + chalk "^4.0.0" + execa "^5.1.1" + metro "^0.80.3" + metro-config "^0.80.3" + metro-core "^0.80.3" + node-fetch "^2.2.0" + querystring "^0.2.1" + readline "^1.3.0" + +"@react-native/debugger-frontend@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz#a7af94a7b81cb59f241fd1771d1b083445329700" + integrity sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ== + +"@react-native/debugger-frontend@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.86.tgz#87a3c7dfb12ee6e981165e304bbbe20e9b1fa009" + integrity sha512-Spq1kFX4qvPmT4HuTwpi1ALFtojlJ6s4GpWU2OnpevC/z7ks36lhD3J0rd0D9U5bkxtTYLcg31fPv7nGFC7XZg== + +"@react-native/dev-middleware@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz#eca35aceb882b1111385f7c20f1aad7a33a2734e" + integrity sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w== + dependencies: + "@isaacs/ttlcache" "^1.4.1" + "@react-native/debugger-frontend" "0.74.85" + "@rnx-kit/chromium-edge-launcher" "^1.0.0" + chrome-launcher "^0.15.2" + connect "^3.6.5" + debug "^2.2.0" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + open "^7.0.3" + selfsigned "^2.4.1" + serve-static "^1.13.1" + temp-dir "^2.0.0" + ws "^6.2.2" + +"@react-native/dev-middleware@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/dev-middleware/-/dev-middleware-0.74.86.tgz#b95f936c141dd44309a9ec558ed5ce034e270bc4" + integrity sha512-sc0tYxYt6dkUbNFI1IANzKO67M41BhjbJ6k/CHoFi/tGoNmHzg9IUZ89V4g3H8hn/VW9dETnPOFna1VO0sWrXg== + dependencies: + "@isaacs/ttlcache" "^1.4.1" + "@react-native/debugger-frontend" "0.74.86" + "@rnx-kit/chromium-edge-launcher" "^1.0.0" + chrome-launcher "^0.15.2" + connect "^3.6.5" + debug "^2.2.0" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + open "^7.0.3" + selfsigned "^2.4.1" + serve-static "^1.13.1" + temp-dir "^2.0.0" + ws "^6.2.2" + +"@react-native/eslint-config@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/eslint-config/-/eslint-config-0.74.86.tgz#0cc8acfe884d31ad92f7e61743fb87da916d47a5" + integrity sha512-mCCdNVdsB9WE+Byo583ajxlS0lhCnAvc1Y3YxO/pnpqfjDmZnlnG9L8OGWitADBHukH9INUzxtkDPB8qvpwjmQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/eslint-parser" "^7.20.0" + "@react-native/eslint-plugin" "0.74.86" + "@typescript-eslint/eslint-plugin" "^7.1.1" + "@typescript-eslint/parser" "^7.1.1" + eslint-config-prettier "^8.5.0" + eslint-plugin-eslint-comments "^3.2.0" + eslint-plugin-ft-flow "^2.0.1" + eslint-plugin-jest "^27.9.0" + eslint-plugin-prettier "^4.2.1" + eslint-plugin-react "^7.30.1" + eslint-plugin-react-hooks "^4.6.0" + eslint-plugin-react-native "^4.0.0" + +"@react-native/eslint-plugin@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.86.tgz#3e9ce7463ae10938f841502859762f4caf25d028" + integrity sha512-POhHF0Phm4ti+IhpsVxOfysvGVVQUY92HpJGiNC2xJhNeHZ8fm0VotcvcoPlgEpZ0ISg0cwm5IiTZ6OArOPXCQ== + +"@react-native/gradle-plugin@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.86.tgz#5092d6023a4cefb1055fff251a8dae894379db9e" + integrity sha512-aoYeX7mjf3Efwc5t8AdcwC42oicMRKauGMZimvXY3xqfYV97G4foAYXrxQYZsMaxecFStdYMiXWyMFO/UFmEpA== + +"@react-native/js-polyfills@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/js-polyfills/-/js-polyfills-0.74.86.tgz#5c89c2febfb72930fee68d3eb04ba690f82a8403" + integrity sha512-Yrsj4a1rTkk618LUJJxOWFnyAZR3sHmXJwcj4qupkJs+ou3aDkixfXgVVrvQP39iBptaQvCpo7PSqs+LjSNYbA== + +"@react-native/metro-babel-transformer@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.86.tgz#d67d3bf1699fcf834a70155635b30ae9f667b6dd" + integrity sha512-/9qN5zcnTHGDkC4jWibnoGmRnzDXiurl5wmkvspgnsdrJINN6eGpK8sdIn6nrHFOuPlp3Metqw3HkxbuAfNUXw== + dependencies: + "@babel/core" "^7.20.0" + "@react-native/babel-preset" "0.74.86" + hermes-parser "0.19.1" + nullthrows "^1.1.1" + +"@react-native/metro-config@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/metro-config/-/metro-config-0.74.86.tgz#9d5b9873c07c16f1a968a506fac5065b0418a6c2" + integrity sha512-s/VEkdwZZmxBYbWSJJ9ymL78kvyBaeoT5l+/kh8D9nUg+YGaTUmnUJ3BiHh5O9o89dks3kpmCPL2Vb9gNBnMHg== + dependencies: + "@react-native/js-polyfills" "0.74.86" + "@react-native/metro-babel-transformer" "0.74.86" + metro-config "^0.80.3" + metro-runtime "^0.80.3" + +"@react-native/normalize-colors@0.74.84": + version "0.74.84" + resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" + integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== + +"@react-native/normalize-colors@0.74.85": + version "0.74.85" + resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz#62bcb9ab1b10b822ca0278fdfdf23d3b18e125da" + integrity sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw== + +"@react-native/normalize-colors@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.74.86.tgz#8dadd294565cdb70b333f790711a019f18bbdd8b" + integrity sha512-GGA+nhwrQ1umwnkv7tuGbGIk0oBTeNbG4cUxNQX/CbYW0R98RCNxSbXjfw1XnXZd3lCSFLDxzw154V4hum2pNQ== + +"@react-native/typescript-config@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/typescript-config/-/typescript-config-0.74.86.tgz#c8abab5fc08a9709355cc4e2f7c31e40b12ecfb6" + integrity sha512-hhlnd505tAw9mmA+vOeqvT7ovbRCpsG1c90aW3Wgx4geWCJTLXPaxJxvo4gbuxgfQryr7IZcidBwzDfc5XlWYg== + +"@react-native/virtualized-lists@0.74.86": + version "0.74.86" + resolved "https://registry.npmmirror.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.86.tgz#bcf99fa54de3b58c354afb77d5171afd0a0dbf05" + integrity sha512-f5wZpQvlGeWcyfK3Low0tOft9ounAaVQHpa4fiHjh9x3d2EPLwoaQe7sxS0q8/5pMISjddbF9S3ofpNuDxxoeA== + dependencies: + invariant "^2.2.4" + nullthrows "^1.1.1" + +"@react-navigation/core@^6.4.17": + version "6.4.17" + resolved "https://registry.npmmirror.com/@react-navigation/core/-/core-6.4.17.tgz#f277a196b578c8a456efcc563d1c9bd87eb4ab04" + integrity sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg== + dependencies: + "@react-navigation/routers" "^6.1.9" + escape-string-regexp "^4.0.0" + nanoid "^3.1.23" + query-string "^7.1.3" + react-is "^16.13.0" + use-latest-callback "^0.2.1" + +"@react-navigation/drawer@^6.7.2": + version "6.7.2" + resolved "https://registry.npmmirror.com/@react-navigation/drawer/-/drawer-6.7.2.tgz#3c85298c73af915f3cd5e6ca26a1a26d61010256" + integrity sha512-o4g2zgTZa2+oLd+8V33etrSM38KIqu8S/zCBTsdsHUoQyVE7JNRiv3Qgq/jMvEb8PZCqWmm7jHItcgzrBuwyOQ== + dependencies: + "@react-navigation/elements" "^1.3.31" + color "^4.2.3" + warn-once "^0.1.0" + +"@react-navigation/elements@^1.3.31": + version "1.3.31" + resolved "https://registry.npmmirror.com/@react-navigation/elements/-/elements-1.3.31.tgz#28dd802a0787bb03fc0e5be296daf1804dbebbcf" + integrity sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ== + +"@react-navigation/native-stack@^6.11.0": + version "6.11.0" + resolved "https://registry.npmmirror.com/@react-navigation/native-stack/-/native-stack-6.11.0.tgz#a33f92cbd55dfe28fb0ba67df99aaa95240eb87c" + integrity sha512-U5EcUB9Q2NQspCFwYGGNJm0h6wBCOv7T30QjndmvlawLkNt7S7KWbpWyxS9XBHSIKF57RgWjfxuJNTgTstpXxw== + dependencies: + "@react-navigation/elements" "^1.3.31" + warn-once "^0.1.0" + +"@react-navigation/native@^6.1.18": + version "6.1.18" + resolved "https://registry.npmmirror.com/@react-navigation/native/-/native-6.1.18.tgz#338fa9afa2c89feec1d3eac41c963840d8d6f106" + integrity sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg== + dependencies: + "@react-navigation/core" "^6.4.17" + escape-string-regexp "^4.0.0" + fast-deep-equal "^3.1.3" + nanoid "^3.1.23" + +"@react-navigation/routers@^6.1.9": + version "6.1.9" + resolved "https://registry.npmmirror.com/@react-navigation/routers/-/routers-6.1.9.tgz#73f5481a15a38e36592a0afa13c3c064b9f90bed" + integrity sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA== + dependencies: + nanoid "^3.1.23" + +"@rnx-kit/chromium-edge-launcher@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@rnx-kit/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz#c0df8ea00a902c7a417cd9655aab06de398b939c" + integrity sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg== + dependencies: + "@types/node" "^18.0.0" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@sayem314/react-native-keep-awake@^1.2.4": + version "1.2.4" + resolved "https://registry.npmmirror.com/@sayem314/react-native-keep-awake/-/react-native-keep-awake-1.2.4.tgz#f7cfb21983c38042f484d2d768f7f41678b3dddc" + integrity sha512-I9tRpZ8z693lce4seDbRK0zBzeCkubBnSGmABiRPTRy2ZkMJB1m+vaXiDHl6U3fJa29i2TTaKclH3A8to/Bs9A== + +"@segment/loosely-validate-event@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz#87dfc979e5b4e7b82c5f1d8b722dfd5d77644681" + integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== + dependencies: + component-type "^1.2.1" + join-component "^1.1.0" + +"@shopify/flash-list@^1.7.0": + version "1.7.0" + resolved "https://registry.npmmirror.com/@shopify/flash-list/-/flash-list-1.7.0.tgz#a18fa09ccd521349e60f176eaf190ff30d24d597" + integrity sha512-Uys8mWTb0Y34Ts1hD97KrVFbFH9oY7qbj/u1oSrAS5PJAackDFbndUEVuTYyXSyWxHY0sRutF5HgS1yNdhj+0A== + dependencies: + recyclerlistview "4.2.1" + tslib "2.6.3" + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.npmmirror.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.npmmirror.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^8.1.0": + version "8.1.0" + resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/color-convert@*": + version "2.0.3" + resolved "https://registry.npmmirror.com/@types/color-convert/-/color-convert-2.0.3.tgz#e93f5c991eda87a945058b47044f5f0008b0dce9" + integrity sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg== + dependencies: + "@types/color-name" "*" + +"@types/color-name@*": + version "1.1.4" + resolved "https://registry.npmmirror.com/@types/color-name/-/color-name-1.1.4.tgz#e002611ff627347818d440a05e81650e9a4053b8" + integrity sha512-hulKeREDdLFesGQjl96+4aoJSHY5b2GRjagzzcqCfIrWhe5vkCqIvrLbqzBaI1q94Vg8DNJZZqTR5ocdWmWclg== + +"@types/color@^3.0.6": + version "3.0.6" + resolved "https://registry.npmmirror.com/@types/color/-/color-3.0.6.tgz#29c27a99d4de2975e1676712679a0bd7f646a3fb" + integrity sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A== + dependencies: + "@types/color-convert" "*" + +"@types/conventional-commits-parser@^5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#8c9d23e0b415b24b91626d07017303755d542dc8" + integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== + dependencies: + "@types/node" "*" + +"@types/crypto-js@^4.2.2": + version "4.2.2" + resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.2.2.tgz#771c4a768d94eb5922cc202a3009558204df0cea" + integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/hammerjs@^2.0.36": + version "2.0.45" + resolved "https://registry.npmmirror.com/@types/hammerjs/-/hammerjs-2.0.45.tgz#ffa764bb68a66c08db6efb9c816eb7be850577b1" + integrity sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ== + +"@types/he@^1.2.3": + version "1.2.3" + resolved "https://registry.npmmirror.com/@types/he/-/he-1.2.3.tgz#c33ca3096f30cbd5d68d78211572de3f9adff75a" + integrity sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/lodash.shuffle@^4.2.9": + version "4.2.9" + resolved "https://registry.npmmirror.com/@types/lodash.shuffle/-/lodash.shuffle-4.2.9.tgz#4af1b1c98dd8be8c0c6387e6a62caa476d0594a9" + integrity sha512-4siLZ4/vQH4T7Bm4254sG4n6hh9k7vd/bqfDVoeIwSha4Itu3MuoTxPX2I2Tue2JN94y7Y2I27QzwHZLdMlrBg== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*", "@types/lodash@^4.14.53": + version "4.17.7" + resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "22.1.0" + resolved "https://registry.npmmirror.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" + integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== + dependencies: + undici-types "~6.13.0" + +"@types/node@16.9.1": + version "16.9.1" + resolved "https://registry.npmmirror.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== + +"@types/node@^10.11.7": + version "10.17.60" + resolved "https://registry.npmmirror.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^18.0.0": + version "18.19.43" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.19.43.tgz#fe01bb599b60bb3279c26d0fdb751d2f3e299ae0" + integrity sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g== + dependencies: + undici-types "~5.26.4" + +"@types/object-path@^0.11.4": + version "0.11.4" + resolved "https://registry.npmmirror.com/@types/object-path/-/object-path-0.11.4.tgz#a14529227500faf7891d003b2c7f5772c4a5dfdc" + integrity sha512-4tgJ1Z3elF/tOMpA8JLVuR9spt9Ynsf7+JjqsQ2IqtiPJtcLoHoXcT6qU4E10cPFqyXX5HDm9QwIzZhBSkLxsw== + +"@types/path-browserify@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@types/path-browserify/-/path-browserify-1.0.2.tgz#14b62d4371316016f254b9cca5c10e60ef33dcc0" + integrity sha512-ZkC5IUqqIFPXx3ASTTybTzmQdwHwe2C0u3eL75ldQ6T9E9IWFJodn6hIfbZGab73DfyiHN4Xw15gNxUq2FbvBA== + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/qs@^6.9.15": + version "6.9.15" + resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/react-native-background-timer@^2.0.2": + version "2.0.2" + resolved "https://registry.npmmirror.com/@types/react-native-background-timer/-/react-native-background-timer-2.0.2.tgz#22f9126124068a0ee6a812e16f98e270c2b9b2c7" + integrity sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ== + +"@types/react-test-renderer@^18.0.0": + version "18.3.0" + resolved "https://registry.npmmirror.com/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz#839502eae70058a4ae161f63385a8e7929cef4c0" + integrity sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.2.6": + version "18.3.3" + resolved "https://registry.npmmirror.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^15.0.0": + version "15.0.19" + resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" + integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.1.1": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + 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.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@urql/core@2.3.6": + version "2.3.6" + resolved "https://registry.npmmirror.com/@urql/core/-/core-2.3.6.tgz#ee0a6f8fde02251e9560c5f17dce5cd90f948552" + integrity sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw== + dependencies: + "@graphql-typed-document-node/core" "^3.1.0" + wonka "^4.0.14" + +"@urql/core@>=2.3.1": + version "5.0.5" + resolved "https://registry.npmmirror.com/@urql/core/-/core-5.0.5.tgz#8b7d864c40ca30c3ad29bbda93ad718f78a3d055" + integrity sha512-KmWRlN8dJz+XU21wmhcHcTV11n1K7zxaMtVwOhkH7b8H5Z5nuFKY5EkUsWqPlZl53YPiKwTtOMpptz5hamVVNQ== + dependencies: + "@0no-co/graphql.web" "^1.0.5" + wonka "^6.3.2" + +"@urql/exchange-retry@0.3.0": + version "0.3.0" + resolved "https://registry.npmmirror.com/@urql/exchange-retry/-/exchange-retry-0.3.0.tgz#13252108b5a111aab45f9982f4db18d1a286e423" + integrity sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg== + dependencies: + "@urql/core" ">=2.3.1" + wonka "^4.0.14" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +"@xmldom/xmldom@~0.7.7": + version "0.7.13" + resolved "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.7.13.tgz#ff34942667a4e19a9f4a0996a76814daac364cf3" + integrity sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g== + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abs-svg-path@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA== + +accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.8" + resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.11.0: + version "8.17.1" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +anser@^1.4.9: + version "1.4.10" + resolved "https://registry.npmmirror.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" + integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== + dependencies: + environment "^1.0.0" + +ansi-fragments@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" + integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w== + dependencies: + colorette "^1.0.7" + slice-ansi "^2.0.0" + strip-ansi "^5.0.0" + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-base@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" + integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +appdirsjs@^1.2.4: + version "1.2.7" + resolved "https://registry.npmmirror.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3" + integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw== + +application-config-path@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/application-config-path/-/application-config-path-0.1.1.tgz#8b5ac64ff6afdd9bd70ce69f6f64b6998f5f756e" + integrity sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw== + +arg@5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.3, asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +ast-types@0.15.2: + version "0.15.2" + resolved "https://registry.npmmirror.com/ast-types/-/ast-types-0.15.2.tgz#39ae4809393c4b16df751ee563411423e85fb49d" + integrity sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg== + dependencies: + tslib "^2.0.1" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^1.7.3: + version "1.7.3" + resolved "https://registry.npmmirror.com/axios/-/axios-1.7.3.tgz#a1125f2faf702bc8e8f2104ec3a76fab40257d85" + integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.npmmirror.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-jest@^29.6.3, babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-module-resolver@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz#cdeac5d4aaa3b08dd1ac23ddbf516660ed2d293e" + integrity sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg== + dependencies: + find-babel-config "^2.1.1" + glob "^9.3.3" + pkg-up "^3.1.0" + reselect "^4.1.7" + resolve "^1.22.8" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + +babel-plugin-react-compiler@^0.0.0-experimental-592953e-20240517: + version "0.0.0" + resolved "https://registry.npmmirror.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0.tgz#1a1f9867fad83f217f0b3fe6f1b94cca0b77b68b" + integrity sha512-Kigl0V36a/6hLVH7+CCe1CCtU3mFBqBd829V//VtuG7I/pyq+B2QZJqOefd63snQmdfCryNhO9XW1FbGPBvYDA== + +babel-plugin-react-native-web@~0.19.10: + version "0.19.12" + resolved "https://registry.npmmirror.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.12.tgz#90481ee72b515020b06cb644abe1e8a16590bd86" + integrity sha512-eYZ4+P6jNcB37lObWIg0pUbi7+3PKoU1Oie2j0C8UF3cXyXoR74tO2NBjI/FORb2LJyItJZEAmjU5pSaJYEL1w== + +babel-plugin-transform-flow-enums@^0.0.2: + version "0.0.2" + resolved "https://registry.npmmirror.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz#d1d0cc9bdc799c850ca110d0ddc9f21b9ec3ef25" + integrity sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ== + dependencies: + "@babel/plugin-syntax-flow" "^7.12.1" + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.npmmirror.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-expo@~11.0.12: + version "11.0.12" + resolved "https://registry.npmmirror.com/babel-preset-expo/-/babel-preset-expo-11.0.12.tgz#633f13f547860df3a9b540bf55d2a1033a913d2d" + integrity sha512-hUuKdzSo8+H1oXQvKvlHRMHTxl+nN6YhFGlKiIxPa0E+gYfMEp8FnnStc/2Hwmip5rgJzQs6KF63KKRUc75xAg== + dependencies: + "@babel/plugin-proposal-decorators" "^7.12.9" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/preset-react" "^7.22.15" + "@babel/preset-typescript" "^7.23.0" + "@react-native/babel-preset" "0.74.85" + babel-plugin-react-compiler "^0.0.0-experimental-592953e-20240517" + babel-plugin-react-native-web "~0.19.10" + react-refresh "^0.14.2" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-64@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== + +base-64@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/base-64/-/base-64-1.0.0.tgz#09d0f2084e32a3fd08c2475b973788eee6ae8f4a" + integrity sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg== + +base64-js@^1.2.3, base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +better-opn@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" + integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== + dependencies: + open "^8.0.4" + +big-integer@1.6.x, big-integer@^1.6.52: + version "1.6.52" + resolved "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.npmmirror.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + integrity sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA== + dependencies: + stream-buffers "~2.2.0" + +bplist-creator@0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== + dependencies: + stream-buffers "2.2.x" + +bplist-parser@0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1" + integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA== + dependencies: + big-integer "1.6.x" + +bplist-parser@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.3.2.tgz#3ac79d67ec52c4c107893e0237eb787cbacbced7" + integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ== + dependencies: + big-integer "1.6.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.0, browserslist@^4.23.1: + version "4.23.3" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== + dependencies: + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-equal@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA== + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.2.0, buffer@^5.4.3, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc" + integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +cacache@^18.0.2: + version "18.0.4" + resolved "https://registry.npmmirror.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001646: + version "1.0.30001646" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz#d472f2882259ba032dd73ee069ff01bfd059b25d" + integrity sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw== + +centra@^2.7.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/centra/-/centra-2.7.0.tgz#4c8312a58436e8a718302011561db7e6a2b0ec18" + integrity sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg== + dependencies: + follow-redirects "^1.15.6" + +chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.3.0, chalk@~5.3.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +charenc@0.0.2, charenc@~0.0.1: + version "0.0.2" + resolved "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + 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.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-launcher@^0.15.2: + version "0.15.2" + resolved "https://registry.npmmirror.com/chrome-launcher/-/chrome-launcher-0.15.2.tgz#4e6404e32200095fdce7f6a1e1004f9bd36fa5da" + integrity sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ== + dependencies: + "@types/node" "*" + escape-string-regexp "^4.0.0" + is-wsl "^2.2.0" + lighthouse-logger "^1.0.0" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0, ci-info@^3.3.0: + version "3.9.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + +cli-spinners@^2.0.0, cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colorette@^1.0.7: + version "1.4.0" + resolved "https://registry.npmmirror.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.4, command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.npmmirror.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +commander@~12.1.0: + version "12.1.0" + resolved "https://registry.npmmirror.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +compare-versions@^6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + +component-type@^1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/component-type/-/component-type-1.2.2.tgz#4458ecc0c1871efc6288bfaff0cbdab08141d079" + integrity sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.1: + version "1.7.4" + resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect@^3.6.5, connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmmirror.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +conventional-changelog-angular@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-conventionalcommits@^7.0.2: + version "7.0.2" + resolved "https://registry.npmmirror.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" + integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== + dependencies: + compare-func "^2.0.0" + +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== + dependencies: + JSONStream "^1.3.5" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-js-compat@^3.36.1, core-js-compat@^3.37.1: + version "3.37.1" + resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== + dependencies: + browserslist "^4.23.0" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig-typescript-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz#0d3becfe022a871f7275ceb2397d692e06045dc8" + integrity sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== + dependencies: + jiti "^1.19.1" + +cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^8.1.3: + version "8.3.6" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2, crypt@~0.0.1: + version "0.0.2" + resolved "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +dag-map@~1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/dag-map/-/dag-map-1.0.2.tgz#e8379f041000ed561fc515475c1ed2c85eece8d7" + integrity sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw== + +dargs@^8.0.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" + integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dayjs@^1.11.12, dayjs@^1.8.15: + version "1.11.12" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" + integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== + +debug@2.6.9, debug@^2.2.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.4: + version "4.3.6" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.npmmirror.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2, deepmerge@^4.3.0, deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.0.0: + version "6.1.1" + resolved "https://registry.npmmirror.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~11.0.6: + version "11.0.6" + resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-11.0.6.tgz#f2c840fd924d7c77a94eff98f153331d876882d3" + integrity sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g== + dependencies: + dotenv "^16.4.4" + +dotenv@^16.4.4, dotenv@~16.4.5: + version "16.4.5" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.4: + version "1.5.4" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz#cd477c830dd6fca41fbd5465c1ff6ce08ac22343" + integrity sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.npmmirror.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/entities/-/entities-5.0.0.tgz#b2ab51fe40d995817979ec79dd621154c3c0f62b" + integrity sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA== + +env-editor@^0.4.1: + version "0.4.2" + resolved "https://registry.npmmirror.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" + integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== + +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.10.0: + version "7.13.0" + resolved "https://registry.npmmirror.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + +eol@^0.9.1: + version "0.9.1" + resolved "https://registry.npmmirror.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" + integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +errorhandler@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91" + integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A== + dependencies: + accepts "~1.3.7" + escape-html "~1.0.3" + +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.19: + version "1.0.19" + resolved "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.10.0" + resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + +eslint-plugin-eslint-comments@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" + +eslint-plugin-ft-flow@^2.0.1: + version "2.0.3" + resolved "https://registry.npmmirror.com/eslint-plugin-ft-flow/-/eslint-plugin-ft-flow-2.0.3.tgz#3b3c113c41902bcbacf0e22b536debcfc3c819e8" + integrity sha512-Vbsd/b+LYA99jUbsL6viEUWShFaYQt2YQs3QN3f+aeszOhh2sgdcU0mjzDyD4yyBvMc8qy2uwvBBWfMzEX06tg== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + +eslint-plugin-jest@^27.9.0: + version "27.9.0" + resolved "https://registry.npmmirror.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.6.0: + version "4.6.2" + resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react-native-globals@^0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2" + integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g== + +eslint-plugin-react-native@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react-native/-/eslint-plugin-react-native-4.1.0.tgz#5343acd3b2246bc1b857ac38be708f070d18809f" + integrity sha512-QLo7rzTBOl43FvVqDdq5Ql9IoElIuTdjrz9SKAXCvULvBoRZ44JGSkx9z4999ZusCsb4rK3gjS8gOGyeYqZv2Q== + dependencies: + eslint-plugin-react-native-globals "^0.1.1" + +eslint-plugin-react@^7.30.1: + version "7.35.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz#00b1e4559896710e58af6358898f2ff917ea4c41" + integrity sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.2" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.19" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.19.0: + version "8.57.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + 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" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0, event-target-shim@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +exec-async@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301" + integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0, execa@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^8.0.1, execa@~8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +exif-parser@^0.1.12: + version "0.1.12" + resolved "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" + integrity sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw== + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +expo-asset@~10.0.10: + version "10.0.10" + resolved "https://registry.npmmirror.com/expo-asset/-/expo-asset-10.0.10.tgz#9e6e02c1a6ec3d19b50d5e615e4dd8e5cc30e857" + integrity sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A== + dependencies: + expo-constants "~16.0.0" + invariant "^2.2.4" + md5-file "^3.2.3" + +expo-constants@~16.0.0: + version "16.0.2" + resolved "https://registry.npmmirror.com/expo-constants/-/expo-constants-16.0.2.tgz#eb5a1bddb7308fd8cadac8fc44decaf4784cac5e" + integrity sha512-9tNY3OVO0jfiMzl7ngb6IOyR5VFzNoN5OOazUWoeGfmMqVB5kltTemRvKraK9JRbBKIw+SOYLEmF0sEqgFZ6OQ== + dependencies: + "@expo/config" "~9.0.0" + "@expo/env" "~0.3.0" + +expo-file-system@~17.0.1: + version "17.0.1" + resolved "https://registry.npmmirror.com/expo-file-system/-/expo-file-system-17.0.1.tgz#b9f8af8c1c06ec71d96fd7a0d2567fa9e1c88f15" + integrity sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw== + +expo-font@~12.0.9: + version "12.0.9" + resolved "https://registry.npmmirror.com/expo-font/-/expo-font-12.0.9.tgz#096860a6b8b5dd54152262eafd318593ec2db48c" + integrity sha512-seTCyf0tbgkAnp3ZI9ZfK9QVtURQUgFnuj+GuJ5TSnN0XsOtVe1s2RxTvmMgkfuvfkzcjJ69gyRpsZS1cC8hjw== + dependencies: + fontfaceobserver "^2.1.0" + +expo-keep-awake@~13.0.2: + version "13.0.2" + resolved "https://registry.npmmirror.com/expo-keep-awake/-/expo-keep-awake-13.0.2.tgz#5ef31311a339671eec9921b934fdd90ab9652b0e" + integrity sha512-kKiwkVg/bY0AJ5q1Pxnm/GvpeB6hbNJhcFsoOWDh2NlpibhCLaHL826KHUM+WsnJRbVRxJ+K9vbPRHEMvFpVyw== + +expo-modules-autolinking@1.11.1: + version "1.11.1" + resolved "https://registry.npmmirror.com/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz#4a867f727d9dfde07de8dde14b333a3cbf82ce3c" + integrity sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw== + dependencies: + chalk "^4.1.0" + commander "^7.2.0" + fast-glob "^3.2.5" + find-up "^5.0.0" + fs-extra "^9.1.0" + +expo-modules-core@1.12.20: + version "1.12.20" + resolved "https://registry.npmmirror.com/expo-modules-core/-/expo-modules-core-1.12.20.tgz#072dea10791f32ea5d1d3b15a7d5fd1984173429" + integrity sha512-CCXjlgT8lDAufgt912P1W7TwD+KAylfIttc1Doh1a0hAfkdkUsDRmrgthnYrrxEo2ECVpbaB71Epp1bnZ1rRrA== + dependencies: + invariant "^2.2.4" + +expo-splash-screen@~0.27.5: + version "0.27.5" + resolved "https://registry.npmmirror.com/expo-splash-screen/-/expo-splash-screen-0.27.5.tgz#bcc1ebb4e761e19a1f2112469f3d424a36fb1e2c" + integrity sha512-9rdZuLkFCfgJBxrheUsOEOIW6Rp+9NVlpSE0hgXQwbTCLTncf00IHSE8/L2NbFyeDLNjof1yZBppaV7tXHRUzA== + dependencies: + "@expo/prebuild-config" "7.0.6" + +expo@^51.0.0: + version "51.0.24" + resolved "https://registry.npmmirror.com/expo/-/expo-51.0.24.tgz#fb64a85ded249d3f64e9aecb40b9fa9e200b4bb4" + integrity sha512-HoOuNIWXzS6Gxifcb0N+qRt5K6iR9YitQaWIVNB8elyupvQdyI566IMgMBiO45NgpO5es0sfFNNBasxBHLkbUw== + dependencies: + "@babel/runtime" "^7.20.0" + "@expo/cli" "0.18.26" + "@expo/config" "9.0.3" + "@expo/config-plugins" "8.0.8" + "@expo/metro-config" "0.18.10" + "@expo/vector-icons" "^14.0.0" + babel-preset-expo "~11.0.12" + expo-asset "~10.0.10" + expo-file-system "~17.0.1" + expo-font "~12.0.9" + expo-keep-awake "~13.0.2" + expo-modules-autolinking "1.11.1" + expo-modules-core "1.12.20" + fbemitter "^3.0.0" + whatwg-url-without-unicode "8.0.0-3" + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + +fast-xml-parser@^4.0.12, fast-xml-parser@^4.2.4, fast-xml-parser@^4.4.1: + version "4.4.1" + resolved "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0: + version "3.0.5" + resolved "https://registry.npmmirror.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^1.0.35" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +fetch-retry@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/fetch-retry/-/fetch-retry-4.1.1.tgz#fafe0bb22b54f4d0a9c788dff6dd7f8673ca63f3" + integrity sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^16.5.4: + version "16.5.4" + resolved "https://registry.npmmirror.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-babel-config@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/find-babel-config/-/find-babel-config-2.1.1.tgz#93703fc8e068db5e4c57592900c5715dd04b7e5b" + integrity sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA== + dependencies: + json5 "^2.2.3" + path-exists "^4.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0, find-up@~5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" + integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== + dependencies: + locate-path "^7.2.0" + path-exists "^5.0.0" + unicorn-magic "^0.1.0" + +find-yarn-workspace-root@~2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +flow-enums-runtime@^0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz#5bb0cd1b0a3e471330f4d109039b7eba5cb3e787" + integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== + +flow-parser@0.*: + version "0.242.1" + resolved "https://registry.npmmirror.com/flow-parser/-/flow-parser-0.242.1.tgz#d95977303d2cca0c1cb39394f5f5098d1ed5fc95" + integrity sha512-E3ml21Q1S5cMAyPbtYslkvI6yZO5oCS/S2EoteeFH8Kx9iKOv/YOJ+dGd/yMf+H3YKfhMKjnOpyNwrO7NdddWA== + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +fontfaceobserver@^2.1.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz#5fb392116e75d5024b7ec8e4f2ce92106d1488c8" + integrity sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.2.1" + resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +freeport-async@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4" + integrity sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-extra@^8.1.0, fs-extra@~8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +getenv@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" + integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== + +gifwrap@^0.9.2: + version "0.9.4" + resolved "https://registry.npmmirror.com/gifwrap/-/gifwrap-0.9.4.tgz#f4eb6169ba027d61df64aafbdcb1f8ae58ccc0c5" + integrity sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ== + dependencies: + image-q "^4.0.0" + omggif "^1.0.10" + +git-raw-commits@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" + integrity sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== + dependencies: + dargs "^8.0.0" + meow "^12.0.1" + split2 "^4.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmmirror.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.2.2: + version "10.4.5" + resolved "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmmirror.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^9.3.3: + version "9.3.5" + resolved "https://registry.npmmirror.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +global-directory@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" + integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== + dependencies: + ini "4.1.1" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql-tag@^2.10.1: + version "2.12.6" + resolved "https://registry.npmmirror.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@15.8.0: + version "15.8.0" + resolved "https://registry.npmmirror.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hermes-estree@0.19.1: + version "0.19.1" + resolved "https://registry.npmmirror.com/hermes-estree/-/hermes-estree-0.19.1.tgz#d5924f5fac2bf0532547ae9f506d6db8f3c96392" + integrity sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g== + +hermes-estree@0.20.1: + version "0.20.1" + resolved "https://registry.npmmirror.com/hermes-estree/-/hermes-estree-0.20.1.tgz#0b9a544cf883a779a8e1444b915fa365bef7f72d" + integrity sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg== + +hermes-parser@0.19.1: + version "0.19.1" + resolved "https://registry.npmmirror.com/hermes-parser/-/hermes-parser-0.19.1.tgz#1044348097165b7c93dc198a80b04ed5130d6b1a" + integrity sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A== + dependencies: + hermes-estree "0.19.1" + +hermes-parser@0.20.1: + version "0.20.1" + resolved "https://registry.npmmirror.com/hermes-parser/-/hermes-parser-0.20.1.tgz#ad10597b99f718b91e283f81cbe636c50c3cff92" + integrity sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA== + dependencies: + hermes-estree "0.20.1" + +hermes-profile-transformer@^0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz#bd0f5ecceda80dd0ddaae443469ab26fb38fc27b" + integrity sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ== + dependencies: + source-map "^0.7.3" + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^3.0.2: + version "3.0.8" + resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hot-patcher@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/hot-patcher/-/hot-patcher-2.0.1.tgz#1473b799a3b756460ef226e10cf2cea4d79b435e" + integrity sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +husky@^9.1.4: + version "9.1.4" + resolved "https://registry.npmmirror.com/husky/-/husky-9.1.4.tgz#926fd19c18d345add5eab0a42b2b6d9a80259b34" + integrity sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA== + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.0.5, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.1" + resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +image-q@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/image-q/-/image-q-4.0.0.tgz#31e075be7bae3c1f42a85c469b4732c358981776" + integrity sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw== + dependencies: + "@types/node" "16.9.1" + +image-size@^1.0.2: + version "1.1.1" + resolved "https://registry.npmmirror.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac" + integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ== + dependencies: + queue "6.0.2" + +immer@^10.1.1: + version "10.1.1" + resolved "https://registry.npmmirror.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.npmmirror.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +import-meta-resolve@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-ip@4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== + +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@~1.1.1, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + version "2.15.0" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== + dependencies: + is-extglob "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-invalid-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + integrity sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ== + dependencies: + is-glob "^2.0.0" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2, is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== + dependencies: + text-extensions "^2.0.0" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-valid-path@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + integrity sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A== + dependencies: + is-invalid-path "^0.1.0" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.6.3, jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.6.3, jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.6.3, jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.6.3: + version "29.7.0" + resolved "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +jimp-compact@0.16.1: + version "0.16.1" + resolved "https://registry.npmmirror.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3" + integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww== + +jiti@^1.19.1: + version "1.21.6" + resolved "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + +joi@^17.2.1: + version "17.13.3" + resolved "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +join-component@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" + integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== + +jotai@^2.9.1: + version "2.9.1" + resolved "https://registry.npmmirror.com/jotai/-/jotai-2.9.1.tgz#f32dd16fc16b7b32d940a3a8d452eddfcb16218c" + integrity sha512-t4Q7FIqQB3N/1art4OcqdlEtPmQ2h4DNIzTFhvt06WE0kCpQ1QoG+1A1IGTaQBi2KdDRsnywj+ojmHHKgw6PDA== + +jpeg-js@^0.4.2: + version "0.4.4" + resolved "https://registry.npmmirror.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" + integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsc-android@^250231.0.0: + version "250231.0.0" + resolved "https://registry.npmmirror.com/jsc-android/-/jsc-android-250231.0.0.tgz#91720f8df382a108872fa4b3f558f33ba5e95262" + integrity sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw== + +jsc-safe-url@^0.2.2, jsc-safe-url@^0.2.4: + version "0.2.4" + resolved "https://registry.npmmirror.com/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz#141c14fbb43791e88d5dc64e85a374575a83477a" + integrity sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q== + +jscodeshift@^0.14.0: + version "0.14.0" + resolved "https://registry.npmmirror.com/jscodeshift/-/jscodeshift-0.14.0.tgz#7542e6715d6d2e8bde0b4e883f0ccea358b46881" + integrity sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + babel-core "^7.0.0-bridge.0" + chalk "^4.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^4.0.4" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.21.0" + temp "^0.8.4" + write-file-atomic "^2.3.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-deref-sync@^0.13.0: + version "0.13.0" + resolved "https://registry.npmmirror.com/json-schema-deref-sync/-/json-schema-deref-sync-0.13.0.tgz#cb08b4ff435a48b5a149652d7750fdd071009823" + integrity sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg== + dependencies: + clone "^2.1.2" + dag-map "~1.0.0" + is-valid-path "^0.1.1" + lodash "^4.17.13" + md5 "~2.2.0" + memory-cache "~0.2.0" + traverse "~0.6.6" + valid-url "~1.0.9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +layerr@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/layerr/-/layerr-3.0.0.tgz#bc4e0e5986ffd3ab8c3c88b458f53be8dceea29e" + integrity sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lighthouse-logger@^1.0.0: + version "1.4.2" + resolved "https://registry.npmmirror.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" + integrity sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g== + dependencies: + debug "^2.6.9" + marky "^1.2.2" + +lightningcss-darwin-arm64@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz#56ab071e932f845dbb7667f44f5b78441175a343" + integrity sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg== + +lightningcss-darwin-x64@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.19.0.tgz#c867308b88859ba61a2c46c82b1ca52ff73a1bd0" + integrity sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw== + +lightningcss-linux-arm-gnueabihf@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.19.0.tgz#0f921dc45f2e5c3aea70fab98844ac0e5f2f81be" + integrity sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig== + +lightningcss-linux-arm64-gnu@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.19.0.tgz#027f9df9c7f4ffa127c37a71726245a5794d7ba2" + integrity sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww== + +lightningcss-linux-arm64-musl@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.19.0.tgz#85ea987da868524eac6db94f8e1eaa23d0b688a3" + integrity sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA== + +lightningcss-linux-x64-gnu@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.19.0.tgz#02bec89579ab4153dccc0def755d1fd9e3ee7f3c" + integrity sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ== + +lightningcss-linux-x64-musl@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.19.0.tgz#e36a5df8193ae961d22974635e4c100a1823bb8c" + integrity sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg== + +lightningcss-win32-x64-msvc@1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.19.0.tgz#0854dbd153035eca1396e2227c708ad43655a61c" + integrity sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg== + +lightningcss@~1.19.0: + version "1.19.0" + resolved "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.19.0.tgz#fbbad0975de66252e38d96b5bdd2a62f2dd0ffbf" + integrity sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA== + dependencies: + detect-libc "^1.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.19.0" + lightningcss-darwin-x64 "1.19.0" + lightningcss-linux-arm-gnueabihf "1.19.0" + lightningcss-linux-arm64-gnu "1.19.0" + lightningcss-linux-arm64-musl "1.19.0" + lightningcss-linux-x64-gnu "1.19.0" + lightningcss-linux-x64-musl "1.19.0" + lightningcss-win32-x64-msvc "1.19.0" + +lilconfig@~3.1.1: + version "3.1.2" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^15.2.7: + version "15.2.7" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-15.2.7.tgz#97867e29ed632820c0fb90be06cd9ed384025649" + integrity sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw== + dependencies: + chalk "~5.3.0" + commander "~12.1.0" + debug "~4.3.4" + execa "~8.0.1" + lilconfig "~3.1.1" + listr2 "~8.2.1" + micromatch "~4.0.7" + pidtree "~0.6.0" + string-argv "~0.3.2" + yaml "~2.4.2" + +listr2@~8.2.1: + version "8.2.4" + resolved "https://registry.npmmirror.com/listr2/-/listr2-8.2.4.tgz#486b51cbdb41889108cb7e2c90eeb44519f5a77f" + integrity sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + +load-bmfont@^1.3.1: + version "1.4.2" + resolved "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.2.tgz#e0f4516064fa5be8439f9c3696c01423a64e8717" + integrity sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog== + dependencies: + buffer-equal "0.0.1" + mime "^1.3.4" + parse-bmfont-ascii "^1.0.3" + parse-bmfont-binary "^1.0.5" + parse-bmfont-xml "^1.1.4" + phin "^3.7.1" + xhr "^2.0.1" + xtend "^4.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.2.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@4.0.8, lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash.shuffle@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" + integrity sha512-V/rTAABKLFjoecTZjKSv+A1ZomG8hZg8hlgeG6wwQVD9AGv+10zqqSf6mFq2tVA703Zd5R0YhSuSlXA+E/Ei+Q== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@^4.17.13, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + dependencies: + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +logkitty@^0.7.1: + version "0.7.1" + resolved "https://registry.npmmirror.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" + integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ== + dependencies: + ansi-fragments "^0.2.1" + dayjs "^1.8.15" + yargs "^15.1.0" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^11.0.0: + version "11.0.0" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" + integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +marky@^1.2.2: + version "1.2.5" + resolved "https://registry.npmmirror.com/marky/-/marky-1.2.5.tgz#55796b688cbd72390d2d399eaaf1832c9413e3c0" + integrity sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q== + +md5-file@^3.2.3: + version "3.2.3" + resolved "https://registry.npmmirror.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f" + integrity sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw== + dependencies: + buffer-alloc "^1.1.0" + +md5@^2.2.1, md5@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +md5@~2.2.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ== + dependencies: + charenc "~0.0.1" + crypt "~0.0.1" + is-buffer "~1.1.1" + +md5hex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8" + integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +memoize-one@^5.0.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +memory-cache@~0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" + integrity sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA== + +meow@^12.0.1: + version "12.1.1" + resolved "https://registry.npmmirror.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +metro-babel-transformer@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-babel-transformer/-/metro-babel-transformer-0.80.9.tgz#7051ba377b7d2140abd23f4846bbbb1e81fea99b" + integrity sha512-d76BSm64KZam1nifRZlNJmtwIgAeZhZG3fi3K+EmPOlrR8rDtBxQHDSN3fSGeNB9CirdTyabTMQCkCup6BXFSQ== + dependencies: + "@babel/core" "^7.20.0" + hermes-parser "0.20.1" + nullthrows "^1.1.1" + +metro-cache-key@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-cache-key/-/metro-cache-key-0.80.9.tgz#a04cbb0a7828509bb10dde9789ef761c0c60bc3d" + integrity sha512-hRcYGhEiWIdM87hU0fBlcGr+tHDEAT+7LYNCW89p5JhErFt/QaAkVx4fb5bW3YtXGv5BTV7AspWPERoIb99CXg== + +metro-cache@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-cache/-/metro-cache-0.80.9.tgz#b914318a90dbcd51b4c27836184519c441ba5123" + integrity sha512-ujEdSI43QwI+Dj2xuNax8LMo8UgKuXJEdxJkzGPU6iIx42nYa1byQ+aADv/iPh5sh5a//h5FopraW5voXSgm2w== + dependencies: + metro-core "0.80.9" + rimraf "^3.0.2" + +metro-config@0.80.9, metro-config@^0.80.3: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-config/-/metro-config-0.80.9.tgz#4eb6948b0ddc7c38d9d4ba8ddf22a67ca1c2bc06" + integrity sha512-28wW7CqS3eJrunRGnsibWldqgwRP9ywBEf7kg+uzUHkSFJNKPM1K3UNSngHmH0EZjomizqQA2Zi6/y6VdZMolg== + dependencies: + connect "^3.6.5" + cosmiconfig "^5.0.5" + jest-validate "^29.6.3" + metro "0.80.9" + metro-cache "0.80.9" + metro-core "0.80.9" + metro-runtime "0.80.9" + +metro-core@0.80.9, metro-core@^0.80.3: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-core/-/metro-core-0.80.9.tgz#3af21d0b09d71ec9c0840f028bffb36bc3619727" + integrity sha512-tbltWQn+XTdULkGdzHIxlxk4SdnKxttvQQV3wpqqFbHDteR4gwCyTR2RyYJvxgU7HELfHtrVbqgqAdlPByUSbg== + dependencies: + lodash.throttle "^4.1.1" + metro-resolver "0.80.9" + +metro-file-map@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-file-map/-/metro-file-map-0.80.9.tgz#ed8783f6e35dfc005794344c2a9fcd6e914885aa" + integrity sha512-sBUjVtQMHagItJH/wGU9sn3k2u0nrCl0CdR4SFMO1tksXLKbkigyQx4cbpcyPVOAmGTVuy3jyvBlELaGCAhplQ== + dependencies: + anymatch "^3.0.3" + debug "^2.2.0" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + invariant "^2.2.4" + jest-worker "^29.6.3" + micromatch "^4.0.4" + node-abort-controller "^3.1.1" + nullthrows "^1.1.1" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +metro-minify-terser@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-minify-terser/-/metro-minify-terser-0.80.9.tgz#2b7798cba2bd4bd69cc5ce05a45bf66291542f83" + integrity sha512-FEeCeFbkvvPuhjixZ1FYrXtO0araTpV6UbcnGgDUpH7s7eR5FG/PiJz3TsuuPP/HwCK19cZtQydcA2QrCw446A== + dependencies: + terser "^5.15.0" + +metro-resolver@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-resolver/-/metro-resolver-0.80.9.tgz#bae9120a0553e0cb59da6429e83a7e97465cc1a8" + integrity sha512-wAPIjkN59BQN6gocVsAvvpZ1+LQkkqUaswlT++cJafE/e54GoVkMNCmrR4BsgQHr9DknZ5Um/nKueeN7kaEz9w== + +metro-runtime@0.80.9, metro-runtime@^0.80.3: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-runtime/-/metro-runtime-0.80.9.tgz#665312bd4e4d38fea921b3153d6ab47846eb4f08" + integrity sha512-8PTVIgrVcyU+X/rVCy/9yxNlvXsBCk5JwwkbAm/Dm+Abo6NBGtNjWF0M1Xo/NWCb4phamNWcD7cHdR91HhbJvg== + dependencies: + "@babel/runtime" "^7.0.0" + +metro-source-map@0.80.9, metro-source-map@^0.80.3: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-source-map/-/metro-source-map-0.80.9.tgz#df8f673137548f37ab9f9dcfa771b354a452cfab" + integrity sha512-RMn+XS4VTJIwMPOUSj61xlxgBvPeY4G6s5uIn6kt6HB6A/k9ekhr65UkkDD7WzHYs3a9o869qU8tvOZvqeQzgw== + dependencies: + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + invariant "^2.2.4" + metro-symbolicate "0.80.9" + nullthrows "^1.1.1" + ob1 "0.80.9" + source-map "^0.5.6" + vlq "^1.0.0" + +metro-symbolicate@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-symbolicate/-/metro-symbolicate-0.80.9.tgz#8d1d19d26ebb36b9d13dbd29814fdd71d6009db7" + integrity sha512-Ykae12rdqSs98hg41RKEToojuIW85wNdmSe/eHUgMkzbvCFNVgcC0w3dKZEhSsqQOXapXRlLtHkaHLil0UD/EA== + dependencies: + invariant "^2.2.4" + metro-source-map "0.80.9" + nullthrows "^1.1.1" + source-map "^0.5.6" + through2 "^2.0.1" + vlq "^1.0.0" + +metro-transform-plugins@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-transform-plugins/-/metro-transform-plugins-0.80.9.tgz#473a2c0a9e48043210547abe61cdeedb77725422" + integrity sha512-UlDk/uc8UdfLNJhPbF3tvwajyuuygBcyp+yBuS/q0z3QSuN/EbLllY3rK8OTD9n4h00qZ/qgxGv/lMFJkwP4vg== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + nullthrows "^1.1.1" + +metro-transform-worker@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro-transform-worker/-/metro-transform-worker-0.80.9.tgz#f1d8ef4f77228bb7e1d20d3c06934166e8ee3b28" + integrity sha512-c/IrzMUVnI0hSVVit4TXzt3A1GiUltGVlzCmLJWxNrBGHGrJhvgePj38+GXl1Xf4Fd4vx6qLUkKMQ3ux73bFLQ== + dependencies: + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" + metro "0.80.9" + metro-babel-transformer "0.80.9" + metro-cache "0.80.9" + metro-cache-key "0.80.9" + metro-minify-terser "0.80.9" + metro-source-map "0.80.9" + metro-transform-plugins "0.80.9" + nullthrows "^1.1.1" + +metro@0.80.9, metro@^0.80.3: + version "0.80.9" + resolved "https://registry.npmmirror.com/metro/-/metro-0.80.9.tgz#de3c2011df62036520d51d040d2dde0d015aecb6" + integrity sha512-Bc57Xf3GO2Xe4UWQsBj/oW6YfLPABEu8jfDVDiNmJvoQW4CO34oDPuYKe4KlXzXhcuNsqOtSxpbjCRRVjhhREg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/core" "^7.20.0" + "@babel/generator" "^7.20.0" + "@babel/parser" "^7.20.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" + accepts "^1.3.7" + chalk "^4.0.0" + ci-info "^2.0.0" + connect "^3.6.5" + debug "^2.2.0" + denodeify "^1.2.1" + error-stack-parser "^2.0.6" + graceful-fs "^4.2.4" + hermes-parser "0.20.1" + image-size "^1.0.2" + invariant "^2.2.4" + jest-worker "^29.6.3" + jsc-safe-url "^0.2.2" + lodash.throttle "^4.1.1" + metro-babel-transformer "0.80.9" + metro-cache "0.80.9" + metro-cache-key "0.80.9" + metro-config "0.80.9" + metro-core "0.80.9" + metro-file-map "0.80.9" + metro-resolver "0.80.9" + metro-runtime "0.80.9" + metro-source-map "0.80.9" + metro-symbolicate "0.80.9" + metro-transform-plugins "0.80.9" + metro-transform-worker "0.80.9" + mime-types "^2.1.27" + node-fetch "^2.2.0" + nullthrows "^1.1.1" + rimraf "^3.0.2" + serialize-error "^2.1.0" + source-map "^0.5.6" + strip-ansi "^6.0.0" + throat "^5.0.0" + ws "^7.5.1" + yargs "^17.6.2" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@~4.0.7: + version "4.0.7" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.3.4: + version "1.6.0" + resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.1: + version "2.6.0" + resolved "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^10.0.1: + version "10.0.1" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.npmmirror.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mv@~2: + version "2.1.1" + resolved "https://registry.npmmirror.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.1.23, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanoid@^5.0.7: + version "5.0.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-5.0.7.tgz#6452e8c5a816861fd9d2b898399f7e5fd6944cc6" + integrity sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nested-error-stacks@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" + integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== + +nested-property@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/nested-property/-/nested-property-4.0.0.tgz#a67b5a31991e701e03cdbaa6453bc5b1011bb88d" + integrity sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +nocache@^3.0.1: + version "3.0.4" + resolved "https://registry.npmmirror.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" + integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== + +node-abort-controller@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.npmmirror.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.3.0, node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-forge@^1, node-forge@^1.2.1, node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +node-stream-zip@^1.9.1: + version "1.15.0" + resolved "https://registry.npmmirror.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" + integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== + +node-vibrant@3.1.6: + version "3.1.6" + resolved "https://registry.npmmirror.com/node-vibrant/-/node-vibrant-3.1.6.tgz#8554c3108903232cbe1e722f928469ee4379aa18" + integrity sha512-Wlc/hQmBMOu6xon12ZJHS2N3M+I6J8DhrD3Yo6m5175v8sFkVIN+UjhKVRcO+fqvre89ASTpmiFEP3nPO13SwA== + dependencies: + "@jimp/custom" "^0.16.1" + "@jimp/plugin-resize" "^0.16.1" + "@jimp/types" "^0.16.1" + "@types/lodash" "^4.14.53" + "@types/node" "^10.11.7" + lodash "^4.17.20" + url "^0.11.0" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-svg-path@^1.0.1: + version "1.1.0" + resolved "https://registry.npmmirror.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c" + integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg== + dependencies: + svg-arc-to-cubic-bezier "^3.0.0" + +npm-package-arg@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5" + integrity sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g== + dependencies: + hosted-git-info "^3.0.2" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nullthrows@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + +ob1@0.80.9: + version "0.80.9" + resolved "https://registry.npmmirror.com/ob1/-/ob1-0.80.9.tgz#4ae3edd807536097674ff943509089f5d4e0649f" + integrity sha512-v9yOxowkZbxWhKOaaTyLjIm1aLy4ebMNcSn4NYJKOAI/Qv+SkfEfszpLr2GIxsccmb2Y2HA9qtsqiIJ80ucpVA== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-path@^0.11.8: + version "0.11.8" + resolved "https://registry.npmmirror.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.6, object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +omggif@^1.0.10, omggif@^1.0.9: + version "1.0.10" + resolved "https://registry.npmmirror.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" + integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + +open@^6.2.0: + version "6.4.0" + resolved "https://registry.npmmirror.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +open@^7.0.3: + version "7.4.2" + resolved "https://registry.npmmirror.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^8.0.4, open@^8.3.0: + version "8.4.2" + resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@3.4.0, ora@^3.4.0: + version "3.4.0" + resolved "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-queue@^8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + +p-timeout@^6.1.2: + version "6.1.2" + resolved "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" + integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + +pako@^1.0.5: + version "1.0.11" + resolved "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-bmfont-ascii@^1.0.3: + version "1.0.6" + resolved "https://registry.npmmirror.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" + integrity sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA== + +parse-bmfont-binary@^1.0.5: + version "1.0.6" + resolved "https://registry.npmmirror.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" + integrity sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA== + +parse-bmfont-xml@^1.1.4: + version "1.1.6" + resolved "https://registry.npmmirror.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz#016b655da7aebe6da38c906aca16bf0415773767" + integrity sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA== + dependencies: + xml-parse-from-string "^1.0.0" + xml2js "^0.5.0" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-png@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338" + integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ== + dependencies: + pngjs "^3.3.0" + +parse-svg-path@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +password-prompt@^1.0.4: + version "1.1.3" + resolved "https://registry.npmmirror.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== + dependencies: + ansi-escapes "^4.3.2" + cross-spawn "^7.0.3" + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-dirname@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.5, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-posix@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" + integrity sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA== + +path-scurry@^1.11.1, path-scurry@^1.6.1: + version "1.11.1" + resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + +phin@^2.9.1: + version "2.9.3" + resolved "https://registry.npmmirror.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" + integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== + +phin@^3.7.1: + version "3.7.1" + resolved "https://registry.npmmirror.com/phin/-/phin-3.7.1.tgz#bf841da75ee91286691b10e41522a662aa628fd6" + integrity sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ== + dependencies: + centra "^2.7.0" + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-3.0.1.tgz#817033161def55ec9638567a2f3bbc876b3e7516" + integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag== + +pidtree@~0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pixelmatch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA== + dependencies: + pngjs "^3.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +plist@^3.0.5: + version "3.1.0" + resolved "https://registry.npmmirror.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +pngjs@^3.0.0, pngjs@^3.3.0, pngjs@^3.3.3: + version "3.4.0" + resolved "https://registry.npmmirror.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@~8.4.32: + version "8.4.40" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.40.tgz#eb81f2a4dd7668ed869a6db25999e02e9ad909d8" + integrity sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@2.8.8: + version "2.8.8" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +pretty-bytes@5.6.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^26.5.2, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmmirror.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress@2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +promise@^8.3.0: + version "8.3.0" + resolved "https://registry.npmmirror.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1, prompts@^2.3.2, prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@15.8.1, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +qrcode-terminal@0.11.0: + version "0.11.0" + resolved "https://registry.npmmirror.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e" + integrity sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ== + +qs@^6.12.3, qs@^6.13.0: + version "6.13.0" + resolved "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +query-string@^7.1.3: + version "7.1.3" + resolved "https://registry.npmmirror.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== + dependencies: + decode-uri-component "^0.2.2" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystring@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rc@~1.2.7: + version "1.2.8" + resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-devtools-core@^5.0.0: + version "5.3.1" + resolved "https://registry.npmmirror.com/react-devtools-core/-/react-devtools-core-5.3.1.tgz#d57f5b8f74f16e622bd6a7bc270161e4ba162666" + integrity sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw== + dependencies: + shell-quote "^1.6.1" + ws "^7" + +react-freeze@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/react-freeze/-/react-freeze-1.0.4.tgz#cbbea2762b0368b05cbe407ddc9d518c57c6f3ad" + integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA== + +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: + version "18.3.1" + resolved "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-native-background-timer@^2.4.1: + version "2.4.1" + resolved "https://registry.npmmirror.com/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz#a3bc1cafa8c1e3aeefd0611de120298b67978a0f" + integrity sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g== + +react-native-circular-progress-indicator@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/react-native-circular-progress-indicator/-/react-native-circular-progress-indicator-4.4.2.tgz#5475d045950e6fcc622e54fb63863b274790fb8e" + integrity sha512-BlgshzIIIk0TP/CZY+5oyRsHl2Sb2l6cK5tzfmrVETfn6pN8dhOKrV0i3Z6i0SM8wRgncdUUSRBpCPAexh7JoQ== + dependencies: + react-native-redash "*" + +react-native-device-info@^11.1.0: + version "11.1.0" + resolved "https://registry.npmmirror.com/react-native-device-info/-/react-native-device-info-11.1.0.tgz#7db5c4e5a179dce761efac155a493aa0956a40ab" + integrity sha512-hzXJSObJdezEz0hF7MAJ3tGeoesuQWenXXt9mrQR9Mjb8kXpZ09rqSsZ/quNpJdZpQ3rYiFa3/0GFG5KNn9PBg== + +react-native-document-picker@^9.3.0: + version "9.3.0" + resolved "https://registry.npmmirror.com/react-native-document-picker/-/react-native-document-picker-9.3.0.tgz#4651d354623367d06397fe6dbf4a496f7d92ca6b" + integrity sha512-X/j0xKn8cObckpHTNwE/hW9WzBiP6oKx820FYu1Nat43QnnHmmT6uozFgAUDcJfxmZGcEdLlbv0lNhnyRXJyyA== + dependencies: + invariant "^2.2.4" + +react-native-fast-image@^8.6.3: + version "8.6.3" + resolved "https://registry.npmmirror.com/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz#6edc3f9190092a909d636d93eecbcc54a8822255" + integrity sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg== + +react-native-file-access@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/react-native-file-access/-/react-native-file-access-3.1.0.tgz#0e7371bc82a0899e6ad99560a5503c35801dcf4c" + integrity sha512-wOpfKpJ8s4Csfjcvf7H4L1EtmejM07HQpndzMRWAianLC50EsPc78iV8TQaw5yI7j18rh9fWMqpevz8f5a1rsA== + +react-native-fs@^2.20.0: + version "2.20.0" + resolved "https://registry.npmmirror.com/react-native-fs/-/react-native-fs-2.20.0.tgz#05a9362b473bfc0910772c0acbb73a78dbc810f6" + integrity sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ== + dependencies: + base-64 "^0.1.0" + utf8 "^3.0.0" + +react-native-gesture-handler@^2.18.1: + version "2.18.1" + resolved "https://registry.npmmirror.com/react-native-gesture-handler/-/react-native-gesture-handler-2.18.1.tgz#ec9206f34cd2f34a66c0430b2c416d31ee6dff17" + integrity sha512-WF2fxQ5kTaxHghlkBM4YxO86SyGWVwrSNgJ1E8z/ZtL2xD5B3bg5agvuVFfOzvceC114yq71s6E9vKPz94ZxRw== + dependencies: + "@egjs/hammerjs" "^2.0.17" + hoist-non-react-statics "^3.3.0" + invariant "^2.2.4" + prop-types "^15.7.2" + +react-native-get-random-values@^1.11.0: + version "1.11.0" + resolved "https://registry.npmmirror.com/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz#1ca70d1271f4b08af92958803b89dccbda78728d" + integrity sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ== + dependencies: + fast-base64-decode "^1.0.0" + +react-native-image-colors@^2.4.0: + version "2.4.0" + resolved "https://registry.npmmirror.com/react-native-image-colors/-/react-native-image-colors-2.4.0.tgz#6af1d5fe0e994331de789c1fa33788971f755aec" + integrity sha512-qlC31+UNVthByNLVuYSEQeZghOXn3uy1GLF6lHKlvT1HM1GGFH/LXNhU8iXAoQvUyzNa1bEAOTo09Hwinvp/rA== + dependencies: + node-vibrant "3.1.6" + +react-native-image-picker@^7.1.2: + version "7.1.2" + resolved "https://registry.npmmirror.com/react-native-image-picker/-/react-native-image-picker-7.1.2.tgz#383849d1953caf4578874a1f5e5dd11c737bd5cd" + integrity sha512-b5y5nP60RIPxlAXlptn2QwlIuZWCUDWa/YPUVjgHc0Ih60mRiOg1PSzf0IjHSLeOZShCpirpvSPGnDExIpTRUg== + +react-native-linear-gradient@^2.8.3: + version "2.8.3" + resolved "https://registry.npmmirror.com/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz#9a116649f86d74747304ee13db325e20b21e564f" + integrity sha512-KflAXZcEg54PXkLyflaSZQ3PJp4uC4whM7nT/Uot9m0e/qxFV3p6uor1983D1YOBJbJN7rrWdqIjq0T42jOJyA== + +react-native-logs@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/react-native-logs/-/react-native-logs-5.1.0.tgz#03e73c0789254d13bd1c6dac4874f0ecfee53b37" + integrity sha512-bnTDoML/xH2V16ica6q4OJN7LIT0yz9mgeiAR1l3lvMTV6qfPGpiyy1G39mNfVorGIh3KbMLd6Av8dE2Pc33yA== + +react-native-mmkv@^2.12.2: + version "2.12.2" + resolved "https://registry.npmmirror.com/react-native-mmkv/-/react-native-mmkv-2.12.2.tgz#4bba0f5f04e2cf222494cce3a9794ba6a4894dee" + integrity sha512-6058Aq0p57chPrUutLGe9fYoiDVDNMU2PKV+lLFUJ3GhoHvUrLdsS1PDSCLr00yqzL4WJQ7TTzH+V8cpyrNcfg== + +react-native-pager-view@^6.3.3: + version "6.3.3" + resolved "https://registry.npmmirror.com/react-native-pager-view/-/react-native-pager-view-6.3.3.tgz#00c4426eb3d3b60fa8d5cf430a759209a32c2715" + integrity sha512-HViKBlfN/kBJUSu5mRL/V9Bkf1j7uDZozGAjbzh4o9XYo11qVcIK7IwvfzqrkNerVSDy/cAmZcXbcyWnII8xMA== + +react-native-permissions@^4.1.5: + version "4.1.5" + resolved "https://registry.npmmirror.com/react-native-permissions/-/react-native-permissions-4.1.5.tgz#db4d1ddbf076570043f4fd4168f54bb6020aec92" + integrity sha512-r6VMRacASmtRHS+GZ+5HQCp9p9kiE+UU9magHOZCXZLTJitdTuVHWZRrb4v4oqZGU+zAp3mZhTQftuMMv+WLUg== + +react-native-reanimated@^3.14.0: + version "3.14.0" + resolved "https://registry.npmmirror.com/react-native-reanimated/-/react-native-reanimated-3.14.0.tgz#2118265f3a5cad8c142633e36d76d0f0cc8cc9e8" + integrity sha512-TAxLtCfRyC/nOLeWoX/8MhdIF+Fi1e1NbLhIgEm5Kv9/gioAwSNaqLUYxjIClU1RaLwSTE8iaiHNVhTU4TS9DA== + dependencies: + "@babel/plugin-transform-arrow-functions" "^7.0.0-0" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" + "@babel/plugin-transform-optional-chaining" "^7.0.0-0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" + "@babel/plugin-transform-template-literals" "^7.0.0-0" + "@babel/preset-typescript" "^7.16.7" + convert-source-map "^2.0.0" + invariant "^2.2.4" + +react-native-redash@*: + version "18.1.3" + resolved "https://registry.npmmirror.com/react-native-redash/-/react-native-redash-18.1.3.tgz#725c3efc1908425f1579d8103c27ded94d03e8f6" + integrity sha512-RKdmAjs87iwA8iD7UOQ11rlQL+tZh56O5+5cV1M37Jk+4uH1Fvs22G3Q5v/wGx+0ncwz3wMolLLCezONOodTlA== + dependencies: + abs-svg-path "^0.1.1" + normalize-svg-path "^1.0.1" + parse-svg-path "^0.1.2" + +react-native-safe-area-context@^4.10.8: + version "4.10.8" + resolved "https://registry.npmmirror.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.8.tgz#038bd6a4853a38189c186d119302943c8d13f56f" + integrity sha512-Jx1lovhvIdYygg0UsMCBUJN0Wvj9GlA5bbcBLzjZf93uJpNHzaiHC4hR280+sNVK1+/pMHEyEkXVHDZE5JWn0w== + +react-native-screens@^3.33.0: + version "3.33.0" + resolved "https://registry.npmmirror.com/react-native-screens/-/react-native-screens-3.33.0.tgz#706caf1a5f985160c944ed0d02e576c6c77408eb" + integrity sha512-3bKeT/kS1g/6XqraBqjDtyyci35LDeDIHMoko74o+Z5p1oLEi697GWFVwsG272FF0iuOullUbuRNzCcEfRBASQ== + dependencies: + react-freeze "^1.0.0" + warn-once "^0.1.0" + +react-native-share@^10.2.1: + version "10.2.1" + resolved "https://registry.npmmirror.com/react-native-share/-/react-native-share-10.2.1.tgz#baf94848c2acee6e52f6b28e05c47fa5fa9402be" + integrity sha512-Z2LWGYWH7raM4H6Oauttv1tEhaB43XSWJAN8iS6oaSG9CnyrUBeYFF4QpU1AH5RgNeylXQdN8CtbizCHHt6coQ== + +react-native-svg-transformer@^1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/react-native-svg-transformer/-/react-native-svg-transformer-1.5.0.tgz#75ae4dbdc4b1a1508e75282d54d66900ee5fe3c2" + integrity sha512-RG5fSWJT7mjCQYocgYFUo1KYPLOoypPVG5LQab+pZZO7m4ciGaQIe0mhok3W4R5jLQsEXKo0u+aQGkZV/bZG7w== + dependencies: + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" + "@svgr/plugin-svgo" "^8.1.0" + path-dirname "^1.0.2" + +react-native-svg@^15.4.0: + version "15.4.0" + resolved "https://registry.npmmirror.com/react-native-svg/-/react-native-svg-15.4.0.tgz#a4929deece1f438282e18d007b12af5e4f718fda" + integrity sha512-zkBEbme/Dba4yqreg/oI2P6/6LrLywWY7HhaSwpU7Pb5COpTd2fV6/ShsgZz8GRFFdidUPwWmx01FITUsjhkmw== + dependencies: + css-select "^5.1.0" + css-tree "^1.1.3" + warn-once "0.1.1" + +react-native-tab-view@^3.5.2: + version "3.5.2" + resolved "https://registry.npmmirror.com/react-native-tab-view/-/react-native-tab-view-3.5.2.tgz#2789b8af6148b16835869566bf13dc3b0e6c1b46" + integrity sha512-nE5WqjbeEPsWQx4mtz81QGVvgHRhujTNIIZiMCx3Bj6CBFDafbk7XZp9ocmtzXUQaZ4bhtVS43R4FIiR4LboJw== + dependencies: + use-latest-callback "^0.1.5" + +react-native-track-player@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/react-native-track-player/-/react-native-track-player-4.1.1.tgz#96f8688f270c5a01bc597b6331843b191402502b" + integrity sha512-E5N/eK/+HtAVJUAzXpm1cWz8ROheV9jb0TI6h2bM+333U+DWibTTnT2T1122FkCoXLXIYavtm2FR2if+5jH8cA== + +react-native-url-polyfill@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/react-native-url-polyfill/-/react-native-url-polyfill-2.0.0.tgz#db714520a2985cff1d50ab2e66279b9f91ffd589" + integrity sha512-My330Do7/DvKnEvwQc0WdcBnFPploYKp9CYlefDXzIdEaA+PAhDYllkvGeEroEzvc4Kzzj2O4yVdz8v6fjRvhA== + dependencies: + whatwg-url-without-unicode "8.0.0-3" + +react-native@0.74.4: + version "0.74.4" + resolved "https://registry.npmmirror.com/react-native/-/react-native-0.74.4.tgz#932901ac635b2f135a5e4e210bc52f3f1153b8d0" + integrity sha512-Cox7h0UkFPY+79DsInn2BAhnmGiqKBHKoYHoPAPW8oQCPyna8jvS0hfUmHBWm/MOHSXi4NYPKd5plpD50B3B2Q== + dependencies: + "@jest/create-cache-key-function" "^29.6.3" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native/assets-registry" "0.74.86" + "@react-native/codegen" "0.74.86" + "@react-native/community-cli-plugin" "0.74.86" + "@react-native/gradle-plugin" "0.74.86" + "@react-native/js-polyfills" "0.74.86" + "@react-native/normalize-colors" "0.74.86" + "@react-native/virtualized-lists" "0.74.86" + abort-controller "^3.0.0" + anser "^1.4.9" + ansi-regex "^5.0.0" + base64-js "^1.5.1" + chalk "^4.0.0" + event-target-shim "^5.0.1" + flow-enums-runtime "^0.0.6" + invariant "^2.2.4" + jest-environment-node "^29.6.3" + jsc-android "^250231.0.0" + memoize-one "^5.0.0" + metro-runtime "^0.80.3" + metro-source-map "^0.80.3" + mkdirp "^0.5.1" + nullthrows "^1.1.1" + pretty-format "^26.5.2" + promise "^8.3.0" + react-devtools-core "^5.0.0" + react-refresh "^0.14.0" + react-shallow-renderer "^16.15.0" + regenerator-runtime "^0.13.2" + scheduler "0.24.0-canary-efb381bbf-20230505" + stacktrace-parser "^0.1.10" + whatwg-fetch "^3.0.0" + ws "^6.2.2" + yargs "^17.6.2" + +react-refresh@^0.14.0, react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== + +react-shallow-renderer@^16.15.0: + version "16.15.0" + resolved "https://registry.npmmirror.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" + integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== + dependencies: + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0 || ^18.0.0" + +react-test-renderer@18.2.0: + version "18.2.0" + resolved "https://registry.npmmirror.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" + integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== + dependencies: + react-is "^18.2.0" + react-shallow-renderer "^16.15.0" + scheduler "^0.23.0" + +react@18.2.0: + version "18.2.0" + resolved "https://registry.npmmirror.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readline@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== + +recast@^0.21.0: + version "0.21.5" + resolved "https://registry.npmmirror.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495" + integrity sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg== + dependencies: + ast-types "0.15.2" + esprima "~4.0.0" + source-map "~0.6.1" + tslib "^2.0.1" + +recyclerlistview@4.2.1, recyclerlistview@^4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/recyclerlistview/-/recyclerlistview-4.2.1.tgz#4537a0959400cdce1df1f38d26aab823786e9b13" + integrity sha512-NtVYjofwgUCt1rEsTp6jHQg/47TWjnO92TU2kTVgJ9wsc/ely4HnizHHa+f/dI7qaw4+zcSogElrLjhMltN2/g== + dependencies: + lodash.debounce "4.0.8" + prop-types "15.8.1" + ts-object-utils "0.0.5" + +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: + version "0.13.11" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-slash@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" + integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requireg@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/requireg/-/requireg-0.2.2.tgz#437e77a5316a54c9bcdbbf5d1f755fe093089830" + integrity sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg== + dependencies: + nested-error-stacks "~2.0.1" + rc "~1.2.7" + resolve "~1.7.1" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^4.1.7: + version "4.1.8" + resolved "https://registry.npmmirror.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0, resolve.exports@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.8: + version "1.22.8" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + 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: + version "2.0.0-next.5" + resolved "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@~1.7.1: + version "1.7.1" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + integrity sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw== + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.npmmirror.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +scheduler@0.24.0-canary-efb381bbf-20230505: + version "0.24.0-canary-efb381bbf-20230505" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz#5dddc60e29f91cd7f8b983d7ce4a99c2202d178f" + integrity sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA== + dependencies: + loose-envify "^1.1.0" + +scheduler@^0.23.0: + version "0.23.2" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.18.0, send@^0.18.0: + version "0.18.0" + resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + 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" + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw== + +serve-static@^1.13.1: + version "1.15.0" + resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1, shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-plist@^1.1.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" + integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw== + dependencies: + bplist-creator "0.1.0" + bplist-parser "0.3.1" + plist "^3.0.5" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +slugify@^1.3.4, slugify@^1.6.6: + version "1.6.6" + resolved "https://registry.npmmirror.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" + integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-js@^1.0.1, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.16, source-map-support@~0.5.20, source-map-support@~0.5.21: + version "0.5.21" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^10.0.0: + version "10.0.6" + resolved "https://registry.npmmirror.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== + dependencies: + minipass "^7.0.3" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.npmmirror.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stream-buffers@2.2.x, stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + +string-argv@~0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +string.prototype.matchall@^4.0.11: + version "4.0.11" + resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^5.0.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.npmmirror.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + +structured-headers@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/structured-headers/-/structured-headers-0.4.1.tgz#77abd9410622c6926261c09b9d16cf10592694d1" + integrity sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg== + +sucrase@3.34.0: + version "3.34.0" + resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +sudo-prompt@9.1.1: + version "9.1.1" + resolved "https://registry.npmmirror.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" + integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== + +sudo-prompt@^8.2.0: + version "8.2.5" + resolved "https://registry.npmmirror.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" + integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw== + +sudo-prompt@^9.0.0: + version "9.2.1" + resolved "https://registry.npmmirror.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" + integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-arc-to-cubic-bezier@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" + integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^3.0.2: + version "3.3.2" + resolved "https://registry.npmmirror.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + +tar@^6.0.5, tar@^6.1.11: + version "6.2.1" + resolved "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +temp@^0.8.4: + version "0.8.4" + resolved "https://registry.npmmirror.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + +tempy@0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8" + integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + dependencies: + temp-dir "^1.0.0" + type-fest "^0.3.1" + unique-string "^1.0.0" + +tempy@^0.7.1: + version "0.7.1" + resolved "https://registry.npmmirror.com/tempy/-/tempy-0.7.1.tgz#5a654e6dbd1747cdd561efb112350b55cd9c1d46" + integrity sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg== + dependencies: + del "^6.0.0" + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser@^5.15.0: + version "5.31.3" + resolved "https://registry.npmmirror.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38" + integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.npmmirror.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timm@^1.6.1: + version "1.7.1" + resolved "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" + integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== + +tinycolor2@^1.4.1: + version "1.6.0" + resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +traverse@~0.6.6: + version "0.6.9" + resolved "https://registry.npmmirror.com/traverse/-/traverse-0.6.9.tgz#76cfdbacf06382d460b76f8b735a44a6209d8b81" + integrity sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg== + dependencies: + gopd "^1.0.1" + typedarray.prototype.slice "^1.0.3" + which-typed-array "^1.1.15" + +ts-api-utils@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +ts-object-utils@0.0.5: + version "0.0.5" + resolved "https://registry.npmmirror.com/ts-object-utils/-/ts-object-utils-0.0.5.tgz#95361cdecd7e52167cfc5e634c76345e90a26077" + integrity sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA== + +tslib@2.6.3, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.6.3" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typedarray.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz#bce2f685d3279f543239e4d595e0d021731d2d1a" + integrity sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + typed-array-buffer "^1.0.2" + typed-array-byte-offset "^1.0.2" + +typescript@5.0.4: + version "5.0.4" + resolved "https://registry.npmmirror.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== + +ua-parser-js@^1.0.35: + version "1.0.38" + resolved "https://registry.npmmirror.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" + integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + 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" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== + dependencies: + crypto-random-string "^1.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-join@4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + integrity sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA== + +url-join@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== + +url-parse@^1.5.10: + version "1.5.10" + resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.4" + resolved "https://registry.npmmirror.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== + dependencies: + punycode "^1.4.1" + qs "^6.12.3" + +use-latest-callback@^0.1.5: + version "0.1.11" + resolved "https://registry.npmmirror.com/use-latest-callback/-/use-latest-callback-0.1.11.tgz#e073fcbba792cc95ac661d96bc13b6041956cfe1" + integrity sha512-8nhb73STSD/z3GTHklvNjL8F9wMOo0bj0AFnulpIYuFTm6aQlT3ZcNbXF2YurKImIY8+kpSFSDHZZyQmurGrhw== + +use-latest-callback@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/use-latest-callback/-/use-latest-callback-0.2.1.tgz#4d4e6a9e4817b13142834850dcfa8d24ca4569cf" + integrity sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ== + +utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +utif@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" + integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== + dependencies: + pako "^1.0.5" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.npmmirror.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +uuid@^8.0.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +valid-url@~1.0.9: + version "1.0.9" + resolved "https://registry.npmmirror.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vlq@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" + integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== + +walker@^1.0.7, walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warn-once@0.1.1, warn-once@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/warn-once/-/warn-once-0.1.1.tgz#952088f4fb56896e73fd4e6a3767272a3fccce43" + integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +webdav@^5.7.0: + version "5.7.0" + resolved "https://registry.npmmirror.com/webdav/-/webdav-5.7.0.tgz#b3ca303c8f0f9c160ee01f2d2ec9eb740cb15c5a" + integrity sha512-jmdARXy26UGDRw6uxn9KK7l6BDqshMxnB5LVBxWVlchwQmECXSwNWX81oEp/WaZwYsyzTOR92wt6uxZDpDsxEA== + dependencies: + "@buttercup/fetch" "^0.2.1" + base-64 "^1.0.0" + byte-length "^1.0.2" + entities "^5.0.0" + fast-xml-parser "^4.4.1" + hot-patcher "^2.0.1" + layerr "^3.0.0" + md5 "^2.3.0" + minimatch "^10.0.1" + nested-property "^4.0.0" + node-fetch "^3.3.2" + path-posix "^1.0.0" + url-join "^5.0.0" + url-parse "^1.5.10" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +whatwg-fetch@^3.0.0: + version "3.6.20" + resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + +whatwg-url-without-unicode@8.0.0-3: + version "8.0.0-3" + resolved "https://registry.npmmirror.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b" + integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig== + dependencies: + buffer "^5.4.3" + punycode "^2.1.1" + webidl-conversions "^5.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.4" + resolved "https://registry.npmmirror.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== + dependencies: + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wonka@^4.0.14: + version "4.0.15" + resolved "https://registry.npmmirror.com/wonka/-/wonka-4.0.15.tgz#9aa42046efa424565ab8f8f451fcca955bf80b89" + integrity sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg== + +wonka@^6.3.2: + version "6.3.4" + resolved "https://registry.npmmirror.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" + integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^6.2.2: + version "6.2.3" + resolved "https://registry.npmmirror.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" + integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== + dependencies: + async-limiter "~1.0.0" + +ws@^7, ws@^7.5.1: + version "7.5.10" + resolved "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.12.1: + version "8.18.0" + resolved "https://registry.npmmirror.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +xcode@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" + integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== + dependencies: + simple-plist "^1.1.0" + uuid "^7.0.3" + +xhr@^2.0.1: + version "2.6.0" + resolved "https://registry.npmmirror.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xml-parse-from-string@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" + integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== + +xml2js@0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/xml2js/-/xml2js-0.6.0.tgz#07afc447a97d2bd6507a1f76eeadddb09f7a8282" + integrity sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@^14.0.0: + version "14.0.0" + resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-14.0.0.tgz#876b5aec4f05ffd5feb97b0a871c855d16fbeb8c" + integrity sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg== + +xmlbuilder@^15.1.1: + version "15.1.1" + resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.2.1: + version "2.5.0" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" + integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== + +yaml@~2.4.2: + version "2.4.5" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" + integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.1.0: + version "15.4.1" + resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.0.0, yargs@^17.3.1, yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==