From e87d49791cd8750abb4591a233053ef0ac1f9acf Mon Sep 17 00:00:00 2001 From: 3846masa <3846masahiro+git@gmail.com> Date: Wed, 18 Dec 2024 16:12:41 +0900 Subject: [PATCH] first commit --- .eslintignore | 2 + .eslintrc.cjs | 6 + .github/ISSUE_TEMPLATE/add-competitor.yml | 43 + .github/ISSUE_TEMPLATE/config.yml | 1 + .github/workflows/request.yml | 48 + .gitignore | 207 + .node-version | 1 + .npmrc | 2 + .prettierignore | 3 + .prettierrc.cjs | 3 + LICENSE | 373 ++ README.md | 16 + assets/tweet.png | Bin 0 -> 3633 bytes package.json | 34 + pnpm-lock.yaml | 4942 +++++++++++++++++ src/calculate.mts | 113 + src/index.mts | 96 + src/reporting/reporter.ts | 116 + src/scoring/assets/image.jpg | Bin 0 -> 184172 bytes .../calculate_admin_create_episode_action.mts | 132 + .../calculate_admin_edit_book_action.mts | 171 + src/scoring/calculate_admin_signin_action.mts | 48 + src/scoring/calculate_author_page.mts | 49 + src/scoring/calculate_book_page.mts | 49 + src/scoring/calculate_episode_page.mts | 50 + src/scoring/calculate_home_page.mts | 49 + .../calculate_open_term_modal_action.mts | 65 + .../calculate_scroll_comic_viewer_action.mts | 96 + src/scoring/calculate_search_book_action.mts | 100 + .../utils/calculate_hackathon_score.mts | 30 + src/scoring/utils/wait_for.mts | 54 + src/utils/create_page.mts | 38 + src/utils/go_to.mts | 36 + src/utils/install_service_worker.mts | 52 + src/utils/signin_action.mts | 35 + src/utils/start_flow.mts | 31 + tsconfig.json | 9 + 37 files changed, 7100 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .github/ISSUE_TEMPLATE/add-competitor.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/workflows/request.yml create mode 100644 .gitignore create mode 100644 .node-version create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.cjs create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/tweet.png create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/calculate.mts create mode 100644 src/index.mts create mode 100644 src/reporting/reporter.ts create mode 100644 src/scoring/assets/image.jpg create mode 100644 src/scoring/calculate_admin_create_episode_action.mts create mode 100644 src/scoring/calculate_admin_edit_book_action.mts create mode 100644 src/scoring/calculate_admin_signin_action.mts create mode 100644 src/scoring/calculate_author_page.mts create mode 100644 src/scoring/calculate_book_page.mts create mode 100644 src/scoring/calculate_episode_page.mts create mode 100644 src/scoring/calculate_home_page.mts create mode 100644 src/scoring/calculate_open_term_modal_action.mts create mode 100644 src/scoring/calculate_scroll_comic_viewer_action.mts create mode 100644 src/scoring/calculate_search_book_action.mts create mode 100644 src/scoring/utils/calculate_hackathon_score.mts create mode 100644 src/scoring/utils/wait_for.mts create mode 100644 src/utils/create_page.mts create mode 100644 src/utils/go_to.mts create mode 100644 src/utils/install_service_worker.mts create mode 100644 src/utils/signin_action.mts create mode 100644 src/utils/start_flow.mts create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..1b823a2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +dist +build diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..59d19ab --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + extends: [require.resolve('@3846masa/configs/eslint')], + rules: { + 'import/namespace': 'off', + }, +}; diff --git a/.github/ISSUE_TEMPLATE/add-competitor.yml b/.github/ISSUE_TEMPLATE/add-competitor.yml new file mode 100644 index 0000000..b8b903c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/add-competitor.yml @@ -0,0 +1,43 @@ +name: 参加登録 +description: Web Speed Hackathon 2024 の参加登録フォームです +title: '[参加登録]' +labels: + - registration +body: + - type: markdown + attributes: + value: | + # ようこそ Web Speed Hackathon 2024 過去問へ! + + **参加する前に、レギュレーションを確認してください** + + - [レギュレーション](https://github.com/CyberAgentHack/web-speed-hackathon-2024/blob/main/docs/regulation.md) + - type: dropdown + id: regulation + attributes: + label: '注意事項・レギュレーション {{regulation}}' + options: + - 注意事項・レギュレーションを確認して、同意しました + validations: + required: true + - type: markdown + attributes: + value: | + ## 計測対象の URL + + [課題のソースコード](https://github.com/CyberAgentHack/web-speed-hackathon-2024) から、アプリケーションをデプロイして、URL を提出してください + - type: input + id: target-url + attributes: + label: '計測対象の URL {{url}}' + placeholder: e.g.) https://web-speed-hackathon-2024.example.com/ + validations: + required: true + - type: markdown + attributes: + value: | + ## 準備が整いました + + 投稿すると、GitHub Actions によって自動計測が始まります! + + - :information_source: もし、1分以上何も反応がない場合は、issue を作り直してみてください diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/workflows/request.yml b/.github/workflows/request.yml new file mode 100644 index 0000000..82cd04c --- /dev/null +++ b/.github/workflows/request.yml @@ -0,0 +1,48 @@ +name: Request +on: + issues: + types: + - opened + issue_comment: + types: + - created +env: + TZ: 'Asia/Tokyo' +jobs: + register: + runs-on: ubuntu-22.04 + if: | + contains(github.event.issue.labels.*.name, 'registration') && ( + (github.event_name == 'issues') || ( + github.event_name == 'issue_comment' && + !github.event.issue.pull_request && + startsWith(github.event.comment.body, '/retry') && + (github.actor == github.event.issue.user.login) + ) + ) + steps: + - if: github.event_name == 'issues' + run: | + gh api -X POST repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/reactions \ + -f content=+1 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - if: github.event_name == 'issue_comment' + run: | + gh api -X POST repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions \ + -f content=+1 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # renovate: tag=v4.1.2 + - uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # renovate: tag=v3.0.0 + with: + package_json_file: 'package.json' + - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # renovate: tag=v4.0.2 + with: + node-version-file: '.node-version' + cache: "pnpm" + - run: pnpm install --frozen-lockfile + - run: pnpm playwright install chromium --with-deps + - run: pnpm start + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3e372e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,207 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux +# Edit at https://www.toptal.com/developers/gitignore?templates=node,windows,macos,linux + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache +.stylelintcache + +# SvelteKit build / generate output +.svelte-kit + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux + +tmp diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..2dbbe00 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +20.11.1 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..c06a4ee --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +save-prefix="" +shell-emulator=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..0dea9e7 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +dist +build +migrations diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..3233918 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + ...require('@3846masa/configs/prettier'), +}; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc3921e --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Web Speed Hackathon 2024 Scoring Tool + +**"Web Speed Hackathon 2024" は、非常に重たい Web アプリをチューニングして、いかに高速にするかを競う競技です。** + +今回のテーマは、架空の漫画サイト「Cyber TOON」です。 +「Cyber TOON」のパフォーマンスを改善してください。 + +- 課題レポジトリ: https://github.com/CyberAgentHack/web-speed-hackathon-2024 + +## 提出方法 + +いつでも計測ができます。評価対象となる環境 (URL) を作成し、次のリンクから参加登録してください。 + +https://github.com/CyberAgentHack/web-speed-hackathon-2024-scoring-tool/issues/new/choose + +(c) CyberAgent diff --git a/assets/tweet.png b/assets/tweet.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbfbf528782457495a5dd27730922eae4549c84 GIT binary patch literal 3633 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.10.0'} + dev: true + + /@actions/artifact@2.1.4: + resolution: {integrity: sha512-nKgNduFA02drKt4rFqXsF6PjWmfKdxZDuWWdenoI1bBzgys3y8O7kw4gAS+gvLOT3EfsyV+mwTIisuXBjwQ3RA==} + dependencies: + '@actions/core': 1.10.1 + '@actions/github': 5.1.1 + '@actions/http-client': 2.2.1 + '@azure/storage-blob': 12.17.0 + '@octokit/core': 3.6.0 + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) + '@octokit/plugin-retry': 3.0.9 + '@octokit/request-error': 5.0.1 + '@protobuf-ts/plugin': 2.9.4 + archiver: 5.3.2 + crypto: 1.0.1 + jwt-decode: 3.1.2 + twirp-ts: 2.5.0(@protobuf-ts/plugin@2.9.4) + unzip-stream: 0.3.1 + transitivePeerDependencies: + - encoding + - ts-proto + dev: false + + /@actions/core@1.10.1: + resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} + dependencies: + '@actions/http-client': 2.2.1 + uuid: 8.3.2 + dev: false + + /@actions/github@5.1.1: + resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==} + dependencies: + '@actions/http-client': 2.2.1 + '@octokit/core': 3.6.0 + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + transitivePeerDependencies: + - encoding + dev: false + + /@actions/github@6.0.0: + resolution: {integrity: sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==} + dependencies: + '@actions/http-client': 2.2.1 + '@octokit/core': 5.1.0 + '@octokit/plugin-paginate-rest': 9.2.1(@octokit/core@5.1.0) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.1.0) + dev: false + + /@actions/http-client@2.2.1: + resolution: {integrity: sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==} + dependencies: + tunnel: 0.0.6 + undici: 5.28.3 + dev: false + + /@azure/abort-controller@1.1.0: + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} + engines: {node: '>=12.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@azure/abort-controller@2.1.1: + resolution: {integrity: sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@azure/core-auth@1.7.1: + resolution: {integrity: sha512-dyeQwvgthqs/SlPVQbZQetpslXceHd4i5a7M/7z/lGEAVwnSluabnQOjF2/dk/hhWgMISusv1Ytp4mQ8JNy62A==} + engines: {node: '>=18.0.0'} + dependencies: + '@azure/abort-controller': 2.1.1 + '@azure/core-util': 1.8.1 + tslib: 2.6.2 + dev: false + + /@azure/core-http@3.0.4: + resolution: {integrity: sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.7.1 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/core-util': 1.8.1 + '@azure/logger': 1.1.1 + '@types/node-fetch': 2.6.11 + '@types/tunnel': 0.0.3 + form-data: 4.0.0 + node-fetch: 2.7.0 + process: 0.11.10 + tslib: 2.6.2 + tunnel: 0.0.6 + uuid: 8.3.2 + xml2js: 0.5.0 + transitivePeerDependencies: + - encoding + dev: false + + /@azure/core-lro@2.7.1: + resolution: {integrity: sha512-kXSlrNHOCTVZMxpXNRqzgh9/j4cnNXU5Hf2YjMyjddRhCXFiFRzmNaqwN+XO9rGTsCOIaaG7M67zZdyliXZG9g==} + engines: {node: '>=18.0.0'} + dependencies: + '@azure/abort-controller': 2.1.1 + '@azure/core-util': 1.8.1 + '@azure/logger': 1.1.1 + tslib: 2.6.2 + dev: false + + /@azure/core-paging@1.6.1: + resolution: {integrity: sha512-3tKIQXSU3mlN+ITz0m2pXLnKK3oQ6/EVcW8ud011Iq+M0rx6Wnm7NUEpoMeOAEedeKlPtemrQzO6YWoDR71O5w==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@azure/core-tracing@1.0.0-preview.13: + resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@opentelemetry/api': 1.8.0 + tslib: 2.6.2 + dev: false + + /@azure/core-util@1.8.1: + resolution: {integrity: sha512-L3voj0StUdJ+YKomvwnTv7gHzguJO+a6h30pmmZdRprJCM+RJlGMPxzuh4R7lhQu1jNmEtaHX5wvTgWLDAmbGQ==} + engines: {node: '>=18.0.0'} + dependencies: + '@azure/abort-controller': 2.1.1 + tslib: 2.6.2 + dev: false + + /@azure/logger@1.1.1: + resolution: {integrity: sha512-/+4TtokaGgC+MnThdf6HyIH9Wrjp+CnCn3Nx3ggevN7FFjjNyjqg0yLlc2i9S+Z2uAzI8GYOo35Nzb1MhQ89MA==} + engines: {node: '>=18.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@azure/storage-blob@12.17.0: + resolution: {integrity: sha512-sM4vpsCpcCApagRW5UIjQNlNylo02my2opgp0Emi8x888hZUvJ3dN69Oq20cEGXkMUWnoCrBaB0zyS3yeB87sQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-http': 3.0.4 + '@azure/core-lro': 2.7.1 + '@azure/core-paging': 1.6.1 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.1.1 + events: 3.3.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + dev: false + + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + dev: true + + /@better-typescript-lib/decorators@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-TFeJUMi+qpt04YevVB7ZI5+gv8n4dHCrLd5AGTSihBbJrlh03MMnjXbSX9yhMb2c+G60LtEIN3j2BiJe4QGkyw==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/dom@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-tmIrAmijhB0c8qSvnis8Rl7C2LrQiQEnot58+JyeCLtWAntuxcDYF/p1BdfYGdALGzjHtwLgzWU2mYmYd+B7kA==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2015@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-zc57rxah/goRgzY7YKq8HgLIB/bO7uHjWegKaQdFnHnJqvDtu/A3CgVdf+OQ0GIwV9T6gxKG/cuFo8DbdR/5pA==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2016@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-UAq6O3LEzThBUELT8+gbqLemh8RHOVh/IiZyQudpyv2eKWj2XTD3hTSLjFY30mRj4pvcJbFSN7bzyC1Ot9bcrw==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2017@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-Gw+Vyq5oRB4o0dWx16QnT2EzyPSco/2QJqmVlarND28WtmIkhd2fzBSeMwZArwC7sNqriwWJcE7RhJ4hMitU5Q==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2018@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-RLDUijcPsZnByj1DGuQ42wexxTdS58ZQuisz24e1kpDGzvmHoLRRT63K6gY5OnTwgmVpLN1fLlIvWVXHAZ9cig==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2019@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-s3aISlNyNDxzAtx3+lwJ8S46jCnFioP/su8B+dbBVPgChaDEaoX0KujvAn+QG5FqWB56FOyyqgewWye0COCktg==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2020@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-mghVyw67zwgpOAc7kQmbM4Y8mvAllan1p+dP/k7CaRsaKA0kPZbwNoPUGGB+4b+KTUg3YMnuCXFGNt1vc1jCiQ==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2021@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-sh9/K4RZbvg67SRhSWs/xngB0JjF4+zZm2vjTuw/dgiANEEgKPv0SUIs4q6KIB3MbBVNw3g9uvk4uH0OTr22MQ==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2022@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-WA3WcughffiWKWvRrevR5vkf/kENAi9vo1ookUNrvIW16Mxfw1nHwEBP7m7+HZbcEv44ZsU0BHLe5uAoi1be+Q==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es2023@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-LsXyyXtRx6D+DlZ/zc1e/VMiiYmU1sT06k9gX3Lksv3FGOpjT5tzee6JBIv58a1JgtL5xF/2g8ayFY+aFPLSdw==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es5@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-H3s7BYX7G1kgSvU4NuwMDrXzwJF2TQcWrGWCGVlw8z/SwaPvbR1Wkfd8teXiKhHGKjS4k0MihpY0BXbVaD81Cg==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/es6@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-ziSzt8heYo2rbWSqs2vBvt9yR5gzJ1TxkvTG0SnXOADIfMx3sVrNFhKGx1VHGDW/fDsseUshVijL4XPKpeErGA==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/esnext@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-BRMZj9z2CrUZXqcBFvzOBKWzADPPCemUU8YDU9G9NaVJ425GS8dK0TcFFs7VU/P73uo58AggUf/hGBc/XFBupA==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/scripthost@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-7682eEjIHhohqx/KCJBgArJc3lgUiL1KWNBB0Fqt0qCkOsdj5fnp0eCX80RAKXxCoigwF8k8vFB2v5zMSF/RKw==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@better-typescript-lib/webworker@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-6JgJpougT1DLEgunHfPFSyw92y+oofMuH5yO3dJE0F6OE809S7b+tGm8Rzy8KgeQmoEos/REMqsjf4dKXgaoOA==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + typescript: 5.4.2 + dev: true + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: false + + /@formatjs/ecma402-abstract@1.18.2: + resolution: {integrity: sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==} + dependencies: + '@formatjs/intl-localematcher': 0.5.4 + tslib: 2.6.2 + dev: false + + /@formatjs/fast-memoize@2.2.0: + resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + dependencies: + tslib: 2.6.2 + dev: false + + /@formatjs/icu-messageformat-parser@2.7.6: + resolution: {integrity: sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.2 + '@formatjs/icu-skeleton-parser': 1.8.0 + tslib: 2.6.2 + dev: false + + /@formatjs/icu-skeleton-parser@1.8.0: + resolution: {integrity: sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.2 + tslib: 2.6.2 + dev: false + + /@formatjs/intl-localematcher@0.5.4: + resolution: {integrity: sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==} + dependencies: + tslib: 2.6.2 + dev: false + + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: false + + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@octokit/auth-token@2.5.0: + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + dependencies: + '@octokit/types': 6.41.0 + dev: false + + /@octokit/auth-token@4.0.0: + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + dev: false + + /@octokit/core@3.6.0: + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/core@5.1.0: + resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} + engines: {node: '>= 18'} + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.0.2 + '@octokit/request': 8.2.0 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.6.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/endpoint@6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/endpoint@9.0.4: + resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/graphql@4.8.0: + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + dependencies: + '@octokit/request': 5.6.3 + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/graphql@7.0.2: + resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + engines: {node: '>= 18'} + dependencies: + '@octokit/request': 8.2.0 + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/openapi-types@12.11.0: + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + dev: false + + /@octokit/openapi-types@20.0.0: + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + dev: false + + /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + dev: false + + /@octokit/plugin-paginate-rest@9.2.1(@octokit/core@5.1.0): + resolution: {integrity: sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + dependencies: + '@octokit/core': 5.1.0 + '@octokit/types': 12.6.0 + dev: false + + /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.6.0 + dev: false + + /@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.1.0): + resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + dependencies: + '@octokit/core': 5.1.0 + '@octokit/types': 12.6.0 + dev: false + + /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + dev: false + + /@octokit/plugin-retry@3.0.9: + resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} + dependencies: + '@octokit/types': 6.41.0 + bottleneck: 2.19.5 + dev: false + + /@octokit/request-error@2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request-error@5.0.1: + resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.6.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request@5.6.3: + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/request@8.2.0: + resolution: {integrity: sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/endpoint': 9.0.4 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.6.0 + universal-user-agent: 6.0.1 + dev: false + + /@octokit/types@12.6.0: + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + dependencies: + '@octokit/openapi-types': 20.0.0 + dev: false + + /@octokit/types@6.41.0: + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + dependencies: + '@octokit/openapi-types': 12.11.0 + dev: false + + /@opentelemetry/api@1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + engines: {node: '>=8.0.0'} + dev: false + + /@paulirish/trace_engine@0.0.12: + resolution: {integrity: sha512-PglukOOYGvjqgMVKNSa3a4grWrWzL97L47bgDCzqAnDSTJ+vDOKxMPXR3rsnLECoZzpbb9LCzS3CEg/NwwhRHQ==} + dev: false + + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true + + /@playwright/test@1.42.1: + resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: 1.42.1 + dev: false + + /@protobuf-ts/plugin-framework@2.9.4: + resolution: {integrity: sha512-9nuX1kjdMliv+Pes8dQCKyVhjKgNNfwxVHg+tx3fLXSfZZRcUHMc1PMwB9/vTvc6gBKt9QGz5ERqSqZc0++E9A==} + dependencies: + '@protobuf-ts/runtime': 2.9.4 + typescript: 3.9.10 + dev: false + + /@protobuf-ts/plugin@2.9.4: + resolution: {integrity: sha512-Db5Laq5T3mc6ERZvhIhkj1rn57/p8gbWiCKxQWbZBBl20wMuqKoHbRw4tuD7FyXi+IkwTToaNVXymv5CY3E8Rw==} + hasBin: true + dependencies: + '@protobuf-ts/plugin-framework': 2.9.4 + '@protobuf-ts/protoc': 2.9.4 + '@protobuf-ts/runtime': 2.9.4 + '@protobuf-ts/runtime-rpc': 2.9.4 + typescript: 3.9.10 + dev: false + + /@protobuf-ts/protoc@2.9.4: + resolution: {integrity: sha512-hQX+nOhFtrA+YdAXsXEDrLoGJqXHpgv4+BueYF0S9hy/Jq0VRTVlJS1Etmf4qlMt/WdigEes5LOd/LDzui4GIQ==} + hasBin: true + dev: false + + /@protobuf-ts/runtime-rpc@2.9.4: + resolution: {integrity: sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA==} + dependencies: + '@protobuf-ts/runtime': 2.9.4 + dev: false + + /@protobuf-ts/runtime@2.9.4: + resolution: {integrity: sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==} + dev: false + + /@puppeteer/browsers@2.2.0: + resolution: {integrity: sha512-MC7LxpcBtdfTbzwARXIkqGZ1Osn3nnZJlm+i0+VqHl72t//Xwl9wICrXT8BwtgC6s1xJNHsxOpvzISUqe92+sw==} + engines: {node: '>=18'} + hasBin: true + dependencies: + debug: 4.3.4 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.4.0 + semver: 7.6.0 + tar-fs: 3.0.5 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@sentry/core@6.19.7: + resolution: {integrity: sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/minimal': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sentry/hub@6.19.7: + resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sentry/minimal@6.19.7: + resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 6.19.7 + '@sentry/types': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sentry/node@6.19.7: + resolution: {integrity: sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==} + engines: {node: '>=6'} + dependencies: + '@sentry/core': 6.19.7 + '@sentry/hub': 6.19.7 + '@sentry/types': 6.19.7 + '@sentry/utils': 6.19.7 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sentry/types@6.19.7: + resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} + engines: {node: '>=6'} + dev: false + + /@sentry/utils@6.19.7: + resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 6.19.7 + tslib: 1.14.1 + dev: false + + /@sideway/address@4.1.5: + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + dev: false + + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: false + + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: false + + /@tsconfig/node-lts-strictest-esm@18.12.1: + resolution: {integrity: sha512-LvBLmaC6Q/txTddLc11OeMHF9XjJFzlilkETJuvBlUvHy9pPiMsoH3nxWZM1FMSO53zp4mJP6gzOzxKEq0me7Q==} + deprecated: TypeScript 5.0 supports combining TSConfigs using array syntax in extends + dev: true + + /@tsconfig/strictest@2.0.3: + resolution: {integrity: sha512-MroLvRhMbqtXI5WBSwoomro6OQS4xnCoudUrMb20JO0vLKUs0bAaCEcvM/immEBSJjFAK1l6jW1oAO8q3Ancrg==} + dev: true + + /@types/common-tags@1.8.4: + resolution: {integrity: sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} + dev: true + + /@types/node-fetch@2.6.11: + resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + dependencies: + '@types/node': 20.11.30 + form-data: 4.0.0 + dev: false + + /@types/node@18.19.26: + resolution: {integrity: sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true + + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@types/tunnel@0.0.3: + resolution: {integrity: sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==} + dependencies: + '@types/node': 20.11.30 + dev: false + + /@types/wait-on@5.3.4: + resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==} + dependencies: + '@types/node': 18.19.26 + dev: false + + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 20.11.30 + dev: false + optional: true + + /@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.3) + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.3): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.3) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + dev: true + + /@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) + '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.0 + tsutils: 3.21.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.2): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.3): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.3) + typescript: 5.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + dev: false + + /archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: false + + /archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + async: 3.2.5 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + dev: false + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.6.2 + dev: false + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /axe-core@4.8.4: + resolution: {integrity: sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==} + engines: {node: '>=4'} + dev: false + + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /b4a@1.6.6: + resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} + requiresBuild: true + dev: false + optional: true + + /bare-fs@2.2.2: + resolution: {integrity: sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==} + requiresBuild: true + dependencies: + bare-events: 2.2.2 + bare-os: 2.2.1 + bare-path: 2.1.0 + streamx: 2.16.1 + dev: false + optional: true + + /bare-os@2.2.1: + resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} + requiresBuild: true + dev: false + optional: true + + /bare-path@2.1.0: + resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==} + requiresBuild: true + dependencies: + bare-os: 2.2.1 + dev: false + optional: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + dev: false + + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + + /better-typescript-lib@2.6.0(typescript@5.4.2): + resolution: {integrity: sha512-TEK5TQX1UlxGGMFuOglZ/05pUIh6jIYk7pny6NY9H34/VzTFvMRDsNzkQsVaTd5X4zWc+zNiJmFyn9uceUSPaQ==} + peerDependencies: + typescript: '>=4.5.2' + dependencies: + '@typescript/lib-decorators': /@better-typescript-lib/decorators@2.6.0(typescript@5.4.2) + '@typescript/lib-dom': /@better-typescript-lib/dom@2.6.0(typescript@5.4.2) + '@typescript/lib-es2015': /@better-typescript-lib/es2015@2.6.0(typescript@5.4.2) + '@typescript/lib-es2016': /@better-typescript-lib/es2016@2.6.0(typescript@5.4.2) + '@typescript/lib-es2017': /@better-typescript-lib/es2017@2.6.0(typescript@5.4.2) + '@typescript/lib-es2018': /@better-typescript-lib/es2018@2.6.0(typescript@5.4.2) + '@typescript/lib-es2019': /@better-typescript-lib/es2019@2.6.0(typescript@5.4.2) + '@typescript/lib-es2020': /@better-typescript-lib/es2020@2.6.0(typescript@5.4.2) + '@typescript/lib-es2021': /@better-typescript-lib/es2021@2.6.0(typescript@5.4.2) + '@typescript/lib-es2022': /@better-typescript-lib/es2022@2.6.0(typescript@5.4.2) + '@typescript/lib-es2023': /@better-typescript-lib/es2023@2.6.0(typescript@5.4.2) + '@typescript/lib-es5': /@better-typescript-lib/es5@2.6.0(typescript@5.4.2) + '@typescript/lib-es6': /@better-typescript-lib/es6@2.6.0(typescript@5.4.2) + '@typescript/lib-esnext': /@better-typescript-lib/esnext@2.6.0(typescript@5.4.2) + '@typescript/lib-scripthost': /@better-typescript-lib/scripthost@2.6.0(typescript@5.4.2) + '@typescript/lib-webworker': /@better-typescript-lib/webworker@2.6.0(typescript@5.4.2) + typescript: 5.4.2 + dev: true + + /binary@0.3.0: + resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} + dependencies: + buffers: 0.1.1 + chainsaw: 0.1.0 + dev: false + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001599 + electron-to-chromium: 1.4.713 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: false + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buffers@0.1.1: + resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} + engines: {node: '>=0.2.0'} + dev: false + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + 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.2 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + dev: false + + /caniuse-lite@1.0.30001599: + resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==} + dev: true + + /chainsaw@0.1.0: + resolution: {integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==} + dependencies: + traverse: 0.3.9 + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + + /chrome-launcher@1.1.1: + resolution: {integrity: sha512-OAQgBmpUzrIuShApIwOpjt7WFripGKcDMW/qeYU+kcl6jBPg87mRG+N2C3Vu+VeCVPqZ/ds3GfI2TK7tpz3Yyw==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + '@types/node': 20.11.30 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /chromium-bidi@0.5.13(devtools-protocol@0.0.1262051): + resolution: {integrity: sha512-OHbYCetDxdW/xmlrafgOiLsIrw4Sp1BEeolbZ1UGJO5v/nekQOJBj/Kzyw6sqKcAVabUTo0GS3cTYgr6zIf00g==} + peerDependencies: + devtools-protocol: '*' + dependencies: + devtools-protocol: 0.0.1262051 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.22.4 + dev: false + + /ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /configstore@5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.11 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: false + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + dependencies: + browserslist: 4.23.0 + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + + /crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + dev: false + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /crypto@1.0.1: + resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} + deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. + dev: false + + /csp_evaluator@1.1.1: + resolution: {integrity: sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==} + dev: false + + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: false + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: false + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true + + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /devtools-protocol@0.0.1232444: + resolution: {integrity: sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==} + dev: false + + /devtools-protocol@0.0.1262051: + resolution: {integrity: sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==} + dev: false + + /devtools-protocol@0.0.869402: + resolution: {integrity: sha512-VvlVYY+VDJe639yHs5PHISzdWTLL3Aw8rO4cvUtwvoxFd6FHbE4OpHHcde52M6096uYYazAmd4l0o5VuFRO2WA==} + dev: false + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dot-object@2.1.4: + resolution: {integrity: sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA==} + hasBin: true + dependencies: + commander: 4.1.1 + glob: 7.2.3 + dev: false + + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: false + + /electron-to-chromium@1.4.713: + resolution: {integrity: sha512-vDarADhwntXiULEdmWd77g2dV6FrNGa8ecAC29MZ4TwPut2fvosD0/5sJd1qWNNe8HcJFAC+F5Lf9jW1NPtWmw==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: false + + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.23.2: + resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} + engines: {node: '>= 0.4'} + 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.5 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: false + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /eslint-config-prettier@9.1.0(eslint@8.57.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.57.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.16.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.3 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.3) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.3) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-sort@2.11.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-Rvt4XZI42KfyBvjvtcoKFEWg6L/nAKfMBagxKwipNfQd6zetwyHgh284XC1rlRzxY7scn0yfKgqdMILQIyKdlA==} + peerDependencies: + eslint: '>=6' + dependencies: + '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + eslint: 8.57.0 + isomorphic-resolve: 1.0.0 + natural-compare: 1.4.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-plugin-unicorn@51.0.1(eslint@8.57.0): + resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.56.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint/eslintrc': 2.1.4 + ci-info: 4.0.0 + clean-regexp: 1.0.0 + core-js-compat: 3.36.1 + eslint: 8.57.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.0 + strip-indent: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@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.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: false + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: false + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: false + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /get-tsconfig@4.7.3: + resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + dependencies: + resolve-pkg-maps: 1.0.0 + + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4 + fs-extra: 11.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /http-link-header@1.1.3: + resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==} + engines: {node: '>=6.0.0'} + dev: false + + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /image-ssim@0.2.0: + resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true + + /intl-messageformat@10.5.11: + resolution: {integrity: sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==} + dependencies: + '@formatjs/ecma402-abstract': 1.18.2 + '@formatjs/fast-memoize': 2.2.0 + '@formatjs/icu-messageformat-parser': 2.7.6 + tslib: 2.6.2 + dev: false + + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: false + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-error-instance@2.0.0: + resolution: {integrity: sha512-5RuM+oFY0P5MRa1nXJo6IcTx9m2VyXYhRtb4h0olsi2GHci4bqZ6akHk+GmCYvDrAR9yInbiYdr2pnoqiOMw/Q==} + engines: {node: '>=16.17.0'} + dev: false + + /is-error-instance@3.0.0: + resolution: {integrity: sha512-K0NeIwAWZGE4KoH1b6xw2+feyE80RqUq0OvZgr8z4gKb1BrF78B9Bo4HWRIe3xMHXbLKkxqhhT6oSNwXFqauJw==} + engines: {node: '>=18.18.0'} + dev: false + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-resolve@1.0.0: + resolution: {integrity: sha512-FWn6176keSYAapzv5P6ZzLdbCXj5uaG49h1y+EXRNqZm2RBztzBOYqCMmSe4Dmo+bIvk7sX/SN4pI/3QmfH3aw==} + dev: true + + /joi@17.12.2: + resolution: {integrity: sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==} + 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 + dev: false + + /jpeg-js@0.4.4: + resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} + dev: false + + /js-library-detector@6.7.0: + resolution: {integrity: sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==} + engines: {node: '>=12'} + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: false + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jwt-decode@3.1.2: + resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.8 + dev: false + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lighthouse-logger@2.0.1: + resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==} + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + dev: false + + /lighthouse-stack-packs@1.12.1: + resolution: {integrity: sha512-i4jTmg7tvZQFwNFiwB+nCK6a7ICR68Xcwo+VIVd6Spi71vBNFUlds5HiDrSbClZdkQDON2Bhqv+KKJIo5zkPeA==} + dev: false + + /lighthouse@11.7.0: + resolution: {integrity: sha512-oQ9fJyNGibt00Q+046ROZXNcMUwFSEcgsJljww3xLtMkWpq5dnmw7zw39CJFGhXcpAA8D6ayiFuWo7uDXjld/g==} + engines: {node: '>=18.16'} + hasBin: true + dependencies: + '@paulirish/trace_engine': 0.0.12 + '@sentry/node': 6.19.7 + axe-core: 4.8.4 + chrome-launcher: 1.1.1 + configstore: 5.0.1 + csp_evaluator: 1.1.1 + devtools-protocol: 0.0.1232444 + enquirer: 2.4.1 + http-link-header: 1.1.3 + intl-messageformat: 10.5.11 + jpeg-js: 0.4.4 + js-library-detector: 6.7.0 + lighthouse-logger: 2.0.1 + lighthouse-stack-packs: 1.12.1 + lodash: 4.17.21 + lookup-closest-locale: 6.2.0 + metaviewport-parser: 0.3.0 + open: 8.4.2 + parse-cache-control: 1.0.1 + ps-list: 8.1.1 + puppeteer-core: 22.6.0 + robots-parser: 3.0.1 + semver: 5.7.2 + speedline-core: 1.4.3 + third-party-web: 0.24.2 + tldts-icann: 6.1.13 + ws: 7.5.9 + yargs: 17.7.2 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: false + + /lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + dev: false + + /lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: false + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /lookup-closest-locale@6.2.0: + resolution: {integrity: sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==} + dev: false + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.2 + dev: false + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: false + + /lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: false + + /marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + dev: false + + /merge-error-cause@5.0.0: + resolution: {integrity: sha512-px3J5V6QJnq5j3WC8gQJPOlCnm3IMz6I4IBU7A/D8713Fk8ptKt1UD1tvEksrsivA3vI39lAr2b/H7A3n9MqKA==} + engines: {node: '>=18.18.0'} + dependencies: + normalize-exception: 3.0.0 + set-error-class: 3.0.0 + set-error-props: 6.0.0 + wrap-error-message: 3.0.0 + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /metaviewport-parser@0.3.0: + resolution: {integrity: sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==} + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: false + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: false + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + dev: false + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-exception@3.0.0: + resolution: {integrity: sha512-SMZtWSLjls45KBgwvS2jWyXLtOI9j90JyQ6tJstl91Gti4W7QwZyF/nWwlFRz/Cx4Gy70DAtLT0EzXYXcPJJUw==} + engines: {node: '>=16.17.0'} + dependencies: + is-error-instance: 2.0.0 + is-plain-obj: 4.1.0 + dev: false + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + dev: true + + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.0 + debug: 4.3.4 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-cache-control@1.0.1: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + dev: false + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.24.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + dev: false + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: false + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: false + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /playwright-core@1.42.1: + resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} + engines: {node: '>=16'} + hasBin: true + dev: false + + /playwright@1.42.1: + resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright-core: 1.42.1 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-packagejson@2.4.12(prettier@3.2.5): + resolution: {integrity: sha512-hifuuOgw5rHHTdouw9VrhT8+Nd7UwxtL1qco8dUfd4XUFQL6ia3xyjSxhPQTsGnSYFraTWy5Omb+MZm/OWDTpQ==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + dependencies: + prettier: 3.2.5 + sort-package-json: 2.8.0 + synckit: 0.9.0 + dev: true + + /prettier-plugin-sort-json@3.1.0(prettier@3.2.5): + resolution: {integrity: sha512-eIDEUjwzekiVd+oKrpd0aoACBTp5zOW71wDTNy+qQ5C9Q8oqt9n9wCm4F+SeRZbXfgblh/WYIguJynImlBXrvQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + prettier: ^3.0.0 + dependencies: + prettier: 3.2.5 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: false + + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false + + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: false + + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.1 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /ps-list@8.1.1: + resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /puppeteer-core@22.6.0: + resolution: {integrity: sha512-xclyGFhxHfZ9l62uXFm+JpgtJHLIZ1qHc7iR4eaIqBNKA5Dg2sDr8yvylfCx5bMN89QWIaxpV6IHsy0qUynK/g==} + engines: {node: '>=18'} + dependencies: + '@puppeteer/browsers': 2.2.0 + chromium-bidi: 0.5.13(devtools-protocol@0.0.1262051) + debug: 4.3.4 + devtools-protocol: 0.0.1262051 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /puppeteer-core@9.1.1: + resolution: {integrity: sha512-zbedbitVIGhmgz0nt7eIdLsnaoVZSlNJfBivqm2w67T8LR2bU1dvnruDZ8nQO0zn++Iet7zHbAOdnuS5+H2E7A==} + engines: {node: '>=10.18.1'} + dependencies: + debug: 4.3.4 + devtools-protocol: 0.0.869402 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + requiresBuild: true + dev: false + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + dependencies: + minimatch: 5.1.6 + dev: false + + /redefine-property@3.0.0: + resolution: {integrity: sha512-ccnADJaJkclGGzRuc8kaNBHmoyOwW+Da2DyPQdiccMdlMyvPvCtIa6kN0sKz+JiW43dQEGFiCSNjyObi372ptA==} + engines: {node: '>=18.18.0'} + dependencies: + is-plain-obj: 4.1.0 + dev: false + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} + engines: {node: '>=8'} + dev: false + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /robots-parser@3.0.1: + resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==} + engines: {node: '>=10.0.0'} + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: false + + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /set-error-class@3.0.0: + resolution: {integrity: sha512-a2Ham0lVgvzp14cm2Z2LM2Ae1HzxI8G+LX6Rv+eTVzM5+pfPU7UtJBSOXktxoBlqlmaPsZmZRR84qY+CoHt6bg==} + engines: {node: '>=18.18.0'} + dependencies: + normalize-exception: 3.0.0 + dev: false + + /set-error-message@3.0.0: + resolution: {integrity: sha512-CaNAe+/oXwT2XqGtK1plJOZYBi+cpwliSiL8yqO00c3Hvp3w4Tjo95ndv/bEJUM/7sWSw+ctF6J5GbiqF98lFQ==} + engines: {node: '>=18.18.0'} + dependencies: + normalize-exception: 3.0.0 + dev: false + + /set-error-props@6.0.0: + resolution: {integrity: sha512-vJ7lRuvcn5NTbuT7QS8k+dh6AN5y1R/V2xZmlwvB48bJ2b8v46z+dgx5k1VGrB9xt7ZnC98jWcikHb6gyIJgAg==} + engines: {node: '>=18.18.0'} + dependencies: + is-error-instance: 3.0.0 + is-plain-obj: 4.1.0 + redefine-property: 3.0.0 + dev: false + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /socks-proxy-agent@8.0.2: + resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + socks: 2.8.1 + transitivePeerDependencies: + - supports-color + dev: false + + /socks@2.8.1: + resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: false + + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true + + /sort-package-json@2.8.0: + resolution: {integrity: sha512-PxeNg93bTJWmDGnu0HADDucoxfFiKkIr73Kv85EBThlI1YQPdc0XovBgg2llD0iABZbu2SlKo8ntGmOP9wOj/g==} + hasBin: true + dependencies: + detect-indent: 7.0.1 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.1.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + sort-object-keys: 1.1.3 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: false + optional: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.17 + dev: true + + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.17 + dev: true + + /spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + dev: true + + /speedline-core@1.4.3: + resolution: {integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==} + engines: {node: '>=8.0'} + dependencies: + '@types/node': 20.11.30 + image-ssim: 0.2.0 + jpeg-js: 0.4.4 + dev: false + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: false + + /storycrawler@4.3.0: + resolution: {integrity: sha512-8C9l5ry9p7PNRYsvDBa3WOCCLywKTUvEaxx8hUKVOm3xxMXGz/BvtjrZbFwcEV7pXrrILG2xZMIyEIODfCsWxQ==} + engines: {node: '>=14.13'} + dependencies: + '@types/node': 18.19.26 + '@types/wait-on': 5.3.4 + chalk: 2.4.2 + puppeteer-core: 9.1.1 + wait-on: 7.2.0 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + dev: false + + /streamx@2.16.1: + resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + optionalDependencies: + bare-events: 2.2.2 + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-fs@3.0.5: + resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} + dependencies: + pump: 3.0.0 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.2.2 + bare-path: 2.1.0 + dev: false + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + dependencies: + b4a: 1.6.6 + fast-fifo: 1.3.2 + streamx: 2.16.1 + dev: false + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /third-party-web@0.24.2: + resolution: {integrity: sha512-8m5jexZL3k+7fsHZleBvVzECTUI+38CYgT+0KkFtu3elXSAm7WbWB3z3jk78CuKQmNWYHoN4u5zb0BUTSpNUrw==} + dev: false + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false + + /tldts-core@6.1.13: + resolution: {integrity: sha512-M1XP4D13YtXARKroULnLsKKuI1NCRAbJmUGGoXqWinajIDOhTeJf/trYUyBoLVx1/Nx1KBKxCrlW57ZW9cMHAA==} + dev: false + + /tldts-icann@6.1.13: + resolution: {integrity: sha512-LWbTMFgDeGATB5ZiDxj96UVMcIqxYbewo6u24UJrkVBOdaTstmNvymkYGvLxLk+JCaoxnh2JQhDATruGT/CvcQ==} + dependencies: + tldts-core: 6.1.13 + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /traverse@0.3.9: + resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} + dev: false + + /ts-api-utils@1.3.0(typescript@5.4.2): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.4.2 + dev: true + + /ts-api-utils@1.3.0(typescript@5.4.3): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.4.3 + dev: true + + /ts-poet@4.15.0: + resolution: {integrity: sha512-sLLR8yQBvHzi9d4R1F4pd+AzQxBfzOSSjfxiJxQhkUoH5bL7RsAC6wgvtVUQdGqiCsyS9rT6/8X2FI7ipdir5g==} + dependencies: + lodash: 4.17.21 + prettier: 2.8.8 + dev: false + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsutils@3.21.0(typescript@5.4.2): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.4.2 + dev: true + + /tsx@4.7.1: + resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.19.12 + get-tsconfig: 4.7.3 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + dev: false + + /twirp-ts@2.5.0(@protobuf-ts/plugin@2.9.4): + resolution: {integrity: sha512-JTKIK5Pf/+3qCrmYDFlqcPPUx+ohEWKBaZy8GL8TmvV2VvC0SXVyNYILO39+GCRbqnuP6hBIF+BVr8ZxRz+6fw==} + hasBin: true + peerDependencies: + '@protobuf-ts/plugin': ^2.5.0 + ts-proto: ^1.81.3 + peerDependenciesMeta: + '@protobuf-ts/plugin': + optional: true + ts-proto: + optional: true + dependencies: + '@protobuf-ts/plugin': 2.9.4 + '@protobuf-ts/plugin-framework': 2.9.4 + camel-case: 4.1.2 + dot-object: 2.1.4 + path-to-regexp: 6.2.1 + ts-poet: 4.15.0 + yaml: 1.10.2 + dev: false + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /typed-array-length@1.0.5: + resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /typescript@3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: false + + /typescript@5.4.2: + resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + engines: {node: '>=14.17'} + hasBin: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: false + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: false + + /undici@5.28.3: + resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: false + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + + /unzip-stream@0.3.1: + resolution: {integrity: sha512-RzaGXLNt+CW+T41h1zl6pGz3EaeVhYlK+rdAap+7DxW5kqsqePO8kRtWPaCiVqdhZc86EctSPVYNix30YOMzmw==} + dependencies: + binary: 0.3.0 + mkdirp: 0.5.6 + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /wait-on@7.2.0: + resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + axios: 1.6.8 + joi: 17.12.2 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + 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 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrap-error-message@3.0.0: + resolution: {integrity: sha512-QoePG1A6p9t6kY6RjOucIJvItmJfViuDs9C84TifNr8zN2oFmeky8SQ3OkUAY7vfefPPB7TUtKbiXjsV29EhLw==} + engines: {node: '>=18.18.0'} + dependencies: + normalize-exception: 3.0.0 + set-error-message: 3.0.0 + dev: false + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xdg-basedir@4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + dev: false + + /xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.3.0 + xmlbuilder: 11.0.1 + dev: false + + /xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: false + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: false + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: false + + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 + dev: false + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + github.com/3846masa/configs/0e9352c7ad57e51187647f2c4aa27baea842d149: + resolution: {tarball: https://codeload.github.com/3846masa/configs/tar.gz/0e9352c7ad57e51187647f2c4aa27baea842d149} + name: '@3846masa/configs' + version: 1.0.325 + dependencies: + '@tsconfig/strictest': 2.0.3 + '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.3) + better-typescript-lib: 2.6.0(typescript@5.4.2) + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-sort: 2.11.0(eslint@8.57.0)(typescript@5.4.2) + eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) + prettier: 3.2.5 + prettier-plugin-packagejson: 2.4.12(prettier@3.2.5) + prettier-plugin-sort-json: 3.1.0(prettier@3.2.5) + typescript: 5.4.2 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true diff --git a/src/calculate.mts b/src/calculate.mts new file mode 100644 index 0000000..58ce5fd --- /dev/null +++ b/src/calculate.mts @@ -0,0 +1,113 @@ +import { setTimeout } from 'node:timers/promises'; + +import mergeErrorCause from 'merge-error-cause'; +import * as playwright from 'playwright'; + +import { calculateAdminCreateEpisodeAction } from './scoring/calculate_admin_create_episode_action.mjs'; +import { calculateAdminEditBookAction } from './scoring/calculate_admin_edit_book_action.mjs'; +import { calculateAdminSigninAction } from './scoring/calculate_admin_signin_action.mjs'; +import { calculateAuthorPage } from './scoring/calculate_author_page.mjs'; +import { calculateBookPage } from './scoring/calculate_book_page.mjs'; +import { calculateEpisodePage } from './scoring/calculate_episode_page.mjs'; +import { calculateHomePage } from './scoring/calculate_home_page.mjs'; +import { calculateOpenTermModal } from './scoring/calculate_open_term_modal_action.mjs'; +import { calculateScrollComicViewerAction } from './scoring/calculate_scroll_comic_viewer_action.mjs'; +import { calculateSearchBookAction } from './scoring/calculate_search_book_action.mjs'; +import { createPage } from './utils/create_page.mjs'; + +const TARGET_LIST = [ + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateHomePage, + maxScore: 100, + name: '[App] ホームを開く', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateAuthorPage, + maxScore: 100, + name: '[App] 作者詳細を開く', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateBookPage, + maxScore: 100, + name: '[App] 作品詳細を開く', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateEpisodePage, + maxScore: 100, + name: '[App] エピソード詳細を開く', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateSearchBookAction, + maxScore: 50, + name: '[App] 作品を検索する', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateScrollComicViewerAction, + maxScore: 50, + name: '[App] 漫画をスクロールして読む', + }, + { + device: playwright.devices['iPhone 14 Pro Max'], + func: calculateOpenTermModal, + maxScore: 50, + name: '[App] 利用規約を開く', + }, + { + device: playwright.devices['Desktop Chrome HiDPI'], + func: calculateAdminSigninAction, + maxScore: 50, + name: '[Admin] ログインする', + }, + { + device: playwright.devices['Desktop Chrome HiDPI'], + func: calculateAdminEditBookAction, + maxScore: 50, + name: '[Admin] 作品の情報を編集する', + }, + { + device: playwright.devices['Desktop Chrome HiDPI'], + func: calculateAdminCreateEpisodeAction, + maxScore: 50, + name: '[Admin] 作品に新しいエピソードを追加する', + }, +]; + +type Params = { + baseUrl: string; +}; + +export async function* calculate({ baseUrl }: Params) { + for (const target of TARGET_LIST) { + const { playwrightContext, playwrightPage, puppeteerPage } = await createPage({ + device: target.device, + }); + + try { + try { + const res = await fetch(new URL('/api/v1/initialize', baseUrl), { method: 'POST' }); + if (!res.ok) { + throw new Error(`Initialize error: ${res.status}`); + } + } catch { + throw new Error('初期化 API `/api/v1/initialize` にアクセスできません'); + } + + const { audits, scoreX100 } = await target.func({ baseUrl, playwrightPage, puppeteerPage }); + yield { audits, scoreX100, target }; + } catch (err) { + console.error(mergeErrorCause(err)); + yield { audits: null, error: err as Error, scoreX100: Number.NaN, target }; + } finally { + await playwrightContext.close(); + } + + // サーバー負荷が落ち着くまで、30秒待つ + await setTimeout(30 * 1000); + } +} diff --git a/src/index.mts b/src/index.mts new file mode 100644 index 0000000..28b0a25 --- /dev/null +++ b/src/index.mts @@ -0,0 +1,96 @@ +import * as github from '@actions/github'; +import { stripIndents } from 'common-tags'; +import _ from 'lodash'; + +import { calculate } from './calculate.mjs'; +import { Reporter } from './reporting/reporter.js'; + +const reporter = new Reporter({ + github, + octokit: github.getOctokit(process.env['GITHUB_TOKEN']!), +}); + +main().catch(async (err) => { + console.error(err); + await reporter.appendArea('fatalError', '❌ 計測に失敗しました、運営にご連絡ください'); + process.abort(); +}); + +const issue = github.context.payload.issue!; + +async function main() { + await reporter.init(); + + const [, BASE_URL] = issue?.body?.match(/###.*?\{\{url\}\}[\s\n]*?([\S]+)/m) ?? []; + + if (BASE_URL == null || BASE_URL === '') { + await reporter.appendArea('fatalError', '❌ issue が読み込めませんでした、issue を作り直してください'); + return; + } + + try { + const res = await fetch(new URL('/api/v1/initialize', BASE_URL), { method: 'POST' }); + if (res.status !== 200 && res.status !== 204) { + throw new Error(`Initialize error: ${res.status}`); + } + } catch (err) { + console.error(err); + await reporter.appendArea('fatalError', '❌ 初期化 API `/api/v1/initialize` にアクセスできません'); + return; + } + + const results: Array<{ + error?: Error; + scoreX100: number; + target: { maxScore: number; name: string }; + }> = []; + + for await (const result of calculate({ baseUrl: BASE_URL })) { + results.push(result); + + if (result.error != null) { + await reporter.appendArea( + 'errorList', + `- **${result.target.name}** | ${result.error.message.replaceAll('\n', '').slice(0, 100)}`, + ); + } + + const scoreTable = [ + '|テスト項目|スコア|', + '|:---|---:|', + ...results.map(({ scoreX100, target }) => { + const scoreText = Number.isNaN(scoreX100) + ? '計測できません' + : `${(scoreX100 / 100).toFixed(2)} / ${target.maxScore.toFixed(2)}`; + return `| ${target.name} | ${scoreText} |`; + }), + ].join('\n'); + + await reporter.setArea('scoreTable', scoreTable); + } + + { + const totalScore = _.round(_.sum(_.map(results, ({ scoreX100 }) => scoreX100 || 0)) / 100, 2); + const totalMaxScore = _.sum(_.map(results, ({ target }) => target.maxScore)); + + const shareUrl = new URL('https://twitter.com/intent/tweet'); + shareUrl.searchParams.set( + 'text', + stripIndents` + "Web Speed Hackathon 2024" 過去問に挑戦中です! + スコア ${totalScore.toFixed(2)} / ${totalMaxScore.toFixed(2)} です + `, + ); + shareUrl.searchParams.set('url', 'https://github.com/CyberAgentHack/web-speed-hackathon-2024'); + shareUrl.searchParams.set('hashtags', 'WebSpeedHackathon'); + + await reporter.setArea( + 'result', + stripIndents` + **合計 ${totalScore.toFixed(2)} / ${totalMaxScore.toFixed(2)}** + + - [**🐦 X(旧 Twitter)で結果を投稿しよう!**](${shareUrl.href}) + `, + ); + } +} diff --git a/src/reporting/reporter.ts b/src/reporting/reporter.ts new file mode 100644 index 0000000..9247408 --- /dev/null +++ b/src/reporting/reporter.ts @@ -0,0 +1,116 @@ +import { stripIndents } from 'common-tags'; + +type AreaKey = 'scoreTable' | 'errorList' | 'result' | 'fatalError'; + +type Options = { + github: typeof import('@actions/github'); + octokit: ReturnType; +}; + +export class Reporter { + private _options: Options; + private _commentId: number | null = null; + private _state = new Map(); + + constructor(options: Options) { + this._options = options; + } + + setArea(key: AreaKey, value: string) { + this._state.set(key, [value]); + return this._update(); + } + + appendArea(key: AreaKey, value: string) { + const current = this._state.get(key) ?? []; + this._state.set(key, [...current, value]); + return this._update(); + } + + async init() { + const { github, octokit } = this._options; + + await octokit.rest.issues.update({ + issue_number: github.context.payload.issue!.number, + owner: github.context.repo.owner, + repo: github.context.repo.repo, + title: `[スコア] @${github.context.payload.issue!['user'].login}`, + }); + + await this._update(); + } + + private get _body(): string { + if (this._state.has('fatalError')) { + return stripIndents` + # 🚀 **Web Speed Hackathon 2024 過去問へようこそ!** + + ${this._state.get('fatalError')?.join('\n') ?? ''} + + --- + + ℹ️ もう一度計測する場合は、 \`/retry\` とコメントしてください + `; + } + + if (this._state.has('result')) { + return stripIndents` + # 🚀 **Web Speed Hackathon 2024 過去問へようこそ!** + + ### スコア + + ${this._state.get('scoreTable')?.join('\n') ?? ''} + + ${this._state.get('result')?.join('\n') ?? ''} + + ### 計測できなかった原因 + + ${this._state.get('errorList')?.join('\n') ?? '問題なく計測されました'} + + --- + + ℹ️ もう一度計測する場合は、 \`/retry\` とコメントしてください + `; + } + + return stripIndents` + # 🚀 **Web Speed Hackathon 2024 過去問へようこそ!** + + ### スコア + + ${this._state.get('scoreTable')?.join('\n') ?? '⏳ 計測しています...'} + + ${this._state.get('result')?.join('\n') ?? ''} + + ### 計測できなかった原因 + + ${this._state.get('errorList')?.join('\n') ?? '⏳ 順調に計測が進んでいます'} + + --- + + ⏳ 計測しています... + ⚠️ 計測には最大 20 分かかります、計測中はデプロイしないでください + `; + } + + private async _update() { + const { github, octokit } = this._options; + + if (this._commentId == null) { + const { data: comment } = await octokit.rest.issues.createComment({ + body: this._body, + issue_number: github.context.payload.issue!.number, + owner: github.context.repo.owner, + repo: github.context.repo.repo, + }); + this._commentId = comment.id; + } else { + await octokit.rest.issues.updateComment({ + body: this._body, + comment_id: this._commentId, + owner: github.context.repo.owner, + repo: github.context.repo.repo, + }); + } + } +} diff --git a/src/scoring/assets/image.jpg b/src/scoring/assets/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c443aa9ef4a405da32d12c4e0724b72fc5be748 GIT binary patch literal 184172 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�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 KB6KF2n4 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 literal 0 HcmV?d00001 diff --git a/src/scoring/calculate_admin_create_episode_action.mts b/src/scoring/calculate_admin_create_episode_action.mts new file mode 100644 index 0000000..5a38b51 --- /dev/null +++ b/src/scoring/calculate_admin_create_episode_action.mts @@ -0,0 +1,132 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { signinAction } from '../utils/signin_action.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateAdminCreateEpisodeAction({ baseUrl, playwrightPage, puppeteerPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + console.debug('AdminCreateEpisodeAction - navigate to signin page'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/admin', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('AdminCreateEpisodeAction - navigate to signin page end'); + + console.debug('AdminCreateEpisodeAction - signin'); + { + await signinAction({ playwrightPage }); + } + console.debug('AdminCreateEpisodeAction - signin end'); + + console.debug('AdminCreateEpisodeAction - navigate to signin page'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/admin/books', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('AdminCreateEpisodeAction - navigate to signin page end'); + + console.debug('AdminCreateEpisodeAction - search book'); + { + try { + const radio = playwrightPage.getByRole('radiogroup').getByText('作品名'); + await radio.click(); + const searchbox = playwrightPage.getByRole('textbox', { name: '条件を入力' }); + await searchbox.pressSequentially('コノアドケナイ'); + const bodyRows = playwrightPage.getByRole('table').locator('tbody > tr'); + await expect(bodyRows.first()).toContainText('このあどけない'); + } catch (err) { + throw new Error('作品を検索できませんでした', { cause: err }); + } + } + { + try { + const bodyRows = playwrightPage.getByRole('table').locator('tbody > tr'); + await bodyRows.first().getByRole('button', { name: '詳細' }).click(); + await playwrightPage.getByRole('dialog').waitFor(); + await playwrightPage.getByRole('dialog').getByRole('button', { name: '編集' }).first().waitFor(); + } catch (err) { + throw (new Error('作品の詳細を開けませんでした'), { cause: err }); + } + } + console.debug('AdminCreateEpisodeAction - search book end'); + + const flow = await startFlow(puppeteerPage); + await flow.startTimespan(); + console.debug('AdminCreateEpisodeAction - create episode'); + { + try { + await playwrightPage.getByRole('dialog').getByRole('button', { name: 'エピソードを追加' }).click(); + } catch (err) { + throw new Error('作品詳細モーダルからエピソード追加画面に遷移できません', { cause: err }); + } + } + { + try { + const fileChooserPromise = playwrightPage.waitForEvent('filechooser'); + const [, fileChooser] = await Promise.all([ + playwrightPage.getByRole('button', { name: 'サムネイルの画像を選択' }).click(), + fileChooserPromise, + ]); + await fileChooser.setFiles(path.resolve(__dirname, './assets/image.jpg')); + + await playwrightPage + .getByRole('textbox', { exact: true, name: 'エピソード名' }) + .pressSequentially('私は夜空に届かない'); + await playwrightPage + .getByRole('textbox', { name: 'エピソード名(ふりがな)' }) + .pressSequentially('わたしはよぞらにとどかない'); + await playwrightPage + .getByRole('textbox', { name: 'あらすじ' }) + .pressSequentially( + '図書館は、基本的人権のひとつとして知る自由をもつ国民に、資料と施設を提供することをもっとも重要な任務とする。', + ); + await playwrightPage.getByRole('spinbutton', { name: 'エピソードの章' }).pressSequentially('1'); + + await playwrightPage.getByRole('button', { name: '作成' }).click(); + + await expect(playwrightPage).toHaveURL(/\/admin\/books\/[a-z0-9-]+\/episodes\/[a-z0-9-]+$/); + } catch (err) { + throw new Error('エピソードの追加ができませんでした', { cause: err }); + } + } + await flow.endTimespan(); + console.debug('AdminCreateEpisodeAction - create episode end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/calculate_admin_edit_book_action.mts b/src/scoring/calculate_admin_edit_book_action.mts new file mode 100644 index 0000000..d0cbde7 --- /dev/null +++ b/src/scoring/calculate_admin_edit_book_action.mts @@ -0,0 +1,171 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { signinAction } from '../utils/signin_action.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateAdminEditBookAction({ baseUrl, playwrightPage, puppeteerPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + console.debug('AdminSearchBookEditAction - navigate to signin page'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/admin', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('AdminSearchBookEditAction - navigate to signin page end'); + + console.debug('AdminSearchBookEditAction - signin'); + { + await signinAction({ playwrightPage }); + } + console.debug('AdminSearchBookEditAction - signin end'); + + console.debug('AdminSearchBookEditAction - navigate to signin page'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/admin/books', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('AdminSearchBookEditAction - navigate to signin page end'); + + console.debug('AdminSearchBookEditAction - search book'); + const flow = await startFlow(puppeteerPage); + await flow.startTimespan(); + { + try { + const radio = playwrightPage.getByRole('radiogroup').getByText('作品名'); + await radio.click(); + const searchbox = playwrightPage.getByRole('textbox', { name: '条件を入力' }); + await searchbox.pressSequentially('コノアドケナイ'); + const bodyRows = playwrightPage.getByRole('table').locator('tbody > tr'); + await expect(bodyRows.first()).toContainText('このあどけない'); + } catch (err) { + throw new Error('作品を検索できませんでした', { cause: err }); + } + } + console.debug('AdminSearchBookEditAction - search book end'); + console.debug('AdminSearchBookEditAction - edit book'); + { + try { + const bodyRows = playwrightPage.getByRole('table').locator('tbody > tr'); + await bodyRows.first().getByRole('button', { name: '詳細' }).click(); + await playwrightPage.getByRole('dialog').getByRole('region', { name: '作品詳細' }).waitFor(); + } catch (err) { + throw new Error('作品の詳細を開けませんでした', { cause: err }); + } + } + { + try { + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .waitFor(); + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .click(); + const fileChooserPromise = playwrightPage.waitForEvent('filechooser'); + const [, fileChooser] = await Promise.all([ + playwrightPage.getByRole('dialog').getByRole('button', { name: '作品の画像を選択' }).click(), + fileChooserPromise, + ]); + await fileChooser.setFiles(path.join(__dirname, './assets/image.jpg')); + await playwrightPage.getByRole('dialog').getByRole('button', { name: '決定' }).click(); + + const img = playwrightPage.getByRole('dialog').getByRole('region', { name: '作品詳細' }).getByRole('img'); + await expect(img).toBeVisible(); + } catch (err) { + // 画像のアップロードが失敗した場合、エラーを出力して処理を続行する + console.error('作品の画像のアップロードができませんでした', err); + } + } + { + try { + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .waitFor(); + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .click(); + await playwrightPage + .getByRole('dialog') + .getByRole('textbox', { exact: true, name: '作品名' }) + .pressSequentially('やがてあなたになる'); + await playwrightPage.getByRole('dialog').getByRole('button', { name: '決定' }).click(); + await expect(playwrightPage.getByRole('dialog').getByRole('region', { name: '作品詳細' })).toContainText( + 'やがてあなたになる', + ); + } catch (err) { + throw new Error('作品名の編集ができませんでした', { cause: err }); + } + } + { + try { + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .waitFor(); + await playwrightPage + .getByRole('dialog') + .getByRole('region', { name: '作品詳細' }) + .getByRole('button', { name: '編集' }) + .click(); + await playwrightPage + .getByRole('dialog') + .getByRole('textbox', { name: '概要' }) + .pressSequentially( + '図書館は、基本的人権のひとつとして知る自由をもつ国民に、資料と施設を提供することをもっとも重要な任務とする。', + ); + await playwrightPage.getByRole('dialog').getByRole('button', { name: '決定' }).click(); + await expect(playwrightPage.getByRole('dialog').getByRole('region', { name: '作品詳細' })).toContainText( + '図書館は、基本的人権のひとつとして知る自由をもつ国民に、資料と施設を提供することをもっとも重要な任務とする。', + ); + } catch (err) { + throw new Error('作品の概要の編集ができませんでした', { cause: err }); + } + } + await flow.endTimespan(); + console.debug('AdminSearchBookEditAction - edit book end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/calculate_admin_signin_action.mts b/src/scoring/calculate_admin_signin_action.mts new file mode 100644 index 0000000..29cfa25 --- /dev/null +++ b/src/scoring/calculate_admin_signin_action.mts @@ -0,0 +1,48 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { signinAction } from '../utils/signin_action.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateAdminSigninAction({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('AdminSigninAction - navigate'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/admin', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('AdminSigninAction - navigate end'); + + const flow = await startFlow(puppeteerPage); + + console.debug('AdminSigninAction - signin'); + await flow.startTimespan(); + { + await signinAction({ playwrightPage }); + } + await flow.endTimespan(); + console.debug('AdminSigninAction - signin end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/calculate_author_page.mts b/src/scoring/calculate_author_page.mts new file mode 100644 index 0000000..df19483 --- /dev/null +++ b/src/scoring/calculate_author_page.mts @@ -0,0 +1,49 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateAuthorPage({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('AuthorPage - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + const flow = await startFlow(puppeteerPage); + + console.debug('AuthorPage - navigate'); + await flow.startNavigation(); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/authors/3eec9aad-4c55-411c-a979-a7ac0ea5fb7f', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + await flow.endNavigation(); + + console.debug('AuthorPage - navigate end'); + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: false }), + }; +} diff --git a/src/scoring/calculate_book_page.mts b/src/scoring/calculate_book_page.mts new file mode 100644 index 0000000..186b674 --- /dev/null +++ b/src/scoring/calculate_book_page.mts @@ -0,0 +1,49 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateBookPage({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('BookPage - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + const flow = await startFlow(puppeteerPage); + + console.debug('BookPage - navigate'); + await flow.startNavigation(); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/books/f2649e53-4e59-474f-931b-4348a28cd38d', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + await flow.endNavigation(); + + console.debug('BookPage - navigate end'); + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: false }), + }; +} diff --git a/src/scoring/calculate_episode_page.mts b/src/scoring/calculate_episode_page.mts new file mode 100644 index 0000000..698cd3d --- /dev/null +++ b/src/scoring/calculate_episode_page.mts @@ -0,0 +1,50 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateEpisodePage({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('EpisodePage - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + const flow = await startFlow(puppeteerPage); + + console.debug('EpisodePage - navigate'); + await flow.startNavigation(); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/books/7d552a43-e45f-421d-92b1-c17f602a6c10/episodes/fee12718-8bad-4c98-b6f7-04bbc3c79957', baseUrl) + .href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + await flow.endNavigation(); + + console.debug('EpisodePage - navigate end'); + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: false }), + }; +} diff --git a/src/scoring/calculate_home_page.mts b/src/scoring/calculate_home_page.mts new file mode 100644 index 0000000..cea1f82 --- /dev/null +++ b/src/scoring/calculate_home_page.mts @@ -0,0 +1,49 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateHomePage({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('Home - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + const flow = await startFlow(puppeteerPage); + + console.debug('Home - navigate'); + await flow.startNavigation(); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + await flow.endNavigation(); + + console.debug('Home - navigate end'); + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: false }), + }; +} diff --git a/src/scoring/calculate_open_term_modal_action.mts b/src/scoring/calculate_open_term_modal_action.mts new file mode 100644 index 0000000..580a62f --- /dev/null +++ b/src/scoring/calculate_open_term_modal_action.mts @@ -0,0 +1,65 @@ +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateOpenTermModal({ baseUrl, playwrightPage, puppeteerPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + console.debug('OpenTermModal - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + console.debug('OpenTermModal - navigate'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/search', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('OpenTermModal - navigate end'); + + const flow = await startFlow(puppeteerPage); + + console.debug('OpenTermModal - open modal'); + await flow.startTimespan(); + { + try { + const footer = playwrightPage.getByRole('contentinfo'); + await footer.getByRole('button', { name: '利用規約' }).click(); + const modal = playwrightPage.getByRole('dialog', { name: '利用規約' }); + await expect(modal).toBeVisible(); + } catch (err) { + throw new Error('利用規約のモーダルの表示に失敗しました', { cause: err }); + } + } + await flow.endTimespan(); + console.debug('OpenTermModal - open modal end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/calculate_scroll_comic_viewer_action.mts b/src/scoring/calculate_scroll_comic_viewer_action.mts new file mode 100644 index 0000000..ca9425c --- /dev/null +++ b/src/scoring/calculate_scroll_comic_viewer_action.mts @@ -0,0 +1,96 @@ +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; +import { waitFor } from './utils/wait_for.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateScrollComicViewerAction({ baseUrl, playwrightPage, puppeteerPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + console.debug('ScrollComicViewerAction - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + console.debug('ScrollComicViewerAction - navigate'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/books/e998ff8e-0f15-4260-9969-f519c15836a4/episodes/ff143a53-faed-4da0-a6a5-795e8b4956fe', baseUrl) + .href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('ScrollComicViewerAction - navigate end'); + + const flow = await startFlow(puppeteerPage); + + console.debug('ScrollComicViewerAction - scroll'); + await flow.startTimespan(); + { + const viewer = playwrightPage.getByRole('region', { name: '漫画ビューアー' }); + + try { + await waitFor( + async () => { + await expect(viewer.getByRole('img').nth(0)).toBeInViewport({ ratio: 0.9 }); + await expect(viewer.getByRole('img').nth(1)).not.toBeInViewport({ ratio: 0.1 }); + }, + { timeout: 60 * 1000 }, + ); + } catch (err) { + throw new Error('漫画ビューアーの初期表示が正しくありません', { cause: err }); + } + + const viewerBoundingBox = (await viewer.boundingBox())!; + const touchStartPosition = { x: viewerBoundingBox.x + 10, y: viewerBoundingBox.y + 100 }; + + try { + await playwrightPage.mouse.move(touchStartPosition.x, touchStartPosition.y); + await playwrightPage.mouse.down(); + await playwrightPage.mouse.move(touchStartPosition.x + viewerBoundingBox.width / 2, 0, { steps: 10 }); + await playwrightPage.mouse.up(); + } catch (err) { + throw new Error('漫画ビューアーのスクロールに失敗しました', { cause: err }); + } + + try { + await waitFor( + async () => { + await expect(viewer.getByRole('img').nth(0)).not.toBeInViewport({ ratio: 0.1 }); + await expect(viewer.getByRole('img').nth(1)).toBeInViewport({ ratio: 0.9 }); + }, + { timeout: 60 * 1000 }, + ); + } catch (err) { + throw new Error('漫画ビューアーのスクロールのあと、画像の表示位置が正しくありません', { cause: err }); + } + } + await flow.endTimespan(); + console.debug('ScrollComicViewerAction - scroll end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/calculate_search_book_action.mts b/src/scoring/calculate_search_book_action.mts new file mode 100644 index 0000000..2933a27 --- /dev/null +++ b/src/scoring/calculate_search_book_action.mts @@ -0,0 +1,100 @@ +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { goTo } from '../utils/go_to.mjs'; +import { installServiceWorker } from '../utils/install_service_worker.mjs'; +import { startFlow } from '../utils/start_flow.mjs'; + +import { calculateHackathonScore } from './utils/calculate_hackathon_score.mjs'; +import { waitFor } from './utils/wait_for.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function calculateSearchBookAction({ baseUrl, playwrightPage, puppeteerPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + console.debug('SearchBookAction - install service worker'); + try { + await installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }); + } catch (err) { + throw new Error('Service Worker のインストールに失敗しました', { cause: err }); + } + + console.debug('SearchBookAction - navigate'); + try { + await goTo({ + playwrightPage, + puppeteerPage, + timeout: 120 * 1000, + url: new URL('/search', baseUrl).href, + }); + } catch (err) { + throw new Error('ページの読み込みに失敗したか、タイムアウトしました', { cause: err }); + } + console.debug('SearchBookAction - navigate end'); + + const flow = await startFlow(puppeteerPage); + + console.debug('SearchBookAction - search'); + await flow.startTimespan(); + { + try { + const textbox = playwrightPage.getByRole('textbox', { name: '作品名を入力' }); + await textbox.click(); + await textbox.pressSequentially('コノアドケナイ'); + await textbox.blur(); + } catch (err) { + throw new Error('検索ボックスに入力できません', { cause: err }); + } + + try { + const section = playwrightPage.getByRole('region', { name: '検索結果' }); + const list = section.getByRole('list'); + const items = list.getByRole('listitem'); + + await waitFor(() => expect(items.nth(0)).toBeVisible(), { + timeout: 60 * 1000, + }); + } catch (err) { + throw new Error('検索クエリに該当する作品がありません', { cause: err }); + } + + try { + const section = playwrightPage.getByRole('region', { name: '検索結果' }); + const list = section.getByRole('list'); + const items = list.getByRole('listitem'); + + await expect(items.nth(0)).toContainText('このあどけない'); + } catch (err) { + throw new Error('検索結果が正しく表示されていません', { cause: err }); + } + + try { + const section = playwrightPage.getByRole('region', { name: '検索結果' }); + const list = section.getByRole('list'); + const items = list.getByRole('listitem'); + + await waitFor(() => expect(items.nth(0).getByRole('img', { name: /このあどけない/ })).toBeVisible(), { + timeout: 60 * 1000, + }); + } catch (err) { + throw new Error('検索結果の画像が正しく表示されていません', { cause: err }); + } + } + await flow.endTimespan(); + console.debug('SearchBookAction - search end'); + + const { + steps: [result], + } = await flow.createFlowResult(); + + return { + audits: result!.lhr.audits, + scoreX100: calculateHackathonScore(result!.lhr.audits, { isUserflow: true }), + }; +} diff --git a/src/scoring/utils/calculate_hackathon_score.mts b/src/scoring/utils/calculate_hackathon_score.mts new file mode 100644 index 0000000..86305f5 --- /dev/null +++ b/src/scoring/utils/calculate_hackathon_score.mts @@ -0,0 +1,30 @@ +import type { Result } from 'lighthouse'; + +type Options = { + isUserflow: boolean; +}; + +export function calculateHackathonScore(audits: Result['audits'], { isUserflow }: Options): number { + // Each metric is within [0, 1] and with up to two fractional digits. + // https://github.com/GoogleChrome/lighthouse/blob/516d32c7f66a0ffcfe7fbfc8bb40849699f769dc/core/audits/audit.js#L83-L110 + // + // Calculate a score using the same weights as Lighthouse 10 without rounding to get more precised performance score. + // https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/#lighthouse-10 + // + // To avoid hiccups related to floating-point arithmetic, all metrics are firstly scaled up by 100. + + if (isUserflow) { + const score = + (audits['total-blocking-time']?.score ?? 0) * 100 * 25 + + (audits['interaction-to-next-paint']?.score ?? 0) * 100 * 25; + return score; + } + + const score = + (audits['first-contentful-paint']?.score ?? 0) * 100 * 10 + + (audits['speed-index']?.score ?? 0) * 100 * 10 + + (audits['largest-contentful-paint']?.score ?? 0) * 100 * 25 + + (audits['total-blocking-time']?.score ?? 0) * 100 * 30 + + (audits['cumulative-layout-shift']?.score ?? 0) * 100 * 25; + return score; +} diff --git a/src/scoring/utils/wait_for.mts b/src/scoring/utils/wait_for.mts new file mode 100644 index 0000000..cfa82fe --- /dev/null +++ b/src/scoring/utils/wait_for.mts @@ -0,0 +1,54 @@ +import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; + +/* + A modification of https://github.com/TheBrainFamily/wait-for-expect/blob/6be6e2ed8e47fd5bc62ab2fc4bd39289c58f2f66/src/index.ts + Which is exported by pptr-testing-library, but has two issues: + - Timeout not adhered to with long promises. https://github.com/TheBrainFamily/wait-for-expect/issues/35 + - No return value. https://github.com/testing-library/pptr-testing-library/issues/73 +*/ + +interface Options { + interval?: number; + timeout?: number; +} + +/** + * Waits for the expectation to pass and returns a Promise + * + * @param expectation Function Expectation that has to complete without throwing + * @param timeout Number Maximum wait interval, 4500ms by default + * @param interval Number Wait-between-retries interval, 50ms by default + * @return Promise Promise to return a callback result + */ +export async function waitFor(expectation: () => void | Promise, options: Options = {}): Promise { + const { interval = 50, timeout = 60 * 1000 } = options; + if (interval < 1) { + throw new Error('Interval set to a number smaller than 1 ms.'); + } + const startTime = Date.now(); + return new Promise((resolve, reject) => { + const rejectOrRerun = (error: Error) => { + const timeElapsed = Date.now() - startTime; + if (timeElapsed >= timeout) { + reject(error); + return; + } + setTimeout(runExpectation, interval); + }; + async function runExpectation() { + try { + const timeElapsed = Date.now() - startTime; + const result = await Promise.race([ + Promise.resolve(expectation()).then(() => void 0), + setTimeoutPromise(Math.max(0, timeout - timeElapsed)).then(() => { + return Promise.reject(new Error('Timeout.')); + }), + ]); + resolve(result); + } catch (error) { + rejectOrRerun(error as Error); + } + } + setTimeout(runExpectation, 0); + }); +} diff --git a/src/utils/create_page.mts b/src/utils/create_page.mts new file mode 100644 index 0000000..f1a8ba9 --- /dev/null +++ b/src/utils/create_page.mts @@ -0,0 +1,38 @@ +import fs from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; + +import * as playwright from 'playwright'; +import * as puppeteer from 'puppeteer'; + +type Params = { + device: (typeof playwright.devices)[keyof typeof playwright.devices]; +}; + +export async function createPage({ device }: Params) { + const userDataDir = await fs.mkdtemp(path.resolve(os.tmpdir(), 'playwright-')); + + const playwrightContext = await playwright['chromium'].launchPersistentContext(userDataDir, { + args: ['--remote-debugging-port=9222'], + devtools: process.env['CI'] !== 'true', + headless: process.env['CI'] === 'true', + ...device, + }); + + const playwrightPage = playwrightContext.pages()[0]!; + await playwrightPage.goto('about:blank'); + + const puppeteerBrowser = await puppeteer.connect({ + browserURL: 'http://127.0.0.1:9222', + defaultViewport: { + deviceScaleFactor: device.deviceScaleFactor, + hasTouch: device.hasTouch, + height: device.viewport.height, + isMobile: device.isMobile, + width: device.viewport.width, + }, + }); + const puppeteerPage = (await puppeteerBrowser.pages())[0]!; + + return { playwrightContext, playwrightPage, puppeteerPage }; +} diff --git a/src/utils/go_to.mts b/src/utils/go_to.mts new file mode 100644 index 0000000..9925034 --- /dev/null +++ b/src/utils/go_to.mts @@ -0,0 +1,36 @@ +import { setTimeout } from 'node:timers/promises'; + +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; +import { ResourceWatcher } from 'storycrawler'; + +type Params = { + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; + timeout?: number; + url: string; +}; + +export async function goTo({ playwrightPage, puppeteerPage, timeout, url }: Params) { + // @ts-expect-error ... + const watcher = new ResourceWatcher(puppeteerPage).init(); + + await Promise.race([ + playwrightPage + .goto(url, { waitUntil: 'networkidle' }) + .catch(() => {}) + .then(() => { + // `/api/v1/admin/me` API はエラーを返す可能性があるので無視する + const ignoredUrls = watcher.getRequestedUrls().filter((url) => url.includes('/api/v1/admin/me')); + for (const url of ignoredUrls) { + (watcher['resolvedAssetsMap'] as Map).delete(url); + } + }) + .then(() => { + return watcher.waitForRequestsComplete(); + }), + setTimeout(timeout ?? 60 * 1000).then(() => Promise.reject(new Error('ページの読み込みがタイムアウトしました'))), + ]); + + watcher.clear(); +} diff --git a/src/utils/install_service_worker.mts b/src/utils/install_service_worker.mts new file mode 100644 index 0000000..8b69c81 --- /dev/null +++ b/src/utils/install_service_worker.mts @@ -0,0 +1,52 @@ +import type * as playwright from 'playwright'; +import type * as puppeteer from 'puppeteer'; + +import { waitFor } from '../scoring/utils/wait_for.mjs'; + +import { goTo } from './go_to.mjs'; + +type Params = { + baseUrl: string; + playwrightPage: playwright.Page; + puppeteerPage: puppeteer.Page; +}; + +export async function installServiceWorker({ baseUrl, playwrightPage, puppeteerPage }: Params) { + console.debug('Install service worker'); + + await goTo({ + playwrightPage, + puppeteerPage, + url: new URL('/', baseUrl).href, + }).catch(() => {}); + + const target = await puppeteerPage.browser().waitForTarget( + (target) => { + return target.type() === 'service_worker' && target.url().includes(baseUrl); + }, + { timeout: 60 * 1000 }, + ); + + await goTo({ + playwrightPage, + puppeteerPage, + url: 'about:blank', + }).catch(() => {}); + + const worker = (await target.worker())!; + await waitFor( + async () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const state = await worker.evaluate(() => (self as any).registration.active?.state); + if (state !== 'activated') { + throw new Error('Service worker not activated'); + } + }, + { timeout: 60 * 1000 }, + ); + await worker.close(); + + const cdp = await puppeteerPage.createCDPSession(); + await cdp.send('Network.clearBrowserCache'); + await cdp.send('Network.clearBrowserCookies'); +} diff --git a/src/utils/signin_action.mts b/src/utils/signin_action.mts new file mode 100644 index 0000000..e77fe73 --- /dev/null +++ b/src/utils/signin_action.mts @@ -0,0 +1,35 @@ +import { setTimeout } from 'node:timers/promises'; + +import { expect as _expect } from '@playwright/test'; +import type * as playwright from 'playwright'; + +type Params = { + playwrightPage: playwright.Page; +}; + +export async function signinAction({ playwrightPage }: Params) { + const expect = _expect.configure({ timeout: 60 * 1000 }); + + try { + const emailTextbox = playwrightPage.getByRole('textbox', { name: 'メールアドレス' }); + await emailTextbox.pressSequentially('administrator@example.com'); + } catch (err) { + throw new Error('メールアドレスの入力に失敗しました', { cause: err }); + } + try { + const passwordTextbox = playwrightPage.getByRole('textbox', { name: 'パスワード' }); + await passwordTextbox.pressSequentially('pa5sW0rd!'); + } catch (err) { + throw new Error('パスワードの入力に失敗しました', { cause: err }); + } + try { + await setTimeout(10 * 1000); + const button = playwrightPage.getByRole('button', { name: 'ログイン' }); + await button.click(); + const form = playwrightPage.getByRole('form', { name: 'ログアウト' }); + await expect(form).toBeVisible(); + } catch (err) { + // ログインに失敗した場合、エラーを出力して処理を続行する + console.log('ログインに失敗しました', err); + } +} diff --git a/src/utils/start_flow.mts b/src/utils/start_flow.mts new file mode 100644 index 0000000..b9855b6 --- /dev/null +++ b/src/utils/start_flow.mts @@ -0,0 +1,31 @@ +import { startFlow as startFlowOrig } from 'lighthouse'; +import * as constants from 'lighthouse/core/config/constants.js'; +import type { Page } from 'puppeteer'; + +export async function startFlow(page: Page) { + return startFlowOrig(page, { + config: { + extends: 'lighthouse:default', + settings: { + disableFullPageScreenshot: true, + disableStorageReset: true, + formFactor: 'mobile', + maxWaitForFcp: 120 * 1000, + maxWaitForLoad: 180 * 1000, + onlyAudits: [ + 'first-contentful-paint', + 'speed-index', + 'largest-contentful-paint', + 'total-blocking-time', + 'cumulative-layout-shift', + 'interaction-to-next-paint', + ], + screenEmulation: { + disabled: true, + }, + throttling: constants.throttling.mobileSlow4G, + throttlingMethod: 'simulate', + }, + }, + }).catch(() => Promise.reject(new Error('Lighthouse がタイムアウトしました'))); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ffac4a8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "lib": ["ESNext", "DOM"], + "moduleResolution": "NodeNext", + "noEmit": true + }, + "extends": "@tsconfig/node-lts-strictest-esm/tsconfig.json", + "include": ["src/**/*"] +}