├── .editorconfig ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── dependabot.yml ├── stale.yml └── workflows │ ├── build.yml │ ├── git-flow.yml │ └── template.yml ├── .gitignore ├── .npmrc ├── .prettierrc.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── cliff.toml ├── eslint.config.js ├── package.json ├── pnpm-lock.yaml ├── src ├── index.ts └── types.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | 11 | # Set default charset and space indentation 12 | [*.{js,ts,jsx,tsx}] 13 | charset = utf-8 14 | indent_style = space 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: nekofar 4 | custom: https://ud.me/nekofar.crypto 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Create a report to help us improve 3 | 4 | labels: 5 | - bug 6 | assignees: 7 | - nekofar 8 | 9 | body: 10 | - type: textarea 11 | attributes: 12 | label: Describe the bug 13 | description: A clear and concise description of what the bug is. 14 | placeholder: Describe the bug here. 15 | 16 | - type: textarea 17 | attributes: 18 | label: Steps to reproduce the behavior 19 | description: List the steps to reproduce the behavior, including any necessary environment details. 20 | placeholder: List the steps to reproduce here. 21 | 22 | - type: textarea 23 | attributes: 24 | label: Expected behavior 25 | description: A clear and concise description of what you expected to happen. 26 | placeholder: Describe the expected behavior here. 27 | 28 | - type: textarea 29 | attributes: 30 | label: Screenshots 31 | description: If applicable, add screenshots to help explain the problem. 32 | placeholder: Add any relevant screenshots here. 33 | 34 | - type: textarea 35 | attributes: 36 | label: Additional context 37 | description: Add any other context about the problem here. 38 | placeholder: Add any additional context here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | 4 | labels: 5 | - enhancement 6 | assignees: 7 | - nekofar 8 | 9 | body: 10 | - type: textarea 11 | attributes: 12 | label: Is your feature request related to a problem? Please describe. 13 | description: A clear and concise description of what the problem is. Ex. I'm always frustrated when ... 14 | placeholder: Describe the problem here. 15 | 16 | - type: textarea 17 | attributes: 18 | label: Describe the solution you'd like 19 | description: A clear and concise description of what you want to happen. 20 | placeholder: Describe the solution you'd like here. 21 | 22 | - type: textarea 23 | attributes: 24 | label: Describe alternatives you've considered 25 | description: A clear and concise description of any alternative solutions or features you've considered. 26 | placeholder: Describe alternatives here. 27 | 28 | - type: textarea 29 | attributes: 30 | label: Additional context 31 | description: Add any other context or screenshots about the feature request here. 32 | placeholder: Add any additional context or screenshots here. 33 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Maintain dependencies for GitHub Actions 4 | - package-ecosystem: 'github-actions' 5 | # Files stored in repository root 6 | directory: '/' 7 | # Check for updates every weekday 8 | schedule: 9 | interval: 'daily' 10 | # Add assignees 11 | assignees: 12 | - 'nekofar' 13 | # Include a list of updated dependencies 14 | commit-message: 15 | prefix: 'ci' 16 | include: 'scope' 17 | # Specify labels for pull requests 18 | labels: 19 | - 'dependencies' 20 | # Allow up to 20 open pull requests for dependencies 21 | open-pull-requests-limit: 20 22 | # Add reviewers 23 | reviewers: 24 | - 'nekofar' 25 | # Raise pull requests against the `develop` branch 26 | target-branch: 'develop' 27 | 28 | # Maintain dependencies for PNPM 29 | - package-ecosystem: 'npm' 30 | # Files stored in repository root 31 | directory: '/' 32 | # Check for updates every weekday 33 | schedule: 34 | interval: 'daily' 35 | # Add assignees 36 | assignees: 37 | - 'nekofar' 38 | # Include a list of updated dependencies 39 | commit-message: 40 | prefix: 'chore' 41 | include: 'scope' 42 | # Specify labels for pull requests 43 | labels: 44 | - 'dependencies' 45 | # Allow up to 10 open pull requests for dependencies 46 | open-pull-requests-limit: 20 47 | # Add reviewers 48 | reviewers: 49 | - 'nekofar' 50 | # Raise pull requests against the `develop` branch 51 | target-branch: 'develop' 52 | # Create a group of dependencies to be updated together in one pull request 53 | groups: 54 | eslint: 55 | patterns: 56 | - 'eslint' 57 | - '@typescript-eslint/eslint-plugin' 58 | - '@typescript-eslint/parser' 59 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build Pipeline # A Build Pipeline which will use for build, test and deploy. 2 | 3 | on: 4 | push: # When we push the changes. 5 | branches: # Only for these branches. 6 | - master 7 | - develop 8 | - bugfix/* 9 | - hotfix/* 10 | - release/* 11 | paths-ignore: # Ignoring the markdown file changes. 12 | - '**/*.md' 13 | pull_request: # Also on pull request events. 14 | workflow_dispatch: # Allows you to run this workflow manually from the Actions tab. 15 | 16 | jobs: 17 | check: 18 | name: State Verifier 19 | runs-on: ubuntu-latest 20 | outputs: 21 | skip_ci: ${{ steps.check_initial_commit.outputs.skip_ci }} 22 | steps: 23 | # The first step is to check out the repository code 24 | - name: Checking out repository code 25 | uses: actions/checkout@v4.2.2 # Action for checking out a repo. 26 | with: 27 | fetch-depth: 0 # Fetches all history for all branches and tags 28 | 29 | # The second step checks whether the commit is the initial commit 30 | - name: Check Initial Commit 31 | id: check_initial_commit 32 | run: | 33 | # Use a git command to count the number of revisions 34 | # If the count is 1, then this is the initial commit 35 | if [ "$(git rev-list --count HEAD)" -eq 1 ]; then 36 | echo "This is the initial commit." 37 | # Set the environment variable "skip_ci" to true, signifying CI should not run for the initial commit 38 | echo "skip_ci=true" >> $GITHUB_OUTPUT 39 | else 40 | # If the count is not 1, this is not the initial commit 41 | # Set the environment variable "skip_ci" to false, signifying CI should run 42 | echo "skip_ci=false" >> $GITHUB_OUTPUT 43 | fi 44 | 45 | build: # Job named 'build' 46 | name: Build & Test 47 | if: needs.check.outputs.skip_ci != 'true' 48 | runs-on: ubuntu-latest # The type of machine to run the job on. 49 | 50 | needs: [check] 51 | 52 | strategy: # Allows you to create a matrix for job configuration. 53 | matrix: 54 | node-version: [20.x, 21.x, 22.x] # Running tests across different environments. 55 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 56 | 57 | steps: # The sequence of tasks that make up a job. 58 | - name: Checking out repository code 59 | uses: actions/checkout@v4.2.2 # Action for checking out a repo. 60 | 61 | - name: Setup Node.js ${{ matrix.node-version }} Environment 62 | uses: actions/setup-node@v4.1.0 # Action for setting up Node environment. 63 | with: 64 | node-version: ${{ matrix.node-version }} 65 | 66 | - name: Install pnpm package manager 67 | uses: pnpm/action-setup@v4.0.0 # Action for setting up pnpm. 68 | id: pnpm-install 69 | with: 70 | run_install: false 71 | 72 | - name: Capture pnpm store directory 73 | id: pnpm-cache 74 | run: | 75 | echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT 76 | 77 | - name: Cache pnpm Store 78 | uses: actions/cache@v4.2.0 # Action provides caching dependencies and build outputs to improve workflow execution time. 79 | with: 80 | path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} # The path of the directory to cache. 81 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} # An explicit key for restoring and saving the cache. 82 | restore-keys: | 83 | ${{ runner.os }}-pnpm-store- 84 | 85 | # Installs all dependencies specified in the project's package.json file. 86 | - name: Install dependencies using pnpm 87 | run: pnpm install 88 | 89 | # This compiles the application in optimized production mode and output it to the build folder. 90 | - name: Build the application and export it 91 | run: pnpm run build 92 | 93 | # Runs unit tests for the application using Jest. 94 | # - name: Execute tests using Jest 95 | # run: pnpm run test 96 | 97 | release: 98 | name: Create Release 99 | # Specify the type of the runner the job will run on 100 | runs-on: ubuntu-latest 101 | 102 | needs: [build] 103 | 104 | if: ${{ github.ref_name == 'master' }} 105 | 106 | # Set permissions to write contents 107 | permissions: 108 | contents: write 109 | 110 | steps: 111 | # Checkout the repository code 112 | - name: Checkout code 113 | uses: actions/checkout@v4.2.2 114 | with: 115 | fetch-depth: 0 # Fetches all history for all branches and tags 116 | 117 | # Generate a changelog for the new release using Git 118 | - name: Generate a changelog 119 | uses: orhun/git-cliff-action@v4.4.2 120 | id: git-cliff 121 | with: 122 | config: cliff.toml # The configuration file for git-cliff 123 | args: -vv --latest --strip all # Show verbose output, grab the latest changes, and strip unnecessary details 124 | env: 125 | OUTPUT: CHANGES.md # The output file for the changelog 126 | 127 | # Prepare release notes by processing the generated changelog 128 | - name: Set the release info 129 | id: release 130 | shell: bash 131 | run: | 132 | version=$(jq -r '.version' package.json) 133 | echo "version=${version}" >> $GITHUB_OUTPUT 134 | 135 | # Read contents of changelog into variable 'changelog_content' 136 | changelog=$(cat ${{ steps.git-cliff.outputs.changelog }}) 137 | # Remove first two lines from 'changelog' 138 | changelog="$(printf "$changelog" | tail -n +3)" 139 | # Save the value of 'changelog' back into the GitHub environment output 140 | { 141 | echo "notes<> $GITHUB_OUTPUT 145 | 146 | # Create a new GitHub release using the gathered information 147 | - name: Create the release 148 | uses: nekofar/create-github-release@v1.0.14 149 | with: 150 | tag: v${{ steps.release.outputs.version }} # The name of the tag to be released 151 | title: v${{ steps.release.outputs.version }} # The title for the release 152 | notes: ${{ steps.release.outputs.notes }} # The release notes generated in the previous step 153 | draft: true # The release will be created as a draft 154 | prerelease: ${{ contains(steps.release.outputs.version, '-rc') || contains(steps.release.outputs.version, '-beta') || contains(steps.release.outputs.version, '-alpha') }} # Conditions to mark the release as a pre-release 155 | 156 | concurrency: # Allows controlling the concurrency level of the job in the build pipeline. 157 | group: ${{ github.workflow }}-${{ github.ref }} 158 | cancel-in-progress: true # If enabled, previous runs of this workflow for the same group-key will be cancelled while this build or run is in progress. 159 | -------------------------------------------------------------------------------- /.github/workflows/git-flow.yml: -------------------------------------------------------------------------------- 1 | # Name of the workflow 2 | name: Git Flow 3 | 4 | # Defines the event that triggers the workflow 5 | on: 6 | push: 7 | branches: 8 | - 'feature/*' # Trigger for pushes to feature branches 9 | - 'bugfix/*' # Trigger for pushes to bugfix branches 10 | - 'release/*' # Trigger for pushes to release branches 11 | - 'hotfix/*' # Trigger for pushes to hotfix branches 12 | 13 | # Jobs are a set of steps that execute on the same runner 14 | jobs: 15 | create-pull-request: 16 | # Specifies the runner environment, using the latest Ubuntu 17 | runs-on: ubuntu-latest 18 | name: Create Pull Request 19 | permissions: write-all 20 | 21 | # Steps are individual tasks that run commands in a job 22 | steps: 23 | # Checks out the repository code under $GITHUB_WORKSPACE, so the job can access it 24 | - name: Checkout Repository Code 25 | uses: actions/checkout@v4.2.2 26 | 27 | # This step uses the Git Flow Action to create PRs based on branch types 28 | - name: Execute Git Flow Action 29 | uses: nekofar/git-flow-action@develop # Specifies the Git Flow Action to use and the branch 30 | with: 31 | # The GitHub Token for authentication with GitHub API 32 | github-token: ${{ secrets.GITHUB_TOKEN }} 33 | # The branch to target for release and hotfix PRs 34 | master-branch: 'master' 35 | # The branch to target for feature and bugfix PRs 36 | develop-branch: 'develop' 37 | # Prefix for feature branches 38 | feature-prefix: 'feature/' 39 | # Prefix for bugfix branches 40 | bugfix-prefix: 'bugfix/' 41 | # Prefix for release branches 42 | release-prefix: 'release/' 43 | # Prefix for hotfix branches 44 | hotfix-prefix: 'hotfix/' 45 | -------------------------------------------------------------------------------- /.github/workflows/template.yml: -------------------------------------------------------------------------------- 1 | # Assign a name to the workflow. 2 | name: Template Cleanup 3 | 4 | # Specify when this workflow is going to be triggered. 5 | on: 6 | # In this case, the workflow will be triggered whenever there is a push to the master branch. 7 | push: 8 | branches: [master] 9 | 10 | # Define the jobs that this workflow will perform. 11 | jobs: 12 | # Declare a job named 'cleanup'. 13 | cleanup: 14 | # Specify the type of runner that the job should run on - Latest version of Ubuntu. 15 | runs-on: ubuntu-latest 16 | 17 | # Define permissions for this job. 18 | permissions: 19 | contents: write 20 | 21 | # A conditional check to ensure the job runs only if the name of the repository meets the constraint. 22 | if: github.repository != 'nekofar/farcaster-frames-template' 23 | 24 | # Define the steps to be followed in this job. 25 | steps: 26 | # Checkout the code. 27 | - name: Checkout code 28 | uses: actions/checkout@v4.2.2 29 | 30 | # Set up Node.js environment. 31 | - name: Set up Node.js environment 32 | uses: actions/setup-node@v4.1.0 33 | 34 | # Install pnpm package manager. 35 | - name: Install pnpm package manager 36 | uses: pnpm/action-setup@v4.0.0 37 | with: 38 | version: ^9 39 | run_install: false 40 | 41 | # Clean up the repository. 42 | - name: Clean up the repository 43 | # The 'run:' statement let's you execute commands directly. 44 | run: | 45 | # Declare and assign local variables. 46 | NAME="$(basename $GITHUB_REPOSITORY)" 47 | VERSION='1.0.0-alpha.0' 48 | 49 | # Use pnpm dlx json to modify package.json name and version fields. 50 | pnpm dlx json -I -f package.json -e "this.name='${NAME}'" 51 | pnpm dlx json -I -f package.json -e "this.version='${VERSION}'" 52 | pnpm install --no-frozen-lockfile # Install dependencies (ignoring lock file) 53 | 54 | # Remove template specific files and directories. 55 | rm -rf \ 56 | .github/ISSUE_TEMPLATE \ 57 | .github/workflows/template.yml \ 58 | .github/workflows/git-flow.yml \ 59 | .github/dependabot.yml \ 60 | .github/FUNDING.yml \ 61 | .github/stale.yml \ 62 | CHANGELOG.md \ 63 | README.md 64 | 65 | # Commit the changes made to the repository. 66 | - name: Commit files 67 | run: | 68 | git config --local user.email "action@github.com" 69 | git config --local user.name "GitHub Action" 70 | git add . 71 | git commit -m 'chore: initial template cleanup' 72 | 73 | # Push the changes to the repository. 74 | - name: Push changes 75 | uses: ad-m/github-push-action@master 76 | with: 77 | branch: master 78 | github_token: ${{ secrets.GITHUB_TOKEN }} 79 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true 2 | engine-strict=true 3 | save-exact=true 4 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "useTabs": false, 7 | "plugins": [ 8 | "prettier-plugin-organize-imports", 9 | "prettier-plugin-organize-attributes", 10 | "prettier-plugin-jsdoc" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | ## [1.0.0-alpha.27] - 2025-01-01 6 | 7 | ### Bug Fixes 8 | 9 | - Solve some minor issues and update dependencies 10 | 11 | ## [1.0.0-alpha.26] - 2024-12-10 12 | 13 | ### Bug Fixes 14 | 15 | - Solve some minor issues and update dependencies 16 | 17 | ## [1.0.0-alpha.25] - 2024-12-10 18 | 19 | ### Miscellaneous Tasks 20 | 21 | - Add `outDir` configuration 22 | - Add GitHub Actions for build and release 23 | 24 | ## [1.0.0-alpha.24] - 2024-11-16 25 | 26 | ### Bug Fixes 27 | 28 | - Solve some minor issues and update dependencies 29 | 30 | ## [1.0.0-alpha.23] - 2024-10-31 31 | 32 | ### Bug Fixes 33 | 34 | - Solve some minor issues and update dependencies 35 | 36 | ## [1.0.0-alpha.22] - 2024-10-13 37 | 38 | ### Bug Fixes 39 | 40 | - Solve some minor issues and update dependencies 41 | 42 | ## [1.0.0-alpha.21] - 2024-08-30 43 | 44 | ### Bug Fixes 45 | 46 | - Solve some minor issues and update dependencies 47 | 48 | ## [1.0.0-alpha.20] - 2024-08-20 49 | 50 | ### Bug Fixes 51 | 52 | - Solve some minor issues and update dependencies 53 | 54 | ## [1.0.0-alpha.19] - 2024-08-04 55 | 56 | ### Refactor 57 | 58 | - Change `FrameSignaturePacket` from type to interface 59 | - Use nullish coalescing operator for default text 60 | - Convert port number to string in console.log 61 | 62 | ### Miscellaneous Tasks 63 | 64 | - Simplify eslint lint command 65 | - Add module type to package.json 66 | - Switch eslint configuration to flat 67 | 68 | ## [1.0.0-alpha.18] - 2024-06-30 69 | 70 | ### Bug Fixes 71 | 72 | - Solve some minor issues and update dependencies 73 | 74 | ## [1.0.0-alpha.17] - 2024-06-05 75 | 76 | ### Bug Fixes 77 | 78 | - Solve some minor issues and update dependencies 79 | 80 | ## [1.0.0-alpha.16] - 2024-04-24 81 | 82 | ### Miscellaneous Tasks 83 | 84 | - Update pnpm version on template workflow 85 | 86 | ## [1.0.0-alpha.15] - 2024-04-18 87 | 88 | ### Bug Fixes 89 | 90 | - Solve some minor issues and update dependencies 91 | 92 | ## [1.0.0-alpha.14] - 2024-03-22 93 | 94 | ### Bug Fixes 95 | 96 | - Solve some minor issues and update dependencies 97 | 98 | ## [1.0.0-alpha.13] - 2024-03-14 99 | 100 | ### Bug Fixes 101 | 102 | - Solve some minor issues and update dependencies 103 | 104 | ## [1.0.0-alpha.12] - 2024-03-06 105 | 106 | ### Bug Fixes 107 | 108 | - Solve some minor issues and update dependencies 109 | 110 | ## [1.0.0-alpha.11] - 2024-02-10 111 | 112 | ### Bug Fixes 113 | 114 | - Change place holder image size based on aspect ratio 115 | 116 | ## [1.0.0-alpha.10] - 2024-02-09 117 | 118 | ### Features 119 | 120 | - Add new farcaster image aspect ratio property 121 | 122 | ## [1.0.0-alpha.9] - 2024-02-08 123 | 124 | ### Documentation 125 | 126 | - Update the project readme file for some minor modificcations 127 | 128 | ## [1.0.0-alpha.8] - 2024-02-06 129 | 130 | ### Documentation 131 | 132 | - Update `README.md` to add instructions for using the template 133 | - Update `README.md` to improve sections headers 134 | 135 | ## [1.0.0-alpha.7] - 2024-02-04 136 | 137 | ### Miscellaneous Tasks 138 | 139 | - Enable `engine-strict` on the `.npmrc` 140 | - Add specified `node` and `pnpm` minimum version in `package.json` 141 | 142 | ## [1.0.0-alpha.6] - 2024-02-04 143 | 144 | ### Refactor 145 | 146 | - Enhance code with best practices and optimizations 147 | - Add `FrameSignaturePacket` to the types 148 | 149 | ## [1.0.0-alpha.5] - 2024-02-04 150 | 151 | ### Features 152 | 153 | - Add simple use case for using input texts 154 | 155 | ### Refactor 156 | 157 | - Update codes to improve code readability 158 | 159 | ### Documentation 160 | 161 | - Update the link to farcaster frames docs 162 | 163 | ### Miscellaneous Tasks 164 | 165 | - Add a new `lint` script for running `eslint` 166 | - Update eslint rules and parser on `.eslintrc.json` 167 | 168 | ## [1.0.0-alpha.4] - 2024-01-31 169 | 170 | ### Refactor 171 | 172 | - Add a og image as fallback for clients that do not support frames 173 | 174 | ## [1.0.0-alpha.3] - 2024-01-31 175 | 176 | ### Documentation 177 | 178 | - Update readme file improve usage section 179 | 180 | ## [1.0.0-alpha.2] - 2024-01-31 181 | 182 | ### Documentation 183 | 184 | - Update readme file to add usage and improve wrapping 185 | 186 | ## [1.0.0-alpha.1] - 2024-01-31 187 | 188 | ### Documentation 189 | 190 | - Update the readme file of the project 191 | - Add a new contributing guideline for the project 192 | 193 | ## [1.0.0-alpha.0] - 2024-01-31 194 | 195 | ### Features 196 | 197 | - Add simple functionality for changing frame background color 198 | 199 | ### Documentation 200 | 201 | - Add default issues templates for GitHub issues 202 | - Add new configuration file for GitHub Sponsorship 203 | - Remove the build badge from readme file 204 | - Add Apache License version 2.0 as project license 205 | 206 | ### Miscellaneous Tasks 207 | 208 | - Create a new Hono app using `create-hono` 209 | - Update `dev` script to run server and tunnel 210 | - Add `.editorconfig` file for better editor compatibility 211 | - Add a new configuration file for Dependabot 212 | - Add a new configuration file for stale bot 213 | - Add a new workflow file for handle Git Flow branches 214 | - Add `.npmrc` to enforce saving exact dependency versions 215 | - Add a new configuration file for Prettier 216 | - Add a new configuration file for ESLint 217 | - Add the template workflow to cleanup repository after work 218 | - Add mission meta data to the `package.json` 219 | 220 | 221 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to Contribute 2 | 3 | ## Pull Requests 4 | 5 | 1. Fork the repository 6 | 2. Create a new branch for each feature or improvement 7 | 3. Send a pull request from each branch to the **develop** branch 8 | 9 | It is very important to separate new features or improvements into separate branches and to send a 10 | pull request for each branch. This allows reviewing and pulling in new features or improvements individually. 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Farcaster Frames Template 2 | 3 | [![GitHub release (latest SemVer including pre-releases)](https://img.shields.io/github/v/release/nekofar/farcaster-frames-template?include_prereleases)](https://github.com/nekofar/farcaster-frames-template/releases) 4 | [![GitHub](https://img.shields.io/github/license/nekofar/farcaster-frames-template)](https://github.com/nekofar/farcaster-frames-template/blob/master/LICENSE) 5 | [![X (formerly Twitter) Follow](https://img.shields.io/badge/follow-%40nekofar-ffffff?logo=x&style=flat)](https://x.com/nekofar) 6 | [![Farcaster (Warpcast) Follow](https://img.shields.io/badge/follow-%40nekofar-855DCD.svg?logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjI5NyIgdmlld0JveD0iMCAwIDMyMyAyOTciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik01NS41ODY3IDAuNzMzMzM3SDI2My40MTNWMjk2LjI2N0gyMzIuOTA3VjE2MC44OTNIMjMyLjYwN0MyMjkuMjM2IDEyMy40NzkgMTk3Ljc5MiA5NC4xNiAxNTkuNSA5NC4xNkMxMjEuMjA4IDk0LjE2IDg5Ljc2NDIgMTIzLjQ3OSA4Ni4zOTI2IDE2MC44OTNIODYuMDkzM1YyOTYuMjY3SDU1LjU4NjdWMC43MzMzMzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMC4yOTMzMzUgNDIuNjhMMTIuNjg2NyA4NC42MjY3SDIzLjE3MzNWMjU0LjMyQzE3LjkwODIgMjU0LjMyIDEzLjY0IDI1OC41ODggMTMuNjQgMjYzLjg1M1YyNzUuMjkzSDExLjczMzNDNi40NjgyMiAyNzUuMjkzIDIuMiAyNzkuNTYyIDIuMiAyODQuODI3VjI5Ni4yNjdIMTA4Ljk3M1YyODQuODI3QzEwOC45NzMgMjc5LjU2MiAxMDQuNzA1IDI3NS4yOTMgOTkuNDQgMjc1LjI5M0g5Ny41MzMzVjI2My44NTNDOTcuNTMzMyAyNTguNTg4IDkzLjI2NTEgMjU0LjMyIDg4IDI1NC4zMkg3Ni41NlY0Mi42OEgwLjI5MzMzNVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yMzQuODEzIDI1NC4zMkMyMjkuNTQ4IDI1NC4zMiAyMjUuMjggMjU4LjU4OCAyMjUuMjggMjYzLjg1M1YyNzUuMjkzSDIyMy4zNzNDMjE4LjEwOCAyNzUuMjkzIDIxMy44NCAyNzkuNTYyIDIxMy44NCAyODQuODI3VjI5Ni4yNjdIMzIwLjYxM1YyODQuODI3QzMyMC42MTMgMjc5LjU2MiAzMTYuMzQ1IDI3NS4yOTMgMzExLjA4IDI3NS4yOTNIMzA5LjE3M1YyNjMuODUzQzMwOS4xNzMgMjU4LjU4OCAzMDQuOTA1IDI1NC4zMiAyOTkuNjQgMjU0LjMyVjg0LjYyNjdIMzEwLjEyN0wzMjIuNTIgNDIuNjhIMjQ2LjI1M1YyNTQuMzJIMjM0LjgxM1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=&style=flat)](https://warpcast.com/nekofar) 7 | [![Donate](https://img.shields.io/badge/donate-nekofar.crypto-a2b9bc?logo=ko-fi&logoColor=white)](https://ud.me/nekofar.crypto) 8 | 9 | Farcaster Frames Template is an easy-to-use template designed for beginners and experienced developers alike. It 10 | provides a robust starting point for building Farcaster Frames, streamlining the development process. This template is 11 | ideal for those looking to create custom frames quickly and efficiently. 12 | 13 | ## Getting Started 14 | 15 | ### Prerequisites 16 | 17 | - Node.js (Version 18 or later) 18 | - A text editor like VSCode 19 | - Basic understanding of TypeScript and Node.js 20 | 21 | ### Use Template 22 | 23 | You can use this repository as a template to create a new GitHub repository with the same directory structure and files. 24 | Here's how: 25 | 26 | 1. On the [repository page](https://github.com/nekofar/farcaster-frames-template), click the **Use this template** 27 | button. 28 | 2. Choose the owner of the new repository and enter a repository name. 29 | 3. Optionally, add a description for your repository. 30 | 4. Choose the repository visibility (Public or Private). 31 | 5. Click **Create repository** to create your new repository from template. 32 | 33 | After creating your repository from this template, clone it and install the dependencies. 34 | 35 | ### Installation 36 | 37 | 1. Clone the repository: 38 | ```bash 39 | git clone https://github.com/yourname/farcaster-frames-template.git 40 | ``` 41 | 2. Navigate to the project directory: 42 | ```bash 43 | cd farcaster-frames-template 44 | ``` 45 | 3. Install the dependencies: 46 | ```bash 47 | pnpm install 48 | ``` 49 | 4. Start the development server: 50 | ```bash 51 | pnpm run dev 52 | ``` 53 | 54 | ### Usage Guide 55 | 56 | The template uses [Localtunnel](https://github.com/localtunnel/localtunnel) which allows you to easily test your frames 57 | without the need to deploy them. Everytime running your project, you will receive a random URL, for 58 | example `https://thirty-glasses-tell.loca.lt`. You can directly copy this URL and test your frame using 59 | the [Warpcast Embed Tools](https://warpcast.com/~/developers/embeds). This makes the 60 | development and testing process much more efficient and straightforward. 61 | 62 | For detailed information on working with Farcaster Frames, refer to 63 | the [Farcaster Frames documentation](https://docs.farcaster.xyz/learn/what-is-farcaster/frames). 64 | Additionally, to learn more about Hono, visit the [Hono documentation](https://hono.dev/top). 65 | 66 | ## Contributing 67 | 68 | Contributions are what make the open source community such a fantastic place to learn, inspire, and create. Any 69 | contributions you make are **greatly appreciated** 70 | -------------------------------------------------------------------------------- /cliff.toml: -------------------------------------------------------------------------------- 1 | # git-cliff ~ default configuration file 2 | # https://git-cliff.org/docs/configuration 3 | # 4 | # Lines starting with "#" are comments. 5 | # Configuration options are organized into tables and keys. 6 | # See documentation for more information on available options. 7 | 8 | [changelog] 9 | # changelog header 10 | header = """ 11 | # Changelog\n 12 | All notable changes to this project will be documented in this file.\n 13 | """ 14 | # template for the changelog body 15 | # https://tera.netlify.app/docs 16 | body = """ 17 | {% if version %}\ 18 | ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }} 19 | {% else %}\ 20 | ## [unreleased] 21 | {% endif %}\ 22 | {% for group, commits in commits | group_by(attribute="group") %} 23 | ### {{ group | upper_first }} 24 | {% for commit in commits %} 25 | - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\ 26 | {% endfor %} 27 | {% endfor %}\n 28 | """ 29 | # remove the leading and trailing whitespace from the template 30 | trim = true 31 | # changelog footer 32 | footer = """ 33 | 34 | """ 35 | # postprocessors 36 | postprocessors = [ 37 | # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL 38 | { pattern = '', replace = '' }, 39 | { pattern = "'", replace = '`' }, 40 | { pattern = '"', replace = '`' }, 41 | ] 42 | [git] 43 | # parse the commits based on https://www.conventionalcommits.org 44 | conventional_commits = true 45 | # filter out the commits that are not conventional 46 | filter_unconventional = true 47 | # process each line of a commit as an individual commit 48 | split_commits = false 49 | # regex for preprocessing the commit messages 50 | commit_preprocessors = [ 51 | # { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, # replace issue numbers 52 | ] 53 | # regex for parsing and grouping commits 54 | commit_parsers = [ 55 | { message = "^feat", group = "Features" }, 56 | { message = "^fix", group = "Bug Fixes" }, 57 | { message = "^docs\\(changelog\\)", skip = true }, 58 | { message = "^doc", group = "Documentation" }, 59 | { message = "^perf", group = "Performance" }, 60 | { message = "^refactor", group = "Refactor" }, 61 | { message = "^style", group = "Styling" }, 62 | { message = "^test", group = "Testing" }, 63 | { message = "^chore\\(release\\): prepare for", skip = true }, 64 | { message = "^chore\\(deps(?:-dev)?\\)", skip = true }, 65 | { message = "^chore\\(pr\\)", skip = true }, 66 | { message = "^chore\\(pull\\)", skip = true }, 67 | { message = "^ci\\(deps\\)", skip = true }, 68 | { message = "^build|chore|ci", group = "Miscellaneous Tasks" }, 69 | { body = ".*security", group = "Security" }, 70 | { message = "^revert", group = "Revert" }, 71 | ] 72 | # protect breaking changes from being skipped due to matching a skipping commit_parser 73 | protect_breaking_commits = false 74 | # filter out the commits that are not matched by commit parsers 75 | filter_commits = true 76 | # glob pattern for matching git tags 77 | tag_pattern = "v[0-9]*" 78 | # regex for skipping tags 79 | skip_tags = "v0.1.0-beta.1" 80 | # regex for ignoring tags 81 | ignore_tags = "" 82 | # sort the tags topologically 83 | topo_order = false 84 | # sort the commits inside sections by oldest/newest order 85 | sort_commits = "oldest" 86 | # limit the number of commits included in the changelog. 87 | # limit_commits = 42 88 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import javascriptEslint from '@eslint/js' 2 | import eslintConfigPrettier from 'eslint-config-prettier' 3 | import eslintPluginJsdoc from 'eslint-plugin-jsdoc' 4 | import eslintPluginPrettier from 'eslint-plugin-prettier' 5 | import eslintPluginRegexp from 'eslint-plugin-regexp' 6 | import eslintPluginUnicorn from 'eslint-plugin-unicorn' 7 | import globals from 'globals' 8 | import typescriptEslint from 'typescript-eslint' 9 | 10 | export default typescriptEslint.config( 11 | { 12 | // config with just ignores is the replacement for `.eslintignore` 13 | ignores: ['**/build/**', '**/dist/**', '**/.wrangler/**'], 14 | }, 15 | javascriptEslint.configs.recommended, 16 | eslintPluginJsdoc.configs['flat/recommended-typescript-error'], 17 | eslintPluginRegexp.configs['flat/recommended'], 18 | ...typescriptEslint.configs.strictTypeChecked, 19 | ...typescriptEslint.configs.stylisticTypeChecked, 20 | { 21 | languageOptions: { 22 | globals: { 23 | ...globals.browser, 24 | ...globals.node, 25 | }, 26 | }, 27 | }, 28 | { 29 | plugins: { 30 | '@typescript-eslint': typescriptEslint.plugin, 31 | unicorn: eslintPluginUnicorn, 32 | prettier: eslintPluginPrettier, 33 | }, 34 | languageOptions: { 35 | parser: typescriptEslint.parser, 36 | parserOptions: { 37 | projectService: true, 38 | tsconfigRootDir: import.meta.dirname, 39 | }, 40 | }, 41 | rules: { 42 | ...eslintPluginUnicorn.rules.recommended, 43 | }, 44 | }, 45 | { 46 | files: ['**/*.js'], 47 | ...typescriptEslint.configs.disableTypeChecked, 48 | }, 49 | eslintConfigPrettier, // eslint-config-prettier last 50 | ) 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "farcaster-frames-template", 3 | "version": "1.0.0-alpha.27", 4 | "type": "module", 5 | "keywords": [ 6 | "farcaster", 7 | "frames", 8 | "template" 9 | ], 10 | "author": "Milad Nekofar ", 11 | "license": "Apache-2.0", 12 | "scripts": { 13 | "dev": "pnpm run '/^dev:.*/'", 14 | "dev:server": "tsx watch src/index.ts", 15 | "dev:tunnel": "lt --port 3000", 16 | "lint": "eslint", 17 | "build": "tsc", 18 | "start": "node dist/index.js" 19 | }, 20 | "dependencies": { 21 | "@hono/node-server": "1.13.7", 22 | "hono": "4.6.15" 23 | }, 24 | "devDependencies": { 25 | "@types/eslint": "9.6.1", 26 | "@types/eslint-config-prettier": "6.11.3", 27 | "@types/node": "22.10.2", 28 | "@typescript-eslint/parser": "8.18.2", 29 | "eslint": "9.17.0", 30 | "eslint-config-prettier": "9.1.0", 31 | "eslint-plugin-jsdoc": "50.6.1", 32 | "eslint-plugin-prettier": "5.2.1", 33 | "eslint-plugin-regexp": "2.7.0", 34 | "eslint-plugin-unicorn": "56.0.1", 35 | "globals": "15.14.0", 36 | "localtunnel": "2.0.2", 37 | "prettier": "3.4.2", 38 | "prettier-plugin-jsdoc": "1.3.0", 39 | "prettier-plugin-organize-attributes": "1.0.0", 40 | "prettier-plugin-organize-imports": "4.1.0", 41 | "tsx": "4.19.2", 42 | "typescript": "5.7.2", 43 | "typescript-eslint": "8.18.2" 44 | }, 45 | "resolutions": { 46 | "axios": ">=1.6.0", 47 | "hono": ">=4.2.7", 48 | "@eslint/plugin-kit": ">=0.2.3", 49 | "@hono/node-server": ">=1.10.1" 50 | }, 51 | "engines": { 52 | "node": ">=18.0.0", 53 | "pnpm": ">=8.0.0" 54 | }, 55 | "packageManager": "pnpm@9.7.1" 56 | } 57 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | overrides: 8 | axios: '>=1.6.0' 9 | hono: '>=4.2.7' 10 | '@eslint/plugin-kit': '>=0.2.3' 11 | '@hono/node-server': '>=1.10.1' 12 | 13 | importers: 14 | 15 | .: 16 | dependencies: 17 | '@hono/node-server': 18 | specifier: '>=1.10.1' 19 | version: 1.13.7(hono@4.6.15) 20 | hono: 21 | specifier: '>=4.2.7' 22 | version: 4.6.15 23 | devDependencies: 24 | '@types/eslint': 25 | specifier: 9.6.1 26 | version: 9.6.1 27 | '@types/eslint-config-prettier': 28 | specifier: 6.11.3 29 | version: 6.11.3 30 | '@types/node': 31 | specifier: 22.10.2 32 | version: 22.10.2 33 | '@typescript-eslint/parser': 34 | specifier: 8.18.2 35 | version: 8.18.2(eslint@9.17.0)(typescript@5.7.2) 36 | eslint: 37 | specifier: 9.17.0 38 | version: 9.17.0 39 | eslint-config-prettier: 40 | specifier: 9.1.0 41 | version: 9.1.0(eslint@9.17.0) 42 | eslint-plugin-jsdoc: 43 | specifier: 50.6.1 44 | version: 50.6.1(eslint@9.17.0) 45 | eslint-plugin-prettier: 46 | specifier: 5.2.1 47 | version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2) 48 | eslint-plugin-regexp: 49 | specifier: 2.7.0 50 | version: 2.7.0(eslint@9.17.0) 51 | eslint-plugin-unicorn: 52 | specifier: 56.0.1 53 | version: 56.0.1(eslint@9.17.0) 54 | globals: 55 | specifier: 15.14.0 56 | version: 15.14.0 57 | localtunnel: 58 | specifier: 2.0.2 59 | version: 2.0.2 60 | prettier: 61 | specifier: 3.4.2 62 | version: 3.4.2 63 | prettier-plugin-jsdoc: 64 | specifier: 1.3.0 65 | version: 1.3.0(prettier@3.4.2) 66 | prettier-plugin-organize-attributes: 67 | specifier: 1.0.0 68 | version: 1.0.0(prettier@3.4.2) 69 | prettier-plugin-organize-imports: 70 | specifier: 4.1.0 71 | version: 4.1.0(prettier@3.4.2)(typescript@5.7.2) 72 | tsx: 73 | specifier: 4.19.2 74 | version: 4.19.2 75 | typescript: 76 | specifier: 5.7.2 77 | version: 5.7.2 78 | typescript-eslint: 79 | specifier: 8.18.2 80 | version: 8.18.2(eslint@9.17.0)(typescript@5.7.2) 81 | 82 | packages: 83 | 84 | '@babel/code-frame@7.24.2': 85 | resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/helper-validator-identifier@7.25.7': 89 | resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/highlight@7.24.5': 93 | resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@es-joy/jsdoccomment@0.49.0': 97 | resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} 98 | engines: {node: '>=16'} 99 | 100 | '@esbuild/aix-ppc64@0.23.1': 101 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} 102 | engines: {node: '>=18'} 103 | cpu: [ppc64] 104 | os: [aix] 105 | 106 | '@esbuild/android-arm64@0.23.1': 107 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} 108 | engines: {node: '>=18'} 109 | cpu: [arm64] 110 | os: [android] 111 | 112 | '@esbuild/android-arm@0.23.1': 113 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} 114 | engines: {node: '>=18'} 115 | cpu: [arm] 116 | os: [android] 117 | 118 | '@esbuild/android-x64@0.23.1': 119 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} 120 | engines: {node: '>=18'} 121 | cpu: [x64] 122 | os: [android] 123 | 124 | '@esbuild/darwin-arm64@0.23.1': 125 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} 126 | engines: {node: '>=18'} 127 | cpu: [arm64] 128 | os: [darwin] 129 | 130 | '@esbuild/darwin-x64@0.23.1': 131 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} 132 | engines: {node: '>=18'} 133 | cpu: [x64] 134 | os: [darwin] 135 | 136 | '@esbuild/freebsd-arm64@0.23.1': 137 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} 138 | engines: {node: '>=18'} 139 | cpu: [arm64] 140 | os: [freebsd] 141 | 142 | '@esbuild/freebsd-x64@0.23.1': 143 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} 144 | engines: {node: '>=18'} 145 | cpu: [x64] 146 | os: [freebsd] 147 | 148 | '@esbuild/linux-arm64@0.23.1': 149 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} 150 | engines: {node: '>=18'} 151 | cpu: [arm64] 152 | os: [linux] 153 | 154 | '@esbuild/linux-arm@0.23.1': 155 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} 156 | engines: {node: '>=18'} 157 | cpu: [arm] 158 | os: [linux] 159 | 160 | '@esbuild/linux-ia32@0.23.1': 161 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} 162 | engines: {node: '>=18'} 163 | cpu: [ia32] 164 | os: [linux] 165 | 166 | '@esbuild/linux-loong64@0.23.1': 167 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} 168 | engines: {node: '>=18'} 169 | cpu: [loong64] 170 | os: [linux] 171 | 172 | '@esbuild/linux-mips64el@0.23.1': 173 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} 174 | engines: {node: '>=18'} 175 | cpu: [mips64el] 176 | os: [linux] 177 | 178 | '@esbuild/linux-ppc64@0.23.1': 179 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} 180 | engines: {node: '>=18'} 181 | cpu: [ppc64] 182 | os: [linux] 183 | 184 | '@esbuild/linux-riscv64@0.23.1': 185 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} 186 | engines: {node: '>=18'} 187 | cpu: [riscv64] 188 | os: [linux] 189 | 190 | '@esbuild/linux-s390x@0.23.1': 191 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} 192 | engines: {node: '>=18'} 193 | cpu: [s390x] 194 | os: [linux] 195 | 196 | '@esbuild/linux-x64@0.23.1': 197 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} 198 | engines: {node: '>=18'} 199 | cpu: [x64] 200 | os: [linux] 201 | 202 | '@esbuild/netbsd-x64@0.23.1': 203 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} 204 | engines: {node: '>=18'} 205 | cpu: [x64] 206 | os: [netbsd] 207 | 208 | '@esbuild/openbsd-arm64@0.23.1': 209 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} 210 | engines: {node: '>=18'} 211 | cpu: [arm64] 212 | os: [openbsd] 213 | 214 | '@esbuild/openbsd-x64@0.23.1': 215 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} 216 | engines: {node: '>=18'} 217 | cpu: [x64] 218 | os: [openbsd] 219 | 220 | '@esbuild/sunos-x64@0.23.1': 221 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} 222 | engines: {node: '>=18'} 223 | cpu: [x64] 224 | os: [sunos] 225 | 226 | '@esbuild/win32-arm64@0.23.1': 227 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} 228 | engines: {node: '>=18'} 229 | cpu: [arm64] 230 | os: [win32] 231 | 232 | '@esbuild/win32-ia32@0.23.1': 233 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} 234 | engines: {node: '>=18'} 235 | cpu: [ia32] 236 | os: [win32] 237 | 238 | '@esbuild/win32-x64@0.23.1': 239 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} 240 | engines: {node: '>=18'} 241 | cpu: [x64] 242 | os: [win32] 243 | 244 | '@eslint-community/eslint-utils@4.4.1': 245 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 246 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 247 | peerDependencies: 248 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 249 | 250 | '@eslint-community/regexpp@4.12.1': 251 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 252 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 253 | 254 | '@eslint/config-array@0.19.1': 255 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 256 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 257 | 258 | '@eslint/core@0.9.1': 259 | resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} 260 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 261 | 262 | '@eslint/eslintrc@3.2.0': 263 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 264 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 265 | 266 | '@eslint/js@9.17.0': 267 | resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} 268 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 269 | 270 | '@eslint/object-schema@2.1.5': 271 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 272 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 273 | 274 | '@eslint/plugin-kit@0.2.4': 275 | resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} 276 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 277 | 278 | '@hono/node-server@1.13.7': 279 | resolution: {integrity: sha512-kTfUMsoloVKtRA2fLiGSd9qBddmru9KadNyhJCwgKBxTiNkaAJEwkVN9KV/rS4HtmmNRtUh6P+YpmjRMl0d9vQ==} 280 | engines: {node: '>=18.14.1'} 281 | peerDependencies: 282 | hono: '>=4.2.7' 283 | 284 | '@humanfs/core@0.19.1': 285 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 286 | engines: {node: '>=18.18.0'} 287 | 288 | '@humanfs/node@0.16.6': 289 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 290 | engines: {node: '>=18.18.0'} 291 | 292 | '@humanwhocodes/module-importer@1.0.1': 293 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 294 | engines: {node: '>=12.22'} 295 | 296 | '@humanwhocodes/retry@0.3.1': 297 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 298 | engines: {node: '>=18.18'} 299 | 300 | '@humanwhocodes/retry@0.4.1': 301 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 302 | engines: {node: '>=18.18'} 303 | 304 | '@nodelib/fs.scandir@2.1.5': 305 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 306 | engines: {node: '>= 8'} 307 | 308 | '@nodelib/fs.stat@2.0.5': 309 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 310 | engines: {node: '>= 8'} 311 | 312 | '@nodelib/fs.walk@1.2.8': 313 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 314 | engines: {node: '>= 8'} 315 | 316 | '@pkgr/core@0.1.1': 317 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 318 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 319 | 320 | '@types/debug@4.1.12': 321 | resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 322 | 323 | '@types/eslint-config-prettier@6.11.3': 324 | resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} 325 | 326 | '@types/eslint@9.6.1': 327 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} 328 | 329 | '@types/estree@1.0.5': 330 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 331 | 332 | '@types/estree@1.0.6': 333 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 334 | 335 | '@types/json-schema@7.0.15': 336 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 337 | 338 | '@types/mdast@4.0.3': 339 | resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} 340 | 341 | '@types/ms@0.7.34': 342 | resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} 343 | 344 | '@types/node@22.10.2': 345 | resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} 346 | 347 | '@types/normalize-package-data@2.4.4': 348 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 349 | 350 | '@types/unist@3.0.2': 351 | resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} 352 | 353 | '@typescript-eslint/eslint-plugin@8.18.2': 354 | resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} 355 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 356 | peerDependencies: 357 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 358 | eslint: ^8.57.0 || ^9.0.0 359 | typescript: '>=4.8.4 <5.8.0' 360 | 361 | '@typescript-eslint/parser@8.18.2': 362 | resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} 363 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 364 | peerDependencies: 365 | eslint: ^8.57.0 || ^9.0.0 366 | typescript: '>=4.8.4 <5.8.0' 367 | 368 | '@typescript-eslint/scope-manager@8.18.2': 369 | resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} 370 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 371 | 372 | '@typescript-eslint/type-utils@8.18.2': 373 | resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} 374 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 375 | peerDependencies: 376 | eslint: ^8.57.0 || ^9.0.0 377 | typescript: '>=4.8.4 <5.8.0' 378 | 379 | '@typescript-eslint/types@8.18.2': 380 | resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} 381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 382 | 383 | '@typescript-eslint/typescript-estree@8.18.2': 384 | resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} 385 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 386 | peerDependencies: 387 | typescript: '>=4.8.4 <5.8.0' 388 | 389 | '@typescript-eslint/utils@8.18.2': 390 | resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} 391 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 392 | peerDependencies: 393 | eslint: ^8.57.0 || ^9.0.0 394 | typescript: '>=4.8.4 <5.8.0' 395 | 396 | '@typescript-eslint/visitor-keys@8.18.2': 397 | resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} 398 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 399 | 400 | acorn-jsx@5.3.2: 401 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 402 | peerDependencies: 403 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 404 | 405 | acorn@8.14.0: 406 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 407 | engines: {node: '>=0.4.0'} 408 | hasBin: true 409 | 410 | ajv@6.12.6: 411 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 412 | 413 | ansi-regex@5.0.1: 414 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 415 | engines: {node: '>=8'} 416 | 417 | ansi-styles@3.2.1: 418 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 419 | engines: {node: '>=4'} 420 | 421 | ansi-styles@4.3.0: 422 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 423 | engines: {node: '>=8'} 424 | 425 | are-docs-informative@0.0.2: 426 | resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} 427 | engines: {node: '>=14'} 428 | 429 | argparse@2.0.1: 430 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 431 | 432 | asynckit@0.4.0: 433 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 434 | 435 | axios@1.7.7: 436 | resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} 437 | 438 | balanced-match@1.0.2: 439 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 440 | 441 | binary-searching@2.0.5: 442 | resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} 443 | 444 | brace-expansion@1.1.11: 445 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 446 | 447 | brace-expansion@2.0.1: 448 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 449 | 450 | braces@3.0.3: 451 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 452 | engines: {node: '>=8'} 453 | 454 | browserslist@4.24.0: 455 | resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} 456 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 457 | hasBin: true 458 | 459 | builtin-modules@3.3.0: 460 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 461 | engines: {node: '>=6'} 462 | 463 | callsites@3.1.0: 464 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 465 | engines: {node: '>=6'} 466 | 467 | caniuse-lite@1.0.30001668: 468 | resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==} 469 | 470 | chalk@2.4.2: 471 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 472 | engines: {node: '>=4'} 473 | 474 | chalk@4.1.2: 475 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 476 | engines: {node: '>=10'} 477 | 478 | character-entities@2.0.2: 479 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 480 | 481 | ci-info@4.0.0: 482 | resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} 483 | engines: {node: '>=8'} 484 | 485 | clean-regexp@1.0.0: 486 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 487 | engines: {node: '>=4'} 488 | 489 | cliui@7.0.4: 490 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 491 | 492 | color-convert@1.9.3: 493 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 494 | 495 | color-convert@2.0.1: 496 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 497 | engines: {node: '>=7.0.0'} 498 | 499 | color-name@1.1.3: 500 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 501 | 502 | color-name@1.1.4: 503 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 504 | 505 | combined-stream@1.0.8: 506 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 507 | engines: {node: '>= 0.8'} 508 | 509 | comment-parser@1.4.1: 510 | resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} 511 | engines: {node: '>= 12.0.0'} 512 | 513 | concat-map@0.0.1: 514 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 515 | 516 | core-js-compat@3.38.1: 517 | resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} 518 | 519 | cross-spawn@7.0.6: 520 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 521 | engines: {node: '>= 8'} 522 | 523 | debug@4.3.2: 524 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} 525 | engines: {node: '>=6.0'} 526 | peerDependencies: 527 | supports-color: '*' 528 | peerDependenciesMeta: 529 | supports-color: 530 | optional: true 531 | 532 | debug@4.4.0: 533 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 534 | engines: {node: '>=6.0'} 535 | peerDependencies: 536 | supports-color: '*' 537 | peerDependenciesMeta: 538 | supports-color: 539 | optional: true 540 | 541 | decode-named-character-reference@1.0.2: 542 | resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} 543 | 544 | deep-is@0.1.4: 545 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 546 | 547 | delayed-stream@1.0.0: 548 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 549 | engines: {node: '>=0.4.0'} 550 | 551 | dequal@2.0.3: 552 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 553 | engines: {node: '>=6'} 554 | 555 | devlop@1.1.0: 556 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 557 | 558 | electron-to-chromium@1.5.36: 559 | resolution: {integrity: sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==} 560 | 561 | emoji-regex@8.0.0: 562 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 563 | 564 | error-ex@1.3.2: 565 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 566 | 567 | es-module-lexer@1.5.4: 568 | resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} 569 | 570 | esbuild@0.23.1: 571 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} 572 | engines: {node: '>=18'} 573 | hasBin: true 574 | 575 | escalade@3.1.2: 576 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 577 | engines: {node: '>=6'} 578 | 579 | escalade@3.2.0: 580 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 581 | engines: {node: '>=6'} 582 | 583 | escape-string-regexp@1.0.5: 584 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 585 | engines: {node: '>=0.8.0'} 586 | 587 | escape-string-regexp@4.0.0: 588 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 589 | engines: {node: '>=10'} 590 | 591 | eslint-config-prettier@9.1.0: 592 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 593 | hasBin: true 594 | peerDependencies: 595 | eslint: '>=7.0.0' 596 | 597 | eslint-plugin-jsdoc@50.6.1: 598 | resolution: {integrity: sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==} 599 | engines: {node: '>=18'} 600 | peerDependencies: 601 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 602 | 603 | eslint-plugin-prettier@5.2.1: 604 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 605 | engines: {node: ^14.18.0 || >=16.0.0} 606 | peerDependencies: 607 | '@types/eslint': '>=8.0.0' 608 | eslint: '>=8.0.0' 609 | eslint-config-prettier: '*' 610 | prettier: '>=3.0.0' 611 | peerDependenciesMeta: 612 | '@types/eslint': 613 | optional: true 614 | eslint-config-prettier: 615 | optional: true 616 | 617 | eslint-plugin-regexp@2.7.0: 618 | resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} 619 | engines: {node: ^18 || >=20} 620 | peerDependencies: 621 | eslint: '>=8.44.0' 622 | 623 | eslint-plugin-unicorn@56.0.1: 624 | resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} 625 | engines: {node: '>=18.18'} 626 | peerDependencies: 627 | eslint: '>=8.56.0' 628 | 629 | eslint-scope@8.2.0: 630 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 631 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 632 | 633 | eslint-visitor-keys@3.4.3: 634 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 635 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 636 | 637 | eslint-visitor-keys@4.2.0: 638 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 639 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 640 | 641 | eslint@9.17.0: 642 | resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} 643 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 644 | hasBin: true 645 | peerDependencies: 646 | jiti: '*' 647 | peerDependenciesMeta: 648 | jiti: 649 | optional: true 650 | 651 | espree@10.3.0: 652 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 653 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 654 | 655 | esquery@1.6.0: 656 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 657 | engines: {node: '>=0.10'} 658 | 659 | esrecurse@4.3.0: 660 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 661 | engines: {node: '>=4.0'} 662 | 663 | estraverse@5.3.0: 664 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 665 | engines: {node: '>=4.0'} 666 | 667 | esutils@2.0.3: 668 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 669 | engines: {node: '>=0.10.0'} 670 | 671 | fast-deep-equal@3.1.3: 672 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 673 | 674 | fast-diff@1.3.0: 675 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 676 | 677 | fast-glob@3.3.2: 678 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 679 | engines: {node: '>=8.6.0'} 680 | 681 | fast-json-stable-stringify@2.1.0: 682 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 683 | 684 | fast-levenshtein@2.0.6: 685 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 686 | 687 | fastq@1.18.0: 688 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 689 | 690 | file-entry-cache@8.0.0: 691 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 692 | engines: {node: '>=16.0.0'} 693 | 694 | fill-range@7.1.1: 695 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 696 | engines: {node: '>=8'} 697 | 698 | find-up@4.1.0: 699 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 700 | engines: {node: '>=8'} 701 | 702 | find-up@5.0.0: 703 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 704 | engines: {node: '>=10'} 705 | 706 | flat-cache@4.0.1: 707 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 708 | engines: {node: '>=16'} 709 | 710 | flatted@3.3.2: 711 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 712 | 713 | follow-redirects@1.15.6: 714 | resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} 715 | engines: {node: '>=4.0'} 716 | peerDependencies: 717 | debug: '*' 718 | peerDependenciesMeta: 719 | debug: 720 | optional: true 721 | 722 | form-data@4.0.0: 723 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 724 | engines: {node: '>= 6'} 725 | 726 | fsevents@2.3.3: 727 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 728 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 729 | os: [darwin] 730 | 731 | function-bind@1.1.2: 732 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 733 | 734 | get-caller-file@2.0.5: 735 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 736 | engines: {node: 6.* || 8.* || >= 10.*} 737 | 738 | get-tsconfig@4.7.5: 739 | resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} 740 | 741 | glob-parent@5.1.2: 742 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 743 | engines: {node: '>= 6'} 744 | 745 | glob-parent@6.0.2: 746 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 747 | engines: {node: '>=10.13.0'} 748 | 749 | globals@14.0.0: 750 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 751 | engines: {node: '>=18'} 752 | 753 | globals@15.14.0: 754 | resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} 755 | engines: {node: '>=18'} 756 | 757 | graphemer@1.4.0: 758 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 759 | 760 | has-flag@3.0.0: 761 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 762 | engines: {node: '>=4'} 763 | 764 | has-flag@4.0.0: 765 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 766 | engines: {node: '>=8'} 767 | 768 | hasown@2.0.2: 769 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 770 | engines: {node: '>= 0.4'} 771 | 772 | hono@4.6.15: 773 | resolution: {integrity: sha512-OiQwvAOAaI2JrABBH69z5rsctHDzFzIKJge0nYXgtzGJ0KftwLWcBXm1upJC23/omNRtnqM0gjRMbtXshPdqhQ==} 774 | engines: {node: '>=16.9.0'} 775 | 776 | hosted-git-info@2.8.9: 777 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 778 | 779 | ignore@5.3.2: 780 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 781 | engines: {node: '>= 4'} 782 | 783 | import-fresh@3.3.0: 784 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 785 | engines: {node: '>=6'} 786 | 787 | imurmurhash@0.1.4: 788 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 789 | engines: {node: '>=0.8.19'} 790 | 791 | indent-string@4.0.0: 792 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 793 | engines: {node: '>=8'} 794 | 795 | is-arrayish@0.2.1: 796 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 797 | 798 | is-builtin-module@3.2.1: 799 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 800 | engines: {node: '>=6'} 801 | 802 | is-core-module@2.13.1: 803 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 804 | 805 | is-extglob@2.1.1: 806 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 807 | engines: {node: '>=0.10.0'} 808 | 809 | is-fullwidth-code-point@3.0.0: 810 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 811 | engines: {node: '>=8'} 812 | 813 | is-glob@4.0.3: 814 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 815 | engines: {node: '>=0.10.0'} 816 | 817 | is-number@7.0.0: 818 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 819 | engines: {node: '>=0.12.0'} 820 | 821 | isexe@2.0.0: 822 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 823 | 824 | js-tokens@4.0.0: 825 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 826 | 827 | js-yaml@4.1.0: 828 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 829 | hasBin: true 830 | 831 | jsdoc-type-pratt-parser@4.1.0: 832 | resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} 833 | engines: {node: '>=12.0.0'} 834 | 835 | jsesc@0.5.0: 836 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 837 | hasBin: true 838 | 839 | jsesc@3.0.2: 840 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 841 | engines: {node: '>=6'} 842 | hasBin: true 843 | 844 | json-buffer@3.0.1: 845 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 846 | 847 | json-parse-even-better-errors@2.3.1: 848 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 849 | 850 | json-schema-traverse@0.4.1: 851 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 852 | 853 | json-stable-stringify-without-jsonify@1.0.1: 854 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 855 | 856 | keyv@4.5.4: 857 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 858 | 859 | levn@0.4.1: 860 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 861 | engines: {node: '>= 0.8.0'} 862 | 863 | lines-and-columns@1.2.4: 864 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 865 | 866 | localtunnel@2.0.2: 867 | resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==} 868 | engines: {node: '>=8.3.0'} 869 | hasBin: true 870 | 871 | locate-path@5.0.0: 872 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 873 | engines: {node: '>=8'} 874 | 875 | locate-path@6.0.0: 876 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 877 | engines: {node: '>=10'} 878 | 879 | lodash.merge@4.6.2: 880 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 881 | 882 | mdast-util-from-markdown@2.0.0: 883 | resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} 884 | 885 | mdast-util-to-string@4.0.0: 886 | resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} 887 | 888 | merge2@1.4.1: 889 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 890 | engines: {node: '>= 8'} 891 | 892 | micromark-core-commonmark@2.0.1: 893 | resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} 894 | 895 | micromark-factory-destination@2.0.0: 896 | resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} 897 | 898 | micromark-factory-label@2.0.0: 899 | resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} 900 | 901 | micromark-factory-space@2.0.0: 902 | resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} 903 | 904 | micromark-factory-title@2.0.0: 905 | resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} 906 | 907 | micromark-factory-whitespace@2.0.0: 908 | resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} 909 | 910 | micromark-util-character@2.1.0: 911 | resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} 912 | 913 | micromark-util-chunked@2.0.0: 914 | resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} 915 | 916 | micromark-util-classify-character@2.0.0: 917 | resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} 918 | 919 | micromark-util-combine-extensions@2.0.0: 920 | resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} 921 | 922 | micromark-util-decode-numeric-character-reference@2.0.1: 923 | resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} 924 | 925 | micromark-util-decode-string@2.0.0: 926 | resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} 927 | 928 | micromark-util-encode@2.0.0: 929 | resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} 930 | 931 | micromark-util-html-tag-name@2.0.0: 932 | resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} 933 | 934 | micromark-util-normalize-identifier@2.0.0: 935 | resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} 936 | 937 | micromark-util-resolve-all@2.0.0: 938 | resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} 939 | 940 | micromark-util-sanitize-uri@2.0.0: 941 | resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} 942 | 943 | micromark-util-subtokenize@2.0.1: 944 | resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} 945 | 946 | micromark-util-symbol@2.0.0: 947 | resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} 948 | 949 | micromark-util-types@2.0.0: 950 | resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} 951 | 952 | micromark@4.0.0: 953 | resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} 954 | 955 | micromatch@4.0.8: 956 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 957 | engines: {node: '>=8.6'} 958 | 959 | mime-db@1.52.0: 960 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 961 | engines: {node: '>= 0.6'} 962 | 963 | mime-types@2.1.35: 964 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 965 | engines: {node: '>= 0.6'} 966 | 967 | min-indent@1.0.1: 968 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 969 | engines: {node: '>=4'} 970 | 971 | minimatch@3.1.2: 972 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 973 | 974 | minimatch@9.0.5: 975 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 976 | engines: {node: '>=16 || 14 >=14.17'} 977 | 978 | ms@2.1.2: 979 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 980 | 981 | ms@2.1.3: 982 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 983 | 984 | natural-compare@1.4.0: 985 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 986 | 987 | node-releases@2.0.18: 988 | resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 989 | 990 | normalize-package-data@2.5.0: 991 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 992 | 993 | openurl@1.1.1: 994 | resolution: {integrity: sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==} 995 | 996 | optionator@0.9.4: 997 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 998 | engines: {node: '>= 0.8.0'} 999 | 1000 | p-limit@2.3.0: 1001 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1002 | engines: {node: '>=6'} 1003 | 1004 | p-limit@3.1.0: 1005 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1006 | engines: {node: '>=10'} 1007 | 1008 | p-locate@4.1.0: 1009 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1010 | engines: {node: '>=8'} 1011 | 1012 | p-locate@5.0.0: 1013 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1014 | engines: {node: '>=10'} 1015 | 1016 | p-try@2.2.0: 1017 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1018 | engines: {node: '>=6'} 1019 | 1020 | parent-module@1.0.1: 1021 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1022 | engines: {node: '>=6'} 1023 | 1024 | parse-imports@2.1.1: 1025 | resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} 1026 | engines: {node: '>= 18'} 1027 | 1028 | parse-json@5.2.0: 1029 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1030 | engines: {node: '>=8'} 1031 | 1032 | path-exists@4.0.0: 1033 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1034 | engines: {node: '>=8'} 1035 | 1036 | path-key@3.1.1: 1037 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1038 | engines: {node: '>=8'} 1039 | 1040 | path-parse@1.0.7: 1041 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1042 | 1043 | picocolors@1.1.0: 1044 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 1045 | 1046 | picomatch@2.3.1: 1047 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1048 | engines: {node: '>=8.6'} 1049 | 1050 | pluralize@8.0.0: 1051 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1052 | engines: {node: '>=4'} 1053 | 1054 | prelude-ls@1.2.1: 1055 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1056 | engines: {node: '>= 0.8.0'} 1057 | 1058 | prettier-linter-helpers@1.0.0: 1059 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1060 | engines: {node: '>=6.0.0'} 1061 | 1062 | prettier-plugin-jsdoc@1.3.0: 1063 | resolution: {integrity: sha512-cQm8xIa0fN9ieJFMXACQd6JPycl+8ouOijAqUqu44EF/s4fXL3Wi9sKXuEaodsEWgCN42Xby/bNhqgM1iWx4uw==} 1064 | engines: {node: '>=14.13.1 || >=16.0.0'} 1065 | peerDependencies: 1066 | prettier: ^3.0.0 1067 | 1068 | prettier-plugin-organize-attributes@1.0.0: 1069 | resolution: {integrity: sha512-+NmameaLxbCcylEXsKPmawtzla5EE6ECqvGkpfQz4KM847fXDifB1gFnPQEpoADAq6IXg+cMI8Z0ISJEXa6fhg==} 1070 | engines: {node: '>=14.0.0'} 1071 | peerDependencies: 1072 | prettier: ^3.0.0 1073 | 1074 | prettier-plugin-organize-imports@4.1.0: 1075 | resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} 1076 | peerDependencies: 1077 | prettier: '>=2.0' 1078 | typescript: '>=2.9' 1079 | vue-tsc: ^2.1.0 1080 | peerDependenciesMeta: 1081 | vue-tsc: 1082 | optional: true 1083 | 1084 | prettier@3.4.2: 1085 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1086 | engines: {node: '>=14'} 1087 | hasBin: true 1088 | 1089 | proxy-from-env@1.1.0: 1090 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1091 | 1092 | punycode@2.3.1: 1093 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1094 | engines: {node: '>=6'} 1095 | 1096 | queue-microtask@1.2.3: 1097 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1098 | 1099 | read-pkg-up@7.0.1: 1100 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1101 | engines: {node: '>=8'} 1102 | 1103 | read-pkg@5.2.0: 1104 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1105 | engines: {node: '>=8'} 1106 | 1107 | refa@0.12.1: 1108 | resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} 1109 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 1110 | 1111 | regexp-ast-analysis@0.7.1: 1112 | resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} 1113 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 1114 | 1115 | regexp-tree@0.1.27: 1116 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1117 | hasBin: true 1118 | 1119 | regjsparser@0.10.0: 1120 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 1121 | hasBin: true 1122 | 1123 | require-directory@2.1.1: 1124 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1125 | engines: {node: '>=0.10.0'} 1126 | 1127 | resolve-from@4.0.0: 1128 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1129 | engines: {node: '>=4'} 1130 | 1131 | resolve-pkg-maps@1.0.0: 1132 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1133 | 1134 | resolve@1.22.8: 1135 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1136 | hasBin: true 1137 | 1138 | reusify@1.0.4: 1139 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1140 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1141 | 1142 | run-parallel@1.2.0: 1143 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1144 | 1145 | scslre@0.3.0: 1146 | resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} 1147 | engines: {node: ^14.0.0 || >=16.0.0} 1148 | 1149 | semver@5.7.2: 1150 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1151 | hasBin: true 1152 | 1153 | semver@7.6.3: 1154 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1155 | engines: {node: '>=10'} 1156 | hasBin: true 1157 | 1158 | shebang-command@2.0.0: 1159 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1160 | engines: {node: '>=8'} 1161 | 1162 | shebang-regex@3.0.0: 1163 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1164 | engines: {node: '>=8'} 1165 | 1166 | slashes@3.0.12: 1167 | resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} 1168 | 1169 | spdx-correct@3.2.0: 1170 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1171 | 1172 | spdx-exceptions@2.5.0: 1173 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1174 | 1175 | spdx-expression-parse@3.0.1: 1176 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1177 | 1178 | spdx-expression-parse@4.0.0: 1179 | resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} 1180 | 1181 | spdx-license-ids@3.0.17: 1182 | resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} 1183 | 1184 | string-width@4.2.3: 1185 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1186 | engines: {node: '>=8'} 1187 | 1188 | strip-ansi@6.0.1: 1189 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1190 | engines: {node: '>=8'} 1191 | 1192 | strip-indent@3.0.0: 1193 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1194 | engines: {node: '>=8'} 1195 | 1196 | strip-json-comments@3.1.1: 1197 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1198 | engines: {node: '>=8'} 1199 | 1200 | supports-color@5.5.0: 1201 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1202 | engines: {node: '>=4'} 1203 | 1204 | supports-color@7.2.0: 1205 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1206 | engines: {node: '>=8'} 1207 | 1208 | supports-preserve-symlinks-flag@1.0.0: 1209 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1210 | engines: {node: '>= 0.4'} 1211 | 1212 | synckit@0.9.1: 1213 | resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} 1214 | engines: {node: ^14.18.0 || >=16.0.0} 1215 | 1216 | to-regex-range@5.0.1: 1217 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1218 | engines: {node: '>=8.0'} 1219 | 1220 | ts-api-utils@1.4.3: 1221 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1222 | engines: {node: '>=16'} 1223 | peerDependencies: 1224 | typescript: '>=4.2.0' 1225 | 1226 | tslib@2.6.2: 1227 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1228 | 1229 | tsx@4.19.2: 1230 | resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} 1231 | engines: {node: '>=18.0.0'} 1232 | hasBin: true 1233 | 1234 | type-check@0.4.0: 1235 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1236 | engines: {node: '>= 0.8.0'} 1237 | 1238 | type-fest@0.6.0: 1239 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1240 | engines: {node: '>=8'} 1241 | 1242 | type-fest@0.8.1: 1243 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1244 | engines: {node: '>=8'} 1245 | 1246 | typescript-eslint@8.18.2: 1247 | resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} 1248 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1249 | peerDependencies: 1250 | eslint: ^8.57.0 || ^9.0.0 1251 | typescript: '>=4.8.4 <5.8.0' 1252 | 1253 | typescript@5.7.2: 1254 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 1255 | engines: {node: '>=14.17'} 1256 | hasBin: true 1257 | 1258 | undici-types@6.20.0: 1259 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1260 | 1261 | unist-util-stringify-position@4.0.0: 1262 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1263 | 1264 | update-browserslist-db@1.1.1: 1265 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 1266 | hasBin: true 1267 | peerDependencies: 1268 | browserslist: '>= 4.21.0' 1269 | 1270 | uri-js@4.4.1: 1271 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1272 | 1273 | validate-npm-package-license@3.0.4: 1274 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1275 | 1276 | which@2.0.2: 1277 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1278 | engines: {node: '>= 8'} 1279 | hasBin: true 1280 | 1281 | word-wrap@1.2.5: 1282 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1283 | engines: {node: '>=0.10.0'} 1284 | 1285 | wrap-ansi@7.0.0: 1286 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1287 | engines: {node: '>=10'} 1288 | 1289 | y18n@5.0.8: 1290 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1291 | engines: {node: '>=10'} 1292 | 1293 | yargs-parser@20.2.9: 1294 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1295 | engines: {node: '>=10'} 1296 | 1297 | yargs@17.1.1: 1298 | resolution: {integrity: sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==} 1299 | engines: {node: '>=12'} 1300 | 1301 | yocto-queue@0.1.0: 1302 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1303 | engines: {node: '>=10'} 1304 | 1305 | snapshots: 1306 | 1307 | '@babel/code-frame@7.24.2': 1308 | dependencies: 1309 | '@babel/highlight': 7.24.5 1310 | picocolors: 1.1.0 1311 | 1312 | '@babel/helper-validator-identifier@7.25.7': {} 1313 | 1314 | '@babel/highlight@7.24.5': 1315 | dependencies: 1316 | '@babel/helper-validator-identifier': 7.25.7 1317 | chalk: 2.4.2 1318 | js-tokens: 4.0.0 1319 | picocolors: 1.1.0 1320 | 1321 | '@es-joy/jsdoccomment@0.49.0': 1322 | dependencies: 1323 | comment-parser: 1.4.1 1324 | esquery: 1.6.0 1325 | jsdoc-type-pratt-parser: 4.1.0 1326 | 1327 | '@esbuild/aix-ppc64@0.23.1': 1328 | optional: true 1329 | 1330 | '@esbuild/android-arm64@0.23.1': 1331 | optional: true 1332 | 1333 | '@esbuild/android-arm@0.23.1': 1334 | optional: true 1335 | 1336 | '@esbuild/android-x64@0.23.1': 1337 | optional: true 1338 | 1339 | '@esbuild/darwin-arm64@0.23.1': 1340 | optional: true 1341 | 1342 | '@esbuild/darwin-x64@0.23.1': 1343 | optional: true 1344 | 1345 | '@esbuild/freebsd-arm64@0.23.1': 1346 | optional: true 1347 | 1348 | '@esbuild/freebsd-x64@0.23.1': 1349 | optional: true 1350 | 1351 | '@esbuild/linux-arm64@0.23.1': 1352 | optional: true 1353 | 1354 | '@esbuild/linux-arm@0.23.1': 1355 | optional: true 1356 | 1357 | '@esbuild/linux-ia32@0.23.1': 1358 | optional: true 1359 | 1360 | '@esbuild/linux-loong64@0.23.1': 1361 | optional: true 1362 | 1363 | '@esbuild/linux-mips64el@0.23.1': 1364 | optional: true 1365 | 1366 | '@esbuild/linux-ppc64@0.23.1': 1367 | optional: true 1368 | 1369 | '@esbuild/linux-riscv64@0.23.1': 1370 | optional: true 1371 | 1372 | '@esbuild/linux-s390x@0.23.1': 1373 | optional: true 1374 | 1375 | '@esbuild/linux-x64@0.23.1': 1376 | optional: true 1377 | 1378 | '@esbuild/netbsd-x64@0.23.1': 1379 | optional: true 1380 | 1381 | '@esbuild/openbsd-arm64@0.23.1': 1382 | optional: true 1383 | 1384 | '@esbuild/openbsd-x64@0.23.1': 1385 | optional: true 1386 | 1387 | '@esbuild/sunos-x64@0.23.1': 1388 | optional: true 1389 | 1390 | '@esbuild/win32-arm64@0.23.1': 1391 | optional: true 1392 | 1393 | '@esbuild/win32-ia32@0.23.1': 1394 | optional: true 1395 | 1396 | '@esbuild/win32-x64@0.23.1': 1397 | optional: true 1398 | 1399 | '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': 1400 | dependencies: 1401 | eslint: 9.17.0 1402 | eslint-visitor-keys: 3.4.3 1403 | 1404 | '@eslint-community/regexpp@4.12.1': {} 1405 | 1406 | '@eslint/config-array@0.19.1': 1407 | dependencies: 1408 | '@eslint/object-schema': 2.1.5 1409 | debug: 4.4.0 1410 | minimatch: 3.1.2 1411 | transitivePeerDependencies: 1412 | - supports-color 1413 | 1414 | '@eslint/core@0.9.1': 1415 | dependencies: 1416 | '@types/json-schema': 7.0.15 1417 | 1418 | '@eslint/eslintrc@3.2.0': 1419 | dependencies: 1420 | ajv: 6.12.6 1421 | debug: 4.4.0 1422 | espree: 10.3.0 1423 | globals: 14.0.0 1424 | ignore: 5.3.2 1425 | import-fresh: 3.3.0 1426 | js-yaml: 4.1.0 1427 | minimatch: 3.1.2 1428 | strip-json-comments: 3.1.1 1429 | transitivePeerDependencies: 1430 | - supports-color 1431 | 1432 | '@eslint/js@9.17.0': {} 1433 | 1434 | '@eslint/object-schema@2.1.5': {} 1435 | 1436 | '@eslint/plugin-kit@0.2.4': 1437 | dependencies: 1438 | levn: 0.4.1 1439 | 1440 | '@hono/node-server@1.13.7(hono@4.6.15)': 1441 | dependencies: 1442 | hono: 4.6.15 1443 | 1444 | '@humanfs/core@0.19.1': {} 1445 | 1446 | '@humanfs/node@0.16.6': 1447 | dependencies: 1448 | '@humanfs/core': 0.19.1 1449 | '@humanwhocodes/retry': 0.3.1 1450 | 1451 | '@humanwhocodes/module-importer@1.0.1': {} 1452 | 1453 | '@humanwhocodes/retry@0.3.1': {} 1454 | 1455 | '@humanwhocodes/retry@0.4.1': {} 1456 | 1457 | '@nodelib/fs.scandir@2.1.5': 1458 | dependencies: 1459 | '@nodelib/fs.stat': 2.0.5 1460 | run-parallel: 1.2.0 1461 | 1462 | '@nodelib/fs.stat@2.0.5': {} 1463 | 1464 | '@nodelib/fs.walk@1.2.8': 1465 | dependencies: 1466 | '@nodelib/fs.scandir': 2.1.5 1467 | fastq: 1.18.0 1468 | 1469 | '@pkgr/core@0.1.1': {} 1470 | 1471 | '@types/debug@4.1.12': 1472 | dependencies: 1473 | '@types/ms': 0.7.34 1474 | 1475 | '@types/eslint-config-prettier@6.11.3': {} 1476 | 1477 | '@types/eslint@9.6.1': 1478 | dependencies: 1479 | '@types/estree': 1.0.5 1480 | '@types/json-schema': 7.0.15 1481 | 1482 | '@types/estree@1.0.5': {} 1483 | 1484 | '@types/estree@1.0.6': {} 1485 | 1486 | '@types/json-schema@7.0.15': {} 1487 | 1488 | '@types/mdast@4.0.3': 1489 | dependencies: 1490 | '@types/unist': 3.0.2 1491 | 1492 | '@types/ms@0.7.34': {} 1493 | 1494 | '@types/node@22.10.2': 1495 | dependencies: 1496 | undici-types: 6.20.0 1497 | 1498 | '@types/normalize-package-data@2.4.4': {} 1499 | 1500 | '@types/unist@3.0.2': {} 1501 | 1502 | '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': 1503 | dependencies: 1504 | '@eslint-community/regexpp': 4.12.1 1505 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 1506 | '@typescript-eslint/scope-manager': 8.18.2 1507 | '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 1508 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 1509 | '@typescript-eslint/visitor-keys': 8.18.2 1510 | eslint: 9.17.0 1511 | graphemer: 1.4.0 1512 | ignore: 5.3.2 1513 | natural-compare: 1.4.0 1514 | ts-api-utils: 1.4.3(typescript@5.7.2) 1515 | typescript: 5.7.2 1516 | transitivePeerDependencies: 1517 | - supports-color 1518 | 1519 | '@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 1520 | dependencies: 1521 | '@typescript-eslint/scope-manager': 8.18.2 1522 | '@typescript-eslint/types': 8.18.2 1523 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 1524 | '@typescript-eslint/visitor-keys': 8.18.2 1525 | debug: 4.4.0 1526 | eslint: 9.17.0 1527 | typescript: 5.7.2 1528 | transitivePeerDependencies: 1529 | - supports-color 1530 | 1531 | '@typescript-eslint/scope-manager@8.18.2': 1532 | dependencies: 1533 | '@typescript-eslint/types': 8.18.2 1534 | '@typescript-eslint/visitor-keys': 8.18.2 1535 | 1536 | '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 1537 | dependencies: 1538 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 1539 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 1540 | debug: 4.4.0 1541 | eslint: 9.17.0 1542 | ts-api-utils: 1.4.3(typescript@5.7.2) 1543 | typescript: 5.7.2 1544 | transitivePeerDependencies: 1545 | - supports-color 1546 | 1547 | '@typescript-eslint/types@8.18.2': {} 1548 | 1549 | '@typescript-eslint/typescript-estree@8.18.2(typescript@5.7.2)': 1550 | dependencies: 1551 | '@typescript-eslint/types': 8.18.2 1552 | '@typescript-eslint/visitor-keys': 8.18.2 1553 | debug: 4.4.0 1554 | fast-glob: 3.3.2 1555 | is-glob: 4.0.3 1556 | minimatch: 9.0.5 1557 | semver: 7.6.3 1558 | ts-api-utils: 1.4.3(typescript@5.7.2) 1559 | typescript: 5.7.2 1560 | transitivePeerDependencies: 1561 | - supports-color 1562 | 1563 | '@typescript-eslint/utils@8.18.2(eslint@9.17.0)(typescript@5.7.2)': 1564 | dependencies: 1565 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 1566 | '@typescript-eslint/scope-manager': 8.18.2 1567 | '@typescript-eslint/types': 8.18.2 1568 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) 1569 | eslint: 9.17.0 1570 | typescript: 5.7.2 1571 | transitivePeerDependencies: 1572 | - supports-color 1573 | 1574 | '@typescript-eslint/visitor-keys@8.18.2': 1575 | dependencies: 1576 | '@typescript-eslint/types': 8.18.2 1577 | eslint-visitor-keys: 4.2.0 1578 | 1579 | acorn-jsx@5.3.2(acorn@8.14.0): 1580 | dependencies: 1581 | acorn: 8.14.0 1582 | 1583 | acorn@8.14.0: {} 1584 | 1585 | ajv@6.12.6: 1586 | dependencies: 1587 | fast-deep-equal: 3.1.3 1588 | fast-json-stable-stringify: 2.1.0 1589 | json-schema-traverse: 0.4.1 1590 | uri-js: 4.4.1 1591 | 1592 | ansi-regex@5.0.1: {} 1593 | 1594 | ansi-styles@3.2.1: 1595 | dependencies: 1596 | color-convert: 1.9.3 1597 | 1598 | ansi-styles@4.3.0: 1599 | dependencies: 1600 | color-convert: 2.0.1 1601 | 1602 | are-docs-informative@0.0.2: {} 1603 | 1604 | argparse@2.0.1: {} 1605 | 1606 | asynckit@0.4.0: {} 1607 | 1608 | axios@1.7.7(debug@4.3.2): 1609 | dependencies: 1610 | follow-redirects: 1.15.6(debug@4.3.2) 1611 | form-data: 4.0.0 1612 | proxy-from-env: 1.1.0 1613 | transitivePeerDependencies: 1614 | - debug 1615 | 1616 | balanced-match@1.0.2: {} 1617 | 1618 | binary-searching@2.0.5: {} 1619 | 1620 | brace-expansion@1.1.11: 1621 | dependencies: 1622 | balanced-match: 1.0.2 1623 | concat-map: 0.0.1 1624 | 1625 | brace-expansion@2.0.1: 1626 | dependencies: 1627 | balanced-match: 1.0.2 1628 | 1629 | braces@3.0.3: 1630 | dependencies: 1631 | fill-range: 7.1.1 1632 | 1633 | browserslist@4.24.0: 1634 | dependencies: 1635 | caniuse-lite: 1.0.30001668 1636 | electron-to-chromium: 1.5.36 1637 | node-releases: 2.0.18 1638 | update-browserslist-db: 1.1.1(browserslist@4.24.0) 1639 | 1640 | builtin-modules@3.3.0: {} 1641 | 1642 | callsites@3.1.0: {} 1643 | 1644 | caniuse-lite@1.0.30001668: {} 1645 | 1646 | chalk@2.4.2: 1647 | dependencies: 1648 | ansi-styles: 3.2.1 1649 | escape-string-regexp: 1.0.5 1650 | supports-color: 5.5.0 1651 | 1652 | chalk@4.1.2: 1653 | dependencies: 1654 | ansi-styles: 4.3.0 1655 | supports-color: 7.2.0 1656 | 1657 | character-entities@2.0.2: {} 1658 | 1659 | ci-info@4.0.0: {} 1660 | 1661 | clean-regexp@1.0.0: 1662 | dependencies: 1663 | escape-string-regexp: 1.0.5 1664 | 1665 | cliui@7.0.4: 1666 | dependencies: 1667 | string-width: 4.2.3 1668 | strip-ansi: 6.0.1 1669 | wrap-ansi: 7.0.0 1670 | 1671 | color-convert@1.9.3: 1672 | dependencies: 1673 | color-name: 1.1.3 1674 | 1675 | color-convert@2.0.1: 1676 | dependencies: 1677 | color-name: 1.1.4 1678 | 1679 | color-name@1.1.3: {} 1680 | 1681 | color-name@1.1.4: {} 1682 | 1683 | combined-stream@1.0.8: 1684 | dependencies: 1685 | delayed-stream: 1.0.0 1686 | 1687 | comment-parser@1.4.1: {} 1688 | 1689 | concat-map@0.0.1: {} 1690 | 1691 | core-js-compat@3.38.1: 1692 | dependencies: 1693 | browserslist: 4.24.0 1694 | 1695 | cross-spawn@7.0.6: 1696 | dependencies: 1697 | path-key: 3.1.1 1698 | shebang-command: 2.0.0 1699 | which: 2.0.2 1700 | 1701 | debug@4.3.2: 1702 | dependencies: 1703 | ms: 2.1.2 1704 | 1705 | debug@4.4.0: 1706 | dependencies: 1707 | ms: 2.1.3 1708 | 1709 | decode-named-character-reference@1.0.2: 1710 | dependencies: 1711 | character-entities: 2.0.2 1712 | 1713 | deep-is@0.1.4: {} 1714 | 1715 | delayed-stream@1.0.0: {} 1716 | 1717 | dequal@2.0.3: {} 1718 | 1719 | devlop@1.1.0: 1720 | dependencies: 1721 | dequal: 2.0.3 1722 | 1723 | electron-to-chromium@1.5.36: {} 1724 | 1725 | emoji-regex@8.0.0: {} 1726 | 1727 | error-ex@1.3.2: 1728 | dependencies: 1729 | is-arrayish: 0.2.1 1730 | 1731 | es-module-lexer@1.5.4: {} 1732 | 1733 | esbuild@0.23.1: 1734 | optionalDependencies: 1735 | '@esbuild/aix-ppc64': 0.23.1 1736 | '@esbuild/android-arm': 0.23.1 1737 | '@esbuild/android-arm64': 0.23.1 1738 | '@esbuild/android-x64': 0.23.1 1739 | '@esbuild/darwin-arm64': 0.23.1 1740 | '@esbuild/darwin-x64': 0.23.1 1741 | '@esbuild/freebsd-arm64': 0.23.1 1742 | '@esbuild/freebsd-x64': 0.23.1 1743 | '@esbuild/linux-arm': 0.23.1 1744 | '@esbuild/linux-arm64': 0.23.1 1745 | '@esbuild/linux-ia32': 0.23.1 1746 | '@esbuild/linux-loong64': 0.23.1 1747 | '@esbuild/linux-mips64el': 0.23.1 1748 | '@esbuild/linux-ppc64': 0.23.1 1749 | '@esbuild/linux-riscv64': 0.23.1 1750 | '@esbuild/linux-s390x': 0.23.1 1751 | '@esbuild/linux-x64': 0.23.1 1752 | '@esbuild/netbsd-x64': 0.23.1 1753 | '@esbuild/openbsd-arm64': 0.23.1 1754 | '@esbuild/openbsd-x64': 0.23.1 1755 | '@esbuild/sunos-x64': 0.23.1 1756 | '@esbuild/win32-arm64': 0.23.1 1757 | '@esbuild/win32-ia32': 0.23.1 1758 | '@esbuild/win32-x64': 0.23.1 1759 | 1760 | escalade@3.1.2: {} 1761 | 1762 | escalade@3.2.0: {} 1763 | 1764 | escape-string-regexp@1.0.5: {} 1765 | 1766 | escape-string-regexp@4.0.0: {} 1767 | 1768 | eslint-config-prettier@9.1.0(eslint@9.17.0): 1769 | dependencies: 1770 | eslint: 9.17.0 1771 | 1772 | eslint-plugin-jsdoc@50.6.1(eslint@9.17.0): 1773 | dependencies: 1774 | '@es-joy/jsdoccomment': 0.49.0 1775 | are-docs-informative: 0.0.2 1776 | comment-parser: 1.4.1 1777 | debug: 4.4.0 1778 | escape-string-regexp: 4.0.0 1779 | eslint: 9.17.0 1780 | espree: 10.3.0 1781 | esquery: 1.6.0 1782 | parse-imports: 2.1.1 1783 | semver: 7.6.3 1784 | spdx-expression-parse: 4.0.0 1785 | synckit: 0.9.1 1786 | transitivePeerDependencies: 1787 | - supports-color 1788 | 1789 | eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.17.0))(eslint@9.17.0)(prettier@3.4.2): 1790 | dependencies: 1791 | eslint: 9.17.0 1792 | prettier: 3.4.2 1793 | prettier-linter-helpers: 1.0.0 1794 | synckit: 0.9.1 1795 | optionalDependencies: 1796 | '@types/eslint': 9.6.1 1797 | eslint-config-prettier: 9.1.0(eslint@9.17.0) 1798 | 1799 | eslint-plugin-regexp@2.7.0(eslint@9.17.0): 1800 | dependencies: 1801 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 1802 | '@eslint-community/regexpp': 4.12.1 1803 | comment-parser: 1.4.1 1804 | eslint: 9.17.0 1805 | jsdoc-type-pratt-parser: 4.1.0 1806 | refa: 0.12.1 1807 | regexp-ast-analysis: 0.7.1 1808 | scslre: 0.3.0 1809 | 1810 | eslint-plugin-unicorn@56.0.1(eslint@9.17.0): 1811 | dependencies: 1812 | '@babel/helper-validator-identifier': 7.25.7 1813 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 1814 | ci-info: 4.0.0 1815 | clean-regexp: 1.0.0 1816 | core-js-compat: 3.38.1 1817 | eslint: 9.17.0 1818 | esquery: 1.6.0 1819 | globals: 15.14.0 1820 | indent-string: 4.0.0 1821 | is-builtin-module: 3.2.1 1822 | jsesc: 3.0.2 1823 | pluralize: 8.0.0 1824 | read-pkg-up: 7.0.1 1825 | regexp-tree: 0.1.27 1826 | regjsparser: 0.10.0 1827 | semver: 7.6.3 1828 | strip-indent: 3.0.0 1829 | 1830 | eslint-scope@8.2.0: 1831 | dependencies: 1832 | esrecurse: 4.3.0 1833 | estraverse: 5.3.0 1834 | 1835 | eslint-visitor-keys@3.4.3: {} 1836 | 1837 | eslint-visitor-keys@4.2.0: {} 1838 | 1839 | eslint@9.17.0: 1840 | dependencies: 1841 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) 1842 | '@eslint-community/regexpp': 4.12.1 1843 | '@eslint/config-array': 0.19.1 1844 | '@eslint/core': 0.9.1 1845 | '@eslint/eslintrc': 3.2.0 1846 | '@eslint/js': 9.17.0 1847 | '@eslint/plugin-kit': 0.2.4 1848 | '@humanfs/node': 0.16.6 1849 | '@humanwhocodes/module-importer': 1.0.1 1850 | '@humanwhocodes/retry': 0.4.1 1851 | '@types/estree': 1.0.6 1852 | '@types/json-schema': 7.0.15 1853 | ajv: 6.12.6 1854 | chalk: 4.1.2 1855 | cross-spawn: 7.0.6 1856 | debug: 4.4.0 1857 | escape-string-regexp: 4.0.0 1858 | eslint-scope: 8.2.0 1859 | eslint-visitor-keys: 4.2.0 1860 | espree: 10.3.0 1861 | esquery: 1.6.0 1862 | esutils: 2.0.3 1863 | fast-deep-equal: 3.1.3 1864 | file-entry-cache: 8.0.0 1865 | find-up: 5.0.0 1866 | glob-parent: 6.0.2 1867 | ignore: 5.3.2 1868 | imurmurhash: 0.1.4 1869 | is-glob: 4.0.3 1870 | json-stable-stringify-without-jsonify: 1.0.1 1871 | lodash.merge: 4.6.2 1872 | minimatch: 3.1.2 1873 | natural-compare: 1.4.0 1874 | optionator: 0.9.4 1875 | transitivePeerDependencies: 1876 | - supports-color 1877 | 1878 | espree@10.3.0: 1879 | dependencies: 1880 | acorn: 8.14.0 1881 | acorn-jsx: 5.3.2(acorn@8.14.0) 1882 | eslint-visitor-keys: 4.2.0 1883 | 1884 | esquery@1.6.0: 1885 | dependencies: 1886 | estraverse: 5.3.0 1887 | 1888 | esrecurse@4.3.0: 1889 | dependencies: 1890 | estraverse: 5.3.0 1891 | 1892 | estraverse@5.3.0: {} 1893 | 1894 | esutils@2.0.3: {} 1895 | 1896 | fast-deep-equal@3.1.3: {} 1897 | 1898 | fast-diff@1.3.0: {} 1899 | 1900 | fast-glob@3.3.2: 1901 | dependencies: 1902 | '@nodelib/fs.stat': 2.0.5 1903 | '@nodelib/fs.walk': 1.2.8 1904 | glob-parent: 5.1.2 1905 | merge2: 1.4.1 1906 | micromatch: 4.0.8 1907 | 1908 | fast-json-stable-stringify@2.1.0: {} 1909 | 1910 | fast-levenshtein@2.0.6: {} 1911 | 1912 | fastq@1.18.0: 1913 | dependencies: 1914 | reusify: 1.0.4 1915 | 1916 | file-entry-cache@8.0.0: 1917 | dependencies: 1918 | flat-cache: 4.0.1 1919 | 1920 | fill-range@7.1.1: 1921 | dependencies: 1922 | to-regex-range: 5.0.1 1923 | 1924 | find-up@4.1.0: 1925 | dependencies: 1926 | locate-path: 5.0.0 1927 | path-exists: 4.0.0 1928 | 1929 | find-up@5.0.0: 1930 | dependencies: 1931 | locate-path: 6.0.0 1932 | path-exists: 4.0.0 1933 | 1934 | flat-cache@4.0.1: 1935 | dependencies: 1936 | flatted: 3.3.2 1937 | keyv: 4.5.4 1938 | 1939 | flatted@3.3.2: {} 1940 | 1941 | follow-redirects@1.15.6(debug@4.3.2): 1942 | optionalDependencies: 1943 | debug: 4.3.2 1944 | 1945 | form-data@4.0.0: 1946 | dependencies: 1947 | asynckit: 0.4.0 1948 | combined-stream: 1.0.8 1949 | mime-types: 2.1.35 1950 | 1951 | fsevents@2.3.3: 1952 | optional: true 1953 | 1954 | function-bind@1.1.2: {} 1955 | 1956 | get-caller-file@2.0.5: {} 1957 | 1958 | get-tsconfig@4.7.5: 1959 | dependencies: 1960 | resolve-pkg-maps: 1.0.0 1961 | 1962 | glob-parent@5.1.2: 1963 | dependencies: 1964 | is-glob: 4.0.3 1965 | 1966 | glob-parent@6.0.2: 1967 | dependencies: 1968 | is-glob: 4.0.3 1969 | 1970 | globals@14.0.0: {} 1971 | 1972 | globals@15.14.0: {} 1973 | 1974 | graphemer@1.4.0: {} 1975 | 1976 | has-flag@3.0.0: {} 1977 | 1978 | has-flag@4.0.0: {} 1979 | 1980 | hasown@2.0.2: 1981 | dependencies: 1982 | function-bind: 1.1.2 1983 | 1984 | hono@4.6.15: {} 1985 | 1986 | hosted-git-info@2.8.9: {} 1987 | 1988 | ignore@5.3.2: {} 1989 | 1990 | import-fresh@3.3.0: 1991 | dependencies: 1992 | parent-module: 1.0.1 1993 | resolve-from: 4.0.0 1994 | 1995 | imurmurhash@0.1.4: {} 1996 | 1997 | indent-string@4.0.0: {} 1998 | 1999 | is-arrayish@0.2.1: {} 2000 | 2001 | is-builtin-module@3.2.1: 2002 | dependencies: 2003 | builtin-modules: 3.3.0 2004 | 2005 | is-core-module@2.13.1: 2006 | dependencies: 2007 | hasown: 2.0.2 2008 | 2009 | is-extglob@2.1.1: {} 2010 | 2011 | is-fullwidth-code-point@3.0.0: {} 2012 | 2013 | is-glob@4.0.3: 2014 | dependencies: 2015 | is-extglob: 2.1.1 2016 | 2017 | is-number@7.0.0: {} 2018 | 2019 | isexe@2.0.0: {} 2020 | 2021 | js-tokens@4.0.0: {} 2022 | 2023 | js-yaml@4.1.0: 2024 | dependencies: 2025 | argparse: 2.0.1 2026 | 2027 | jsdoc-type-pratt-parser@4.1.0: {} 2028 | 2029 | jsesc@0.5.0: {} 2030 | 2031 | jsesc@3.0.2: {} 2032 | 2033 | json-buffer@3.0.1: {} 2034 | 2035 | json-parse-even-better-errors@2.3.1: {} 2036 | 2037 | json-schema-traverse@0.4.1: {} 2038 | 2039 | json-stable-stringify-without-jsonify@1.0.1: {} 2040 | 2041 | keyv@4.5.4: 2042 | dependencies: 2043 | json-buffer: 3.0.1 2044 | 2045 | levn@0.4.1: 2046 | dependencies: 2047 | prelude-ls: 1.2.1 2048 | type-check: 0.4.0 2049 | 2050 | lines-and-columns@1.2.4: {} 2051 | 2052 | localtunnel@2.0.2: 2053 | dependencies: 2054 | axios: 1.7.7(debug@4.3.2) 2055 | debug: 4.3.2 2056 | openurl: 1.1.1 2057 | yargs: 17.1.1 2058 | transitivePeerDependencies: 2059 | - supports-color 2060 | 2061 | locate-path@5.0.0: 2062 | dependencies: 2063 | p-locate: 4.1.0 2064 | 2065 | locate-path@6.0.0: 2066 | dependencies: 2067 | p-locate: 5.0.0 2068 | 2069 | lodash.merge@4.6.2: {} 2070 | 2071 | mdast-util-from-markdown@2.0.0: 2072 | dependencies: 2073 | '@types/mdast': 4.0.3 2074 | '@types/unist': 3.0.2 2075 | decode-named-character-reference: 1.0.2 2076 | devlop: 1.1.0 2077 | mdast-util-to-string: 4.0.0 2078 | micromark: 4.0.0 2079 | micromark-util-decode-numeric-character-reference: 2.0.1 2080 | micromark-util-decode-string: 2.0.0 2081 | micromark-util-normalize-identifier: 2.0.0 2082 | micromark-util-symbol: 2.0.0 2083 | micromark-util-types: 2.0.0 2084 | unist-util-stringify-position: 4.0.0 2085 | transitivePeerDependencies: 2086 | - supports-color 2087 | 2088 | mdast-util-to-string@4.0.0: 2089 | dependencies: 2090 | '@types/mdast': 4.0.3 2091 | 2092 | merge2@1.4.1: {} 2093 | 2094 | micromark-core-commonmark@2.0.1: 2095 | dependencies: 2096 | decode-named-character-reference: 1.0.2 2097 | devlop: 1.1.0 2098 | micromark-factory-destination: 2.0.0 2099 | micromark-factory-label: 2.0.0 2100 | micromark-factory-space: 2.0.0 2101 | micromark-factory-title: 2.0.0 2102 | micromark-factory-whitespace: 2.0.0 2103 | micromark-util-character: 2.1.0 2104 | micromark-util-chunked: 2.0.0 2105 | micromark-util-classify-character: 2.0.0 2106 | micromark-util-html-tag-name: 2.0.0 2107 | micromark-util-normalize-identifier: 2.0.0 2108 | micromark-util-resolve-all: 2.0.0 2109 | micromark-util-subtokenize: 2.0.1 2110 | micromark-util-symbol: 2.0.0 2111 | micromark-util-types: 2.0.0 2112 | 2113 | micromark-factory-destination@2.0.0: 2114 | dependencies: 2115 | micromark-util-character: 2.1.0 2116 | micromark-util-symbol: 2.0.0 2117 | micromark-util-types: 2.0.0 2118 | 2119 | micromark-factory-label@2.0.0: 2120 | dependencies: 2121 | devlop: 1.1.0 2122 | micromark-util-character: 2.1.0 2123 | micromark-util-symbol: 2.0.0 2124 | micromark-util-types: 2.0.0 2125 | 2126 | micromark-factory-space@2.0.0: 2127 | dependencies: 2128 | micromark-util-character: 2.1.0 2129 | micromark-util-types: 2.0.0 2130 | 2131 | micromark-factory-title@2.0.0: 2132 | dependencies: 2133 | micromark-factory-space: 2.0.0 2134 | micromark-util-character: 2.1.0 2135 | micromark-util-symbol: 2.0.0 2136 | micromark-util-types: 2.0.0 2137 | 2138 | micromark-factory-whitespace@2.0.0: 2139 | dependencies: 2140 | micromark-factory-space: 2.0.0 2141 | micromark-util-character: 2.1.0 2142 | micromark-util-symbol: 2.0.0 2143 | micromark-util-types: 2.0.0 2144 | 2145 | micromark-util-character@2.1.0: 2146 | dependencies: 2147 | micromark-util-symbol: 2.0.0 2148 | micromark-util-types: 2.0.0 2149 | 2150 | micromark-util-chunked@2.0.0: 2151 | dependencies: 2152 | micromark-util-symbol: 2.0.0 2153 | 2154 | micromark-util-classify-character@2.0.0: 2155 | dependencies: 2156 | micromark-util-character: 2.1.0 2157 | micromark-util-symbol: 2.0.0 2158 | micromark-util-types: 2.0.0 2159 | 2160 | micromark-util-combine-extensions@2.0.0: 2161 | dependencies: 2162 | micromark-util-chunked: 2.0.0 2163 | micromark-util-types: 2.0.0 2164 | 2165 | micromark-util-decode-numeric-character-reference@2.0.1: 2166 | dependencies: 2167 | micromark-util-symbol: 2.0.0 2168 | 2169 | micromark-util-decode-string@2.0.0: 2170 | dependencies: 2171 | decode-named-character-reference: 1.0.2 2172 | micromark-util-character: 2.1.0 2173 | micromark-util-decode-numeric-character-reference: 2.0.1 2174 | micromark-util-symbol: 2.0.0 2175 | 2176 | micromark-util-encode@2.0.0: {} 2177 | 2178 | micromark-util-html-tag-name@2.0.0: {} 2179 | 2180 | micromark-util-normalize-identifier@2.0.0: 2181 | dependencies: 2182 | micromark-util-symbol: 2.0.0 2183 | 2184 | micromark-util-resolve-all@2.0.0: 2185 | dependencies: 2186 | micromark-util-types: 2.0.0 2187 | 2188 | micromark-util-sanitize-uri@2.0.0: 2189 | dependencies: 2190 | micromark-util-character: 2.1.0 2191 | micromark-util-encode: 2.0.0 2192 | micromark-util-symbol: 2.0.0 2193 | 2194 | micromark-util-subtokenize@2.0.1: 2195 | dependencies: 2196 | devlop: 1.1.0 2197 | micromark-util-chunked: 2.0.0 2198 | micromark-util-symbol: 2.0.0 2199 | micromark-util-types: 2.0.0 2200 | 2201 | micromark-util-symbol@2.0.0: {} 2202 | 2203 | micromark-util-types@2.0.0: {} 2204 | 2205 | micromark@4.0.0: 2206 | dependencies: 2207 | '@types/debug': 4.1.12 2208 | debug: 4.4.0 2209 | decode-named-character-reference: 1.0.2 2210 | devlop: 1.1.0 2211 | micromark-core-commonmark: 2.0.1 2212 | micromark-factory-space: 2.0.0 2213 | micromark-util-character: 2.1.0 2214 | micromark-util-chunked: 2.0.0 2215 | micromark-util-combine-extensions: 2.0.0 2216 | micromark-util-decode-numeric-character-reference: 2.0.1 2217 | micromark-util-encode: 2.0.0 2218 | micromark-util-normalize-identifier: 2.0.0 2219 | micromark-util-resolve-all: 2.0.0 2220 | micromark-util-sanitize-uri: 2.0.0 2221 | micromark-util-subtokenize: 2.0.1 2222 | micromark-util-symbol: 2.0.0 2223 | micromark-util-types: 2.0.0 2224 | transitivePeerDependencies: 2225 | - supports-color 2226 | 2227 | micromatch@4.0.8: 2228 | dependencies: 2229 | braces: 3.0.3 2230 | picomatch: 2.3.1 2231 | 2232 | mime-db@1.52.0: {} 2233 | 2234 | mime-types@2.1.35: 2235 | dependencies: 2236 | mime-db: 1.52.0 2237 | 2238 | min-indent@1.0.1: {} 2239 | 2240 | minimatch@3.1.2: 2241 | dependencies: 2242 | brace-expansion: 1.1.11 2243 | 2244 | minimatch@9.0.5: 2245 | dependencies: 2246 | brace-expansion: 2.0.1 2247 | 2248 | ms@2.1.2: {} 2249 | 2250 | ms@2.1.3: {} 2251 | 2252 | natural-compare@1.4.0: {} 2253 | 2254 | node-releases@2.0.18: {} 2255 | 2256 | normalize-package-data@2.5.0: 2257 | dependencies: 2258 | hosted-git-info: 2.8.9 2259 | resolve: 1.22.8 2260 | semver: 5.7.2 2261 | validate-npm-package-license: 3.0.4 2262 | 2263 | openurl@1.1.1: {} 2264 | 2265 | optionator@0.9.4: 2266 | dependencies: 2267 | deep-is: 0.1.4 2268 | fast-levenshtein: 2.0.6 2269 | levn: 0.4.1 2270 | prelude-ls: 1.2.1 2271 | type-check: 0.4.0 2272 | word-wrap: 1.2.5 2273 | 2274 | p-limit@2.3.0: 2275 | dependencies: 2276 | p-try: 2.2.0 2277 | 2278 | p-limit@3.1.0: 2279 | dependencies: 2280 | yocto-queue: 0.1.0 2281 | 2282 | p-locate@4.1.0: 2283 | dependencies: 2284 | p-limit: 2.3.0 2285 | 2286 | p-locate@5.0.0: 2287 | dependencies: 2288 | p-limit: 3.1.0 2289 | 2290 | p-try@2.2.0: {} 2291 | 2292 | parent-module@1.0.1: 2293 | dependencies: 2294 | callsites: 3.1.0 2295 | 2296 | parse-imports@2.1.1: 2297 | dependencies: 2298 | es-module-lexer: 1.5.4 2299 | slashes: 3.0.12 2300 | 2301 | parse-json@5.2.0: 2302 | dependencies: 2303 | '@babel/code-frame': 7.24.2 2304 | error-ex: 1.3.2 2305 | json-parse-even-better-errors: 2.3.1 2306 | lines-and-columns: 1.2.4 2307 | 2308 | path-exists@4.0.0: {} 2309 | 2310 | path-key@3.1.1: {} 2311 | 2312 | path-parse@1.0.7: {} 2313 | 2314 | picocolors@1.1.0: {} 2315 | 2316 | picomatch@2.3.1: {} 2317 | 2318 | pluralize@8.0.0: {} 2319 | 2320 | prelude-ls@1.2.1: {} 2321 | 2322 | prettier-linter-helpers@1.0.0: 2323 | dependencies: 2324 | fast-diff: 1.3.0 2325 | 2326 | prettier-plugin-jsdoc@1.3.0(prettier@3.4.2): 2327 | dependencies: 2328 | binary-searching: 2.0.5 2329 | comment-parser: 1.4.1 2330 | mdast-util-from-markdown: 2.0.0 2331 | prettier: 3.4.2 2332 | transitivePeerDependencies: 2333 | - supports-color 2334 | 2335 | prettier-plugin-organize-attributes@1.0.0(prettier@3.4.2): 2336 | dependencies: 2337 | prettier: 3.4.2 2338 | 2339 | prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.7.2): 2340 | dependencies: 2341 | prettier: 3.4.2 2342 | typescript: 5.7.2 2343 | 2344 | prettier@3.4.2: {} 2345 | 2346 | proxy-from-env@1.1.0: {} 2347 | 2348 | punycode@2.3.1: {} 2349 | 2350 | queue-microtask@1.2.3: {} 2351 | 2352 | read-pkg-up@7.0.1: 2353 | dependencies: 2354 | find-up: 4.1.0 2355 | read-pkg: 5.2.0 2356 | type-fest: 0.8.1 2357 | 2358 | read-pkg@5.2.0: 2359 | dependencies: 2360 | '@types/normalize-package-data': 2.4.4 2361 | normalize-package-data: 2.5.0 2362 | parse-json: 5.2.0 2363 | type-fest: 0.6.0 2364 | 2365 | refa@0.12.1: 2366 | dependencies: 2367 | '@eslint-community/regexpp': 4.12.1 2368 | 2369 | regexp-ast-analysis@0.7.1: 2370 | dependencies: 2371 | '@eslint-community/regexpp': 4.12.1 2372 | refa: 0.12.1 2373 | 2374 | regexp-tree@0.1.27: {} 2375 | 2376 | regjsparser@0.10.0: 2377 | dependencies: 2378 | jsesc: 0.5.0 2379 | 2380 | require-directory@2.1.1: {} 2381 | 2382 | resolve-from@4.0.0: {} 2383 | 2384 | resolve-pkg-maps@1.0.0: {} 2385 | 2386 | resolve@1.22.8: 2387 | dependencies: 2388 | is-core-module: 2.13.1 2389 | path-parse: 1.0.7 2390 | supports-preserve-symlinks-flag: 1.0.0 2391 | 2392 | reusify@1.0.4: {} 2393 | 2394 | run-parallel@1.2.0: 2395 | dependencies: 2396 | queue-microtask: 1.2.3 2397 | 2398 | scslre@0.3.0: 2399 | dependencies: 2400 | '@eslint-community/regexpp': 4.12.1 2401 | refa: 0.12.1 2402 | regexp-ast-analysis: 0.7.1 2403 | 2404 | semver@5.7.2: {} 2405 | 2406 | semver@7.6.3: {} 2407 | 2408 | shebang-command@2.0.0: 2409 | dependencies: 2410 | shebang-regex: 3.0.0 2411 | 2412 | shebang-regex@3.0.0: {} 2413 | 2414 | slashes@3.0.12: {} 2415 | 2416 | spdx-correct@3.2.0: 2417 | dependencies: 2418 | spdx-expression-parse: 3.0.1 2419 | spdx-license-ids: 3.0.17 2420 | 2421 | spdx-exceptions@2.5.0: {} 2422 | 2423 | spdx-expression-parse@3.0.1: 2424 | dependencies: 2425 | spdx-exceptions: 2.5.0 2426 | spdx-license-ids: 3.0.17 2427 | 2428 | spdx-expression-parse@4.0.0: 2429 | dependencies: 2430 | spdx-exceptions: 2.5.0 2431 | spdx-license-ids: 3.0.17 2432 | 2433 | spdx-license-ids@3.0.17: {} 2434 | 2435 | string-width@4.2.3: 2436 | dependencies: 2437 | emoji-regex: 8.0.0 2438 | is-fullwidth-code-point: 3.0.0 2439 | strip-ansi: 6.0.1 2440 | 2441 | strip-ansi@6.0.1: 2442 | dependencies: 2443 | ansi-regex: 5.0.1 2444 | 2445 | strip-indent@3.0.0: 2446 | dependencies: 2447 | min-indent: 1.0.1 2448 | 2449 | strip-json-comments@3.1.1: {} 2450 | 2451 | supports-color@5.5.0: 2452 | dependencies: 2453 | has-flag: 3.0.0 2454 | 2455 | supports-color@7.2.0: 2456 | dependencies: 2457 | has-flag: 4.0.0 2458 | 2459 | supports-preserve-symlinks-flag@1.0.0: {} 2460 | 2461 | synckit@0.9.1: 2462 | dependencies: 2463 | '@pkgr/core': 0.1.1 2464 | tslib: 2.6.2 2465 | 2466 | to-regex-range@5.0.1: 2467 | dependencies: 2468 | is-number: 7.0.0 2469 | 2470 | ts-api-utils@1.4.3(typescript@5.7.2): 2471 | dependencies: 2472 | typescript: 5.7.2 2473 | 2474 | tslib@2.6.2: {} 2475 | 2476 | tsx@4.19.2: 2477 | dependencies: 2478 | esbuild: 0.23.1 2479 | get-tsconfig: 4.7.5 2480 | optionalDependencies: 2481 | fsevents: 2.3.3 2482 | 2483 | type-check@0.4.0: 2484 | dependencies: 2485 | prelude-ls: 1.2.1 2486 | 2487 | type-fest@0.6.0: {} 2488 | 2489 | type-fest@0.8.1: {} 2490 | 2491 | typescript-eslint@8.18.2(eslint@9.17.0)(typescript@5.7.2): 2492 | dependencies: 2493 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) 2494 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2495 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0)(typescript@5.7.2) 2496 | eslint: 9.17.0 2497 | typescript: 5.7.2 2498 | transitivePeerDependencies: 2499 | - supports-color 2500 | 2501 | typescript@5.7.2: {} 2502 | 2503 | undici-types@6.20.0: {} 2504 | 2505 | unist-util-stringify-position@4.0.0: 2506 | dependencies: 2507 | '@types/unist': 3.0.2 2508 | 2509 | update-browserslist-db@1.1.1(browserslist@4.24.0): 2510 | dependencies: 2511 | browserslist: 4.24.0 2512 | escalade: 3.2.0 2513 | picocolors: 1.1.0 2514 | 2515 | uri-js@4.4.1: 2516 | dependencies: 2517 | punycode: 2.3.1 2518 | 2519 | validate-npm-package-license@3.0.4: 2520 | dependencies: 2521 | spdx-correct: 3.2.0 2522 | spdx-expression-parse: 3.0.1 2523 | 2524 | which@2.0.2: 2525 | dependencies: 2526 | isexe: 2.0.0 2527 | 2528 | word-wrap@1.2.5: {} 2529 | 2530 | wrap-ansi@7.0.0: 2531 | dependencies: 2532 | ansi-styles: 4.3.0 2533 | string-width: 4.2.3 2534 | strip-ansi: 6.0.1 2535 | 2536 | y18n@5.0.8: {} 2537 | 2538 | yargs-parser@20.2.9: {} 2539 | 2540 | yargs@17.1.1: 2541 | dependencies: 2542 | cliui: 7.0.4 2543 | escalade: 3.1.2 2544 | get-caller-file: 2.0.5 2545 | require-directory: 2.1.1 2546 | string-width: 4.2.3 2547 | y18n: 5.0.8 2548 | yargs-parser: 20.2.9 2549 | 2550 | yocto-queue@0.1.0: {} 2551 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { serve } from '@hono/node-server' 2 | import { Hono } from 'hono' 3 | import { html } from 'hono/html' 4 | import type { FrameSignaturePacket } from './types' 5 | 6 | const app = new Hono() 7 | 8 | app.get('/', (c) => { 9 | const frameImage = `https://placehold.co/1920x1005?text=Hello+World` 10 | const framePostUrl = c.req.url 11 | 12 | return c.html(html` 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Farcaster Frames 25 | 26 | 27 |

Hello Farcaster!

28 | 29 | 30 | `) 31 | }) 32 | 33 | app.post('/', async (c) => { 34 | try { 35 | const body = await c.req.json() 36 | const { buttonIndex, inputText } = body.untrustedData 37 | 38 | const backgroundColors = ['green', 'purple', 'red', 'blue'] 39 | 40 | const imageText = encodeURIComponent(inputText ?? 'Hello World') 41 | const imageColor = backgroundColors[buttonIndex - 1] || 'white' 42 | 43 | const frameImage = `https://placehold.co/1920x1005/${imageColor}/white?text=${imageText}` 44 | const framePostUrl = c.req.url 45 | 46 | return c.html(html` 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Farcaster Frames 59 | 60 | 61 | `) 62 | } catch (error) { 63 | console.error(error) 64 | return c.json({ error: 'Invalid request' }, 400) 65 | } 66 | }) 67 | 68 | const port = 3000 69 | console.log(`Server is running on port ${port.toString()}`) 70 | 71 | serve({ 72 | fetch: app.fetch, 73 | port, 74 | }) 75 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export interface FrameSignaturePacket { 2 | untrustedData: { 3 | fid: number; 4 | url: string; 5 | messageHash: string; 6 | timestamp: number; 7 | network: number; 8 | buttonIndex: number; 9 | inputText?: string; 10 | castId: { 11 | fid: number; 12 | hash: string; 13 | }; 14 | }; 15 | trustedData: { 16 | messageBytes: string; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "jsx": "react-jsx", 5 | "jsxImportSource": "hono/jsx", 6 | "outDir": "dist" 7 | } 8 | } 9 | --------------------------------------------------------------------------------