├── .eslintrc.cjs ├── .github └── workflows │ └── codecov.yml ├── .gitignore ├── .husky └── pre-commit ├── .vscode └── extensions.json ├── LICENSE ├── README.md ├── docs ├── README_en.md └── images │ ├── 1.png │ └── 2.png ├── package.json ├── pnpm-lock.yaml ├── src ├── components │ ├── CardContainer.tsx │ ├── CardLoader │ │ ├── index.tsx │ │ └── styles.css │ ├── HelloBlock.tsx │ ├── InfoCard │ │ ├── Avatar.tsx │ │ ├── Background.tsx │ │ ├── BlogButton.tsx │ │ ├── ChatButton.tsx │ │ ├── FollowButton.tsx │ │ ├── Slogan.tsx │ │ ├── StatItem.tsx │ │ ├── Username.tsx │ │ ├── index.tsx │ │ └── styles.module.scss │ ├── LoadingCard │ │ ├── index.tsx │ │ └── styles.module.css │ ├── LuoguBlock │ │ ├── index.tsx │ │ └── styles.module.css │ ├── UserCard.tsx │ ├── card.module.css │ └── index.ts ├── data │ ├── constants.ts │ └── types.ts ├── main.tsx ├── mock.ts ├── state.tsx └── utils │ ├── card.ts │ ├── fetcher.ts │ └── index.ts ├── tests └── utils.test.ts ├── tsconfig.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | module.exports = { 3 | env: { 4 | browser: true, 5 | es2021: true, 6 | }, 7 | extends: [ 8 | "eslint:recommended", 9 | "plugin:solid/typescript", 10 | "plugin:@typescript-eslint/recommended", 11 | ], 12 | overrides: [], 13 | parser: "@typescript-eslint/parser", 14 | parserOptions: { 15 | ecmaVersion: "latest", 16 | sourceType: "module", 17 | }, 18 | plugins: [ 19 | "solid", 20 | "@typescript-eslint", 21 | ], 22 | rules: { 23 | "indent": [ 24 | "error", 25 | 2, 26 | ], 27 | "linebreak-style": [ 28 | "error", 29 | "unix", 30 | ], 31 | "quotes": [ 32 | "error", 33 | "double", 34 | ], 35 | "semi": [ 36 | "error", 37 | "always", 38 | ], 39 | "no-duplicate-imports": "error", 40 | "arrow-body-style": [ 41 | "warn", 42 | "as-needed", 43 | ], 44 | "camelcase": "warn", 45 | "curly": "error", 46 | "eqeqeq": "error", 47 | "func-style": "warn", 48 | "no-else-return": "warn", 49 | "no-eval": "error", 50 | "no-implied-eval": "error", 51 | "no-lonely-if": "warn", 52 | "no-mixed-operators": "warn", 53 | "no-multi-assign": "warn", 54 | "no-return-assign": "warn", 55 | "no-return-await": "warn", 56 | "no-sequences": "warn", 57 | 58 | "eol-last": "error", 59 | "comma-dangle": [ 60 | "error", 61 | "always-multiline", 62 | ], 63 | }, 64 | }; 65 | -------------------------------------------------------------------------------- /.github/workflows/codecov.yml: -------------------------------------------------------------------------------- 1 | name: Codecov 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | name: Test Floating Luogu 9 | steps: 10 | - uses: actions/checkout@v3 11 | 12 | - name: Install pnpm 13 | uses: pnpm/action-setup@v2 14 | with: 15 | version: latest 16 | 17 | - name: Install Node.js 18 | uses: actions/setup-node@v3 19 | with: 20 | node-version: latest 21 | cache: pnpm 22 | 23 | - name: Install Dependencies 24 | run: pnpm install --frozen-lockfile 25 | 26 | - name: Run tests and collect coverage 27 | run: pnpm coverage 28 | 29 | - name: Upload coverage reports to Codecov 30 | uses: codecov/codecov-action@v3 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | coverage 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | pnpm tsc --noEmit && pnpm lint 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "usernamehw.errorlens", 4 | "dbaeumer.vscode-eslint", 5 | "eamodio.gitlens" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 yurzhang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Floating Luogu 2 | 3 | [![wakatime](https://wakatime.com/badge/user/6449d913-5596-416e-8449-7b97363f5e0e/project/fb6f982c-93df-4e81-bc75-c85d4f7daa92.svg)](https://wakatime.com/badge/user/6449d913-5596-416e-8449-7b97363f5e0e/project/fb6f982c-93df-4e81-bc75-c85d4f7daa92) [![codecov](https://codecov.io/gh/Nikaidou-Shinku/floating-luogu/branch/master/graph/badge.svg?token=5EJFHZPEF0)](https://codecov.io/gh/Nikaidou-Shinku/floating-luogu) 4 | 5 | 中文 | [English](./docs/README_en.md) 6 | 7 | 一个为洛谷添加用户卡片的油猴脚本。 8 | 9 | ![](./docs/images/1.png) 10 | 11 | ![](./docs/images/2.png) 12 | 13 | ## 使用方法 14 | 15 | 请到 [Release 页面](https://github.com/Nikaidou-Shinku/floating-luogu/releases)下载最新的 `flg.user.js` 文件,然后将里面的内容复制进油猴即可。 16 | 17 | 以及 Floating Luogu 用户群 885149235 欢迎来玩~ 18 | -------------------------------------------------------------------------------- /docs/README_en.md: -------------------------------------------------------------------------------- 1 | # Floating Luogu 2 | 3 | [![wakatime](https://wakatime.com/badge/user/6449d913-5596-416e-8449-7b97363f5e0e/project/fb6f982c-93df-4e81-bc75-c85d4f7daa92.svg)](https://wakatime.com/badge/user/6449d913-5596-416e-8449-7b97363f5e0e/project/fb6f982c-93df-4e81-bc75-c85d4f7daa92) [![codecov](https://codecov.io/gh/Nikaidou-Shinku/floating-luogu/branch/master/graph/badge.svg?token=5EJFHZPEF0)](https://codecov.io/gh/Nikaidou-Shinku/floating-luogu) 4 | 5 | [中文](../README.md) | English 6 | 7 | A plugin to decorate Luogu with exquisite user card. 8 | 9 | ![](./images/1.png) 10 | 11 | ![](./images/2.png) 12 | 13 | ## Usage 14 | 15 | Please go to the [release page](https://github.com/Nikaidou-Shinku/floating-luogu/releases) to download the latest version of `flg.user.js`, and just copy the content of it into the Tampermonkey. 16 | -------------------------------------------------------------------------------- /docs/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikaidou-Shinku/floating-luogu/272e2e47db100ece6c8ed5d5a99243f6a7c02497/docs/images/1.png -------------------------------------------------------------------------------- /docs/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikaidou-Shinku/floating-luogu/272e2e47db100ece6c8ed5d5a99243f6a7c02497/docs/images/2.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "floating-luogu", 3 | "version": "0.4.0", 4 | "description": "A plugin to decorate Luogu with exquisite user card.", 5 | "scripts": { 6 | "build": "vite build", 7 | "lint": "eslint --ext .tsx,.ts src/", 8 | "prepare": "husky install", 9 | "test": "vitest", 10 | "coverage": "vitest run --coverage" 11 | }, 12 | "license": "MIT", 13 | "devDependencies": { 14 | "@types/node": "^20.1.0", 15 | "@typescript-eslint/eslint-plugin": "^5.59.2", 16 | "@typescript-eslint/parser": "^5.59.2", 17 | "@vitest/coverage-c8": "^0.31.0", 18 | "eslint": "^8.40.0", 19 | "eslint-plugin-solid": "^0.12.1", 20 | "husky": "^8.0.3", 21 | "jsdom": "^22.0.0", 22 | "sass": "^1.62.1", 23 | "typescript": "^5.0.4", 24 | "vite": "^4.3.5", 25 | "vite-plugin-solid": "^2.7.0", 26 | "vitest": "^0.31.0" 27 | }, 28 | "dependencies": { 29 | "@solid-primitives/scheduled": "^1.3.2", 30 | "@tanstack/solid-query": "^4.29.5", 31 | "solid-js": "^1.7.4", 32 | "solid-transition-group": "^0.2.2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | dependencies: 4 | '@solid-primitives/scheduled': 5 | specifier: ^1.3.2 6 | version: 1.3.2(solid-js@1.7.4) 7 | '@tanstack/solid-query': 8 | specifier: ^4.29.5 9 | version: 4.29.5(solid-js@1.7.4) 10 | solid-js: 11 | specifier: ^1.7.4 12 | version: 1.7.4 13 | solid-transition-group: 14 | specifier: ^0.2.2 15 | version: 0.2.2(solid-js@1.7.4) 16 | 17 | devDependencies: 18 | '@types/node': 19 | specifier: ^20.1.0 20 | version: 20.1.0 21 | '@typescript-eslint/eslint-plugin': 22 | specifier: ^5.59.2 23 | version: 5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.40.0)(typescript@5.0.4) 24 | '@typescript-eslint/parser': 25 | specifier: ^5.59.2 26 | version: 5.59.2(eslint@8.40.0)(typescript@5.0.4) 27 | '@vitest/coverage-c8': 28 | specifier: ^0.31.0 29 | version: 0.31.0(vitest@0.31.0) 30 | eslint: 31 | specifier: ^8.40.0 32 | version: 8.40.0 33 | eslint-plugin-solid: 34 | specifier: ^0.12.1 35 | version: 0.12.1(eslint@8.40.0)(typescript@5.0.4) 36 | husky: 37 | specifier: ^8.0.3 38 | version: 8.0.3 39 | jsdom: 40 | specifier: ^22.0.0 41 | version: 22.0.0 42 | sass: 43 | specifier: ^1.62.1 44 | version: 1.62.1 45 | typescript: 46 | specifier: ^5.0.4 47 | version: 5.0.4 48 | vite: 49 | specifier: ^4.3.5 50 | version: 4.3.5(@types/node@20.1.0)(sass@1.62.1) 51 | vite-plugin-solid: 52 | specifier: ^2.7.0 53 | version: 2.7.0(solid-js@1.7.4)(vite@4.3.5) 54 | vitest: 55 | specifier: ^0.31.0 56 | version: 0.31.0(jsdom@22.0.0)(sass@1.62.1) 57 | 58 | packages: 59 | 60 | /@ampproject/remapping@2.2.1: 61 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} 62 | engines: {node: '>=6.0.0'} 63 | dependencies: 64 | '@jridgewell/gen-mapping': 0.3.3 65 | '@jridgewell/trace-mapping': 0.3.18 66 | dev: true 67 | 68 | /@babel/code-frame@7.21.4: 69 | resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} 70 | engines: {node: '>=6.9.0'} 71 | dependencies: 72 | '@babel/highlight': 7.18.6 73 | dev: true 74 | 75 | /@babel/compat-data@7.21.7: 76 | resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} 77 | engines: {node: '>=6.9.0'} 78 | dev: true 79 | 80 | /@babel/core@7.21.8: 81 | resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} 82 | engines: {node: '>=6.9.0'} 83 | dependencies: 84 | '@ampproject/remapping': 2.2.1 85 | '@babel/code-frame': 7.21.4 86 | '@babel/generator': 7.21.5 87 | '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) 88 | '@babel/helper-module-transforms': 7.21.5 89 | '@babel/helpers': 7.21.5 90 | '@babel/parser': 7.21.8 91 | '@babel/template': 7.20.7 92 | '@babel/traverse': 7.21.5 93 | '@babel/types': 7.21.5 94 | convert-source-map: 1.9.0 95 | debug: 4.3.4 96 | gensync: 1.0.0-beta.2 97 | json5: 2.2.3 98 | semver: 6.3.0 99 | transitivePeerDependencies: 100 | - supports-color 101 | dev: true 102 | 103 | /@babel/generator@7.21.5: 104 | resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} 105 | engines: {node: '>=6.9.0'} 106 | dependencies: 107 | '@babel/types': 7.21.5 108 | '@jridgewell/gen-mapping': 0.3.3 109 | '@jridgewell/trace-mapping': 0.3.18 110 | jsesc: 2.5.2 111 | dev: true 112 | 113 | /@babel/helper-annotate-as-pure@7.18.6: 114 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 115 | engines: {node: '>=6.9.0'} 116 | dependencies: 117 | '@babel/types': 7.21.5 118 | dev: true 119 | 120 | /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): 121 | resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} 122 | engines: {node: '>=6.9.0'} 123 | peerDependencies: 124 | '@babel/core': ^7.0.0 125 | dependencies: 126 | '@babel/compat-data': 7.21.7 127 | '@babel/core': 7.21.8 128 | '@babel/helper-validator-option': 7.21.0 129 | browserslist: 4.21.5 130 | lru-cache: 5.1.1 131 | semver: 6.3.0 132 | dev: true 133 | 134 | /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): 135 | resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} 136 | engines: {node: '>=6.9.0'} 137 | peerDependencies: 138 | '@babel/core': ^7.0.0 139 | dependencies: 140 | '@babel/core': 7.21.8 141 | '@babel/helper-annotate-as-pure': 7.18.6 142 | '@babel/helper-environment-visitor': 7.21.5 143 | '@babel/helper-function-name': 7.21.0 144 | '@babel/helper-member-expression-to-functions': 7.21.5 145 | '@babel/helper-optimise-call-expression': 7.18.6 146 | '@babel/helper-replace-supers': 7.21.5 147 | '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 148 | '@babel/helper-split-export-declaration': 7.18.6 149 | semver: 6.3.0 150 | transitivePeerDependencies: 151 | - supports-color 152 | dev: true 153 | 154 | /@babel/helper-environment-visitor@7.21.5: 155 | resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} 156 | engines: {node: '>=6.9.0'} 157 | dev: true 158 | 159 | /@babel/helper-function-name@7.21.0: 160 | resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 161 | engines: {node: '>=6.9.0'} 162 | dependencies: 163 | '@babel/template': 7.20.7 164 | '@babel/types': 7.21.5 165 | dev: true 166 | 167 | /@babel/helper-hoist-variables@7.18.6: 168 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 169 | engines: {node: '>=6.9.0'} 170 | dependencies: 171 | '@babel/types': 7.21.5 172 | dev: true 173 | 174 | /@babel/helper-member-expression-to-functions@7.21.5: 175 | resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} 176 | engines: {node: '>=6.9.0'} 177 | dependencies: 178 | '@babel/types': 7.21.5 179 | dev: true 180 | 181 | /@babel/helper-module-imports@7.18.6: 182 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 183 | engines: {node: '>=6.9.0'} 184 | dependencies: 185 | '@babel/types': 7.21.5 186 | dev: true 187 | 188 | /@babel/helper-module-imports@7.21.4: 189 | resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} 190 | engines: {node: '>=6.9.0'} 191 | dependencies: 192 | '@babel/types': 7.21.5 193 | dev: true 194 | 195 | /@babel/helper-module-transforms@7.21.5: 196 | resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} 197 | engines: {node: '>=6.9.0'} 198 | dependencies: 199 | '@babel/helper-environment-visitor': 7.21.5 200 | '@babel/helper-module-imports': 7.21.4 201 | '@babel/helper-simple-access': 7.21.5 202 | '@babel/helper-split-export-declaration': 7.18.6 203 | '@babel/helper-validator-identifier': 7.19.1 204 | '@babel/template': 7.20.7 205 | '@babel/traverse': 7.21.5 206 | '@babel/types': 7.21.5 207 | transitivePeerDependencies: 208 | - supports-color 209 | dev: true 210 | 211 | /@babel/helper-optimise-call-expression@7.18.6: 212 | resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 213 | engines: {node: '>=6.9.0'} 214 | dependencies: 215 | '@babel/types': 7.21.5 216 | dev: true 217 | 218 | /@babel/helper-plugin-utils@7.21.5: 219 | resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} 220 | engines: {node: '>=6.9.0'} 221 | dev: true 222 | 223 | /@babel/helper-replace-supers@7.21.5: 224 | resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} 225 | engines: {node: '>=6.9.0'} 226 | dependencies: 227 | '@babel/helper-environment-visitor': 7.21.5 228 | '@babel/helper-member-expression-to-functions': 7.21.5 229 | '@babel/helper-optimise-call-expression': 7.18.6 230 | '@babel/template': 7.20.7 231 | '@babel/traverse': 7.21.5 232 | '@babel/types': 7.21.5 233 | transitivePeerDependencies: 234 | - supports-color 235 | dev: true 236 | 237 | /@babel/helper-simple-access@7.21.5: 238 | resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} 239 | engines: {node: '>=6.9.0'} 240 | dependencies: 241 | '@babel/types': 7.21.5 242 | dev: true 243 | 244 | /@babel/helper-skip-transparent-expression-wrappers@7.20.0: 245 | resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} 246 | engines: {node: '>=6.9.0'} 247 | dependencies: 248 | '@babel/types': 7.21.5 249 | dev: true 250 | 251 | /@babel/helper-split-export-declaration@7.18.6: 252 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 253 | engines: {node: '>=6.9.0'} 254 | dependencies: 255 | '@babel/types': 7.21.5 256 | dev: true 257 | 258 | /@babel/helper-string-parser@7.21.5: 259 | resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} 260 | engines: {node: '>=6.9.0'} 261 | dev: true 262 | 263 | /@babel/helper-validator-identifier@7.19.1: 264 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 265 | engines: {node: '>=6.9.0'} 266 | dev: true 267 | 268 | /@babel/helper-validator-option@7.21.0: 269 | resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 270 | engines: {node: '>=6.9.0'} 271 | dev: true 272 | 273 | /@babel/helpers@7.21.5: 274 | resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} 275 | engines: {node: '>=6.9.0'} 276 | dependencies: 277 | '@babel/template': 7.20.7 278 | '@babel/traverse': 7.21.5 279 | '@babel/types': 7.21.5 280 | transitivePeerDependencies: 281 | - supports-color 282 | dev: true 283 | 284 | /@babel/highlight@7.18.6: 285 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 286 | engines: {node: '>=6.9.0'} 287 | dependencies: 288 | '@babel/helper-validator-identifier': 7.19.1 289 | chalk: 2.4.2 290 | js-tokens: 4.0.0 291 | dev: true 292 | 293 | /@babel/parser@7.21.8: 294 | resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} 295 | engines: {node: '>=6.0.0'} 296 | hasBin: true 297 | dependencies: 298 | '@babel/types': 7.21.5 299 | dev: true 300 | 301 | /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.8): 302 | resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} 303 | engines: {node: '>=6.9.0'} 304 | peerDependencies: 305 | '@babel/core': ^7.0.0-0 306 | dependencies: 307 | '@babel/core': 7.21.8 308 | '@babel/helper-plugin-utils': 7.21.5 309 | dev: true 310 | 311 | /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): 312 | resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} 313 | engines: {node: '>=6.9.0'} 314 | peerDependencies: 315 | '@babel/core': ^7.0.0-0 316 | dependencies: 317 | '@babel/core': 7.21.8 318 | '@babel/helper-plugin-utils': 7.21.5 319 | dev: true 320 | 321 | /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): 322 | resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} 323 | engines: {node: '>=6.9.0'} 324 | peerDependencies: 325 | '@babel/core': ^7.0.0-0 326 | dependencies: 327 | '@babel/core': 7.21.8 328 | '@babel/helper-module-transforms': 7.21.5 329 | '@babel/helper-plugin-utils': 7.21.5 330 | '@babel/helper-simple-access': 7.21.5 331 | transitivePeerDependencies: 332 | - supports-color 333 | dev: true 334 | 335 | /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): 336 | resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} 337 | engines: {node: '>=6.9.0'} 338 | peerDependencies: 339 | '@babel/core': ^7.0.0-0 340 | dependencies: 341 | '@babel/core': 7.21.8 342 | '@babel/helper-annotate-as-pure': 7.18.6 343 | '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) 344 | '@babel/helper-plugin-utils': 7.21.5 345 | '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) 346 | transitivePeerDependencies: 347 | - supports-color 348 | dev: true 349 | 350 | /@babel/preset-typescript@7.21.5(@babel/core@7.21.8): 351 | resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} 352 | engines: {node: '>=6.9.0'} 353 | peerDependencies: 354 | '@babel/core': ^7.0.0-0 355 | dependencies: 356 | '@babel/core': 7.21.8 357 | '@babel/helper-plugin-utils': 7.21.5 358 | '@babel/helper-validator-option': 7.21.0 359 | '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) 360 | '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) 361 | '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) 362 | transitivePeerDependencies: 363 | - supports-color 364 | dev: true 365 | 366 | /@babel/template@7.20.7: 367 | resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 368 | engines: {node: '>=6.9.0'} 369 | dependencies: 370 | '@babel/code-frame': 7.21.4 371 | '@babel/parser': 7.21.8 372 | '@babel/types': 7.21.5 373 | dev: true 374 | 375 | /@babel/traverse@7.21.5: 376 | resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} 377 | engines: {node: '>=6.9.0'} 378 | dependencies: 379 | '@babel/code-frame': 7.21.4 380 | '@babel/generator': 7.21.5 381 | '@babel/helper-environment-visitor': 7.21.5 382 | '@babel/helper-function-name': 7.21.0 383 | '@babel/helper-hoist-variables': 7.18.6 384 | '@babel/helper-split-export-declaration': 7.18.6 385 | '@babel/parser': 7.21.8 386 | '@babel/types': 7.21.5 387 | debug: 4.3.4 388 | globals: 11.12.0 389 | transitivePeerDependencies: 390 | - supports-color 391 | dev: true 392 | 393 | /@babel/types@7.21.5: 394 | resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} 395 | engines: {node: '>=6.9.0'} 396 | dependencies: 397 | '@babel/helper-string-parser': 7.21.5 398 | '@babel/helper-validator-identifier': 7.19.1 399 | to-fast-properties: 2.0.0 400 | dev: true 401 | 402 | /@bcoe/v8-coverage@0.2.3: 403 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 404 | dev: true 405 | 406 | /@esbuild/android-arm64@0.17.18: 407 | resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} 408 | engines: {node: '>=12'} 409 | cpu: [arm64] 410 | os: [android] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@esbuild/android-arm@0.17.18: 416 | resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==} 417 | engines: {node: '>=12'} 418 | cpu: [arm] 419 | os: [android] 420 | requiresBuild: true 421 | dev: true 422 | optional: true 423 | 424 | /@esbuild/android-x64@0.17.18: 425 | resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==} 426 | engines: {node: '>=12'} 427 | cpu: [x64] 428 | os: [android] 429 | requiresBuild: true 430 | dev: true 431 | optional: true 432 | 433 | /@esbuild/darwin-arm64@0.17.18: 434 | resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==} 435 | engines: {node: '>=12'} 436 | cpu: [arm64] 437 | os: [darwin] 438 | requiresBuild: true 439 | dev: true 440 | optional: true 441 | 442 | /@esbuild/darwin-x64@0.17.18: 443 | resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==} 444 | engines: {node: '>=12'} 445 | cpu: [x64] 446 | os: [darwin] 447 | requiresBuild: true 448 | dev: true 449 | optional: true 450 | 451 | /@esbuild/freebsd-arm64@0.17.18: 452 | resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==} 453 | engines: {node: '>=12'} 454 | cpu: [arm64] 455 | os: [freebsd] 456 | requiresBuild: true 457 | dev: true 458 | optional: true 459 | 460 | /@esbuild/freebsd-x64@0.17.18: 461 | resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==} 462 | engines: {node: '>=12'} 463 | cpu: [x64] 464 | os: [freebsd] 465 | requiresBuild: true 466 | dev: true 467 | optional: true 468 | 469 | /@esbuild/linux-arm64@0.17.18: 470 | resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==} 471 | engines: {node: '>=12'} 472 | cpu: [arm64] 473 | os: [linux] 474 | requiresBuild: true 475 | dev: true 476 | optional: true 477 | 478 | /@esbuild/linux-arm@0.17.18: 479 | resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==} 480 | engines: {node: '>=12'} 481 | cpu: [arm] 482 | os: [linux] 483 | requiresBuild: true 484 | dev: true 485 | optional: true 486 | 487 | /@esbuild/linux-ia32@0.17.18: 488 | resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==} 489 | engines: {node: '>=12'} 490 | cpu: [ia32] 491 | os: [linux] 492 | requiresBuild: true 493 | dev: true 494 | optional: true 495 | 496 | /@esbuild/linux-loong64@0.17.18: 497 | resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==} 498 | engines: {node: '>=12'} 499 | cpu: [loong64] 500 | os: [linux] 501 | requiresBuild: true 502 | dev: true 503 | optional: true 504 | 505 | /@esbuild/linux-mips64el@0.17.18: 506 | resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==} 507 | engines: {node: '>=12'} 508 | cpu: [mips64el] 509 | os: [linux] 510 | requiresBuild: true 511 | dev: true 512 | optional: true 513 | 514 | /@esbuild/linux-ppc64@0.17.18: 515 | resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==} 516 | engines: {node: '>=12'} 517 | cpu: [ppc64] 518 | os: [linux] 519 | requiresBuild: true 520 | dev: true 521 | optional: true 522 | 523 | /@esbuild/linux-riscv64@0.17.18: 524 | resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==} 525 | engines: {node: '>=12'} 526 | cpu: [riscv64] 527 | os: [linux] 528 | requiresBuild: true 529 | dev: true 530 | optional: true 531 | 532 | /@esbuild/linux-s390x@0.17.18: 533 | resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==} 534 | engines: {node: '>=12'} 535 | cpu: [s390x] 536 | os: [linux] 537 | requiresBuild: true 538 | dev: true 539 | optional: true 540 | 541 | /@esbuild/linux-x64@0.17.18: 542 | resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==} 543 | engines: {node: '>=12'} 544 | cpu: [x64] 545 | os: [linux] 546 | requiresBuild: true 547 | dev: true 548 | optional: true 549 | 550 | /@esbuild/netbsd-x64@0.17.18: 551 | resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==} 552 | engines: {node: '>=12'} 553 | cpu: [x64] 554 | os: [netbsd] 555 | requiresBuild: true 556 | dev: true 557 | optional: true 558 | 559 | /@esbuild/openbsd-x64@0.17.18: 560 | resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==} 561 | engines: {node: '>=12'} 562 | cpu: [x64] 563 | os: [openbsd] 564 | requiresBuild: true 565 | dev: true 566 | optional: true 567 | 568 | /@esbuild/sunos-x64@0.17.18: 569 | resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==} 570 | engines: {node: '>=12'} 571 | cpu: [x64] 572 | os: [sunos] 573 | requiresBuild: true 574 | dev: true 575 | optional: true 576 | 577 | /@esbuild/win32-arm64@0.17.18: 578 | resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==} 579 | engines: {node: '>=12'} 580 | cpu: [arm64] 581 | os: [win32] 582 | requiresBuild: true 583 | dev: true 584 | optional: true 585 | 586 | /@esbuild/win32-ia32@0.17.18: 587 | resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==} 588 | engines: {node: '>=12'} 589 | cpu: [ia32] 590 | os: [win32] 591 | requiresBuild: true 592 | dev: true 593 | optional: true 594 | 595 | /@esbuild/win32-x64@0.17.18: 596 | resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==} 597 | engines: {node: '>=12'} 598 | cpu: [x64] 599 | os: [win32] 600 | requiresBuild: true 601 | dev: true 602 | optional: true 603 | 604 | /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0): 605 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 606 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 607 | peerDependencies: 608 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 609 | dependencies: 610 | eslint: 8.40.0 611 | eslint-visitor-keys: 3.4.1 612 | dev: true 613 | 614 | /@eslint-community/regexpp@4.5.1: 615 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 616 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 617 | dev: true 618 | 619 | /@eslint/eslintrc@2.0.3: 620 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} 621 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 622 | dependencies: 623 | ajv: 6.12.6 624 | debug: 4.3.4 625 | espree: 9.5.2 626 | globals: 13.20.0 627 | ignore: 5.2.4 628 | import-fresh: 3.3.0 629 | js-yaml: 4.1.0 630 | minimatch: 3.1.2 631 | strip-json-comments: 3.1.1 632 | transitivePeerDependencies: 633 | - supports-color 634 | dev: true 635 | 636 | /@eslint/js@8.40.0: 637 | resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} 638 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 639 | dev: true 640 | 641 | /@humanwhocodes/config-array@0.11.8: 642 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 643 | engines: {node: '>=10.10.0'} 644 | dependencies: 645 | '@humanwhocodes/object-schema': 1.2.1 646 | debug: 4.3.4 647 | minimatch: 3.1.2 648 | transitivePeerDependencies: 649 | - supports-color 650 | dev: true 651 | 652 | /@humanwhocodes/module-importer@1.0.1: 653 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 654 | engines: {node: '>=12.22'} 655 | dev: true 656 | 657 | /@humanwhocodes/object-schema@1.2.1: 658 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 659 | dev: true 660 | 661 | /@istanbuljs/schema@0.1.3: 662 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 663 | engines: {node: '>=8'} 664 | dev: true 665 | 666 | /@jridgewell/gen-mapping@0.3.3: 667 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 668 | engines: {node: '>=6.0.0'} 669 | dependencies: 670 | '@jridgewell/set-array': 1.1.2 671 | '@jridgewell/sourcemap-codec': 1.4.15 672 | '@jridgewell/trace-mapping': 0.3.18 673 | dev: true 674 | 675 | /@jridgewell/resolve-uri@3.1.0: 676 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 677 | engines: {node: '>=6.0.0'} 678 | dev: true 679 | 680 | /@jridgewell/set-array@1.1.2: 681 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 682 | engines: {node: '>=6.0.0'} 683 | dev: true 684 | 685 | /@jridgewell/sourcemap-codec@1.4.14: 686 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 687 | dev: true 688 | 689 | /@jridgewell/sourcemap-codec@1.4.15: 690 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 691 | dev: true 692 | 693 | /@jridgewell/trace-mapping@0.3.18: 694 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 695 | dependencies: 696 | '@jridgewell/resolve-uri': 3.1.0 697 | '@jridgewell/sourcemap-codec': 1.4.14 698 | dev: true 699 | 700 | /@nodelib/fs.scandir@2.1.5: 701 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 702 | engines: {node: '>= 8'} 703 | dependencies: 704 | '@nodelib/fs.stat': 2.0.5 705 | run-parallel: 1.2.0 706 | dev: true 707 | 708 | /@nodelib/fs.stat@2.0.5: 709 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 710 | engines: {node: '>= 8'} 711 | dev: true 712 | 713 | /@nodelib/fs.walk@1.2.8: 714 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 715 | engines: {node: '>= 8'} 716 | dependencies: 717 | '@nodelib/fs.scandir': 2.1.5 718 | fastq: 1.15.0 719 | dev: true 720 | 721 | /@solid-primitives/refs@1.0.2(solid-js@1.7.4): 722 | resolution: {integrity: sha512-qnqQRdYbsENlVx86QCfftRKGZ/9zUJMGK9U85xDRymocEyeUXxdxgq0FeyGhvgg4A25spJVwHmuZUGY0aMBBLA==} 723 | peerDependencies: 724 | solid-js: ^1.6.12 725 | dependencies: 726 | '@solid-primitives/utils': 6.1.0(solid-js@1.7.4) 727 | solid-js: 1.7.4 728 | dev: false 729 | 730 | /@solid-primitives/scheduled@1.3.2(solid-js@1.7.4): 731 | resolution: {integrity: sha512-2rDCyYNjI9zBqpdmJG8sN8h90gbe2hSqRdj1OMmKp3qEbKVCrXXswLmrbBuNBi/uow6f8AHR9uheb7LWQ3ojcw==} 732 | peerDependencies: 733 | solid-js: ^1.6.12 734 | dependencies: 735 | solid-js: 1.7.4 736 | dev: false 737 | 738 | /@solid-primitives/transition-group@1.0.2(solid-js@1.7.4): 739 | resolution: {integrity: sha512-+o3J7TnU0/Sok+LKA0z0wvhim88dpd2eFBk8/05adE6wVypVlME8sKqTMO+xRv8HoT4Kq3sczmvwV07FKg2n+g==} 740 | peerDependencies: 741 | solid-js: ^1.6.12 742 | dependencies: 743 | solid-js: 1.7.4 744 | dev: false 745 | 746 | /@solid-primitives/utils@6.1.0(solid-js@1.7.4): 747 | resolution: {integrity: sha512-uTikKFrq33UO+MnKt2WzZr9WYbQe5YX58ytGkL+29DL6o0pZs1wrICbd4ymzSm8azqzMcQqEQOL3HLWjuv9tLw==} 748 | peerDependencies: 749 | solid-js: ^1.6.12 750 | dependencies: 751 | solid-js: 1.7.4 752 | dev: false 753 | 754 | /@tanstack/query-core@4.29.5: 755 | resolution: {integrity: sha512-xXIiyQ/4r9KfaJ3k6kejqcaqFXXBTzN2aOJ5H1J6aTJE9hl/nbgAdfF6oiIu0CD5xowejJEJ6bBg8TO7BN4NuQ==} 756 | dev: false 757 | 758 | /@tanstack/solid-query@4.29.5(solid-js@1.7.4): 759 | resolution: {integrity: sha512-ypAgS9HeAViN4FAJddSxWO1SdzX3QX0rYtLJDDpmNXSXG7WueUD2s/q/OuaY3C36iI4PhTkuHfGjibMkozxzTA==} 760 | peerDependencies: 761 | solid-js: ^1.5.7 762 | dependencies: 763 | '@tanstack/query-core': 4.29.5 764 | solid-js: 1.7.4 765 | dev: false 766 | 767 | /@tootallnate/once@2.0.0: 768 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} 769 | engines: {node: '>= 10'} 770 | dev: true 771 | 772 | /@types/babel__core@7.20.0: 773 | resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} 774 | dependencies: 775 | '@babel/parser': 7.21.8 776 | '@babel/types': 7.21.5 777 | '@types/babel__generator': 7.6.4 778 | '@types/babel__template': 7.4.1 779 | '@types/babel__traverse': 7.18.5 780 | dev: true 781 | 782 | /@types/babel__generator@7.6.4: 783 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 784 | dependencies: 785 | '@babel/types': 7.21.5 786 | dev: true 787 | 788 | /@types/babel__template@7.4.1: 789 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 790 | dependencies: 791 | '@babel/parser': 7.21.8 792 | '@babel/types': 7.21.5 793 | dev: true 794 | 795 | /@types/babel__traverse@7.18.5: 796 | resolution: {integrity: sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==} 797 | dependencies: 798 | '@babel/types': 7.21.5 799 | dev: true 800 | 801 | /@types/chai-subset@1.3.3: 802 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 803 | dependencies: 804 | '@types/chai': 4.3.5 805 | dev: true 806 | 807 | /@types/chai@4.3.5: 808 | resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} 809 | dev: true 810 | 811 | /@types/istanbul-lib-coverage@2.0.4: 812 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} 813 | dev: true 814 | 815 | /@types/json-schema@7.0.11: 816 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 817 | dev: true 818 | 819 | /@types/node@20.1.0: 820 | resolution: {integrity: sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==} 821 | dev: true 822 | 823 | /@types/semver@7.3.13: 824 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} 825 | dev: true 826 | 827 | /@typescript-eslint/eslint-plugin@5.59.2(@typescript-eslint/parser@5.59.2)(eslint@8.40.0)(typescript@5.0.4): 828 | resolution: {integrity: sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A==} 829 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 830 | peerDependencies: 831 | '@typescript-eslint/parser': ^5.0.0 832 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 833 | typescript: '*' 834 | peerDependenciesMeta: 835 | typescript: 836 | optional: true 837 | dependencies: 838 | '@eslint-community/regexpp': 4.5.1 839 | '@typescript-eslint/parser': 5.59.2(eslint@8.40.0)(typescript@5.0.4) 840 | '@typescript-eslint/scope-manager': 5.59.2 841 | '@typescript-eslint/type-utils': 5.59.2(eslint@8.40.0)(typescript@5.0.4) 842 | '@typescript-eslint/utils': 5.59.2(eslint@8.40.0)(typescript@5.0.4) 843 | debug: 4.3.4 844 | eslint: 8.40.0 845 | grapheme-splitter: 1.0.4 846 | ignore: 5.2.4 847 | natural-compare-lite: 1.4.0 848 | semver: 7.5.0 849 | tsutils: 3.21.0(typescript@5.0.4) 850 | typescript: 5.0.4 851 | transitivePeerDependencies: 852 | - supports-color 853 | dev: true 854 | 855 | /@typescript-eslint/parser@5.59.2(eslint@8.40.0)(typescript@5.0.4): 856 | resolution: {integrity: sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ==} 857 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 858 | peerDependencies: 859 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 860 | typescript: '*' 861 | peerDependenciesMeta: 862 | typescript: 863 | optional: true 864 | dependencies: 865 | '@typescript-eslint/scope-manager': 5.59.2 866 | '@typescript-eslint/types': 5.59.2 867 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 868 | debug: 4.3.4 869 | eslint: 8.40.0 870 | typescript: 5.0.4 871 | transitivePeerDependencies: 872 | - supports-color 873 | dev: true 874 | 875 | /@typescript-eslint/scope-manager@5.59.2: 876 | resolution: {integrity: sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA==} 877 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 878 | dependencies: 879 | '@typescript-eslint/types': 5.59.2 880 | '@typescript-eslint/visitor-keys': 5.59.2 881 | dev: true 882 | 883 | /@typescript-eslint/type-utils@5.59.2(eslint@8.40.0)(typescript@5.0.4): 884 | resolution: {integrity: sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ==} 885 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 886 | peerDependencies: 887 | eslint: '*' 888 | typescript: '*' 889 | peerDependenciesMeta: 890 | typescript: 891 | optional: true 892 | dependencies: 893 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 894 | '@typescript-eslint/utils': 5.59.2(eslint@8.40.0)(typescript@5.0.4) 895 | debug: 4.3.4 896 | eslint: 8.40.0 897 | tsutils: 3.21.0(typescript@5.0.4) 898 | typescript: 5.0.4 899 | transitivePeerDependencies: 900 | - supports-color 901 | dev: true 902 | 903 | /@typescript-eslint/types@5.59.2: 904 | resolution: {integrity: sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w==} 905 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 906 | dev: true 907 | 908 | /@typescript-eslint/typescript-estree@5.59.2(typescript@5.0.4): 909 | resolution: {integrity: sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q==} 910 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 911 | peerDependencies: 912 | typescript: '*' 913 | peerDependenciesMeta: 914 | typescript: 915 | optional: true 916 | dependencies: 917 | '@typescript-eslint/types': 5.59.2 918 | '@typescript-eslint/visitor-keys': 5.59.2 919 | debug: 4.3.4 920 | globby: 11.1.0 921 | is-glob: 4.0.3 922 | semver: 7.5.0 923 | tsutils: 3.21.0(typescript@5.0.4) 924 | typescript: 5.0.4 925 | transitivePeerDependencies: 926 | - supports-color 927 | dev: true 928 | 929 | /@typescript-eslint/utils@5.59.2(eslint@8.40.0)(typescript@5.0.4): 930 | resolution: {integrity: sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ==} 931 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 932 | peerDependencies: 933 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 934 | dependencies: 935 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) 936 | '@types/json-schema': 7.0.11 937 | '@types/semver': 7.3.13 938 | '@typescript-eslint/scope-manager': 5.59.2 939 | '@typescript-eslint/types': 5.59.2 940 | '@typescript-eslint/typescript-estree': 5.59.2(typescript@5.0.4) 941 | eslint: 8.40.0 942 | eslint-scope: 5.1.1 943 | semver: 7.5.0 944 | transitivePeerDependencies: 945 | - supports-color 946 | - typescript 947 | dev: true 948 | 949 | /@typescript-eslint/visitor-keys@5.59.2: 950 | resolution: {integrity: sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig==} 951 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 952 | dependencies: 953 | '@typescript-eslint/types': 5.59.2 954 | eslint-visitor-keys: 3.4.1 955 | dev: true 956 | 957 | /@vitest/coverage-c8@0.31.0(vitest@0.31.0): 958 | resolution: {integrity: sha512-h72qN1D962AO7UefQVulm9JFP5ACS7OfhCdBHioXU8f7ohH/+NTZCgAqmgcfRNHHO/8wLFxx+93YVxhodkEJVA==} 959 | peerDependencies: 960 | vitest: '>=0.30.0 <1' 961 | dependencies: 962 | '@ampproject/remapping': 2.2.1 963 | c8: 7.13.0 964 | magic-string: 0.30.0 965 | picocolors: 1.0.0 966 | std-env: 3.3.3 967 | vitest: 0.31.0(jsdom@22.0.0)(sass@1.62.1) 968 | dev: true 969 | 970 | /@vitest/expect@0.31.0: 971 | resolution: {integrity: sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==} 972 | dependencies: 973 | '@vitest/spy': 0.31.0 974 | '@vitest/utils': 0.31.0 975 | chai: 4.3.7 976 | dev: true 977 | 978 | /@vitest/runner@0.31.0: 979 | resolution: {integrity: sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==} 980 | dependencies: 981 | '@vitest/utils': 0.31.0 982 | concordance: 5.0.4 983 | p-limit: 4.0.0 984 | pathe: 1.1.0 985 | dev: true 986 | 987 | /@vitest/snapshot@0.31.0: 988 | resolution: {integrity: sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==} 989 | dependencies: 990 | magic-string: 0.30.0 991 | pathe: 1.1.0 992 | pretty-format: 27.5.1 993 | dev: true 994 | 995 | /@vitest/spy@0.31.0: 996 | resolution: {integrity: sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==} 997 | dependencies: 998 | tinyspy: 2.1.0 999 | dev: true 1000 | 1001 | /@vitest/utils@0.31.0: 1002 | resolution: {integrity: sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==} 1003 | dependencies: 1004 | concordance: 5.0.4 1005 | loupe: 2.3.6 1006 | pretty-format: 27.5.1 1007 | dev: true 1008 | 1009 | /abab@2.0.6: 1010 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} 1011 | dev: true 1012 | 1013 | /acorn-jsx@5.3.2(acorn@8.8.2): 1014 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1015 | peerDependencies: 1016 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1017 | dependencies: 1018 | acorn: 8.8.2 1019 | dev: true 1020 | 1021 | /acorn-walk@8.2.0: 1022 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 1023 | engines: {node: '>=0.4.0'} 1024 | dev: true 1025 | 1026 | /acorn@8.8.2: 1027 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 1028 | engines: {node: '>=0.4.0'} 1029 | hasBin: true 1030 | dev: true 1031 | 1032 | /agent-base@6.0.2: 1033 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 1034 | engines: {node: '>= 6.0.0'} 1035 | dependencies: 1036 | debug: 4.3.4 1037 | transitivePeerDependencies: 1038 | - supports-color 1039 | dev: true 1040 | 1041 | /ajv@6.12.6: 1042 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1043 | dependencies: 1044 | fast-deep-equal: 3.1.3 1045 | fast-json-stable-stringify: 2.1.0 1046 | json-schema-traverse: 0.4.1 1047 | uri-js: 4.4.1 1048 | dev: true 1049 | 1050 | /ansi-regex@5.0.1: 1051 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1052 | engines: {node: '>=8'} 1053 | dev: true 1054 | 1055 | /ansi-styles@3.2.1: 1056 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1057 | engines: {node: '>=4'} 1058 | dependencies: 1059 | color-convert: 1.9.3 1060 | dev: true 1061 | 1062 | /ansi-styles@4.3.0: 1063 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1064 | engines: {node: '>=8'} 1065 | dependencies: 1066 | color-convert: 2.0.1 1067 | dev: true 1068 | 1069 | /ansi-styles@5.2.0: 1070 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1071 | engines: {node: '>=10'} 1072 | dev: true 1073 | 1074 | /anymatch@3.1.3: 1075 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1076 | engines: {node: '>= 8'} 1077 | dependencies: 1078 | normalize-path: 3.0.0 1079 | picomatch: 2.3.1 1080 | dev: true 1081 | 1082 | /argparse@2.0.1: 1083 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1084 | dev: true 1085 | 1086 | /array-buffer-byte-length@1.0.0: 1087 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 1088 | dependencies: 1089 | call-bind: 1.0.2 1090 | is-array-buffer: 3.0.2 1091 | dev: true 1092 | 1093 | /array-includes@3.1.6: 1094 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 1095 | engines: {node: '>= 0.4'} 1096 | dependencies: 1097 | call-bind: 1.0.2 1098 | define-properties: 1.2.0 1099 | es-abstract: 1.21.2 1100 | get-intrinsic: 1.2.0 1101 | is-string: 1.0.7 1102 | dev: true 1103 | 1104 | /array-union@2.1.0: 1105 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1106 | engines: {node: '>=8'} 1107 | dev: true 1108 | 1109 | /assertion-error@1.1.0: 1110 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 1111 | dev: true 1112 | 1113 | /asynckit@0.4.0: 1114 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1115 | dev: true 1116 | 1117 | /available-typed-arrays@1.0.5: 1118 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 1119 | engines: {node: '>= 0.4'} 1120 | dev: true 1121 | 1122 | /babel-plugin-jsx-dom-expressions@0.36.10(@babel/core@7.21.8): 1123 | resolution: {integrity: sha512-QA2k/14WGw+RgcGGnEuLWwnu4em6CGhjeXtjvgOYyFHYS2a+CzPeaVQHDOlfuiBcjq/3hWMspHMIMnPEOIzdBg==} 1124 | peerDependencies: 1125 | '@babel/core': ^7.20.12 1126 | dependencies: 1127 | '@babel/core': 7.21.8 1128 | '@babel/helper-module-imports': 7.18.6 1129 | '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) 1130 | '@babel/types': 7.21.5 1131 | html-entities: 2.3.3 1132 | validate-html-nesting: 1.2.2 1133 | dev: true 1134 | 1135 | /babel-preset-solid@1.7.4(@babel/core@7.21.8): 1136 | resolution: {integrity: sha512-0mbHNYkbOVYhH6L95VlHVkBEVQjOXSzUqLDiFxUcsg/tU4yTM/qx7FI8C+kmos9LHckQBSm3wtwoe1BZLNJR1w==} 1137 | peerDependencies: 1138 | '@babel/core': ^7.0.0 1139 | dependencies: 1140 | '@babel/core': 7.21.8 1141 | babel-plugin-jsx-dom-expressions: 0.36.10(@babel/core@7.21.8) 1142 | dev: true 1143 | 1144 | /balanced-match@1.0.2: 1145 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1146 | dev: true 1147 | 1148 | /binary-extensions@2.2.0: 1149 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 1150 | engines: {node: '>=8'} 1151 | dev: true 1152 | 1153 | /blueimp-md5@2.19.0: 1154 | resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} 1155 | dev: true 1156 | 1157 | /brace-expansion@1.1.11: 1158 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1159 | dependencies: 1160 | balanced-match: 1.0.2 1161 | concat-map: 0.0.1 1162 | dev: true 1163 | 1164 | /braces@3.0.2: 1165 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1166 | engines: {node: '>=8'} 1167 | dependencies: 1168 | fill-range: 7.0.1 1169 | dev: true 1170 | 1171 | /browserslist@4.21.5: 1172 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 1173 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1174 | hasBin: true 1175 | dependencies: 1176 | caniuse-lite: 1.0.30001482 1177 | electron-to-chromium: 1.4.385 1178 | node-releases: 2.0.10 1179 | update-browserslist-db: 1.0.11(browserslist@4.21.5) 1180 | dev: true 1181 | 1182 | /c8@7.13.0: 1183 | resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} 1184 | engines: {node: '>=10.12.0'} 1185 | hasBin: true 1186 | dependencies: 1187 | '@bcoe/v8-coverage': 0.2.3 1188 | '@istanbuljs/schema': 0.1.3 1189 | find-up: 5.0.0 1190 | foreground-child: 2.0.0 1191 | istanbul-lib-coverage: 3.2.0 1192 | istanbul-lib-report: 3.0.0 1193 | istanbul-reports: 3.1.5 1194 | rimraf: 3.0.2 1195 | test-exclude: 6.0.0 1196 | v8-to-istanbul: 9.1.0 1197 | yargs: 16.2.0 1198 | yargs-parser: 20.2.9 1199 | dev: true 1200 | 1201 | /cac@6.7.14: 1202 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 1203 | engines: {node: '>=8'} 1204 | dev: true 1205 | 1206 | /call-bind@1.0.2: 1207 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 1208 | dependencies: 1209 | function-bind: 1.1.1 1210 | get-intrinsic: 1.2.0 1211 | dev: true 1212 | 1213 | /callsites@3.1.0: 1214 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1215 | engines: {node: '>=6'} 1216 | dev: true 1217 | 1218 | /caniuse-lite@1.0.30001482: 1219 | resolution: {integrity: sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==} 1220 | dev: true 1221 | 1222 | /chai@4.3.7: 1223 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 1224 | engines: {node: '>=4'} 1225 | dependencies: 1226 | assertion-error: 1.1.0 1227 | check-error: 1.0.2 1228 | deep-eql: 4.1.3 1229 | get-func-name: 2.0.0 1230 | loupe: 2.3.6 1231 | pathval: 1.1.1 1232 | type-detect: 4.0.8 1233 | dev: true 1234 | 1235 | /chalk@2.4.2: 1236 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1237 | engines: {node: '>=4'} 1238 | dependencies: 1239 | ansi-styles: 3.2.1 1240 | escape-string-regexp: 1.0.5 1241 | supports-color: 5.5.0 1242 | dev: true 1243 | 1244 | /chalk@4.1.2: 1245 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1246 | engines: {node: '>=10'} 1247 | dependencies: 1248 | ansi-styles: 4.3.0 1249 | supports-color: 7.2.0 1250 | dev: true 1251 | 1252 | /check-error@1.0.2: 1253 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 1254 | dev: true 1255 | 1256 | /chokidar@3.5.3: 1257 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1258 | engines: {node: '>= 8.10.0'} 1259 | dependencies: 1260 | anymatch: 3.1.3 1261 | braces: 3.0.2 1262 | glob-parent: 5.1.2 1263 | is-binary-path: 2.1.0 1264 | is-glob: 4.0.3 1265 | normalize-path: 3.0.0 1266 | readdirp: 3.6.0 1267 | optionalDependencies: 1268 | fsevents: 2.3.2 1269 | dev: true 1270 | 1271 | /cliui@7.0.4: 1272 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1273 | dependencies: 1274 | string-width: 4.2.3 1275 | strip-ansi: 6.0.1 1276 | wrap-ansi: 7.0.0 1277 | dev: true 1278 | 1279 | /color-convert@1.9.3: 1280 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1281 | dependencies: 1282 | color-name: 1.1.3 1283 | dev: true 1284 | 1285 | /color-convert@2.0.1: 1286 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1287 | engines: {node: '>=7.0.0'} 1288 | dependencies: 1289 | color-name: 1.1.4 1290 | dev: true 1291 | 1292 | /color-name@1.1.3: 1293 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1294 | dev: true 1295 | 1296 | /color-name@1.1.4: 1297 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1298 | dev: true 1299 | 1300 | /combined-stream@1.0.8: 1301 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1302 | engines: {node: '>= 0.8'} 1303 | dependencies: 1304 | delayed-stream: 1.0.0 1305 | dev: true 1306 | 1307 | /concat-map@0.0.1: 1308 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1309 | dev: true 1310 | 1311 | /concordance@5.0.4: 1312 | resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} 1313 | engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} 1314 | dependencies: 1315 | date-time: 3.1.0 1316 | esutils: 2.0.3 1317 | fast-diff: 1.2.0 1318 | js-string-escape: 1.0.1 1319 | lodash: 4.17.21 1320 | md5-hex: 3.0.1 1321 | semver: 7.5.0 1322 | well-known-symbols: 2.0.0 1323 | dev: true 1324 | 1325 | /convert-source-map@1.9.0: 1326 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 1327 | dev: true 1328 | 1329 | /cross-spawn@7.0.3: 1330 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1331 | engines: {node: '>= 8'} 1332 | dependencies: 1333 | path-key: 3.1.1 1334 | shebang-command: 2.0.0 1335 | which: 2.0.2 1336 | dev: true 1337 | 1338 | /cssstyle@3.0.0: 1339 | resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} 1340 | engines: {node: '>=14'} 1341 | dependencies: 1342 | rrweb-cssom: 0.6.0 1343 | dev: true 1344 | 1345 | /csstype@3.1.2: 1346 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 1347 | 1348 | /data-urls@4.0.0: 1349 | resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} 1350 | engines: {node: '>=14'} 1351 | dependencies: 1352 | abab: 2.0.6 1353 | whatwg-mimetype: 3.0.0 1354 | whatwg-url: 12.0.1 1355 | dev: true 1356 | 1357 | /date-time@3.1.0: 1358 | resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} 1359 | engines: {node: '>=6'} 1360 | dependencies: 1361 | time-zone: 1.0.0 1362 | dev: true 1363 | 1364 | /debug@4.3.4: 1365 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1366 | engines: {node: '>=6.0'} 1367 | peerDependencies: 1368 | supports-color: '*' 1369 | peerDependenciesMeta: 1370 | supports-color: 1371 | optional: true 1372 | dependencies: 1373 | ms: 2.1.2 1374 | dev: true 1375 | 1376 | /decimal.js@10.4.3: 1377 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 1378 | dev: true 1379 | 1380 | /deep-eql@4.1.3: 1381 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1382 | engines: {node: '>=6'} 1383 | dependencies: 1384 | type-detect: 4.0.8 1385 | dev: true 1386 | 1387 | /deep-is@0.1.4: 1388 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1389 | dev: true 1390 | 1391 | /define-properties@1.2.0: 1392 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 1393 | engines: {node: '>= 0.4'} 1394 | dependencies: 1395 | has-property-descriptors: 1.0.0 1396 | object-keys: 1.1.1 1397 | dev: true 1398 | 1399 | /delayed-stream@1.0.0: 1400 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1401 | engines: {node: '>=0.4.0'} 1402 | dev: true 1403 | 1404 | /dir-glob@3.0.1: 1405 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1406 | engines: {node: '>=8'} 1407 | dependencies: 1408 | path-type: 4.0.0 1409 | dev: true 1410 | 1411 | /doctrine@3.0.0: 1412 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1413 | engines: {node: '>=6.0.0'} 1414 | dependencies: 1415 | esutils: 2.0.3 1416 | dev: true 1417 | 1418 | /domexception@4.0.0: 1419 | resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} 1420 | engines: {node: '>=12'} 1421 | dependencies: 1422 | webidl-conversions: 7.0.0 1423 | dev: true 1424 | 1425 | /electron-to-chromium@1.4.385: 1426 | resolution: {integrity: sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg==} 1427 | dev: true 1428 | 1429 | /emoji-regex@8.0.0: 1430 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1431 | dev: true 1432 | 1433 | /entities@4.5.0: 1434 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1435 | engines: {node: '>=0.12'} 1436 | dev: true 1437 | 1438 | /es-abstract@1.21.2: 1439 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 1440 | engines: {node: '>= 0.4'} 1441 | dependencies: 1442 | array-buffer-byte-length: 1.0.0 1443 | available-typed-arrays: 1.0.5 1444 | call-bind: 1.0.2 1445 | es-set-tostringtag: 2.0.1 1446 | es-to-primitive: 1.2.1 1447 | function.prototype.name: 1.1.5 1448 | get-intrinsic: 1.2.0 1449 | get-symbol-description: 1.0.0 1450 | globalthis: 1.0.3 1451 | gopd: 1.0.1 1452 | has: 1.0.3 1453 | has-property-descriptors: 1.0.0 1454 | has-proto: 1.0.1 1455 | has-symbols: 1.0.3 1456 | internal-slot: 1.0.5 1457 | is-array-buffer: 3.0.2 1458 | is-callable: 1.2.7 1459 | is-negative-zero: 2.0.2 1460 | is-regex: 1.1.4 1461 | is-shared-array-buffer: 1.0.2 1462 | is-string: 1.0.7 1463 | is-typed-array: 1.1.10 1464 | is-weakref: 1.0.2 1465 | object-inspect: 1.12.3 1466 | object-keys: 1.1.1 1467 | object.assign: 4.1.4 1468 | regexp.prototype.flags: 1.5.0 1469 | safe-regex-test: 1.0.0 1470 | string.prototype.trim: 1.2.7 1471 | string.prototype.trimend: 1.0.6 1472 | string.prototype.trimstart: 1.0.6 1473 | typed-array-length: 1.0.4 1474 | unbox-primitive: 1.0.2 1475 | which-typed-array: 1.1.9 1476 | dev: true 1477 | 1478 | /es-set-tostringtag@2.0.1: 1479 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1480 | engines: {node: '>= 0.4'} 1481 | dependencies: 1482 | get-intrinsic: 1.2.0 1483 | has: 1.0.3 1484 | has-tostringtag: 1.0.0 1485 | dev: true 1486 | 1487 | /es-to-primitive@1.2.1: 1488 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1489 | engines: {node: '>= 0.4'} 1490 | dependencies: 1491 | is-callable: 1.2.7 1492 | is-date-object: 1.0.5 1493 | is-symbol: 1.0.4 1494 | dev: true 1495 | 1496 | /esbuild@0.17.18: 1497 | resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==} 1498 | engines: {node: '>=12'} 1499 | hasBin: true 1500 | requiresBuild: true 1501 | optionalDependencies: 1502 | '@esbuild/android-arm': 0.17.18 1503 | '@esbuild/android-arm64': 0.17.18 1504 | '@esbuild/android-x64': 0.17.18 1505 | '@esbuild/darwin-arm64': 0.17.18 1506 | '@esbuild/darwin-x64': 0.17.18 1507 | '@esbuild/freebsd-arm64': 0.17.18 1508 | '@esbuild/freebsd-x64': 0.17.18 1509 | '@esbuild/linux-arm': 0.17.18 1510 | '@esbuild/linux-arm64': 0.17.18 1511 | '@esbuild/linux-ia32': 0.17.18 1512 | '@esbuild/linux-loong64': 0.17.18 1513 | '@esbuild/linux-mips64el': 0.17.18 1514 | '@esbuild/linux-ppc64': 0.17.18 1515 | '@esbuild/linux-riscv64': 0.17.18 1516 | '@esbuild/linux-s390x': 0.17.18 1517 | '@esbuild/linux-x64': 0.17.18 1518 | '@esbuild/netbsd-x64': 0.17.18 1519 | '@esbuild/openbsd-x64': 0.17.18 1520 | '@esbuild/sunos-x64': 0.17.18 1521 | '@esbuild/win32-arm64': 0.17.18 1522 | '@esbuild/win32-ia32': 0.17.18 1523 | '@esbuild/win32-x64': 0.17.18 1524 | dev: true 1525 | 1526 | /escalade@3.1.1: 1527 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1528 | engines: {node: '>=6'} 1529 | dev: true 1530 | 1531 | /escape-string-regexp@1.0.5: 1532 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1533 | engines: {node: '>=0.8.0'} 1534 | dev: true 1535 | 1536 | /escape-string-regexp@4.0.0: 1537 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1538 | engines: {node: '>=10'} 1539 | dev: true 1540 | 1541 | /eslint-plugin-solid@0.12.1(eslint@8.40.0)(typescript@5.0.4): 1542 | resolution: {integrity: sha512-fM0sEg9PcS1mcNbWklwc+W/lOv1/XyEwXf53HmFFy4GOA8E3u41h8JW+hc+Vv1m3kh01umKoTalOTET08zKdAQ==} 1543 | engines: {node: '>=12.0.0'} 1544 | peerDependencies: 1545 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1546 | dependencies: 1547 | '@typescript-eslint/utils': 5.59.2(eslint@8.40.0)(typescript@5.0.4) 1548 | eslint: 8.40.0 1549 | is-html: 2.0.0 1550 | jsx-ast-utils: 3.3.3 1551 | kebab-case: 1.0.2 1552 | known-css-properties: 0.24.0 1553 | style-to-object: 0.3.0 1554 | transitivePeerDependencies: 1555 | - supports-color 1556 | - typescript 1557 | dev: true 1558 | 1559 | /eslint-scope@5.1.1: 1560 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1561 | engines: {node: '>=8.0.0'} 1562 | dependencies: 1563 | esrecurse: 4.3.0 1564 | estraverse: 4.3.0 1565 | dev: true 1566 | 1567 | /eslint-scope@7.2.0: 1568 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1569 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1570 | dependencies: 1571 | esrecurse: 4.3.0 1572 | estraverse: 5.3.0 1573 | dev: true 1574 | 1575 | /eslint-visitor-keys@3.4.1: 1576 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 1577 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1578 | dev: true 1579 | 1580 | /eslint@8.40.0: 1581 | resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==} 1582 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1583 | hasBin: true 1584 | dependencies: 1585 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) 1586 | '@eslint-community/regexpp': 4.5.1 1587 | '@eslint/eslintrc': 2.0.3 1588 | '@eslint/js': 8.40.0 1589 | '@humanwhocodes/config-array': 0.11.8 1590 | '@humanwhocodes/module-importer': 1.0.1 1591 | '@nodelib/fs.walk': 1.2.8 1592 | ajv: 6.12.6 1593 | chalk: 4.1.2 1594 | cross-spawn: 7.0.3 1595 | debug: 4.3.4 1596 | doctrine: 3.0.0 1597 | escape-string-regexp: 4.0.0 1598 | eslint-scope: 7.2.0 1599 | eslint-visitor-keys: 3.4.1 1600 | espree: 9.5.2 1601 | esquery: 1.5.0 1602 | esutils: 2.0.3 1603 | fast-deep-equal: 3.1.3 1604 | file-entry-cache: 6.0.1 1605 | find-up: 5.0.0 1606 | glob-parent: 6.0.2 1607 | globals: 13.20.0 1608 | grapheme-splitter: 1.0.4 1609 | ignore: 5.2.4 1610 | import-fresh: 3.3.0 1611 | imurmurhash: 0.1.4 1612 | is-glob: 4.0.3 1613 | is-path-inside: 3.0.3 1614 | js-sdsl: 4.4.0 1615 | js-yaml: 4.1.0 1616 | json-stable-stringify-without-jsonify: 1.0.1 1617 | levn: 0.4.1 1618 | lodash.merge: 4.6.2 1619 | minimatch: 3.1.2 1620 | natural-compare: 1.4.0 1621 | optionator: 0.9.1 1622 | strip-ansi: 6.0.1 1623 | strip-json-comments: 3.1.1 1624 | text-table: 0.2.0 1625 | transitivePeerDependencies: 1626 | - supports-color 1627 | dev: true 1628 | 1629 | /espree@9.5.2: 1630 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 1631 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1632 | dependencies: 1633 | acorn: 8.8.2 1634 | acorn-jsx: 5.3.2(acorn@8.8.2) 1635 | eslint-visitor-keys: 3.4.1 1636 | dev: true 1637 | 1638 | /esquery@1.5.0: 1639 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1640 | engines: {node: '>=0.10'} 1641 | dependencies: 1642 | estraverse: 5.3.0 1643 | dev: true 1644 | 1645 | /esrecurse@4.3.0: 1646 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1647 | engines: {node: '>=4.0'} 1648 | dependencies: 1649 | estraverse: 5.3.0 1650 | dev: true 1651 | 1652 | /estraverse@4.3.0: 1653 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1654 | engines: {node: '>=4.0'} 1655 | dev: true 1656 | 1657 | /estraverse@5.3.0: 1658 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1659 | engines: {node: '>=4.0'} 1660 | dev: true 1661 | 1662 | /esutils@2.0.3: 1663 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1664 | engines: {node: '>=0.10.0'} 1665 | dev: true 1666 | 1667 | /fast-deep-equal@3.1.3: 1668 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1669 | dev: true 1670 | 1671 | /fast-diff@1.2.0: 1672 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1673 | dev: true 1674 | 1675 | /fast-glob@3.2.12: 1676 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1677 | engines: {node: '>=8.6.0'} 1678 | dependencies: 1679 | '@nodelib/fs.stat': 2.0.5 1680 | '@nodelib/fs.walk': 1.2.8 1681 | glob-parent: 5.1.2 1682 | merge2: 1.4.1 1683 | micromatch: 4.0.5 1684 | dev: true 1685 | 1686 | /fast-json-stable-stringify@2.1.0: 1687 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1688 | dev: true 1689 | 1690 | /fast-levenshtein@2.0.6: 1691 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1692 | dev: true 1693 | 1694 | /fastq@1.15.0: 1695 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1696 | dependencies: 1697 | reusify: 1.0.4 1698 | dev: true 1699 | 1700 | /file-entry-cache@6.0.1: 1701 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1702 | engines: {node: ^10.12.0 || >=12.0.0} 1703 | dependencies: 1704 | flat-cache: 3.0.4 1705 | dev: true 1706 | 1707 | /fill-range@7.0.1: 1708 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1709 | engines: {node: '>=8'} 1710 | dependencies: 1711 | to-regex-range: 5.0.1 1712 | dev: true 1713 | 1714 | /find-up@5.0.0: 1715 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1716 | engines: {node: '>=10'} 1717 | dependencies: 1718 | locate-path: 6.0.0 1719 | path-exists: 4.0.0 1720 | dev: true 1721 | 1722 | /flat-cache@3.0.4: 1723 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1724 | engines: {node: ^10.12.0 || >=12.0.0} 1725 | dependencies: 1726 | flatted: 3.2.7 1727 | rimraf: 3.0.2 1728 | dev: true 1729 | 1730 | /flatted@3.2.7: 1731 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1732 | dev: true 1733 | 1734 | /for-each@0.3.3: 1735 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1736 | dependencies: 1737 | is-callable: 1.2.7 1738 | dev: true 1739 | 1740 | /foreground-child@2.0.0: 1741 | resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} 1742 | engines: {node: '>=8.0.0'} 1743 | dependencies: 1744 | cross-spawn: 7.0.3 1745 | signal-exit: 3.0.7 1746 | dev: true 1747 | 1748 | /form-data@4.0.0: 1749 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1750 | engines: {node: '>= 6'} 1751 | dependencies: 1752 | asynckit: 0.4.0 1753 | combined-stream: 1.0.8 1754 | mime-types: 2.1.35 1755 | dev: true 1756 | 1757 | /fs.realpath@1.0.0: 1758 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1759 | dev: true 1760 | 1761 | /fsevents@2.3.2: 1762 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1763 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1764 | os: [darwin] 1765 | requiresBuild: true 1766 | dev: true 1767 | optional: true 1768 | 1769 | /function-bind@1.1.1: 1770 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1771 | dev: true 1772 | 1773 | /function.prototype.name@1.1.5: 1774 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1775 | engines: {node: '>= 0.4'} 1776 | dependencies: 1777 | call-bind: 1.0.2 1778 | define-properties: 1.2.0 1779 | es-abstract: 1.21.2 1780 | functions-have-names: 1.2.3 1781 | dev: true 1782 | 1783 | /functions-have-names@1.2.3: 1784 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1785 | dev: true 1786 | 1787 | /gensync@1.0.0-beta.2: 1788 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1789 | engines: {node: '>=6.9.0'} 1790 | dev: true 1791 | 1792 | /get-caller-file@2.0.5: 1793 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1794 | engines: {node: 6.* || 8.* || >= 10.*} 1795 | dev: true 1796 | 1797 | /get-func-name@2.0.0: 1798 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 1799 | dev: true 1800 | 1801 | /get-intrinsic@1.2.0: 1802 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} 1803 | dependencies: 1804 | function-bind: 1.1.1 1805 | has: 1.0.3 1806 | has-symbols: 1.0.3 1807 | dev: true 1808 | 1809 | /get-symbol-description@1.0.0: 1810 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1811 | engines: {node: '>= 0.4'} 1812 | dependencies: 1813 | call-bind: 1.0.2 1814 | get-intrinsic: 1.2.0 1815 | dev: true 1816 | 1817 | /glob-parent@5.1.2: 1818 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1819 | engines: {node: '>= 6'} 1820 | dependencies: 1821 | is-glob: 4.0.3 1822 | dev: true 1823 | 1824 | /glob-parent@6.0.2: 1825 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1826 | engines: {node: '>=10.13.0'} 1827 | dependencies: 1828 | is-glob: 4.0.3 1829 | dev: true 1830 | 1831 | /glob@7.2.3: 1832 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1833 | dependencies: 1834 | fs.realpath: 1.0.0 1835 | inflight: 1.0.6 1836 | inherits: 2.0.4 1837 | minimatch: 3.1.2 1838 | once: 1.4.0 1839 | path-is-absolute: 1.0.1 1840 | dev: true 1841 | 1842 | /globals@11.12.0: 1843 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1844 | engines: {node: '>=4'} 1845 | dev: true 1846 | 1847 | /globals@13.20.0: 1848 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1849 | engines: {node: '>=8'} 1850 | dependencies: 1851 | type-fest: 0.20.2 1852 | dev: true 1853 | 1854 | /globalthis@1.0.3: 1855 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1856 | engines: {node: '>= 0.4'} 1857 | dependencies: 1858 | define-properties: 1.2.0 1859 | dev: true 1860 | 1861 | /globby@11.1.0: 1862 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1863 | engines: {node: '>=10'} 1864 | dependencies: 1865 | array-union: 2.1.0 1866 | dir-glob: 3.0.1 1867 | fast-glob: 3.2.12 1868 | ignore: 5.2.4 1869 | merge2: 1.4.1 1870 | slash: 3.0.0 1871 | dev: true 1872 | 1873 | /gopd@1.0.1: 1874 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1875 | dependencies: 1876 | get-intrinsic: 1.2.0 1877 | dev: true 1878 | 1879 | /grapheme-splitter@1.0.4: 1880 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1881 | dev: true 1882 | 1883 | /has-bigints@1.0.2: 1884 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1885 | dev: true 1886 | 1887 | /has-flag@3.0.0: 1888 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1889 | engines: {node: '>=4'} 1890 | dev: true 1891 | 1892 | /has-flag@4.0.0: 1893 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1894 | engines: {node: '>=8'} 1895 | dev: true 1896 | 1897 | /has-property-descriptors@1.0.0: 1898 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1899 | dependencies: 1900 | get-intrinsic: 1.2.0 1901 | dev: true 1902 | 1903 | /has-proto@1.0.1: 1904 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1905 | engines: {node: '>= 0.4'} 1906 | dev: true 1907 | 1908 | /has-symbols@1.0.3: 1909 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1910 | engines: {node: '>= 0.4'} 1911 | dev: true 1912 | 1913 | /has-tostringtag@1.0.0: 1914 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1915 | engines: {node: '>= 0.4'} 1916 | dependencies: 1917 | has-symbols: 1.0.3 1918 | dev: true 1919 | 1920 | /has@1.0.3: 1921 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1922 | engines: {node: '>= 0.4.0'} 1923 | dependencies: 1924 | function-bind: 1.1.1 1925 | dev: true 1926 | 1927 | /html-encoding-sniffer@3.0.0: 1928 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} 1929 | engines: {node: '>=12'} 1930 | dependencies: 1931 | whatwg-encoding: 2.0.0 1932 | dev: true 1933 | 1934 | /html-entities@2.3.3: 1935 | resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 1936 | dev: true 1937 | 1938 | /html-escaper@2.0.2: 1939 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 1940 | dev: true 1941 | 1942 | /html-tags@3.3.1: 1943 | resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} 1944 | engines: {node: '>=8'} 1945 | dev: true 1946 | 1947 | /http-proxy-agent@5.0.0: 1948 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} 1949 | engines: {node: '>= 6'} 1950 | dependencies: 1951 | '@tootallnate/once': 2.0.0 1952 | agent-base: 6.0.2 1953 | debug: 4.3.4 1954 | transitivePeerDependencies: 1955 | - supports-color 1956 | dev: true 1957 | 1958 | /https-proxy-agent@5.0.1: 1959 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1960 | engines: {node: '>= 6'} 1961 | dependencies: 1962 | agent-base: 6.0.2 1963 | debug: 4.3.4 1964 | transitivePeerDependencies: 1965 | - supports-color 1966 | dev: true 1967 | 1968 | /husky@8.0.3: 1969 | resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} 1970 | engines: {node: '>=14'} 1971 | hasBin: true 1972 | dev: true 1973 | 1974 | /iconv-lite@0.6.3: 1975 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1976 | engines: {node: '>=0.10.0'} 1977 | dependencies: 1978 | safer-buffer: 2.1.2 1979 | dev: true 1980 | 1981 | /ignore@5.2.4: 1982 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1983 | engines: {node: '>= 4'} 1984 | dev: true 1985 | 1986 | /immutable@4.3.0: 1987 | resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} 1988 | dev: true 1989 | 1990 | /import-fresh@3.3.0: 1991 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1992 | engines: {node: '>=6'} 1993 | dependencies: 1994 | parent-module: 1.0.1 1995 | resolve-from: 4.0.0 1996 | dev: true 1997 | 1998 | /imurmurhash@0.1.4: 1999 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2000 | engines: {node: '>=0.8.19'} 2001 | dev: true 2002 | 2003 | /inflight@1.0.6: 2004 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2005 | dependencies: 2006 | once: 1.4.0 2007 | wrappy: 1.0.2 2008 | dev: true 2009 | 2010 | /inherits@2.0.4: 2011 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2012 | dev: true 2013 | 2014 | /inline-style-parser@0.1.1: 2015 | resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} 2016 | dev: true 2017 | 2018 | /internal-slot@1.0.5: 2019 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 2020 | engines: {node: '>= 0.4'} 2021 | dependencies: 2022 | get-intrinsic: 1.2.0 2023 | has: 1.0.3 2024 | side-channel: 1.0.4 2025 | dev: true 2026 | 2027 | /is-array-buffer@3.0.2: 2028 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 2029 | dependencies: 2030 | call-bind: 1.0.2 2031 | get-intrinsic: 1.2.0 2032 | is-typed-array: 1.1.10 2033 | dev: true 2034 | 2035 | /is-bigint@1.0.4: 2036 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2037 | dependencies: 2038 | has-bigints: 1.0.2 2039 | dev: true 2040 | 2041 | /is-binary-path@2.1.0: 2042 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2043 | engines: {node: '>=8'} 2044 | dependencies: 2045 | binary-extensions: 2.2.0 2046 | dev: true 2047 | 2048 | /is-boolean-object@1.1.2: 2049 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2050 | engines: {node: '>= 0.4'} 2051 | dependencies: 2052 | call-bind: 1.0.2 2053 | has-tostringtag: 1.0.0 2054 | dev: true 2055 | 2056 | /is-callable@1.2.7: 2057 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 2058 | engines: {node: '>= 0.4'} 2059 | dev: true 2060 | 2061 | /is-date-object@1.0.5: 2062 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2063 | engines: {node: '>= 0.4'} 2064 | dependencies: 2065 | has-tostringtag: 1.0.0 2066 | dev: true 2067 | 2068 | /is-extglob@2.1.1: 2069 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2070 | engines: {node: '>=0.10.0'} 2071 | dev: true 2072 | 2073 | /is-fullwidth-code-point@3.0.0: 2074 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2075 | engines: {node: '>=8'} 2076 | dev: true 2077 | 2078 | /is-glob@4.0.3: 2079 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2080 | engines: {node: '>=0.10.0'} 2081 | dependencies: 2082 | is-extglob: 2.1.1 2083 | dev: true 2084 | 2085 | /is-html@2.0.0: 2086 | resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==} 2087 | engines: {node: '>=8'} 2088 | dependencies: 2089 | html-tags: 3.3.1 2090 | dev: true 2091 | 2092 | /is-negative-zero@2.0.2: 2093 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 2094 | engines: {node: '>= 0.4'} 2095 | dev: true 2096 | 2097 | /is-number-object@1.0.7: 2098 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 2099 | engines: {node: '>= 0.4'} 2100 | dependencies: 2101 | has-tostringtag: 1.0.0 2102 | dev: true 2103 | 2104 | /is-number@7.0.0: 2105 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2106 | engines: {node: '>=0.12.0'} 2107 | dev: true 2108 | 2109 | /is-path-inside@3.0.3: 2110 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2111 | engines: {node: '>=8'} 2112 | dev: true 2113 | 2114 | /is-potential-custom-element-name@1.0.1: 2115 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 2116 | dev: true 2117 | 2118 | /is-regex@1.1.4: 2119 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2120 | engines: {node: '>= 0.4'} 2121 | dependencies: 2122 | call-bind: 1.0.2 2123 | has-tostringtag: 1.0.0 2124 | dev: true 2125 | 2126 | /is-shared-array-buffer@1.0.2: 2127 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 2128 | dependencies: 2129 | call-bind: 1.0.2 2130 | dev: true 2131 | 2132 | /is-string@1.0.7: 2133 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2134 | engines: {node: '>= 0.4'} 2135 | dependencies: 2136 | has-tostringtag: 1.0.0 2137 | dev: true 2138 | 2139 | /is-symbol@1.0.4: 2140 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2141 | engines: {node: '>= 0.4'} 2142 | dependencies: 2143 | has-symbols: 1.0.3 2144 | dev: true 2145 | 2146 | /is-typed-array@1.1.10: 2147 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 2148 | engines: {node: '>= 0.4'} 2149 | dependencies: 2150 | available-typed-arrays: 1.0.5 2151 | call-bind: 1.0.2 2152 | for-each: 0.3.3 2153 | gopd: 1.0.1 2154 | has-tostringtag: 1.0.0 2155 | dev: true 2156 | 2157 | /is-weakref@1.0.2: 2158 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 2159 | dependencies: 2160 | call-bind: 1.0.2 2161 | dev: true 2162 | 2163 | /is-what@4.1.8: 2164 | resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} 2165 | engines: {node: '>=12.13'} 2166 | dev: true 2167 | 2168 | /isexe@2.0.0: 2169 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2170 | dev: true 2171 | 2172 | /istanbul-lib-coverage@3.2.0: 2173 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} 2174 | engines: {node: '>=8'} 2175 | dev: true 2176 | 2177 | /istanbul-lib-report@3.0.0: 2178 | resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} 2179 | engines: {node: '>=8'} 2180 | dependencies: 2181 | istanbul-lib-coverage: 3.2.0 2182 | make-dir: 3.1.0 2183 | supports-color: 7.2.0 2184 | dev: true 2185 | 2186 | /istanbul-reports@3.1.5: 2187 | resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} 2188 | engines: {node: '>=8'} 2189 | dependencies: 2190 | html-escaper: 2.0.2 2191 | istanbul-lib-report: 3.0.0 2192 | dev: true 2193 | 2194 | /js-sdsl@4.4.0: 2195 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} 2196 | dev: true 2197 | 2198 | /js-string-escape@1.0.1: 2199 | resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} 2200 | engines: {node: '>= 0.8'} 2201 | dev: true 2202 | 2203 | /js-tokens@4.0.0: 2204 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2205 | dev: true 2206 | 2207 | /js-yaml@4.1.0: 2208 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2209 | hasBin: true 2210 | dependencies: 2211 | argparse: 2.0.1 2212 | dev: true 2213 | 2214 | /jsdom@22.0.0: 2215 | resolution: {integrity: sha512-p5ZTEb5h+O+iU02t0GfEjAnkdYPrQSkfuTSMkMYyIoMvUNEHsbG0bHHbfXIcfTqD2UfvjQX7mmgiFsyRwGscVw==} 2216 | engines: {node: '>=16'} 2217 | peerDependencies: 2218 | canvas: ^2.5.0 2219 | peerDependenciesMeta: 2220 | canvas: 2221 | optional: true 2222 | dependencies: 2223 | abab: 2.0.6 2224 | cssstyle: 3.0.0 2225 | data-urls: 4.0.0 2226 | decimal.js: 10.4.3 2227 | domexception: 4.0.0 2228 | form-data: 4.0.0 2229 | html-encoding-sniffer: 3.0.0 2230 | http-proxy-agent: 5.0.0 2231 | https-proxy-agent: 5.0.1 2232 | is-potential-custom-element-name: 1.0.1 2233 | nwsapi: 2.2.4 2234 | parse5: 7.1.2 2235 | rrweb-cssom: 0.6.0 2236 | saxes: 6.0.0 2237 | symbol-tree: 3.2.4 2238 | tough-cookie: 4.1.2 2239 | w3c-xmlserializer: 4.0.0 2240 | webidl-conversions: 7.0.0 2241 | whatwg-encoding: 2.0.0 2242 | whatwg-mimetype: 3.0.0 2243 | whatwg-url: 12.0.1 2244 | ws: 8.13.0 2245 | xml-name-validator: 4.0.0 2246 | transitivePeerDependencies: 2247 | - bufferutil 2248 | - supports-color 2249 | - utf-8-validate 2250 | dev: true 2251 | 2252 | /jsesc@2.5.2: 2253 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2254 | engines: {node: '>=4'} 2255 | hasBin: true 2256 | dev: true 2257 | 2258 | /json-schema-traverse@0.4.1: 2259 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2260 | dev: true 2261 | 2262 | /json-stable-stringify-without-jsonify@1.0.1: 2263 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2264 | dev: true 2265 | 2266 | /json5@2.2.3: 2267 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 2268 | engines: {node: '>=6'} 2269 | hasBin: true 2270 | dev: true 2271 | 2272 | /jsonc-parser@3.2.0: 2273 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 2274 | dev: true 2275 | 2276 | /jsx-ast-utils@3.3.3: 2277 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} 2278 | engines: {node: '>=4.0'} 2279 | dependencies: 2280 | array-includes: 3.1.6 2281 | object.assign: 4.1.4 2282 | dev: true 2283 | 2284 | /kebab-case@1.0.2: 2285 | resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} 2286 | dev: true 2287 | 2288 | /known-css-properties@0.24.0: 2289 | resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==} 2290 | dev: true 2291 | 2292 | /levn@0.4.1: 2293 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2294 | engines: {node: '>= 0.8.0'} 2295 | dependencies: 2296 | prelude-ls: 1.2.1 2297 | type-check: 0.4.0 2298 | dev: true 2299 | 2300 | /local-pkg@0.4.3: 2301 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} 2302 | engines: {node: '>=14'} 2303 | dev: true 2304 | 2305 | /locate-path@6.0.0: 2306 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2307 | engines: {node: '>=10'} 2308 | dependencies: 2309 | p-locate: 5.0.0 2310 | dev: true 2311 | 2312 | /lodash.merge@4.6.2: 2313 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2314 | dev: true 2315 | 2316 | /lodash@4.17.21: 2317 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2318 | dev: true 2319 | 2320 | /loupe@2.3.6: 2321 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 2322 | dependencies: 2323 | get-func-name: 2.0.0 2324 | dev: true 2325 | 2326 | /lru-cache@5.1.1: 2327 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 2328 | dependencies: 2329 | yallist: 3.1.1 2330 | dev: true 2331 | 2332 | /lru-cache@6.0.0: 2333 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2334 | engines: {node: '>=10'} 2335 | dependencies: 2336 | yallist: 4.0.0 2337 | dev: true 2338 | 2339 | /magic-string@0.30.0: 2340 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 2341 | engines: {node: '>=12'} 2342 | dependencies: 2343 | '@jridgewell/sourcemap-codec': 1.4.15 2344 | dev: true 2345 | 2346 | /make-dir@3.1.0: 2347 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 2348 | engines: {node: '>=8'} 2349 | dependencies: 2350 | semver: 6.3.0 2351 | dev: true 2352 | 2353 | /md5-hex@3.0.1: 2354 | resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} 2355 | engines: {node: '>=8'} 2356 | dependencies: 2357 | blueimp-md5: 2.19.0 2358 | dev: true 2359 | 2360 | /merge-anything@5.1.5: 2361 | resolution: {integrity: sha512-9lquMsJxgaef2BXYUy8VnqHmuLYaEiGd7SULqOTuDFA9Lw6g6Hmdsblc6+yqshdJOQKkn9I106+3D5mnQMstvg==} 2362 | engines: {node: '>=12.13'} 2363 | dependencies: 2364 | is-what: 4.1.8 2365 | dev: true 2366 | 2367 | /merge2@1.4.1: 2368 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2369 | engines: {node: '>= 8'} 2370 | dev: true 2371 | 2372 | /micromatch@4.0.5: 2373 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2374 | engines: {node: '>=8.6'} 2375 | dependencies: 2376 | braces: 3.0.2 2377 | picomatch: 2.3.1 2378 | dev: true 2379 | 2380 | /mime-db@1.52.0: 2381 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2382 | engines: {node: '>= 0.6'} 2383 | dev: true 2384 | 2385 | /mime-types@2.1.35: 2386 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2387 | engines: {node: '>= 0.6'} 2388 | dependencies: 2389 | mime-db: 1.52.0 2390 | dev: true 2391 | 2392 | /minimatch@3.1.2: 2393 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2394 | dependencies: 2395 | brace-expansion: 1.1.11 2396 | dev: true 2397 | 2398 | /mlly@1.2.0: 2399 | resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==} 2400 | dependencies: 2401 | acorn: 8.8.2 2402 | pathe: 1.1.0 2403 | pkg-types: 1.0.3 2404 | ufo: 1.1.2 2405 | dev: true 2406 | 2407 | /ms@2.1.2: 2408 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2409 | dev: true 2410 | 2411 | /nanoid@3.3.6: 2412 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2413 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2414 | hasBin: true 2415 | dev: true 2416 | 2417 | /natural-compare-lite@1.4.0: 2418 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 2419 | dev: true 2420 | 2421 | /natural-compare@1.4.0: 2422 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2423 | dev: true 2424 | 2425 | /node-releases@2.0.10: 2426 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 2427 | dev: true 2428 | 2429 | /normalize-path@3.0.0: 2430 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2431 | engines: {node: '>=0.10.0'} 2432 | dev: true 2433 | 2434 | /nwsapi@2.2.4: 2435 | resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} 2436 | dev: true 2437 | 2438 | /object-inspect@1.12.3: 2439 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2440 | dev: true 2441 | 2442 | /object-keys@1.1.1: 2443 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2444 | engines: {node: '>= 0.4'} 2445 | dev: true 2446 | 2447 | /object.assign@4.1.4: 2448 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2449 | engines: {node: '>= 0.4'} 2450 | dependencies: 2451 | call-bind: 1.0.2 2452 | define-properties: 1.2.0 2453 | has-symbols: 1.0.3 2454 | object-keys: 1.1.1 2455 | dev: true 2456 | 2457 | /once@1.4.0: 2458 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2459 | dependencies: 2460 | wrappy: 1.0.2 2461 | dev: true 2462 | 2463 | /optionator@0.9.1: 2464 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 2465 | engines: {node: '>= 0.8.0'} 2466 | dependencies: 2467 | deep-is: 0.1.4 2468 | fast-levenshtein: 2.0.6 2469 | levn: 0.4.1 2470 | prelude-ls: 1.2.1 2471 | type-check: 0.4.0 2472 | word-wrap: 1.2.3 2473 | dev: true 2474 | 2475 | /p-limit@3.1.0: 2476 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2477 | engines: {node: '>=10'} 2478 | dependencies: 2479 | yocto-queue: 0.1.0 2480 | dev: true 2481 | 2482 | /p-limit@4.0.0: 2483 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 2484 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2485 | dependencies: 2486 | yocto-queue: 1.0.0 2487 | dev: true 2488 | 2489 | /p-locate@5.0.0: 2490 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2491 | engines: {node: '>=10'} 2492 | dependencies: 2493 | p-limit: 3.1.0 2494 | dev: true 2495 | 2496 | /parent-module@1.0.1: 2497 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2498 | engines: {node: '>=6'} 2499 | dependencies: 2500 | callsites: 3.1.0 2501 | dev: true 2502 | 2503 | /parse5@7.1.2: 2504 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} 2505 | dependencies: 2506 | entities: 4.5.0 2507 | dev: true 2508 | 2509 | /path-exists@4.0.0: 2510 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2511 | engines: {node: '>=8'} 2512 | dev: true 2513 | 2514 | /path-is-absolute@1.0.1: 2515 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2516 | engines: {node: '>=0.10.0'} 2517 | dev: true 2518 | 2519 | /path-key@3.1.1: 2520 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2521 | engines: {node: '>=8'} 2522 | dev: true 2523 | 2524 | /path-type@4.0.0: 2525 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2526 | engines: {node: '>=8'} 2527 | dev: true 2528 | 2529 | /pathe@1.1.0: 2530 | resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} 2531 | dev: true 2532 | 2533 | /pathval@1.1.1: 2534 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2535 | dev: true 2536 | 2537 | /picocolors@1.0.0: 2538 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2539 | dev: true 2540 | 2541 | /picomatch@2.3.1: 2542 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2543 | engines: {node: '>=8.6'} 2544 | dev: true 2545 | 2546 | /pkg-types@1.0.3: 2547 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 2548 | dependencies: 2549 | jsonc-parser: 3.2.0 2550 | mlly: 1.2.0 2551 | pathe: 1.1.0 2552 | dev: true 2553 | 2554 | /postcss@8.4.23: 2555 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 2556 | engines: {node: ^10 || ^12 || >=14} 2557 | dependencies: 2558 | nanoid: 3.3.6 2559 | picocolors: 1.0.0 2560 | source-map-js: 1.0.2 2561 | dev: true 2562 | 2563 | /prelude-ls@1.2.1: 2564 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2565 | engines: {node: '>= 0.8.0'} 2566 | dev: true 2567 | 2568 | /pretty-format@27.5.1: 2569 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 2570 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 2571 | dependencies: 2572 | ansi-regex: 5.0.1 2573 | ansi-styles: 5.2.0 2574 | react-is: 17.0.2 2575 | dev: true 2576 | 2577 | /psl@1.9.0: 2578 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 2579 | dev: true 2580 | 2581 | /punycode@2.3.0: 2582 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2583 | engines: {node: '>=6'} 2584 | dev: true 2585 | 2586 | /querystringify@2.2.0: 2587 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 2588 | dev: true 2589 | 2590 | /queue-microtask@1.2.3: 2591 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2592 | dev: true 2593 | 2594 | /react-is@17.0.2: 2595 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 2596 | dev: true 2597 | 2598 | /readdirp@3.6.0: 2599 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2600 | engines: {node: '>=8.10.0'} 2601 | dependencies: 2602 | picomatch: 2.3.1 2603 | dev: true 2604 | 2605 | /regexp.prototype.flags@1.5.0: 2606 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 2607 | engines: {node: '>= 0.4'} 2608 | dependencies: 2609 | call-bind: 1.0.2 2610 | define-properties: 1.2.0 2611 | functions-have-names: 1.2.3 2612 | dev: true 2613 | 2614 | /require-directory@2.1.1: 2615 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2616 | engines: {node: '>=0.10.0'} 2617 | dev: true 2618 | 2619 | /requires-port@1.0.0: 2620 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 2621 | dev: true 2622 | 2623 | /resolve-from@4.0.0: 2624 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2625 | engines: {node: '>=4'} 2626 | dev: true 2627 | 2628 | /reusify@1.0.4: 2629 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2630 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2631 | dev: true 2632 | 2633 | /rimraf@3.0.2: 2634 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2635 | hasBin: true 2636 | dependencies: 2637 | glob: 7.2.3 2638 | dev: true 2639 | 2640 | /rollup@3.21.5: 2641 | resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} 2642 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2643 | hasBin: true 2644 | optionalDependencies: 2645 | fsevents: 2.3.2 2646 | dev: true 2647 | 2648 | /rrweb-cssom@0.6.0: 2649 | resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} 2650 | dev: true 2651 | 2652 | /run-parallel@1.2.0: 2653 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2654 | dependencies: 2655 | queue-microtask: 1.2.3 2656 | dev: true 2657 | 2658 | /safe-regex-test@1.0.0: 2659 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2660 | dependencies: 2661 | call-bind: 1.0.2 2662 | get-intrinsic: 1.2.0 2663 | is-regex: 1.1.4 2664 | dev: true 2665 | 2666 | /safer-buffer@2.1.2: 2667 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2668 | dev: true 2669 | 2670 | /sass@1.62.1: 2671 | resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} 2672 | engines: {node: '>=14.0.0'} 2673 | hasBin: true 2674 | dependencies: 2675 | chokidar: 3.5.3 2676 | immutable: 4.3.0 2677 | source-map-js: 1.0.2 2678 | dev: true 2679 | 2680 | /saxes@6.0.0: 2681 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} 2682 | engines: {node: '>=v12.22.7'} 2683 | dependencies: 2684 | xmlchars: 2.2.0 2685 | dev: true 2686 | 2687 | /semver@6.3.0: 2688 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 2689 | hasBin: true 2690 | dev: true 2691 | 2692 | /semver@7.5.0: 2693 | resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} 2694 | engines: {node: '>=10'} 2695 | hasBin: true 2696 | dependencies: 2697 | lru-cache: 6.0.0 2698 | dev: true 2699 | 2700 | /seroval@0.5.1: 2701 | resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} 2702 | engines: {node: '>=10'} 2703 | 2704 | /shebang-command@2.0.0: 2705 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2706 | engines: {node: '>=8'} 2707 | dependencies: 2708 | shebang-regex: 3.0.0 2709 | dev: true 2710 | 2711 | /shebang-regex@3.0.0: 2712 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2713 | engines: {node: '>=8'} 2714 | dev: true 2715 | 2716 | /side-channel@1.0.4: 2717 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2718 | dependencies: 2719 | call-bind: 1.0.2 2720 | get-intrinsic: 1.2.0 2721 | object-inspect: 1.12.3 2722 | dev: true 2723 | 2724 | /siginfo@2.0.0: 2725 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 2726 | dev: true 2727 | 2728 | /signal-exit@3.0.7: 2729 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2730 | dev: true 2731 | 2732 | /slash@3.0.0: 2733 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2734 | engines: {node: '>=8'} 2735 | dev: true 2736 | 2737 | /solid-js@1.7.4: 2738 | resolution: {integrity: sha512-hD/bzIpaa7DL/LGRRTLFvejQuxQaoXyH+DBgPputJW7zvFigCewQIoDvbwDR4VHTsa8VsMDPzV8BT0F9OqsS1Q==} 2739 | dependencies: 2740 | csstype: 3.1.2 2741 | seroval: 0.5.1 2742 | 2743 | /solid-refresh@0.5.2(solid-js@1.7.4): 2744 | resolution: {integrity: sha512-I69HmFj0LsGRJ3n8CEMVjyQFgVtuM2bSjznu2hCnsY+i5oOxh8ioWj00nnHBv0UYD3WpE/Sq4Q3TNw2IKmKN7A==} 2745 | peerDependencies: 2746 | solid-js: ^1.3 2747 | dependencies: 2748 | '@babel/generator': 7.21.5 2749 | '@babel/helper-module-imports': 7.21.4 2750 | '@babel/types': 7.21.5 2751 | solid-js: 1.7.4 2752 | dev: true 2753 | 2754 | /solid-transition-group@0.2.2(solid-js@1.7.4): 2755 | resolution: {integrity: sha512-6nB90UM2PB6VsIo/UCkmZmlIJb9mnmP7QPGrePqQJWtpUiRs5PbhkB8fvdyv9g/RPHWYpdJhQgxL6n++WmTt5A==} 2756 | peerDependencies: 2757 | solid-js: ^1.6.12 2758 | dependencies: 2759 | '@solid-primitives/refs': 1.0.2(solid-js@1.7.4) 2760 | '@solid-primitives/transition-group': 1.0.2(solid-js@1.7.4) 2761 | solid-js: 1.7.4 2762 | dev: false 2763 | 2764 | /source-map-js@1.0.2: 2765 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2766 | engines: {node: '>=0.10.0'} 2767 | dev: true 2768 | 2769 | /stackback@0.0.2: 2770 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 2771 | dev: true 2772 | 2773 | /std-env@3.3.3: 2774 | resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} 2775 | dev: true 2776 | 2777 | /string-width@4.2.3: 2778 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2779 | engines: {node: '>=8'} 2780 | dependencies: 2781 | emoji-regex: 8.0.0 2782 | is-fullwidth-code-point: 3.0.0 2783 | strip-ansi: 6.0.1 2784 | dev: true 2785 | 2786 | /string.prototype.trim@1.2.7: 2787 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 2788 | engines: {node: '>= 0.4'} 2789 | dependencies: 2790 | call-bind: 1.0.2 2791 | define-properties: 1.2.0 2792 | es-abstract: 1.21.2 2793 | dev: true 2794 | 2795 | /string.prototype.trimend@1.0.6: 2796 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2797 | dependencies: 2798 | call-bind: 1.0.2 2799 | define-properties: 1.2.0 2800 | es-abstract: 1.21.2 2801 | dev: true 2802 | 2803 | /string.prototype.trimstart@1.0.6: 2804 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2805 | dependencies: 2806 | call-bind: 1.0.2 2807 | define-properties: 1.2.0 2808 | es-abstract: 1.21.2 2809 | dev: true 2810 | 2811 | /strip-ansi@6.0.1: 2812 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2813 | engines: {node: '>=8'} 2814 | dependencies: 2815 | ansi-regex: 5.0.1 2816 | dev: true 2817 | 2818 | /strip-json-comments@3.1.1: 2819 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2820 | engines: {node: '>=8'} 2821 | dev: true 2822 | 2823 | /strip-literal@1.0.1: 2824 | resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} 2825 | dependencies: 2826 | acorn: 8.8.2 2827 | dev: true 2828 | 2829 | /style-to-object@0.3.0: 2830 | resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} 2831 | dependencies: 2832 | inline-style-parser: 0.1.1 2833 | dev: true 2834 | 2835 | /supports-color@5.5.0: 2836 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2837 | engines: {node: '>=4'} 2838 | dependencies: 2839 | has-flag: 3.0.0 2840 | dev: true 2841 | 2842 | /supports-color@7.2.0: 2843 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2844 | engines: {node: '>=8'} 2845 | dependencies: 2846 | has-flag: 4.0.0 2847 | dev: true 2848 | 2849 | /symbol-tree@3.2.4: 2850 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 2851 | dev: true 2852 | 2853 | /test-exclude@6.0.0: 2854 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 2855 | engines: {node: '>=8'} 2856 | dependencies: 2857 | '@istanbuljs/schema': 0.1.3 2858 | glob: 7.2.3 2859 | minimatch: 3.1.2 2860 | dev: true 2861 | 2862 | /text-table@0.2.0: 2863 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2864 | dev: true 2865 | 2866 | /time-zone@1.0.0: 2867 | resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} 2868 | engines: {node: '>=4'} 2869 | dev: true 2870 | 2871 | /tinybench@2.5.0: 2872 | resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} 2873 | dev: true 2874 | 2875 | /tinypool@0.5.0: 2876 | resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} 2877 | engines: {node: '>=14.0.0'} 2878 | dev: true 2879 | 2880 | /tinyspy@2.1.0: 2881 | resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} 2882 | engines: {node: '>=14.0.0'} 2883 | dev: true 2884 | 2885 | /to-fast-properties@2.0.0: 2886 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2887 | engines: {node: '>=4'} 2888 | dev: true 2889 | 2890 | /to-regex-range@5.0.1: 2891 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2892 | engines: {node: '>=8.0'} 2893 | dependencies: 2894 | is-number: 7.0.0 2895 | dev: true 2896 | 2897 | /tough-cookie@4.1.2: 2898 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} 2899 | engines: {node: '>=6'} 2900 | dependencies: 2901 | psl: 1.9.0 2902 | punycode: 2.3.0 2903 | universalify: 0.2.0 2904 | url-parse: 1.5.10 2905 | dev: true 2906 | 2907 | /tr46@4.1.1: 2908 | resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} 2909 | engines: {node: '>=14'} 2910 | dependencies: 2911 | punycode: 2.3.0 2912 | dev: true 2913 | 2914 | /tslib@1.14.1: 2915 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2916 | dev: true 2917 | 2918 | /tsutils@3.21.0(typescript@5.0.4): 2919 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2920 | engines: {node: '>= 6'} 2921 | peerDependencies: 2922 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2923 | dependencies: 2924 | tslib: 1.14.1 2925 | typescript: 5.0.4 2926 | dev: true 2927 | 2928 | /type-check@0.4.0: 2929 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2930 | engines: {node: '>= 0.8.0'} 2931 | dependencies: 2932 | prelude-ls: 1.2.1 2933 | dev: true 2934 | 2935 | /type-detect@4.0.8: 2936 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 2937 | engines: {node: '>=4'} 2938 | dev: true 2939 | 2940 | /type-fest@0.20.2: 2941 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2942 | engines: {node: '>=10'} 2943 | dev: true 2944 | 2945 | /typed-array-length@1.0.4: 2946 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2947 | dependencies: 2948 | call-bind: 1.0.2 2949 | for-each: 0.3.3 2950 | is-typed-array: 1.1.10 2951 | dev: true 2952 | 2953 | /typescript@5.0.4: 2954 | resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} 2955 | engines: {node: '>=12.20'} 2956 | hasBin: true 2957 | dev: true 2958 | 2959 | /ufo@1.1.2: 2960 | resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} 2961 | dev: true 2962 | 2963 | /unbox-primitive@1.0.2: 2964 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2965 | dependencies: 2966 | call-bind: 1.0.2 2967 | has-bigints: 1.0.2 2968 | has-symbols: 1.0.3 2969 | which-boxed-primitive: 1.0.2 2970 | dev: true 2971 | 2972 | /universalify@0.2.0: 2973 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 2974 | engines: {node: '>= 4.0.0'} 2975 | dev: true 2976 | 2977 | /update-browserslist-db@1.0.11(browserslist@4.21.5): 2978 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2979 | hasBin: true 2980 | peerDependencies: 2981 | browserslist: '>= 4.21.0' 2982 | dependencies: 2983 | browserslist: 4.21.5 2984 | escalade: 3.1.1 2985 | picocolors: 1.0.0 2986 | dev: true 2987 | 2988 | /uri-js@4.4.1: 2989 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2990 | dependencies: 2991 | punycode: 2.3.0 2992 | dev: true 2993 | 2994 | /url-parse@1.5.10: 2995 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 2996 | dependencies: 2997 | querystringify: 2.2.0 2998 | requires-port: 1.0.0 2999 | dev: true 3000 | 3001 | /v8-to-istanbul@9.1.0: 3002 | resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} 3003 | engines: {node: '>=10.12.0'} 3004 | dependencies: 3005 | '@jridgewell/trace-mapping': 0.3.18 3006 | '@types/istanbul-lib-coverage': 2.0.4 3007 | convert-source-map: 1.9.0 3008 | dev: true 3009 | 3010 | /validate-html-nesting@1.2.2: 3011 | resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 3012 | dev: true 3013 | 3014 | /vite-node@0.31.0(@types/node@20.1.0)(sass@1.62.1): 3015 | resolution: {integrity: sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==} 3016 | engines: {node: '>=v14.18.0'} 3017 | hasBin: true 3018 | dependencies: 3019 | cac: 6.7.14 3020 | debug: 4.3.4 3021 | mlly: 1.2.0 3022 | pathe: 1.1.0 3023 | picocolors: 1.0.0 3024 | vite: 4.3.5(@types/node@20.1.0)(sass@1.62.1) 3025 | transitivePeerDependencies: 3026 | - '@types/node' 3027 | - less 3028 | - sass 3029 | - stylus 3030 | - sugarss 3031 | - supports-color 3032 | - terser 3033 | dev: true 3034 | 3035 | /vite-plugin-solid@2.7.0(solid-js@1.7.4)(vite@4.3.5): 3036 | resolution: {integrity: sha512-avp/Jl5zOp/Itfo67xtDB2O61U7idviaIp4mLsjhCa13PjKNasz+IID0jYTyqUp9SFx6/PmBr6v4KgDppqompg==} 3037 | peerDependencies: 3038 | solid-js: ^1.7.2 3039 | vite: ^3.0.0 || ^4.0.0 3040 | dependencies: 3041 | '@babel/core': 7.21.8 3042 | '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) 3043 | '@types/babel__core': 7.20.0 3044 | babel-preset-solid: 1.7.4(@babel/core@7.21.8) 3045 | merge-anything: 5.1.5 3046 | solid-js: 1.7.4 3047 | solid-refresh: 0.5.2(solid-js@1.7.4) 3048 | vite: 4.3.5(@types/node@20.1.0)(sass@1.62.1) 3049 | vitefu: 0.2.4(vite@4.3.5) 3050 | transitivePeerDependencies: 3051 | - supports-color 3052 | dev: true 3053 | 3054 | /vite@4.3.5(@types/node@20.1.0)(sass@1.62.1): 3055 | resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} 3056 | engines: {node: ^14.18.0 || >=16.0.0} 3057 | hasBin: true 3058 | peerDependencies: 3059 | '@types/node': '>= 14' 3060 | less: '*' 3061 | sass: '*' 3062 | stylus: '*' 3063 | sugarss: '*' 3064 | terser: ^5.4.0 3065 | peerDependenciesMeta: 3066 | '@types/node': 3067 | optional: true 3068 | less: 3069 | optional: true 3070 | sass: 3071 | optional: true 3072 | stylus: 3073 | optional: true 3074 | sugarss: 3075 | optional: true 3076 | terser: 3077 | optional: true 3078 | dependencies: 3079 | '@types/node': 20.1.0 3080 | esbuild: 0.17.18 3081 | postcss: 8.4.23 3082 | rollup: 3.21.5 3083 | sass: 1.62.1 3084 | optionalDependencies: 3085 | fsevents: 2.3.2 3086 | dev: true 3087 | 3088 | /vitefu@0.2.4(vite@4.3.5): 3089 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 3090 | peerDependencies: 3091 | vite: ^3.0.0 || ^4.0.0 3092 | peerDependenciesMeta: 3093 | vite: 3094 | optional: true 3095 | dependencies: 3096 | vite: 4.3.5(@types/node@20.1.0)(sass@1.62.1) 3097 | dev: true 3098 | 3099 | /vitest@0.31.0(jsdom@22.0.0)(sass@1.62.1): 3100 | resolution: {integrity: sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==} 3101 | engines: {node: '>=v14.18.0'} 3102 | hasBin: true 3103 | peerDependencies: 3104 | '@edge-runtime/vm': '*' 3105 | '@vitest/browser': '*' 3106 | '@vitest/ui': '*' 3107 | happy-dom: '*' 3108 | jsdom: '*' 3109 | playwright: '*' 3110 | safaridriver: '*' 3111 | webdriverio: '*' 3112 | peerDependenciesMeta: 3113 | '@edge-runtime/vm': 3114 | optional: true 3115 | '@vitest/browser': 3116 | optional: true 3117 | '@vitest/ui': 3118 | optional: true 3119 | happy-dom: 3120 | optional: true 3121 | jsdom: 3122 | optional: true 3123 | playwright: 3124 | optional: true 3125 | safaridriver: 3126 | optional: true 3127 | webdriverio: 3128 | optional: true 3129 | dependencies: 3130 | '@types/chai': 4.3.5 3131 | '@types/chai-subset': 1.3.3 3132 | '@types/node': 20.1.0 3133 | '@vitest/expect': 0.31.0 3134 | '@vitest/runner': 0.31.0 3135 | '@vitest/snapshot': 0.31.0 3136 | '@vitest/spy': 0.31.0 3137 | '@vitest/utils': 0.31.0 3138 | acorn: 8.8.2 3139 | acorn-walk: 8.2.0 3140 | cac: 6.7.14 3141 | chai: 4.3.7 3142 | concordance: 5.0.4 3143 | debug: 4.3.4 3144 | jsdom: 22.0.0 3145 | local-pkg: 0.4.3 3146 | magic-string: 0.30.0 3147 | pathe: 1.1.0 3148 | picocolors: 1.0.0 3149 | std-env: 3.3.3 3150 | strip-literal: 1.0.1 3151 | tinybench: 2.5.0 3152 | tinypool: 0.5.0 3153 | vite: 4.3.5(@types/node@20.1.0)(sass@1.62.1) 3154 | vite-node: 0.31.0(@types/node@20.1.0)(sass@1.62.1) 3155 | why-is-node-running: 2.2.2 3156 | transitivePeerDependencies: 3157 | - less 3158 | - sass 3159 | - stylus 3160 | - sugarss 3161 | - supports-color 3162 | - terser 3163 | dev: true 3164 | 3165 | /w3c-xmlserializer@4.0.0: 3166 | resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} 3167 | engines: {node: '>=14'} 3168 | dependencies: 3169 | xml-name-validator: 4.0.0 3170 | dev: true 3171 | 3172 | /webidl-conversions@7.0.0: 3173 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 3174 | engines: {node: '>=12'} 3175 | dev: true 3176 | 3177 | /well-known-symbols@2.0.0: 3178 | resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} 3179 | engines: {node: '>=6'} 3180 | dev: true 3181 | 3182 | /whatwg-encoding@2.0.0: 3183 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} 3184 | engines: {node: '>=12'} 3185 | dependencies: 3186 | iconv-lite: 0.6.3 3187 | dev: true 3188 | 3189 | /whatwg-mimetype@3.0.0: 3190 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} 3191 | engines: {node: '>=12'} 3192 | dev: true 3193 | 3194 | /whatwg-url@12.0.1: 3195 | resolution: {integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==} 3196 | engines: {node: '>=14'} 3197 | dependencies: 3198 | tr46: 4.1.1 3199 | webidl-conversions: 7.0.0 3200 | dev: true 3201 | 3202 | /which-boxed-primitive@1.0.2: 3203 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3204 | dependencies: 3205 | is-bigint: 1.0.4 3206 | is-boolean-object: 1.1.2 3207 | is-number-object: 1.0.7 3208 | is-string: 1.0.7 3209 | is-symbol: 1.0.4 3210 | dev: true 3211 | 3212 | /which-typed-array@1.1.9: 3213 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 3214 | engines: {node: '>= 0.4'} 3215 | dependencies: 3216 | available-typed-arrays: 1.0.5 3217 | call-bind: 1.0.2 3218 | for-each: 0.3.3 3219 | gopd: 1.0.1 3220 | has-tostringtag: 1.0.0 3221 | is-typed-array: 1.1.10 3222 | dev: true 3223 | 3224 | /which@2.0.2: 3225 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3226 | engines: {node: '>= 8'} 3227 | hasBin: true 3228 | dependencies: 3229 | isexe: 2.0.0 3230 | dev: true 3231 | 3232 | /why-is-node-running@2.2.2: 3233 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 3234 | engines: {node: '>=8'} 3235 | hasBin: true 3236 | dependencies: 3237 | siginfo: 2.0.0 3238 | stackback: 0.0.2 3239 | dev: true 3240 | 3241 | /word-wrap@1.2.3: 3242 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 3243 | engines: {node: '>=0.10.0'} 3244 | dev: true 3245 | 3246 | /wrap-ansi@7.0.0: 3247 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3248 | engines: {node: '>=10'} 3249 | dependencies: 3250 | ansi-styles: 4.3.0 3251 | string-width: 4.2.3 3252 | strip-ansi: 6.0.1 3253 | dev: true 3254 | 3255 | /wrappy@1.0.2: 3256 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3257 | dev: true 3258 | 3259 | /ws@8.13.0: 3260 | resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} 3261 | engines: {node: '>=10.0.0'} 3262 | peerDependencies: 3263 | bufferutil: ^4.0.1 3264 | utf-8-validate: '>=5.0.2' 3265 | peerDependenciesMeta: 3266 | bufferutil: 3267 | optional: true 3268 | utf-8-validate: 3269 | optional: true 3270 | dev: true 3271 | 3272 | /xml-name-validator@4.0.0: 3273 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 3274 | engines: {node: '>=12'} 3275 | dev: true 3276 | 3277 | /xmlchars@2.2.0: 3278 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 3279 | dev: true 3280 | 3281 | /y18n@5.0.8: 3282 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3283 | engines: {node: '>=10'} 3284 | dev: true 3285 | 3286 | /yallist@3.1.1: 3287 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3288 | dev: true 3289 | 3290 | /yallist@4.0.0: 3291 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3292 | dev: true 3293 | 3294 | /yargs-parser@20.2.9: 3295 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 3296 | engines: {node: '>=10'} 3297 | dev: true 3298 | 3299 | /yargs@16.2.0: 3300 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 3301 | engines: {node: '>=10'} 3302 | dependencies: 3303 | cliui: 7.0.4 3304 | escalade: 3.1.1 3305 | get-caller-file: 2.0.5 3306 | require-directory: 2.1.1 3307 | string-width: 4.2.3 3308 | y18n: 5.0.8 3309 | yargs-parser: 20.2.9 3310 | dev: true 3311 | 3312 | /yocto-queue@0.1.0: 3313 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3314 | engines: {node: '>=10'} 3315 | dev: true 3316 | 3317 | /yocto-queue@1.0.0: 3318 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3319 | engines: {node: '>=12.20'} 3320 | dev: true 3321 | -------------------------------------------------------------------------------- /src/components/CardContainer.tsx: -------------------------------------------------------------------------------- 1 | import { For, createMemo, createSignal, createUniqueId, onCleanup } from "solid-js"; 2 | import { createQuery } from "@tanstack/solid-query"; 3 | import { BANNED_CLASS } from "~/data/constants"; 4 | import { getParents, getUid, logDebug, logWarn } from "~/utils"; 5 | import { fetchSelf } from "~/utils/fetcher"; 6 | import { StateProvider } from "~/state"; 7 | import { CardLoader } from "~/components"; 8 | 9 | const check = (node: HTMLAnchorElement): number | null => { 10 | const href = node.getAttribute("href"); 11 | 12 | if (href === null) { 13 | return null; 14 | } 15 | 16 | const uid = getUid(href); 17 | 18 | if (uid === null) { 19 | return null; 20 | } 21 | 22 | // special case 23 | const parents = getParents(node); 24 | 25 | for (const keyword of BANNED_CLASS) { 26 | if (parents.find((item) => item.classList.contains(keyword))) { 27 | return null; 28 | } 29 | } 30 | 31 | // avoid duplicate 32 | const mark = node.getAttribute("uid"); 33 | 34 | if (mark === `${uid}`) { 35 | return null; 36 | } 37 | 38 | return uid; 39 | }; 40 | 41 | const dirty = (node: HTMLAnchorElement): HTMLAnchorElement => { 42 | const id = createUniqueId(); 43 | node.setAttribute(`card-${id}`, ""); 44 | const parent = node.parentElement; 45 | 46 | if (parent === null) { 47 | return node; 48 | } 49 | 50 | if (parent.tagName !== "SPAN") { 51 | return node; 52 | } 53 | 54 | logDebug("kill official card", parent); 55 | 56 | // 鲨官方卡片🔪 57 | const newParent = document.createElement("template"); 58 | newParent.innerHTML = parent.outerHTML; 59 | const newNode = newParent.content.querySelector(`a[card-${id}]`); 60 | 61 | if (newNode === null) { 62 | logWarn("不小心把新 node 玩丢了!"); 63 | return node; 64 | } 65 | 66 | parent.replaceWith(newParent.content); 67 | 68 | return newNode as HTMLAnchorElement; 69 | }; 70 | 71 | export default () => { 72 | const self = createQuery({ 73 | queryKey: () => ["self"], 74 | queryFn: fetchSelf, 75 | staleTime: Infinity, // never stale 76 | }); 77 | 78 | const csrfToken = (() => { 79 | const csrfNode = document.querySelector("meta[name=\"csrf-token\"]"); 80 | 81 | if (csrfNode === null) { 82 | return ""; 83 | } 84 | 85 | return csrfNode.getAttribute("content") ?? ""; 86 | })(); 87 | 88 | const state = createMemo(() => { 89 | let selfUid = self.data; 90 | 91 | if (typeof selfUid === "undefined") { 92 | selfUid = null; 93 | } 94 | 95 | return { selfUid, csrfToken }; 96 | }); 97 | 98 | interface AnchorPair { 99 | anchor: HTMLAnchorElement; 100 | uid: number; 101 | } 102 | 103 | const [links, setLinks] = createSignal([]); 104 | 105 | const timer = setInterval(() => { 106 | const result: AnchorPair[] = []; 107 | 108 | const links = document.getElementsByTagName("a"); 109 | 110 | for (const item of links) { 111 | const uid = check(item); 112 | 113 | if (uid === null) { 114 | continue; 115 | } 116 | 117 | item.setAttribute("uid", `${uid}`); 118 | 119 | result.push({ anchor: dirty(item), uid }); 120 | } 121 | 122 | setLinks((last) => [...last, ...result]); 123 | }, 500); 124 | 125 | onCleanup(() => clearInterval(timer)); 126 | 127 | return ( 128 | 129 | 130 | {(a) => } 131 | 132 | 133 | ); 134 | }; 135 | -------------------------------------------------------------------------------- /src/components/CardLoader/index.tsx: -------------------------------------------------------------------------------- 1 | import { JSX, Show, createEffect, createSignal, onCleanup } from "solid-js"; 2 | import { debounce } from "@solid-primitives/scheduled"; 3 | import { Transition } from "solid-transition-group"; 4 | import { getCardStyle } from "~/utils/card"; 5 | import { UserCard } from "~/components"; 6 | import "./styles.css"; 7 | 8 | interface CardLoaderProps { 9 | anchor: HTMLAnchorElement; 10 | uid: number; 11 | } 12 | 13 | export default (props: CardLoaderProps) => { 14 | const [style, setStyle] = createSignal(); 15 | const [display, setDisplay] = createSignal(false); 16 | 17 | const onMouseLeave = debounce(() => setDisplay(false), 300); 18 | 19 | const onMouseEnter = (e: MouseEvent) => { 20 | if (display()) { 21 | onMouseLeave.clear(); 22 | return; 23 | } 24 | 25 | const callback = debounce(() => { 26 | setStyle(getCardStyle(e.pageX, e.pageY)); 27 | setDisplay(true); 28 | }, 100); 29 | 30 | callback(); 31 | }; 32 | 33 | createEffect(() => { 34 | props.anchor.addEventListener("mouseenter", onMouseEnter); 35 | props.anchor.addEventListener("mouseleave", onMouseLeave); 36 | 37 | onCleanup(() => { 38 | props.anchor.removeEventListener("mouseenter", onMouseEnter); 39 | props.anchor.removeEventListener("mouseleave", onMouseLeave); 40 | }); 41 | }); 42 | 43 | return ( 44 | 45 | 46 |
51 | 52 |
53 |
54 |
55 | ); 56 | }; 57 | -------------------------------------------------------------------------------- /src/components/CardLoader/styles.css: -------------------------------------------------------------------------------- 1 | .card-fade-enter-active, 2 | .card-fade-exit-active { 3 | transition: opacity 0.1s, transform 0.1s; 4 | } 5 | 6 | .card-fade-enter, 7 | .card-fade-exit-to { 8 | transform: translateY(10px); 9 | opacity: 0; 10 | } 11 | 12 | .card-fade-enter { 13 | transform: translateY(10px); 14 | } 15 | -------------------------------------------------------------------------------- /src/components/HelloBlock.tsx: -------------------------------------------------------------------------------- 1 | export default () => ( 2 |
3 |
4 |

Hello, Floating Luogu!

5 |
6 | Remember to delete me before publishing! 7 |
8 |
9 |
10 | ); 11 | -------------------------------------------------------------------------------- /src/components/InfoCard/Avatar.tsx: -------------------------------------------------------------------------------- 1 | import { Show, createMemo } from "solid-js"; 2 | import { UserSummary } from "~/data/types"; 3 | import { BANNED_USER_AVATAR_URL, COLOR_TABLE } from "~/data/constants"; 4 | import styles from "./styles.module.scss"; 5 | 6 | interface CcfLevelBadgeProps { 7 | level: number; 8 | } 9 | 10 | // Font Awesome Free 6.0.0-beta3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2021 Fonticons, Inc. 11 | const CcfLevelBadge = (props: CcfLevelBadgeProps) => { 12 | const color = createMemo(() => { 13 | if (props.level <= 5) { 14 | return "green"; 15 | } 16 | 17 | if (props.level <= 7) { 18 | return "blue"; 19 | } 20 | 21 | return "gold"; 22 | }); 23 | 24 | return ( 25 |
26 | 27 | 28 | 29 |
30 | ); 31 | }; 32 | 33 | interface AvatarProps { 34 | user: UserSummary; 35 | } 36 | 37 | export default (props: AvatarProps) => { 38 | const avatarUrl = createMemo(() => { 39 | if (props.user.isBanned) { 40 | return BANNED_USER_AVATAR_URL; 41 | } 42 | 43 | return `https://cdn.luogu.com.cn/upload/usericon/${props.user.uid}.png`; 44 | }); 45 | 46 | const ccfLevel = createMemo(() => props.user.ccfLevel); 47 | 48 | return ( 49 |
50 |
54 | = 3}> 55 | 56 | 57 |
58 | ); 59 | }; 60 | -------------------------------------------------------------------------------- /src/components/InfoCard/Background.tsx: -------------------------------------------------------------------------------- 1 | interface BackgroundProps { 2 | url: string; 3 | } 4 | 5 | export default (props: BackgroundProps) => ( 6 |
11 | ); 12 | -------------------------------------------------------------------------------- /src/components/InfoCard/BlogButton.tsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles.module.scss"; 2 | 3 | interface BlogButtonProps { 4 | url: string; 5 | } 6 | 7 | export default (props: BlogButtonProps) => ( 8 | window.open(props.url)} 11 | > 12 | 13 | 14 | 15 | 个人博客 16 | 17 | ); 18 | -------------------------------------------------------------------------------- /src/components/InfoCard/ChatButton.tsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles.module.scss"; 2 | 3 | interface ChatButtonProps { 4 | uid: number; 5 | } 6 | 7 | // Font Awesome Free 6.0.0-beta3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2021 Fonticons, Inc. 8 | export default (props: ChatButtonProps) => ( 9 |
window.open(`https://www.luogu.com.cn/chat?uid=${props.uid}`)} 12 | > 13 | 14 | 15 | 16 | 私信 17 |
18 | ); 19 | -------------------------------------------------------------------------------- /src/components/InfoCard/FollowButton.tsx: -------------------------------------------------------------------------------- 1 | import { createMemo, createSignal } from "solid-js"; 2 | import { logInfo, logWarn } from "~/utils"; 3 | import { AppState } from "~/state"; 4 | import styles from "./styles.module.scss"; 5 | 6 | interface FollowButtonProps { 7 | state: AppState; 8 | uid: number; 9 | relationship: number; 10 | refetch: () => void; 11 | } 12 | 13 | // Font Awesome Free 6.0.0-beta3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2021 Fonticons, Inc. 14 | export default (props: FollowButtonProps) => { 15 | const [mouseOn, setMouseOn] = createSignal(false); 16 | 17 | // TODO: refactor 18 | const color = createMemo(() => { 19 | if ((props.relationship & 1) === 0) { 20 | return [undefined, undefined]; 21 | } 22 | 23 | return [ 24 | { "color": "#bbb" }, 25 | { "fill": "#bbb" }, 26 | ]; 27 | }); 28 | 29 | const followText = createMemo(() => { 30 | const state = props.relationship; 31 | 32 | if ((state & 1) === 0) { 33 | return "关注"; 34 | } 35 | 36 | if (mouseOn()) { 37 | return "取消关注"; 38 | } 39 | 40 | if ((state & 2) === 2) { 41 | return "已互关"; 42 | } 43 | 44 | return "已关注"; 45 | }); 46 | 47 | const onClick = async () => { 48 | const target = (props.relationship & 1) ^ 1; 49 | 50 | const resp = await fetch("https://www.luogu.com.cn/api/user/updateRelationShip", { 51 | method: "POST", 52 | headers: { 53 | "content-type": "application/json", 54 | "x-csrf-token": props.state.csrfToken, 55 | }, 56 | body: JSON.stringify({ 57 | relationship: target, 58 | uid: props.uid, 59 | }), 60 | }); 61 | 62 | if (!resp.ok) { 63 | logWarn("Failed to update relationship"); 64 | } 65 | 66 | const res = await resp.json(); 67 | 68 | if (res._empty) { 69 | logInfo("Successfully updated relationship"); 70 | props.refetch(); 71 | return; 72 | } 73 | 74 | logWarn("Failed to update relationship"); 75 | }; 76 | 77 | return ( 78 |
setMouseOn(true)} 82 | onMouseLeave={() => setMouseOn(false)} 83 | style={color()[0]} 84 | > 85 | { 86 | (props.relationship === 3) ? ( 87 | 88 | 89 | 90 | ) : ( 91 | (props.relationship & 1) !== 0 ? ( 92 | 93 | 94 | 95 | ) : ( 96 | 97 | 98 | 99 | ) 100 | ) 101 | } 102 | {followText()} 103 |
104 | ); 105 | }; 106 | -------------------------------------------------------------------------------- /src/components/InfoCard/Slogan.tsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles.module.scss"; 2 | 3 | interface SloganProps { 4 | slogan: string; 5 | } 6 | 7 | // TODO: parse slogan 8 | export default (props: SloganProps) => ( 9 |
10 |

{props.slogan}

11 |
12 | ); 13 | -------------------------------------------------------------------------------- /src/components/InfoCard/StatItem.tsx: -------------------------------------------------------------------------------- 1 | import { createMemo } from "solid-js"; 2 | import styles from "./styles.module.scss"; 3 | 4 | interface StatItemProps { 5 | name: string; 6 | value: string; 7 | link?: string; 8 | } 9 | 10 | export default (props: StatItemProps) => { 11 | const canClick = createMemo(() => { 12 | if (props.value === "-") { 13 | return false; 14 | } 15 | 16 | if (typeof props.link === "undefined") { 17 | return false; 18 | } 19 | 20 | return true; 21 | }); 22 | 23 | const onClick = createMemo(() => { 24 | if (!canClick()) { 25 | return undefined; 26 | } 27 | 28 | // eslint-disable-next-line solid/reactivity 29 | return () => window.open(props.link); 30 | }); 31 | 32 | return ( 33 |
onClick()?.()} 35 | classList={{ [styles.canclick]: canClick() }} 36 | > 37 |
38 | {props.name} 39 |
40 |
41 | {props.value} 42 |
43 |
44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /src/components/InfoCard/Username.tsx: -------------------------------------------------------------------------------- 1 | import { Show, createMemo } from "solid-js"; 2 | import { UserSummary } from "~/data/types"; 3 | import { luoguColor } from "~/utils"; 4 | import styles from "./styles.module.scss"; 5 | 6 | interface UserBadgeProps { 7 | color: string; 8 | badge: string; 9 | } 10 | 11 | const UserBadge = (props: UserBadgeProps) => ( 12 | 16 | {props.badge} 17 | 18 | ); 19 | 20 | interface UsernameProps { 21 | user: UserSummary; 22 | } 23 | 24 | export default (props: UsernameProps) => { 25 | const color = createMemo(() => props.user.color.toLowerCase()); 26 | 27 | const badge = createMemo(() => { 28 | if (color() === "cheater") { 29 | return "作弊者"; 30 | } 31 | 32 | const badge = props.user.badge; 33 | 34 | if (badge === null) { 35 | return null; 36 | } 37 | 38 | if (badge === "") { 39 | return null; 40 | } 41 | 42 | return props.user.badge; 43 | }); 44 | 45 | return ( 46 |
52 | {props.user.name} 53 | 54 | {(b) => } 55 | 56 |
57 | ); 58 | }; 59 | -------------------------------------------------------------------------------- /src/components/InfoCard/index.tsx: -------------------------------------------------------------------------------- 1 | import { Show, createMemo } from "solid-js"; 2 | import { FUser } from "~/data/types"; 3 | import { COLOR_TABLE, DEFAULT_BACKGROUND_URL } from "~/data/constants"; 4 | import { useState } from "~/state"; 5 | import Background from "./Background"; 6 | import Avatar from "./Avatar"; 7 | import Username from "./Username"; 8 | import BlogButton from "./BlogButton"; 9 | import Slogan from "./Slogan"; 10 | import StatItem from "./StatItem"; 11 | import ChatButton from "./ChatButton"; 12 | import FollowButton from "./FollowButton"; 13 | import styles from "./styles.module.scss"; 14 | import card from "../card.module.css"; 15 | 16 | interface InfoCardProps { 17 | user: FUser; 18 | refetch: () => void; 19 | } 20 | 21 | export default (props: InfoCardProps) => { 22 | const backgroundUrl = createMemo(() => { 23 | const background = props.user.background; 24 | 25 | if (background === "") { 26 | return DEFAULT_BACKGROUND_URL; 27 | } 28 | 29 | return background; 30 | }); 31 | 32 | const state = useState(); 33 | 34 | const hasRelationship = createMemo(() => { 35 | const selfUid = state().selfUid; 36 | return selfUid !== null && selfUid !== props.user.uid; 37 | }); 38 | 39 | // relationship: 40 | // - 0: we did not know each other 41 | // - 1: i followed him but he did not follow me 42 | // - 2: he followed me but i did not follow him 43 | // - 3: we followed each other 44 | const relationship = createMemo(() => { 45 | const revertRela = props.user.reverseUserRelationship; 46 | const rela = props.user.userRelationship; 47 | 48 | if (typeof revertRela === "undefined" || typeof rela === "undefined") { 49 | throw new Error("unreachable"); 50 | } 51 | 52 | return (revertRela * 2) + rela; 53 | }); 54 | 55 | return ( 56 |
57 | 58 |
59 |
60 | 61 |
62 | 63 |
69 | #{props.user.uid} 70 | 71 | {(url) => } 72 | 73 |
74 |
75 |
76 | 77 | {(s) => } 78 | 79 |
80 | 85 | 90 | 95 | 99 |
100 | 101 |
105 | 106 | 112 |
113 |
114 |
115 |
116 | ); 117 | }; 118 | -------------------------------------------------------------------------------- /src/components/InfoCard/styles.module.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | text-align: left; 5 | 6 | > .header { 7 | display: flex; 8 | flex-direction: row; 9 | width: 100%; 10 | position: relative; 11 | height: 52px; 12 | } 13 | } 14 | 15 | .avatar { 16 | box-shadow: 0 0 5px 1px #999; 17 | width: 60px; 18 | height: 60px; 19 | border-radius: 30px; 20 | position: absolute; 21 | top: -16px; 22 | left: 10px; 23 | } 24 | 25 | .ccfbadge { 26 | position: absolute; 27 | background: #fff; 28 | border-radius: 100%; 29 | width: 20px; 30 | height: 20px; 31 | top: 27px; 32 | left: 10px; 33 | } 34 | 35 | .badge { 36 | color: #fff; 37 | display: inline-block; 38 | padding: 0px 8px; 39 | box-sizing: border-box; 40 | font-weight: 400; 41 | line-height: 20px; 42 | border-radius: 2px; 43 | font-size: 14px; 44 | margin-left: 5px; 45 | } 46 | 47 | .blog { 48 | position: absolute; 49 | right: 0; 50 | top: -2px; 51 | font-size: 14px; 52 | display: flex; 53 | flex-direction: row; 54 | transform: scale(0.8); 55 | margin-bottom: 5px; 56 | background: #eee; 57 | border-radius: 5px; 58 | padding: 3px 5px; 59 | line-height: 20px; 60 | cursor: pointer; 61 | 62 | color: rgb(52, 152, 219); 63 | 64 | > svg { 65 | width: 16px; 66 | height: 16px; 67 | margin: 2px 5px 2px 2px; 68 | 69 | fill: rgb(52, 152, 219); 70 | } 71 | 72 | &:hover { 73 | color: rgb(0, 86, 179); 74 | 75 | > svg { 76 | fill: rgb(0, 86, 179); 77 | } 78 | } 79 | } 80 | 81 | .slogan { 82 | font-size: 14px; 83 | margin: 0.25em 1.5em; 84 | word-break: break-all; 85 | font-weight: normal; 86 | } 87 | 88 | .stat { 89 | display: flex; 90 | flex-direction: row; 91 | width: 100%; 92 | 93 | > div { 94 | flex: 1; 95 | margin: 10px; 96 | 97 | > div { 98 | text-align: center; 99 | } 100 | 101 | &.canclick { 102 | transition: 0.2s; 103 | color: black; 104 | 105 | cursor: pointer; 106 | } 107 | 108 | &:hover { 109 | &.canclick { 110 | transition: 0.2s; 111 | color: #777; 112 | } 113 | } 114 | } 115 | } 116 | 117 | .bottom-button { 118 | font-size: 16px; 119 | height: 22px; 120 | flex: 1; 121 | border-radius: 10px; 122 | padding: 3px 0px; 123 | text-align: center; 124 | line-height: 18px; 125 | cursor: pointer; 126 | 127 | color: rgb(52, 152, 219); 128 | 129 | > svg { 130 | width: 16px; 131 | height: 16px; 132 | margin-bottom: 3px; 133 | margin-right: 5px; 134 | vertical-align: middle; 135 | fill: rgb(52, 152, 219); 136 | } 137 | 138 | &:hover { 139 | color: rgb(0, 86, 179); 140 | 141 | > svg { 142 | fill: rgb(0, 86, 179); 143 | } 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /src/components/LoadingCard/index.tsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles.module.css"; 2 | import card from "../card.module.css"; 3 | 4 | // Font Awesome Free 6.0.0-beta3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2021 Fonticons, Inc. 5 | export default () => ( 6 |
7 |
8 | 9 | 10 | 11 |
12 |
13 | ); 14 | -------------------------------------------------------------------------------- /src/components/LoadingCard/styles.module.css: -------------------------------------------------------------------------------- 1 | .rotatable { 2 | -webkit-transition-property: -webkit-transform; 3 | -webkit-transition-duration: 1s; 4 | 5 | -moz-transition-property: -moz-transform; 6 | -moz-transition-duration: 1s; 7 | 8 | -webkit-animation: rotate 1s linear infinite; 9 | -moz-animation: rotate 1s linear infinite; 10 | -o-animation: rotate 1s linear infinite; 11 | animation: rotate 1s linear infinite; 12 | } 13 | 14 | @-webkit-keyframes rotate { 15 | from { 16 | -webkit-transform: rotate(0deg); 17 | } 18 | 19 | to { 20 | -webkit-transform: rotate(360deg); 21 | } 22 | } 23 | 24 | @-moz-keyframes rotate { 25 | from { 26 | -moz-transform: rotate(0deg); 27 | } 28 | 29 | to { 30 | -moz-transform: rotate(359deg); 31 | } 32 | } 33 | 34 | @-o-keyframes rotate { 35 | from { 36 | -o-transform: rotate(0deg); 37 | } 38 | 39 | to { 40 | -o-transform: rotate(359deg); 41 | } 42 | } 43 | 44 | @keyframes rotate { 45 | from { 46 | transform: rotate(0deg); 47 | } 48 | 49 | to { 50 | transform: rotate(359deg); 51 | } 52 | } 53 | 54 | .container { 55 | width: 100%; 56 | text-align: center; 57 | } 58 | 59 | .svg { 60 | width: 40px; 61 | height: 40px; 62 | margin: 20px; 63 | } 64 | -------------------------------------------------------------------------------- /src/components/LuoguBlock/index.tsx: -------------------------------------------------------------------------------- 1 | import { JSX } from "solid-js"; 2 | import styles from "./styles.module.css"; 3 | 4 | interface LuoguBlockProps { 5 | center?: boolean; 6 | children: JSX.Element; 7 | } 8 | 9 | export default (props: LuoguBlockProps) => ( 10 |
11 |
12 |
16 | {props.children} 17 |
18 |
19 |
20 | ); 21 | -------------------------------------------------------------------------------- /src/components/LuoguBlock/styles.module.css: -------------------------------------------------------------------------------- 1 | .center { 2 | display: flex; 3 | justify-content: center; 4 | } 5 | -------------------------------------------------------------------------------- /src/components/UserCard.tsx: -------------------------------------------------------------------------------- 1 | import { Show, Suspense } from "solid-js"; 2 | import { createQuery } from "@tanstack/solid-query"; 3 | import { fetchUser } from "~/utils/fetcher"; 4 | import { InfoCard, LoadingCard } from "~/components"; 5 | 6 | interface UserCardProps { 7 | uid: number; 8 | } 9 | 10 | export default (props: UserCardProps) => { 11 | const query = createQuery({ 12 | queryKey: () => ["userinfo", props.uid], 13 | queryFn: fetchUser, 14 | staleTime: 10000, // cache for 10s 15 | }); 16 | 17 | return ( 18 | }> 19 | 20 | {(u) => ( 21 | 25 | )} 26 | 27 | 28 | ); 29 | }; 30 | -------------------------------------------------------------------------------- /src/components/card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | width: 300px; 3 | border-radius: 5px; 4 | overflow: hidden; 5 | display: flex; 6 | flex-direction: column; 7 | box-shadow: 0 0 5px 1px #999; 8 | background: #fff; 9 | color: black; 10 | font-weight: bold; 11 | text-align: center; 12 | text-size-adjust: 100%; 13 | line-height: 25.6px; 14 | text-decoration: none; 15 | font-size: 16px; 16 | } 17 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as LuoguBlock } from "./LuoguBlock"; 2 | export { default as HelloBlock } from "./HelloBlock"; 3 | export { default as InfoCard } from "./InfoCard"; 4 | export { default as LoadingCard } from "./LoadingCard"; 5 | export { default as UserCard } from "./UserCard"; 6 | export { default as CardLoader } from "./CardLoader"; 7 | export { default as CardContainer } from "./CardContainer"; 8 | -------------------------------------------------------------------------------- /src/data/constants.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULT_BACKGROUND_URL = "https://cdn.luogu.org/images/bg/fe/DSCF0530-shrink.jpg"; 2 | export const BANNED_USER_AVATAR_URL = "https://cdn.luogu.com.cn/images/banned.png"; 3 | 4 | export const COLOR_TABLE = { 5 | purple: "#8e44ad", 6 | red: "#e74c3c", 7 | orange: "#e67e22", 8 | green: "#5eb95e", 9 | bluelight: "#0e90d2", 10 | gray: "#bbb", 11 | brown: "#996600", 12 | blue: "#3498db", 13 | gold: "#f1c40f", 14 | }; 15 | 16 | export const USER_PAGE_REGEX = [ 17 | /^user\/(\d+)$/, 18 | /^\/user\/(\d+)$/, 19 | /^https:\/\/www\.luogu\.com\.cn\/user\/(\d+)$/, 20 | /^space\/show\?uid=(\d+)$/, 21 | /^\/space\/show\?uid=(\d+)$/, 22 | /^https:\/\/www\.luogu\.com\.cn\/space\/show\?uid=(\d+)$/, 23 | ]; 24 | 25 | export const BANNED_CLASS = [ 26 | "user-nav", // 右上角自己头像 27 | "lg-punch", // 首页个人运势 28 | ]; 29 | -------------------------------------------------------------------------------- /src/data/types.ts: -------------------------------------------------------------------------------- 1 | /// https://github.com/0f-0b/luogu-api-docs 2 | 3 | export interface UserSummary { 4 | uid: number; 5 | name: string; 6 | slogan: string | null; 7 | badge: string | null; 8 | isAdmin: boolean; 9 | isBanned: boolean; 10 | color: string; 11 | ccfLevel: number; 12 | background: string; 13 | isRoot?: true; 14 | } 15 | 16 | interface User extends UserSummary { 17 | blogAddress: string | null; 18 | followingCount: number; 19 | followerCount: number; 20 | ranking: number | null; 21 | } 22 | 23 | interface Rating { 24 | contestRating: number; 25 | socialRating: number; 26 | practiceRating: number; 27 | basicRating: number; 28 | prizeRating: number; 29 | calculateTime: number; 30 | user: UserSummary; 31 | rating: number; 32 | } 33 | 34 | interface Prize { 35 | year: number; 36 | contestName: string; 37 | prize: string; 38 | } 39 | 40 | interface UserDetails extends User { 41 | rating?: Rating; 42 | registerTime: number; 43 | introduction: string | null; 44 | prize: Prize[]; 45 | } 46 | 47 | interface UserRelationship { 48 | userRelationship: number; 49 | reverseUserRelationship: number; 50 | } 51 | 52 | interface UserPractice { 53 | passedProblemCount: number | null; 54 | submittedProblemCount: number | null; 55 | } 56 | 57 | type Maybe = T | { [K in keyof T]: undefined }; 58 | 59 | type UserStats = Maybe & UserPractice; 60 | 61 | export type FUser = UserDetails & UserStats; 62 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import { render } from "solid-js/web"; 2 | import { QueryClient, QueryClientProvider } from "@tanstack/solid-query"; 3 | import { MOCK_USER } from "~/mock"; 4 | import { logInfo } from "~/utils"; 5 | import { CardContainer, HelloBlock, InfoCard, LuoguBlock } from "~/components"; 6 | 7 | /// 在洛谷首页顶端创建一个 block 用于调试 8 | const insertDebugBlock = () => { 9 | logInfo("Starting..."); 10 | 11 | if (import.meta.env.MODE === "dev") { 12 | const container = document.getElementsByClassName("lg-index-content"); 13 | 14 | if (container.length <= 0) { 15 | return; 16 | } 17 | 18 | const debugContainer = document.createElement("div"); 19 | container[0].prepend(debugContainer); 20 | 21 | render(() => ( 22 | <> 23 | 24 | 25 | 26 | 27 | undefined} 30 | /> 31 | 32 | 33 | ), debugContainer); 34 | } 35 | }; 36 | 37 | const insertCardContainer = () => { 38 | const body = document.getElementsByTagName("body"); 39 | 40 | if (body.length <= 0) { 41 | throw new Error("?"); 42 | } 43 | 44 | const cardContainer = document.createElement("div"); 45 | cardContainer.setAttribute("style", "position: absolute; top: 0; left: 0"); 46 | body[0].append(cardContainer); 47 | 48 | const queryClient = new QueryClient(); 49 | 50 | render(() => ( 51 | 52 | 53 | 54 | ), cardContainer); 55 | }; 56 | 57 | const main = () => { 58 | insertDebugBlock(); 59 | insertCardContainer(); 60 | 61 | logInfo("脚本已加载√", "Floating Luogu 用户群 885149235 欢迎来玩~"); 62 | }; 63 | 64 | main(); 65 | -------------------------------------------------------------------------------- /src/mock.ts: -------------------------------------------------------------------------------- 1 | export const MOCK_USER = { 2 | registerTime: 1506768832, 3 | introduction: "[亡语。](https://www.luogu.com.cn/discuss/448817)", 4 | prize: [ 5 | { 6 | year: 2019, 7 | contestName: "CSP提高", 8 | prize: "二等奖", 9 | }, 10 | { 11 | year: 2020, 12 | contestName: "NOIP", 13 | prize: "一等奖", 14 | }, 15 | { 16 | year: 2020, 17 | contestName: "CSP提高", 18 | prize: "一等奖", 19 | }, 20 | { 21 | year: 2020, 22 | contestName: "APIO", 23 | prize: "银牌", 24 | }, 25 | { 26 | year: 2021, 27 | contestName: "NOIP", 28 | prize: "一等奖", 29 | }, 30 | { 31 | year: 2021, 32 | contestName: "CSP提高", 33 | prize: "一等奖", 34 | }, 35 | { 36 | year: 2021, 37 | contestName: "WC", 38 | prize: "金牌", 39 | }, 40 | { 41 | year: 2022, 42 | contestName: "WC", 43 | prize: "铜牌", 44 | }, 45 | ], 46 | followingCount: 117, 47 | followerCount: 1192, 48 | ranking: 775, 49 | blogAddress: "https://www.luogu.com.cn/blog/tiger2005/", 50 | userRelationship: 1, 51 | reverseUserRelationship: 1, 52 | passedProblemCount: 618, 53 | submittedProblemCount: 2340, 54 | uid: 60864, 55 | name: "tiger2005", 56 | slogan: "Failure, as usual.", 57 | badge: "", 58 | isAdmin: false, 59 | isBanned: false, 60 | color: "Red", 61 | ccfLevel: 7, 62 | background: "https://cdn.luogu.com.cn/upload/image_hosting/e7zlrvu0.png", 63 | }; 64 | -------------------------------------------------------------------------------- /src/state.tsx: -------------------------------------------------------------------------------- 1 | import { Accessor, JSX, createContext, useContext } from "solid-js"; 2 | 3 | export interface AppState { 4 | selfUid: number | null; 5 | csrfToken: string; 6 | } 7 | 8 | const StateContext = createContext>(() => ({ 9 | selfUid: null, 10 | csrfToken: "", 11 | })); 12 | 13 | interface StateContextProps { 14 | children: JSX.Element; 15 | state: AppState; 16 | } 17 | 18 | export const StateProvider = (props: StateContextProps) => { 19 | const state = () => props.state; 20 | 21 | return ( 22 | 23 | {props.children} 24 | 25 | ); 26 | }; 27 | 28 | export const useState = () => useContext(StateContext); 29 | -------------------------------------------------------------------------------- /src/utils/card.ts: -------------------------------------------------------------------------------- 1 | import { JSX } from "solid-js"; 2 | 3 | let floatNumber = 2000100; 4 | 5 | export const getCardStyle = (x: number, y: number): JSX.CSSProperties => { 6 | floatNumber += 100; 7 | 8 | const MAX_WIDTH = document.body.clientWidth; 9 | 10 | const deltaRight = x + 169 - MAX_WIDTH; 11 | const deltaLeft = 218 - x; 12 | 13 | const baseTop = y + 30; 14 | let baseLeft = x - 150; 15 | 16 | if (deltaRight > 0) { 17 | baseLeft -= deltaRight; 18 | } 19 | 20 | if (deltaLeft > 0) { 21 | baseLeft += deltaLeft; 22 | } 23 | 24 | return { 25 | "position": "absolute", 26 | "z-index": floatNumber, 27 | "top": `${baseTop}px`, 28 | "left": `${baseLeft}px`, 29 | }; 30 | }; 31 | -------------------------------------------------------------------------------- /src/utils/fetcher.ts: -------------------------------------------------------------------------------- 1 | import { QueryFunction } from "@tanstack/solid-query"; 2 | import { FUser } from "~/data/types"; 3 | import { logDebug } from "~/utils"; 4 | 5 | export const fetchUser: QueryFunction = async ({ queryKey }) => { 6 | const uid = queryKey[1]; 7 | 8 | const resp = await fetch( 9 | `https://www.luogu.com.cn/user/${uid}`, 10 | { headers: { "x-luogu-type": "content-only" } }, 11 | ); 12 | 13 | if (!resp.ok) { 14 | throw new Error(`failed to get userinfo, uid = ${uid}`); 15 | } 16 | 17 | const res = await resp.json(); 18 | 19 | logDebug("userinfo", uid, res); 20 | 21 | return res.currentData.user; 22 | }; 23 | 24 | export const fetchSelf: QueryFunction = async () => { 25 | const resp = await fetch( 26 | "https://www.luogu.com.cn/user/3", // kkksc03 27 | { headers: { "x-luogu-type": "content-only" } }, 28 | ); 29 | 30 | if (!resp.ok) { 31 | throw new Error("failed to get self"); 32 | } 33 | 34 | const res = await resp.json(); 35 | const self = res.currentUser; 36 | 37 | logDebug("self", self); 38 | 39 | if (typeof self === "undefined") { 40 | return null; 41 | } 42 | 43 | return self.uid; 44 | }; 45 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { COLOR_TABLE, USER_PAGE_REGEX } from "~/data/constants"; 2 | 3 | export const logWarn = (...args) => console.warn("[FLG]", ...args); 4 | export const logInfo = (...args) => console.info("[FLG]", ...args); 5 | export const logDebug = (...args) => { 6 | /* c8 ignore next 4 */ 7 | if (import.meta.env.MODE === "dev") { 8 | console.debug("[FLG]", ...args); 9 | } 10 | }; 11 | 12 | export const luoguColor = (color: string): string => { 13 | if (color === "blue") { 14 | return COLOR_TABLE["bluelight"]; 15 | } 16 | 17 | if (color === "cheater") { 18 | return COLOR_TABLE["brown"]; 19 | } 20 | 21 | return COLOR_TABLE[color]; 22 | }; 23 | 24 | export const getUid = (url: string): number | null => { 25 | for (const re of USER_PAGE_REGEX) { 26 | const match = url.match(re); 27 | 28 | if (match !== null) { 29 | return Number(match[1]); 30 | } 31 | } 32 | 33 | return null; 34 | }; 35 | 36 | export const getParents = (node: HTMLElement): HTMLElement[] => { 37 | let now: HTMLElement | null = node; 38 | 39 | const res: HTMLElement[] = []; 40 | 41 | while (now) { 42 | res.push(now); 43 | now = now.parentElement; 44 | } 45 | 46 | return res; 47 | }; 48 | -------------------------------------------------------------------------------- /tests/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { beforeAll, describe, expect, it } from "vitest"; 2 | import { getParents, getUid, luoguColor } from "~/utils"; 3 | import { getCardStyle } from "~/utils/card"; 4 | 5 | describe.each([ 6 | { color: "blue", expected: "#0e90d2" }, 7 | { color: "cheater", expected: "#996600" }, 8 | { color: "red", expected: "#e74c3c" }, 9 | ])("luoguColor($color)", ({ color, expected }) => { 10 | it(`returns ${expect}`, () => { 11 | expect(luoguColor(color)).toBe(expected); 12 | }); 13 | }); 14 | 15 | describe("getUid", () => { 16 | it.each([ 17 | { url: "user/1", expected: 1 }, 18 | { url: "/user/12", expected: 12 }, 19 | { url: "https://www.luogu.com.cn/user/123", expected: 123 }, 20 | { url: "space/show?uid=1234", expected: 1234 }, 21 | { url: "/space/show?uid=12345", expected: 12345 }, 22 | { url: "https://www.luogu.com.cn/space/show?uid=123456", expected: 123456 }, 23 | { url: "https://www.luogu.com.cn/", expected: null }, 24 | ])("getUid($url)", ({ url, expected }) => { 25 | expect(getUid(url)).toBe(expected); 26 | }); 27 | }); 28 | 29 | describe("getParents", () => { 30 | it("normal", () => { 31 | const div = document.createElement("div"); 32 | const a = document.createElement("a"); 33 | const span = document.createElement("span"); 34 | 35 | div.appendChild(a); 36 | a.appendChild(span); 37 | 38 | expect(getParents(span)).toEqual([span, a, div]); 39 | }); 40 | }); 41 | 42 | describe("getCardStyle", () => { 43 | beforeAll(() => { 44 | Object.defineProperty(window.HTMLElement.prototype, "clientWidth", { value: 1920 }); 45 | }); 46 | 47 | it("normal", () => { 48 | expect(getCardStyle(960, 540)).toEqual({ 49 | "position": "absolute", 50 | "z-index": 2000200, 51 | "top": "570px", 52 | "left": "810px", 53 | }); 54 | }); 55 | 56 | it("too left", () => { 57 | expect(getCardStyle(100, 270)).toEqual({ 58 | "position": "absolute", 59 | "z-index": 2000300, 60 | "top": "300px", 61 | "left": "68px", 62 | }); 63 | }); 64 | 65 | it("too right", () => { 66 | expect(getCardStyle(1820, 810)).toEqual({ 67 | "position": "absolute", 68 | "z-index": 2000400, 69 | "top": "840px", 70 | "left": "1601px", 71 | }); 72 | }); 73 | }); 74 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "allowSyntheticDefaultImports": true, 7 | "esModuleInterop": true, 8 | "jsx": "preserve", 9 | "jsxImportSource": "solid-js", 10 | "types": ["vite/client"], 11 | "noEmit": true, 12 | "isolatedModules": true, 13 | "strictNullChecks": true, 14 | "baseUrl": "./", 15 | "paths": { 16 | "~*": ["src/*"] 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from "node:path"; 2 | import { PluginOption } from "vite"; 3 | import { defineConfig } from "vitest/config"; 4 | import solidPlugin from "vite-plugin-solid"; 5 | 6 | const tampermonkey = () => { 7 | const headers = ` 8 | // ==UserScript== 9 | // @name Floating Luogu 10 | // @namespace http://tampermonkey.net/ 11 | // @icon https://cdn.luogu.com.cn/upload/usericon/3.png 12 | // @author yurzhang & tiger2005 13 | // @homepage https://github.com/Nikaidou-Shinku/floating-luogu 14 | // @description A plugin to decorate Luogu with exquisite user card. 15 | // @include https://www.luogu.com.cn/* 16 | // @version 0.4.0 17 | // @grant GM_addStyle 18 | // @license MIT 19 | // ==/UserScript== 20 | `.trim(); 21 | 22 | return { 23 | name: "tampermonkey", 24 | apply: "build", 25 | enforce: "post", 26 | generateBundle: (_options, bundle) => { 27 | const cssBundle = bundle["style.css"]; 28 | if (!cssBundle || cssBundle.type !== "asset") { 29 | return; 30 | } 31 | const css = cssBundle.source.toString().trim(); 32 | 33 | const [, target] = Object.entries(bundle) 34 | .find(([name]) => name.includes("user.js")) ?? []; 35 | 36 | if (!target || target.type !== "chunk") { 37 | return; 38 | } 39 | 40 | target.code = `${headers}\n\nGM_addStyle(\`${css}\`);\n${target.code}`; 41 | }, 42 | } as PluginOption; 43 | }; 44 | 45 | export default defineConfig({ 46 | plugins: [ 47 | solidPlugin(), 48 | tampermonkey(), 49 | ], 50 | resolve: { 51 | alias: { 52 | "~": resolve(__dirname, "src"), 53 | }, 54 | }, 55 | build: { 56 | target: "esnext", 57 | lib: { 58 | entry: resolve(__dirname, "src/main.tsx"), 59 | name: "userscript", 60 | formats: ["iife"], 61 | fileName: (format) => `flg.${format}.user.js`, 62 | }, 63 | rollupOptions: { 64 | output: { 65 | inlineDynamicImports: true, 66 | }, 67 | }, 68 | }, 69 | define: { 70 | "process.env.NODE_ENV": "\"production\"", 71 | }, 72 | css: { 73 | modules: { 74 | localsConvention: "camelCaseOnly", 75 | }, 76 | }, 77 | test: { 78 | environment: "jsdom", 79 | transformMode: { 80 | web: [/\.[jt]sx?$/], 81 | }, 82 | coverage: { 83 | all: true, 84 | exclude: [ 85 | "coverage/**", 86 | "dist/**", 87 | "test{,s}/**", 88 | "test{,-*}.{js,cjs,mjs,ts,tsx,jsx}", 89 | "**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}", 90 | "**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*", 91 | "**/.{eslint,mocha,prettier}rc.{js,cjs,yml}", 92 | "src/data/types.ts", 93 | ], 94 | }, 95 | }, 96 | }); 97 | --------------------------------------------------------------------------------