├── .env ├── .eslintrc.cjs ├── .gitignore ├── .prettierrc.cjs ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── assets │ ├── vite.svg │ └── vue.svg ├── data │ ├── ajaxhook.ts │ └── overlays.ts ├── lib │ ├── api.ts │ ├── app.ts │ ├── overlay.ts │ ├── position.ts │ ├── ruleMatcher.ts │ ├── size.ts │ ├── store.ts │ ├── uuid.ts │ ├── versionCompare.ts │ └── webcontrol.ts ├── main.ts ├── rules │ ├── base.ts │ ├── ghzs │ │ ├── ghzs.scss │ │ └── ghzs.ts │ ├── hoyolab │ │ └── index.ts │ ├── index.ts │ ├── kongying │ │ ├── kongying-v2.ts │ │ ├── kongying-v3.ts │ │ └── v3.scss │ ├── leaflet.scss │ ├── leaflet.ts │ └── miyoushe │ │ ├── index.ts │ │ └── miyoushe.scss ├── ui │ ├── App.vue │ ├── components │ │ ├── ActionsArea.vue │ │ └── OptionDialog.vue │ ├── index.ts │ └── style.scss └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.env: -------------------------------------------------------------------------------- 1 | VITE_FROSTFLAKE_MIN_VERSION=1.3.0 -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parser: 'vue-eslint-parser', 4 | parserOptions: { 5 | // 设置 js 的解析器为 @babel/eslint-parser 6 | // https://github.com/mysticatea/vue-eslint-parser#-options 7 | parser: '@typescript-eslint/parser', 8 | ecmaVersion: 2020, 9 | // ECMAScript modules 模式 10 | sourceType: 'module', 11 | ecmaFeatures: { 12 | // 不允许 return 语句出现在 global 环境下 13 | globalReturn: false, 14 | // 开启全局 script 模式 15 | impliedStrict: true, 16 | jsx: true, 17 | }, 18 | // 即使没有 babelrc 配置文件,也使用 @babel/eslint-parser 来解析 19 | requireConfigFile: false, 20 | // 仅允许 import export 语句出现在模块的顶层 21 | allowImportExportEverywhere: false, 22 | }, 23 | env: { 24 | node: true, 25 | }, 26 | extends: [ 27 | 'alloy', 28 | 'plugin:vue/vue3-essential', 29 | 'alloy/vue', 30 | 'eslint:recommended', 31 | '@vue/typescript/recommended', 32 | 'plugin:prettier/recommended', 33 | ], 34 | rules: { 35 | 'no-console': 'off', 36 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 37 | 'prettier/prettier': process.env.NODE_ENV === 'production' ? 'error' : 'warn', 38 | 'vue/multi-word-component-names': 'off', 39 | 'vue/no-empty-component-block': 'off', 40 | '@typescript-eslint/no-var-requires': 'off', 41 | 'vue/no-duplicate-attributes': [ 42 | 'error', 43 | { 44 | allowCoexistClass: true, 45 | allowCoexistStyle: true, 46 | }, 47 | ], 48 | 'vue/custom-event-name-casing': 'off', 49 | }, 50 | } 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | .idea 18 | .DS_Store 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | tabWidth: 4, 4 | useTabs: false, 5 | semi: false, 6 | singleQuote: true, 7 | quoteProps: 'as-needed', 8 | jsxSingleQuote: false, 9 | trailingComma: 'all', 10 | bracketSpacing: true, 11 | arrowParens: 'always', 12 | rangeStart: 0, 13 | rangeEnd: Infinity, 14 | requirePragma: false, 15 | insertPragma: false, 16 | proseWrap: 'preserve', 17 | htmlWhitespaceSensitivity: 'css', 18 | vueIndentScriptAndStyle: false, 19 | endOfLine: 'auto', 20 | embeddedLanguageFormatting: 'auto', 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # 志琼 4 | 5 | 原神大地图增强脚本 6 | 7 |
8 | 9 | ## 支持的地图 10 | - 米游社 https://webstatic.mihoyo.com/app/ys-map-cn/index.html 11 | - HoyoLab https://act.hoyolab.com/ys/app/interactive-map/index.html 12 | - 空荧酒馆v2 https://yuanshen.site/index.html 13 | - 空荧酒馆v3 https://v3.yuanshen.site/index 14 | - 光环助手 https://static-web.ghzs.com/cspage_pro/yuanshenMap.html 15 | 16 | ## 功能 17 | - 实时追踪游戏内角色位置(使用 [`GengGode/cvautotrack`](https://github.com/GengGode/GenshinImpact_AutoTrack_DLL)) 18 | - 通过网络共享角色位置(接收端仅支持米游社和HoyoLab) 19 | - 地图叠加层(分层地图) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zhiqiong-next", 3 | "private": true, 4 | "version": "2.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vue-tsc --noEmit && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@types/leaflet": "^1.9.0", 13 | "eventemitter3": "^5.0.0", 14 | "pinia": "^2.0.28", 15 | "vant": "^4.0.6", 16 | "vue": "^3.2.45" 17 | }, 18 | "devDependencies": { 19 | "@typescript-eslint/eslint-plugin": "^5.47.1", 20 | "@typescript-eslint/parser": "^5.47.1", 21 | "@vitejs/plugin-vue": "^4.0.0", 22 | "@vue/eslint-config-typescript": "^11.0.2", 23 | "eslint": "^8.30.0", 24 | "eslint-config-alloy": "^4.7.0", 25 | "eslint-config-prettier": "^8.5.0", 26 | "eslint-plugin-prettier": "^4.2.1", 27 | "eslint-plugin-vue": "^9.8.0", 28 | "prettier": "^2.8.1", 29 | "sass": "^1.57.1", 30 | "typescript": "^4.9.4", 31 | "vite": "^4.0.3", 32 | "vite-plugin-monkey": "^2.10.2", 33 | "vue-tsc": "^1.0.18" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/leaflet': ^1.9.0 5 | '@typescript-eslint/eslint-plugin': ^5.47.1 6 | '@typescript-eslint/parser': ^5.47.1 7 | '@vitejs/plugin-vue': ^4.0.0 8 | '@vue/eslint-config-typescript': ^11.0.2 9 | eslint: ^8.30.0 10 | eslint-config-alloy: ^4.7.0 11 | eslint-config-prettier: ^8.5.0 12 | eslint-plugin-prettier: ^4.2.1 13 | eslint-plugin-vue: ^9.8.0 14 | eventemitter3: ^5.0.0 15 | pinia: ^2.0.28 16 | prettier: ^2.8.1 17 | sass: ^1.57.1 18 | typescript: ^4.9.4 19 | vant: ^4.0.6 20 | vite: ^4.0.3 21 | vite-plugin-monkey: ^2.10.2 22 | vue: ^3.2.45 23 | vue-tsc: ^1.0.18 24 | 25 | dependencies: 26 | '@types/leaflet': 1.9.0 27 | eventemitter3: 5.0.0 28 | pinia: 2.0.28_prq2uz4lho2pwp6irk4cfkrxwu 29 | vant: 4.0.6_vue@3.2.45 30 | vue: 3.2.45 31 | 32 | devDependencies: 33 | '@typescript-eslint/eslint-plugin': 5.47.1_txmweb6yn7coi7nfrp22gpyqmy 34 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 35 | '@vitejs/plugin-vue': 4.0.0_vite@4.0.3+vue@3.2.45 36 | '@vue/eslint-config-typescript': 11.0.2_eh2oupyoc3mviptu6zovyv6md4 37 | eslint: 8.30.0 38 | eslint-config-alloy: 4.7.0_aquz7nympv5of5li5f2v4fy5ii 39 | eslint-config-prettier: 8.5.0_eslint@8.30.0 40 | eslint-plugin-prettier: 4.2.1_kl4pe43v5b43npmso5hoplpbyi 41 | eslint-plugin-vue: 9.8.0_eslint@8.30.0 42 | prettier: 2.8.1 43 | sass: 1.57.1 44 | typescript: 4.9.4 45 | vite: 4.0.3_sass@1.57.1 46 | vite-plugin-monkey: 2.10.2_vite@4.0.3 47 | vue-tsc: 1.0.18_typescript@4.9.4 48 | 49 | packages: 50 | 51 | /@babel/helper-string-parser/7.19.4: 52 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 53 | engines: {node: '>=6.9.0'} 54 | 55 | /@babel/helper-validator-identifier/7.19.1: 56 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 57 | engines: {node: '>=6.9.0'} 58 | 59 | /@babel/parser/7.20.7: 60 | resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} 61 | engines: {node: '>=6.0.0'} 62 | hasBin: true 63 | dependencies: 64 | '@babel/types': 7.20.7 65 | 66 | /@babel/types/7.20.7: 67 | resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} 68 | engines: {node: '>=6.9.0'} 69 | dependencies: 70 | '@babel/helper-string-parser': 7.19.4 71 | '@babel/helper-validator-identifier': 7.19.1 72 | to-fast-properties: 2.0.0 73 | 74 | /@esbuild/android-arm/0.16.12: 75 | resolution: {integrity: sha512-CTWgMJtpCyCltrvipZrrcjjRu+rzm6pf9V8muCsJqtKujR3kPmU4ffbckvugNNaRmhxAF1ZI3J+0FUIFLFg8KA==} 76 | engines: {node: '>=12'} 77 | cpu: [arm] 78 | os: [android] 79 | requiresBuild: true 80 | dev: true 81 | optional: true 82 | 83 | /@esbuild/android-arm64/0.16.12: 84 | resolution: {integrity: sha512-0LacmiIW+X0/LOLMZqYtZ7d4uY9fxYABAYhSSOu+OGQVBqH4N5eIYgkT7bBFnR4Nm3qo6qS3RpHKVrDASqj/uQ==} 85 | engines: {node: '>=12'} 86 | cpu: [arm64] 87 | os: [android] 88 | requiresBuild: true 89 | dev: true 90 | optional: true 91 | 92 | /@esbuild/android-x64/0.16.12: 93 | resolution: {integrity: sha512-sS5CR3XBKQXYpSGMM28VuiUnbX83Z+aWPZzClW+OB2JquKqxoiwdqucJ5qvXS8pM6Up3RtJfDnRQZkz3en2z5g==} 94 | engines: {node: '>=12'} 95 | cpu: [x64] 96 | os: [android] 97 | requiresBuild: true 98 | dev: true 99 | optional: true 100 | 101 | /@esbuild/darwin-arm64/0.16.12: 102 | resolution: {integrity: sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ==} 103 | engines: {node: '>=12'} 104 | cpu: [arm64] 105 | os: [darwin] 106 | requiresBuild: true 107 | dev: true 108 | optional: true 109 | 110 | /@esbuild/darwin-x64/0.16.12: 111 | resolution: {integrity: sha512-ApGRA6X5txIcxV0095X4e4KKv87HAEXfuDRcGTniDWUUN+qPia8sl/BqG/0IomytQWajnUn4C7TOwHduk/FXBQ==} 112 | engines: {node: '>=12'} 113 | cpu: [x64] 114 | os: [darwin] 115 | requiresBuild: true 116 | dev: true 117 | optional: true 118 | 119 | /@esbuild/freebsd-arm64/0.16.12: 120 | resolution: {integrity: sha512-AMdK2gA9EU83ccXCWS1B/KcWYZCj4P3vDofZZkl/F/sBv/fphi2oUqUTox/g5GMcIxk8CF1CVYTC82+iBSyiUg==} 121 | engines: {node: '>=12'} 122 | cpu: [arm64] 123 | os: [freebsd] 124 | requiresBuild: true 125 | dev: true 126 | optional: true 127 | 128 | /@esbuild/freebsd-x64/0.16.12: 129 | resolution: {integrity: sha512-KUKB9w8G/xaAbD39t6gnRBuhQ8vIYYlxGT2I+mT6UGRnCGRr1+ePFIGBQmf5V16nxylgUuuWVW1zU2ktKkf6WQ==} 130 | engines: {node: '>=12'} 131 | cpu: [x64] 132 | os: [freebsd] 133 | requiresBuild: true 134 | dev: true 135 | optional: true 136 | 137 | /@esbuild/linux-arm/0.16.12: 138 | resolution: {integrity: sha512-vhDdIv6z4eL0FJyNVfdr3C/vdd/Wc6h1683GJsFoJzfKb92dU/v88FhWdigg0i6+3TsbSDeWbsPUXb4dif2abg==} 139 | engines: {node: '>=12'} 140 | cpu: [arm] 141 | os: [linux] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | /@esbuild/linux-arm64/0.16.12: 147 | resolution: {integrity: sha512-29HXMLpLklDfmw7T2buGqq3HImSUaZ1ArmrPOMaNiZZQptOSZs32SQtOHEl8xWX5vfdwZqrBfNf8Te4nArVzKQ==} 148 | engines: {node: '>=12'} 149 | cpu: [arm64] 150 | os: [linux] 151 | requiresBuild: true 152 | dev: true 153 | optional: true 154 | 155 | /@esbuild/linux-ia32/0.16.12: 156 | resolution: {integrity: sha512-JFDuNDTTfgD1LJg7wHA42o2uAO/9VzHYK0leAVnCQE/FdMB599YMH73ux+nS0xGr79pv/BK+hrmdRin3iLgQjg==} 157 | engines: {node: '>=12'} 158 | cpu: [ia32] 159 | os: [linux] 160 | requiresBuild: true 161 | dev: true 162 | optional: true 163 | 164 | /@esbuild/linux-loong64/0.16.12: 165 | resolution: {integrity: sha512-xTGzVPqm6WKfCC0iuj1fryIWr1NWEM8DMhAIo+4rFgUtwy/lfHl+Obvus4oddzRDbBetLLmojfVZGmt/g/g+Rw==} 166 | engines: {node: '>=12'} 167 | cpu: [loong64] 168 | os: [linux] 169 | requiresBuild: true 170 | dev: true 171 | optional: true 172 | 173 | /@esbuild/linux-mips64el/0.16.12: 174 | resolution: {integrity: sha512-zI1cNgHa3Gol+vPYjIYHzKhU6qMyOQrvZ82REr5Fv7rlh5PG6SkkuCoH7IryPqR+BK2c/7oISGsvPJPGnO2bHQ==} 175 | engines: {node: '>=12'} 176 | cpu: [mips64el] 177 | os: [linux] 178 | requiresBuild: true 179 | dev: true 180 | optional: true 181 | 182 | /@esbuild/linux-ppc64/0.16.12: 183 | resolution: {integrity: sha512-/C8OFXExoMmvTDIOAM54AhtmmuDHKoedUd0Otpfw3+AuuVGemA1nQK99oN909uZbLEU6Bi+7JheFMG3xGfZluQ==} 184 | engines: {node: '>=12'} 185 | cpu: [ppc64] 186 | os: [linux] 187 | requiresBuild: true 188 | dev: true 189 | optional: true 190 | 191 | /@esbuild/linux-riscv64/0.16.12: 192 | resolution: {integrity: sha512-qeouyyc8kAGV6Ni6Isz8hUsKMr00EHgVwUKWNp1r4l88fHEoNTDB8mmestvykW6MrstoGI7g2EAsgr0nxmuGYg==} 193 | engines: {node: '>=12'} 194 | cpu: [riscv64] 195 | os: [linux] 196 | requiresBuild: true 197 | dev: true 198 | optional: true 199 | 200 | /@esbuild/linux-s390x/0.16.12: 201 | resolution: {integrity: sha512-s9AyI/5vz1U4NNqnacEGFElqwnHusWa81pskAf8JNDM2eb6b2E6PpBmT8RzeZv6/TxE6/TADn2g9bb0jOUmXwQ==} 202 | engines: {node: '>=12'} 203 | cpu: [s390x] 204 | os: [linux] 205 | requiresBuild: true 206 | dev: true 207 | optional: true 208 | 209 | /@esbuild/linux-x64/0.16.12: 210 | resolution: {integrity: sha512-e8YA7GQGLWhvakBecLptUiKxOk4E/EPtSckS1i0MGYctW8ouvNUoh7xnU15PGO2jz7BYl8q1R6g0gE5HFtzpqQ==} 211 | engines: {node: '>=12'} 212 | cpu: [x64] 213 | os: [linux] 214 | requiresBuild: true 215 | dev: true 216 | optional: true 217 | 218 | /@esbuild/netbsd-x64/0.16.12: 219 | resolution: {integrity: sha512-z2+kUxmOqBS+6SRVd57iOLIHE8oGOoEnGVAmwjm2aENSP35HPS+5cK+FL1l+rhrsJOFIPrNHqDUNechpuG96Sg==} 220 | engines: {node: '>=12'} 221 | cpu: [x64] 222 | os: [netbsd] 223 | requiresBuild: true 224 | dev: true 225 | optional: true 226 | 227 | /@esbuild/openbsd-x64/0.16.12: 228 | resolution: {integrity: sha512-PAonw4LqIybwn2/vJujhbg1N9W2W8lw9RtXIvvZoyzoA/4rA4CpiuahVbASmQohiytRsixbNoIOUSjRygKXpyA==} 229 | engines: {node: '>=12'} 230 | cpu: [x64] 231 | os: [openbsd] 232 | requiresBuild: true 233 | dev: true 234 | optional: true 235 | 236 | /@esbuild/sunos-x64/0.16.12: 237 | resolution: {integrity: sha512-+wr1tkt1RERi+Zi/iQtkzmMH4nS8+7UIRxjcyRz7lur84wCkAITT50Olq/HiT4JN2X2bjtlOV6vt7ptW5Gw60Q==} 238 | engines: {node: '>=12'} 239 | cpu: [x64] 240 | os: [sunos] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | /@esbuild/win32-arm64/0.16.12: 246 | resolution: {integrity: sha512-XEjeUSHmjsAOJk8+pXJu9pFY2O5KKQbHXZWQylJzQuIBeiGrpMeq9sTVrHefHxMOyxUgoKQTcaTS+VK/K5SviA==} 247 | engines: {node: '>=12'} 248 | cpu: [arm64] 249 | os: [win32] 250 | requiresBuild: true 251 | dev: true 252 | optional: true 253 | 254 | /@esbuild/win32-ia32/0.16.12: 255 | resolution: {integrity: sha512-eRKPM7e0IecUAUYr2alW7JGDejrFJXmpjt4MlfonmQ5Rz9HWpKFGCjuuIRgKO7W9C/CWVFXdJ2GjddsBXqQI4A==} 256 | engines: {node: '>=12'} 257 | cpu: [ia32] 258 | os: [win32] 259 | requiresBuild: true 260 | dev: true 261 | optional: true 262 | 263 | /@esbuild/win32-x64/0.16.12: 264 | resolution: {integrity: sha512-iPYKN78t3op2+erv2frW568j1q0RpqX6JOLZ7oPPaAV1VaF7dDstOrNw37PVOYoTWE11pV4A1XUitpdEFNIsPg==} 265 | engines: {node: '>=12'} 266 | cpu: [x64] 267 | os: [win32] 268 | requiresBuild: true 269 | dev: true 270 | optional: true 271 | 272 | /@eslint/eslintrc/1.4.0: 273 | resolution: {integrity: sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==} 274 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 275 | dependencies: 276 | ajv: 6.12.6 277 | debug: 4.3.4 278 | espree: 9.4.1 279 | globals: 13.19.0 280 | ignore: 5.2.4 281 | import-fresh: 3.3.0 282 | js-yaml: 4.1.0 283 | minimatch: 3.1.2 284 | strip-json-comments: 3.1.1 285 | transitivePeerDependencies: 286 | - supports-color 287 | dev: true 288 | 289 | /@humanwhocodes/config-array/0.11.8: 290 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 291 | engines: {node: '>=10.10.0'} 292 | dependencies: 293 | '@humanwhocodes/object-schema': 1.2.1 294 | debug: 4.3.4 295 | minimatch: 3.1.2 296 | transitivePeerDependencies: 297 | - supports-color 298 | dev: true 299 | 300 | /@humanwhocodes/module-importer/1.0.1: 301 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 302 | engines: {node: '>=12.22'} 303 | dev: true 304 | 305 | /@humanwhocodes/object-schema/1.2.1: 306 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 307 | dev: true 308 | 309 | /@nodelib/fs.scandir/2.1.5: 310 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 311 | engines: {node: '>= 8'} 312 | dependencies: 313 | '@nodelib/fs.stat': 2.0.5 314 | run-parallel: 1.2.0 315 | dev: true 316 | 317 | /@nodelib/fs.stat/2.0.5: 318 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 319 | engines: {node: '>= 8'} 320 | dev: true 321 | 322 | /@nodelib/fs.walk/1.2.8: 323 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 324 | engines: {node: '>= 8'} 325 | dependencies: 326 | '@nodelib/fs.scandir': 2.1.5 327 | fastq: 1.14.0 328 | dev: true 329 | 330 | /@types/geojson/7946.0.10: 331 | resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==} 332 | dev: false 333 | 334 | /@types/json-schema/7.0.11: 335 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 336 | dev: true 337 | 338 | /@types/leaflet/1.9.0: 339 | resolution: {integrity: sha512-7LeOSj7EloC5UcyOMo+1kc3S1UT3MjJxwqsMT1d2PTyvQz53w0Y0oSSk9nwZnOZubCmBvpSNGceucxiq+ZPEUw==} 340 | dependencies: 341 | '@types/geojson': 7946.0.10 342 | dev: false 343 | 344 | /@types/semver/7.3.13: 345 | resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} 346 | dev: true 347 | 348 | /@typescript-eslint/eslint-plugin/5.47.1_txmweb6yn7coi7nfrp22gpyqmy: 349 | resolution: {integrity: sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg==} 350 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 351 | peerDependencies: 352 | '@typescript-eslint/parser': ^5.0.0 353 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 354 | typescript: '*' 355 | peerDependenciesMeta: 356 | typescript: 357 | optional: true 358 | dependencies: 359 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 360 | '@typescript-eslint/scope-manager': 5.47.1 361 | '@typescript-eslint/type-utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 362 | '@typescript-eslint/utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 363 | debug: 4.3.4 364 | eslint: 8.30.0 365 | ignore: 5.2.4 366 | natural-compare-lite: 1.4.0 367 | regexpp: 3.2.0 368 | semver: 7.3.8 369 | tsutils: 3.21.0_typescript@4.9.4 370 | typescript: 4.9.4 371 | transitivePeerDependencies: 372 | - supports-color 373 | dev: true 374 | 375 | /@typescript-eslint/parser/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 376 | resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==} 377 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 378 | peerDependencies: 379 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 380 | typescript: '*' 381 | peerDependenciesMeta: 382 | typescript: 383 | optional: true 384 | dependencies: 385 | '@typescript-eslint/scope-manager': 5.47.1 386 | '@typescript-eslint/types': 5.47.1 387 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 388 | debug: 4.3.4 389 | eslint: 8.30.0 390 | typescript: 4.9.4 391 | transitivePeerDependencies: 392 | - supports-color 393 | dev: true 394 | 395 | /@typescript-eslint/scope-manager/5.47.1: 396 | resolution: {integrity: sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==} 397 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 398 | dependencies: 399 | '@typescript-eslint/types': 5.47.1 400 | '@typescript-eslint/visitor-keys': 5.47.1 401 | dev: true 402 | 403 | /@typescript-eslint/type-utils/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 404 | resolution: {integrity: sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w==} 405 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 406 | peerDependencies: 407 | eslint: '*' 408 | typescript: '*' 409 | peerDependenciesMeta: 410 | typescript: 411 | optional: true 412 | dependencies: 413 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 414 | '@typescript-eslint/utils': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 415 | debug: 4.3.4 416 | eslint: 8.30.0 417 | tsutils: 3.21.0_typescript@4.9.4 418 | typescript: 4.9.4 419 | transitivePeerDependencies: 420 | - supports-color 421 | dev: true 422 | 423 | /@typescript-eslint/types/5.47.1: 424 | resolution: {integrity: sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==} 425 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 426 | dev: true 427 | 428 | /@typescript-eslint/typescript-estree/5.47.1_typescript@4.9.4: 429 | resolution: {integrity: sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==} 430 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 431 | peerDependencies: 432 | typescript: '*' 433 | peerDependenciesMeta: 434 | typescript: 435 | optional: true 436 | dependencies: 437 | '@typescript-eslint/types': 5.47.1 438 | '@typescript-eslint/visitor-keys': 5.47.1 439 | debug: 4.3.4 440 | globby: 11.1.0 441 | is-glob: 4.0.3 442 | semver: 7.3.8 443 | tsutils: 3.21.0_typescript@4.9.4 444 | typescript: 4.9.4 445 | transitivePeerDependencies: 446 | - supports-color 447 | dev: true 448 | 449 | /@typescript-eslint/utils/5.47.1_lzzuuodtsqwxnvqeq4g4likcqa: 450 | resolution: {integrity: sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw==} 451 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 452 | peerDependencies: 453 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 454 | dependencies: 455 | '@types/json-schema': 7.0.11 456 | '@types/semver': 7.3.13 457 | '@typescript-eslint/scope-manager': 5.47.1 458 | '@typescript-eslint/types': 5.47.1 459 | '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 460 | eslint: 8.30.0 461 | eslint-scope: 5.1.1 462 | eslint-utils: 3.0.0_eslint@8.30.0 463 | semver: 7.3.8 464 | transitivePeerDependencies: 465 | - supports-color 466 | - typescript 467 | dev: true 468 | 469 | /@typescript-eslint/visitor-keys/5.47.1: 470 | resolution: {integrity: sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==} 471 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 472 | dependencies: 473 | '@typescript-eslint/types': 5.47.1 474 | eslint-visitor-keys: 3.3.0 475 | dev: true 476 | 477 | /@vant/popperjs/1.3.0: 478 | resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} 479 | dev: false 480 | 481 | /@vant/use/1.4.3: 482 | resolution: {integrity: sha512-rSnETN7P9qT1WbItMpQxBqe3cHeK2ZFYp1sCxWUXaTeI71TqA8sOdzC36ledZ36NQgFNTch9fsRPYOkrCgZfQA==} 483 | dev: false 484 | 485 | /@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45: 486 | resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} 487 | engines: {node: ^14.18.0 || >=16.0.0} 488 | peerDependencies: 489 | vite: ^4.0.0 490 | vue: ^3.2.25 491 | dependencies: 492 | vite: 4.0.3_sass@1.57.1 493 | vue: 3.2.45 494 | dev: true 495 | 496 | /@volar/language-core/1.0.18: 497 | resolution: {integrity: sha512-PFrqAksKhiuAqNV4fefoMilX+JutVq0Z3iM14xjLvWPv68fs2dLedwU84GiHfSPTMmRiPCJ2HhH2rz4qNY42lA==} 498 | dependencies: 499 | '@volar/source-map': 1.0.18 500 | '@vue/reactivity': 3.2.45 501 | muggle-string: 0.1.0 502 | dev: true 503 | 504 | /@volar/source-map/1.0.18: 505 | resolution: {integrity: sha512-D8AcjrT2ukG5XiZhtSQBhcvL1TTlWOebCqS//Z/hGLGQZjpZHWaKD4OyDzKDzM0U9EtOuDh9rttnabCHDPvY2Q==} 506 | dependencies: 507 | muggle-string: 0.1.0 508 | dev: true 509 | 510 | /@volar/typescript/1.0.18: 511 | resolution: {integrity: sha512-xpH1Ij+PKtbIKEEYU2bF0llBRmu+ojjm/UA1WHNpi/dvsFWTIZcPniuqYEpPc32Zq/f8OPk98HbM2Oj5eue+vA==} 512 | dependencies: 513 | '@volar/language-core': 1.0.18 514 | dev: true 515 | 516 | /@volar/vue-language-core/1.0.18: 517 | resolution: {integrity: sha512-1yJcXYz9SdQUYoKWPbnr1SgMsBGXH29hS8W47p46P8Mm+5mmDdR/GFQw2+Zo5kAIS8vtLstlowI1Okoy7HFzIQ==} 518 | dependencies: 519 | '@volar/language-core': 1.0.18 520 | '@volar/source-map': 1.0.18 521 | '@vue/compiler-dom': 3.2.45 522 | '@vue/compiler-sfc': 3.2.45 523 | '@vue/reactivity': 3.2.45 524 | '@vue/shared': 3.2.45 525 | minimatch: 5.1.2 526 | vue-template-compiler: 2.7.14 527 | dev: true 528 | 529 | /@volar/vue-typescript/1.0.18: 530 | resolution: {integrity: sha512-pfi2/vTLgAPeRNgWzPFFv14YoLc3MnPMVKxl17ZLHStFgROUWQetTN+44FUWVYIl820MesMsyRv4kAIak0XGIQ==} 531 | dependencies: 532 | '@volar/typescript': 1.0.18 533 | '@volar/vue-language-core': 1.0.18 534 | dev: true 535 | 536 | /@vue/compiler-core/3.2.45: 537 | resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} 538 | dependencies: 539 | '@babel/parser': 7.20.7 540 | '@vue/shared': 3.2.45 541 | estree-walker: 2.0.2 542 | source-map: 0.6.1 543 | 544 | /@vue/compiler-dom/3.2.45: 545 | resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} 546 | dependencies: 547 | '@vue/compiler-core': 3.2.45 548 | '@vue/shared': 3.2.45 549 | 550 | /@vue/compiler-sfc/3.2.45: 551 | resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} 552 | dependencies: 553 | '@babel/parser': 7.20.7 554 | '@vue/compiler-core': 3.2.45 555 | '@vue/compiler-dom': 3.2.45 556 | '@vue/compiler-ssr': 3.2.45 557 | '@vue/reactivity-transform': 3.2.45 558 | '@vue/shared': 3.2.45 559 | estree-walker: 2.0.2 560 | magic-string: 0.25.9 561 | postcss: 8.4.20 562 | source-map: 0.6.1 563 | 564 | /@vue/compiler-ssr/3.2.45: 565 | resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} 566 | dependencies: 567 | '@vue/compiler-dom': 3.2.45 568 | '@vue/shared': 3.2.45 569 | 570 | /@vue/devtools-api/6.4.5: 571 | resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} 572 | dev: false 573 | 574 | /@vue/eslint-config-typescript/11.0.2_eh2oupyoc3mviptu6zovyv6md4: 575 | resolution: {integrity: sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw==} 576 | engines: {node: ^14.17.0 || >=16.0.0} 577 | peerDependencies: 578 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 579 | eslint-plugin-vue: ^9.0.0 580 | typescript: '*' 581 | peerDependenciesMeta: 582 | typescript: 583 | optional: true 584 | dependencies: 585 | '@typescript-eslint/eslint-plugin': 5.47.1_txmweb6yn7coi7nfrp22gpyqmy 586 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 587 | eslint: 8.30.0 588 | eslint-plugin-vue: 9.8.0_eslint@8.30.0 589 | typescript: 4.9.4 590 | vue-eslint-parser: 9.1.0_eslint@8.30.0 591 | transitivePeerDependencies: 592 | - supports-color 593 | dev: true 594 | 595 | /@vue/reactivity-transform/3.2.45: 596 | resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} 597 | dependencies: 598 | '@babel/parser': 7.20.7 599 | '@vue/compiler-core': 3.2.45 600 | '@vue/shared': 3.2.45 601 | estree-walker: 2.0.2 602 | magic-string: 0.25.9 603 | 604 | /@vue/reactivity/3.2.45: 605 | resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} 606 | dependencies: 607 | '@vue/shared': 3.2.45 608 | 609 | /@vue/runtime-core/3.2.45: 610 | resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} 611 | dependencies: 612 | '@vue/reactivity': 3.2.45 613 | '@vue/shared': 3.2.45 614 | 615 | /@vue/runtime-dom/3.2.45: 616 | resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} 617 | dependencies: 618 | '@vue/runtime-core': 3.2.45 619 | '@vue/shared': 3.2.45 620 | csstype: 2.6.21 621 | 622 | /@vue/server-renderer/3.2.45_vue@3.2.45: 623 | resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==} 624 | peerDependencies: 625 | vue: 3.2.45 626 | dependencies: 627 | '@vue/compiler-ssr': 3.2.45 628 | '@vue/shared': 3.2.45 629 | vue: 3.2.45 630 | 631 | /@vue/shared/3.2.45: 632 | resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} 633 | 634 | /acorn-jsx/5.3.2_acorn@8.8.1: 635 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 636 | peerDependencies: 637 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 638 | dependencies: 639 | acorn: 8.8.1 640 | dev: true 641 | 642 | /acorn/8.8.1: 643 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 644 | engines: {node: '>=0.4.0'} 645 | hasBin: true 646 | dev: true 647 | 648 | /address/1.2.2: 649 | resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} 650 | engines: {node: '>= 10.0.0'} 651 | dev: true 652 | 653 | /ajv/6.12.6: 654 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 655 | dependencies: 656 | fast-deep-equal: 3.1.3 657 | fast-json-stable-stringify: 2.1.0 658 | json-schema-traverse: 0.4.1 659 | uri-js: 4.4.1 660 | dev: true 661 | 662 | /ansi-regex/5.0.1: 663 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 664 | engines: {node: '>=8'} 665 | dev: true 666 | 667 | /ansi-styles/4.3.0: 668 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 669 | engines: {node: '>=8'} 670 | dependencies: 671 | color-convert: 2.0.1 672 | dev: true 673 | 674 | /anymatch/3.1.3: 675 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 676 | engines: {node: '>= 8'} 677 | dependencies: 678 | normalize-path: 3.0.0 679 | picomatch: 2.3.1 680 | dev: true 681 | 682 | /argparse/2.0.1: 683 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 684 | dev: true 685 | 686 | /array-union/2.1.0: 687 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 688 | engines: {node: '>=8'} 689 | dev: true 690 | 691 | /balanced-match/1.0.2: 692 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 693 | dev: true 694 | 695 | /binary-extensions/2.2.0: 696 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 697 | engines: {node: '>=8'} 698 | dev: true 699 | 700 | /boolbase/1.0.0: 701 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 702 | dev: true 703 | 704 | /brace-expansion/1.1.11: 705 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 706 | dependencies: 707 | balanced-match: 1.0.2 708 | concat-map: 0.0.1 709 | dev: true 710 | 711 | /brace-expansion/2.0.1: 712 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 713 | dependencies: 714 | balanced-match: 1.0.2 715 | dev: true 716 | 717 | /braces/3.0.2: 718 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 719 | engines: {node: '>=8'} 720 | dependencies: 721 | fill-range: 7.0.1 722 | dev: true 723 | 724 | /callsites/3.1.0: 725 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 726 | engines: {node: '>=6'} 727 | dev: true 728 | 729 | /chalk/4.1.2: 730 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 731 | engines: {node: '>=10'} 732 | dependencies: 733 | ansi-styles: 4.3.0 734 | supports-color: 7.2.0 735 | dev: true 736 | 737 | /chokidar/3.5.3: 738 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 739 | engines: {node: '>= 8.10.0'} 740 | dependencies: 741 | anymatch: 3.1.3 742 | braces: 3.0.2 743 | glob-parent: 5.1.2 744 | is-binary-path: 2.1.0 745 | is-glob: 4.0.3 746 | normalize-path: 3.0.0 747 | readdirp: 3.6.0 748 | optionalDependencies: 749 | fsevents: 2.3.2 750 | dev: true 751 | 752 | /color-convert/2.0.1: 753 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 754 | engines: {node: '>=7.0.0'} 755 | dependencies: 756 | color-name: 1.1.4 757 | dev: true 758 | 759 | /color-name/1.1.4: 760 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 761 | dev: true 762 | 763 | /concat-map/0.0.1: 764 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 765 | dev: true 766 | 767 | /cross-spawn/7.0.3: 768 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 769 | engines: {node: '>= 8'} 770 | dependencies: 771 | path-key: 3.1.1 772 | shebang-command: 2.0.0 773 | which: 2.0.2 774 | dev: true 775 | 776 | /cssesc/3.0.0: 777 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 778 | engines: {node: '>=4'} 779 | hasBin: true 780 | dev: true 781 | 782 | /csstype/2.6.21: 783 | resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} 784 | 785 | /de-indent/1.0.2: 786 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 787 | dev: true 788 | 789 | /debug/4.3.4: 790 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 791 | engines: {node: '>=6.0'} 792 | peerDependencies: 793 | supports-color: '*' 794 | peerDependenciesMeta: 795 | supports-color: 796 | optional: true 797 | dependencies: 798 | ms: 2.1.2 799 | dev: true 800 | 801 | /deep-is/0.1.4: 802 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 803 | dev: true 804 | 805 | /define-lazy-prop/2.0.0: 806 | resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} 807 | engines: {node: '>=8'} 808 | dev: true 809 | 810 | /detect-port/1.5.1: 811 | resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} 812 | hasBin: true 813 | dependencies: 814 | address: 1.2.2 815 | debug: 4.3.4 816 | transitivePeerDependencies: 817 | - supports-color 818 | dev: true 819 | 820 | /dir-glob/3.0.1: 821 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 822 | engines: {node: '>=8'} 823 | dependencies: 824 | path-type: 4.0.0 825 | dev: true 826 | 827 | /doctrine/3.0.0: 828 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 829 | engines: {node: '>=6.0.0'} 830 | dependencies: 831 | esutils: 2.0.3 832 | dev: true 833 | 834 | /dom-serializer/2.0.0: 835 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 836 | dependencies: 837 | domelementtype: 2.3.0 838 | domhandler: 5.0.3 839 | entities: 4.4.0 840 | dev: true 841 | 842 | /domelementtype/2.3.0: 843 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 844 | dev: true 845 | 846 | /domhandler/5.0.3: 847 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 848 | engines: {node: '>= 4'} 849 | dependencies: 850 | domelementtype: 2.3.0 851 | dev: true 852 | 853 | /domutils/3.0.1: 854 | resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} 855 | dependencies: 856 | dom-serializer: 2.0.0 857 | domelementtype: 2.3.0 858 | domhandler: 5.0.3 859 | dev: true 860 | 861 | /entities/4.4.0: 862 | resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} 863 | engines: {node: '>=0.12'} 864 | dev: true 865 | 866 | /esbuild/0.16.12: 867 | resolution: {integrity: sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g==} 868 | engines: {node: '>=12'} 869 | hasBin: true 870 | requiresBuild: true 871 | optionalDependencies: 872 | '@esbuild/android-arm': 0.16.12 873 | '@esbuild/android-arm64': 0.16.12 874 | '@esbuild/android-x64': 0.16.12 875 | '@esbuild/darwin-arm64': 0.16.12 876 | '@esbuild/darwin-x64': 0.16.12 877 | '@esbuild/freebsd-arm64': 0.16.12 878 | '@esbuild/freebsd-x64': 0.16.12 879 | '@esbuild/linux-arm': 0.16.12 880 | '@esbuild/linux-arm64': 0.16.12 881 | '@esbuild/linux-ia32': 0.16.12 882 | '@esbuild/linux-loong64': 0.16.12 883 | '@esbuild/linux-mips64el': 0.16.12 884 | '@esbuild/linux-ppc64': 0.16.12 885 | '@esbuild/linux-riscv64': 0.16.12 886 | '@esbuild/linux-s390x': 0.16.12 887 | '@esbuild/linux-x64': 0.16.12 888 | '@esbuild/netbsd-x64': 0.16.12 889 | '@esbuild/openbsd-x64': 0.16.12 890 | '@esbuild/sunos-x64': 0.16.12 891 | '@esbuild/win32-arm64': 0.16.12 892 | '@esbuild/win32-ia32': 0.16.12 893 | '@esbuild/win32-x64': 0.16.12 894 | dev: true 895 | 896 | /escape-string-regexp/4.0.0: 897 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 898 | engines: {node: '>=10'} 899 | dev: true 900 | 901 | /eslint-config-alloy/4.7.0_aquz7nympv5of5li5f2v4fy5ii: 902 | resolution: {integrity: sha512-e5wUP9SB/k2hBzzl2InpvG1toYWB4lRrJbAAdtDv8CUWsyxrznQZod4CrS1p3O+hf+PQhSqR2rbXLF4TvNWisw==} 903 | peerDependencies: 904 | '@babel/eslint-parser': 7.x 905 | '@babel/preset-react': 7.x 906 | '@typescript-eslint/eslint-plugin': '>=5.38.1' 907 | '@typescript-eslint/parser': 5.x 908 | eslint: '>=8.24.0' 909 | eslint-plugin-react: '>=7.31.8' 910 | eslint-plugin-vue: '>=9.5.1' 911 | typescript: 4.x 912 | vue-eslint-parser: 9.x 913 | peerDependenciesMeta: 914 | '@babel/eslint-parser': 915 | optional: true 916 | '@babel/preset-react': 917 | optional: true 918 | '@typescript-eslint/eslint-plugin': 919 | optional: true 920 | '@typescript-eslint/parser': 921 | optional: true 922 | eslint-plugin-react: 923 | optional: true 924 | eslint-plugin-vue: 925 | optional: true 926 | typescript: 927 | optional: true 928 | vue-eslint-parser: 929 | optional: true 930 | dependencies: 931 | '@typescript-eslint/eslint-plugin': 5.47.1_txmweb6yn7coi7nfrp22gpyqmy 932 | '@typescript-eslint/parser': 5.47.1_lzzuuodtsqwxnvqeq4g4likcqa 933 | eslint: 8.30.0 934 | eslint-plugin-vue: 9.8.0_eslint@8.30.0 935 | typescript: 4.9.4 936 | dev: true 937 | 938 | /eslint-config-prettier/8.5.0_eslint@8.30.0: 939 | resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 940 | hasBin: true 941 | peerDependencies: 942 | eslint: '>=7.0.0' 943 | dependencies: 944 | eslint: 8.30.0 945 | dev: true 946 | 947 | /eslint-plugin-prettier/4.2.1_kl4pe43v5b43npmso5hoplpbyi: 948 | resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 949 | engines: {node: '>=12.0.0'} 950 | peerDependencies: 951 | eslint: '>=7.28.0' 952 | eslint-config-prettier: '*' 953 | prettier: '>=2.0.0' 954 | peerDependenciesMeta: 955 | eslint-config-prettier: 956 | optional: true 957 | dependencies: 958 | eslint: 8.30.0 959 | eslint-config-prettier: 8.5.0_eslint@8.30.0 960 | prettier: 2.8.1 961 | prettier-linter-helpers: 1.0.0 962 | dev: true 963 | 964 | /eslint-plugin-vue/9.8.0_eslint@8.30.0: 965 | resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} 966 | engines: {node: ^14.17.0 || >=16.0.0} 967 | peerDependencies: 968 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 969 | dependencies: 970 | eslint: 8.30.0 971 | eslint-utils: 3.0.0_eslint@8.30.0 972 | natural-compare: 1.4.0 973 | nth-check: 2.1.1 974 | postcss-selector-parser: 6.0.11 975 | semver: 7.3.8 976 | vue-eslint-parser: 9.1.0_eslint@8.30.0 977 | xml-name-validator: 4.0.0 978 | transitivePeerDependencies: 979 | - supports-color 980 | dev: true 981 | 982 | /eslint-scope/5.1.1: 983 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 984 | engines: {node: '>=8.0.0'} 985 | dependencies: 986 | esrecurse: 4.3.0 987 | estraverse: 4.3.0 988 | dev: true 989 | 990 | /eslint-scope/7.1.1: 991 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 992 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 993 | dependencies: 994 | esrecurse: 4.3.0 995 | estraverse: 5.3.0 996 | dev: true 997 | 998 | /eslint-utils/3.0.0_eslint@8.30.0: 999 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 1000 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 1001 | peerDependencies: 1002 | eslint: '>=5' 1003 | dependencies: 1004 | eslint: 8.30.0 1005 | eslint-visitor-keys: 2.1.0 1006 | dev: true 1007 | 1008 | /eslint-visitor-keys/2.1.0: 1009 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 1010 | engines: {node: '>=10'} 1011 | dev: true 1012 | 1013 | /eslint-visitor-keys/3.3.0: 1014 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 1015 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1016 | dev: true 1017 | 1018 | /eslint/8.30.0: 1019 | resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} 1020 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1021 | hasBin: true 1022 | dependencies: 1023 | '@eslint/eslintrc': 1.4.0 1024 | '@humanwhocodes/config-array': 0.11.8 1025 | '@humanwhocodes/module-importer': 1.0.1 1026 | '@nodelib/fs.walk': 1.2.8 1027 | ajv: 6.12.6 1028 | chalk: 4.1.2 1029 | cross-spawn: 7.0.3 1030 | debug: 4.3.4 1031 | doctrine: 3.0.0 1032 | escape-string-regexp: 4.0.0 1033 | eslint-scope: 7.1.1 1034 | eslint-utils: 3.0.0_eslint@8.30.0 1035 | eslint-visitor-keys: 3.3.0 1036 | espree: 9.4.1 1037 | esquery: 1.4.0 1038 | esutils: 2.0.3 1039 | fast-deep-equal: 3.1.3 1040 | file-entry-cache: 6.0.1 1041 | find-up: 5.0.0 1042 | glob-parent: 6.0.2 1043 | globals: 13.19.0 1044 | grapheme-splitter: 1.0.4 1045 | ignore: 5.2.4 1046 | import-fresh: 3.3.0 1047 | imurmurhash: 0.1.4 1048 | is-glob: 4.0.3 1049 | is-path-inside: 3.0.3 1050 | js-sdsl: 4.2.0 1051 | js-yaml: 4.1.0 1052 | json-stable-stringify-without-jsonify: 1.0.1 1053 | levn: 0.4.1 1054 | lodash.merge: 4.6.2 1055 | minimatch: 3.1.2 1056 | natural-compare: 1.4.0 1057 | optionator: 0.9.1 1058 | regexpp: 3.2.0 1059 | strip-ansi: 6.0.1 1060 | strip-json-comments: 3.1.1 1061 | text-table: 0.2.0 1062 | transitivePeerDependencies: 1063 | - supports-color 1064 | dev: true 1065 | 1066 | /espree/9.4.1: 1067 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} 1068 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1069 | dependencies: 1070 | acorn: 8.8.1 1071 | acorn-jsx: 5.3.2_acorn@8.8.1 1072 | eslint-visitor-keys: 3.3.0 1073 | dev: true 1074 | 1075 | /esquery/1.4.0: 1076 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 1077 | engines: {node: '>=0.10'} 1078 | dependencies: 1079 | estraverse: 5.3.0 1080 | dev: true 1081 | 1082 | /esrecurse/4.3.0: 1083 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1084 | engines: {node: '>=4.0'} 1085 | dependencies: 1086 | estraverse: 5.3.0 1087 | dev: true 1088 | 1089 | /estraverse/4.3.0: 1090 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1091 | engines: {node: '>=4.0'} 1092 | dev: true 1093 | 1094 | /estraverse/5.3.0: 1095 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1096 | engines: {node: '>=4.0'} 1097 | dev: true 1098 | 1099 | /estree-walker/2.0.2: 1100 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1101 | 1102 | /esutils/2.0.3: 1103 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1104 | engines: {node: '>=0.10.0'} 1105 | dev: true 1106 | 1107 | /eventemitter3/5.0.0: 1108 | resolution: {integrity: sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==} 1109 | dev: false 1110 | 1111 | /fast-deep-equal/3.1.3: 1112 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1113 | dev: true 1114 | 1115 | /fast-diff/1.2.0: 1116 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1117 | dev: true 1118 | 1119 | /fast-glob/3.2.12: 1120 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1121 | engines: {node: '>=8.6.0'} 1122 | dependencies: 1123 | '@nodelib/fs.stat': 2.0.5 1124 | '@nodelib/fs.walk': 1.2.8 1125 | glob-parent: 5.1.2 1126 | merge2: 1.4.1 1127 | micromatch: 4.0.5 1128 | dev: true 1129 | 1130 | /fast-json-stable-stringify/2.1.0: 1131 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1132 | dev: true 1133 | 1134 | /fast-levenshtein/2.0.6: 1135 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1136 | dev: true 1137 | 1138 | /fastq/1.14.0: 1139 | resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} 1140 | dependencies: 1141 | reusify: 1.0.4 1142 | dev: true 1143 | 1144 | /file-entry-cache/6.0.1: 1145 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1146 | engines: {node: ^10.12.0 || >=12.0.0} 1147 | dependencies: 1148 | flat-cache: 3.0.4 1149 | dev: true 1150 | 1151 | /fill-range/7.0.1: 1152 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1153 | engines: {node: '>=8'} 1154 | dependencies: 1155 | to-regex-range: 5.0.1 1156 | dev: true 1157 | 1158 | /find-up/5.0.0: 1159 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1160 | engines: {node: '>=10'} 1161 | dependencies: 1162 | locate-path: 6.0.0 1163 | path-exists: 4.0.0 1164 | dev: true 1165 | 1166 | /flat-cache/3.0.4: 1167 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1168 | engines: {node: ^10.12.0 || >=12.0.0} 1169 | dependencies: 1170 | flatted: 3.2.7 1171 | rimraf: 3.0.2 1172 | dev: true 1173 | 1174 | /flatted/3.2.7: 1175 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1176 | dev: true 1177 | 1178 | /fs.realpath/1.0.0: 1179 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1180 | dev: true 1181 | 1182 | /fsevents/2.3.2: 1183 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1184 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1185 | os: [darwin] 1186 | requiresBuild: true 1187 | dev: true 1188 | optional: true 1189 | 1190 | /function-bind/1.1.1: 1191 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1192 | dev: true 1193 | 1194 | /glob-parent/5.1.2: 1195 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1196 | engines: {node: '>= 6'} 1197 | dependencies: 1198 | is-glob: 4.0.3 1199 | dev: true 1200 | 1201 | /glob-parent/6.0.2: 1202 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1203 | engines: {node: '>=10.13.0'} 1204 | dependencies: 1205 | is-glob: 4.0.3 1206 | dev: true 1207 | 1208 | /glob/7.2.3: 1209 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1210 | dependencies: 1211 | fs.realpath: 1.0.0 1212 | inflight: 1.0.6 1213 | inherits: 2.0.4 1214 | minimatch: 3.1.2 1215 | once: 1.4.0 1216 | path-is-absolute: 1.0.1 1217 | dev: true 1218 | 1219 | /globals/13.19.0: 1220 | resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} 1221 | engines: {node: '>=8'} 1222 | dependencies: 1223 | type-fest: 0.20.2 1224 | dev: true 1225 | 1226 | /globby/11.1.0: 1227 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1228 | engines: {node: '>=10'} 1229 | dependencies: 1230 | array-union: 2.1.0 1231 | dir-glob: 3.0.1 1232 | fast-glob: 3.2.12 1233 | ignore: 5.2.4 1234 | merge2: 1.4.1 1235 | slash: 3.0.0 1236 | dev: true 1237 | 1238 | /grapheme-splitter/1.0.4: 1239 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1240 | dev: true 1241 | 1242 | /has-flag/4.0.0: 1243 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1244 | engines: {node: '>=8'} 1245 | dev: true 1246 | 1247 | /has/1.0.3: 1248 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1249 | engines: {node: '>= 0.4.0'} 1250 | dependencies: 1251 | function-bind: 1.1.1 1252 | dev: true 1253 | 1254 | /he/1.2.0: 1255 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1256 | hasBin: true 1257 | dev: true 1258 | 1259 | /htmlparser2/8.0.1: 1260 | resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} 1261 | dependencies: 1262 | domelementtype: 2.3.0 1263 | domhandler: 5.0.3 1264 | domutils: 3.0.1 1265 | entities: 4.4.0 1266 | dev: true 1267 | 1268 | /ignore/5.2.4: 1269 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1270 | engines: {node: '>= 4'} 1271 | dev: true 1272 | 1273 | /immutable/4.2.1: 1274 | resolution: {integrity: sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==} 1275 | dev: true 1276 | 1277 | /import-fresh/3.3.0: 1278 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1279 | engines: {node: '>=6'} 1280 | dependencies: 1281 | parent-module: 1.0.1 1282 | resolve-from: 4.0.0 1283 | dev: true 1284 | 1285 | /imurmurhash/0.1.4: 1286 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1287 | engines: {node: '>=0.8.19'} 1288 | dev: true 1289 | 1290 | /inflight/1.0.6: 1291 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1292 | dependencies: 1293 | once: 1.4.0 1294 | wrappy: 1.0.2 1295 | dev: true 1296 | 1297 | /inherits/2.0.4: 1298 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1299 | dev: true 1300 | 1301 | /is-binary-path/2.1.0: 1302 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1303 | engines: {node: '>=8'} 1304 | dependencies: 1305 | binary-extensions: 2.2.0 1306 | dev: true 1307 | 1308 | /is-core-module/2.11.0: 1309 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1310 | dependencies: 1311 | has: 1.0.3 1312 | dev: true 1313 | 1314 | /is-docker/2.2.1: 1315 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1316 | engines: {node: '>=8'} 1317 | hasBin: true 1318 | dev: true 1319 | 1320 | /is-extglob/2.1.1: 1321 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1322 | engines: {node: '>=0.10.0'} 1323 | dev: true 1324 | 1325 | /is-glob/4.0.3: 1326 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1327 | engines: {node: '>=0.10.0'} 1328 | dependencies: 1329 | is-extglob: 2.1.1 1330 | dev: true 1331 | 1332 | /is-number/7.0.0: 1333 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1334 | engines: {node: '>=0.12.0'} 1335 | dev: true 1336 | 1337 | /is-path-inside/3.0.3: 1338 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1339 | engines: {node: '>=8'} 1340 | dev: true 1341 | 1342 | /is-wsl/2.2.0: 1343 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1344 | engines: {node: '>=8'} 1345 | dependencies: 1346 | is-docker: 2.2.1 1347 | dev: true 1348 | 1349 | /isexe/2.0.0: 1350 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1351 | dev: true 1352 | 1353 | /js-sdsl/4.2.0: 1354 | resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} 1355 | dev: true 1356 | 1357 | /js-yaml/4.1.0: 1358 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1359 | hasBin: true 1360 | dependencies: 1361 | argparse: 2.0.1 1362 | dev: true 1363 | 1364 | /json-schema-traverse/0.4.1: 1365 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1366 | dev: true 1367 | 1368 | /json-stable-stringify-without-jsonify/1.0.1: 1369 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1370 | dev: true 1371 | 1372 | /levn/0.4.1: 1373 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1374 | engines: {node: '>= 0.8.0'} 1375 | dependencies: 1376 | prelude-ls: 1.2.1 1377 | type-check: 0.4.0 1378 | dev: true 1379 | 1380 | /locate-path/6.0.0: 1381 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1382 | engines: {node: '>=10'} 1383 | dependencies: 1384 | p-locate: 5.0.0 1385 | dev: true 1386 | 1387 | /lodash.merge/4.6.2: 1388 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1389 | dev: true 1390 | 1391 | /lodash/4.17.21: 1392 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1393 | dev: true 1394 | 1395 | /lru-cache/6.0.0: 1396 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1397 | engines: {node: '>=10'} 1398 | dependencies: 1399 | yallist: 4.0.0 1400 | dev: true 1401 | 1402 | /magic-string/0.25.9: 1403 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1404 | dependencies: 1405 | sourcemap-codec: 1.4.8 1406 | 1407 | /merge2/1.4.1: 1408 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1409 | engines: {node: '>= 8'} 1410 | dev: true 1411 | 1412 | /micromatch/4.0.5: 1413 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1414 | engines: {node: '>=8.6'} 1415 | dependencies: 1416 | braces: 3.0.2 1417 | picomatch: 2.3.1 1418 | dev: true 1419 | 1420 | /minimatch/3.1.2: 1421 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1422 | dependencies: 1423 | brace-expansion: 1.1.11 1424 | dev: true 1425 | 1426 | /minimatch/5.1.2: 1427 | resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} 1428 | engines: {node: '>=10'} 1429 | dependencies: 1430 | brace-expansion: 2.0.1 1431 | dev: true 1432 | 1433 | /mrmime/1.0.1: 1434 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 1435 | engines: {node: '>=10'} 1436 | dev: true 1437 | 1438 | /ms/2.1.2: 1439 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1440 | dev: true 1441 | 1442 | /muggle-string/0.1.0: 1443 | resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==} 1444 | dev: true 1445 | 1446 | /nanoid/3.3.4: 1447 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1448 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1449 | hasBin: true 1450 | 1451 | /natural-compare-lite/1.4.0: 1452 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1453 | dev: true 1454 | 1455 | /natural-compare/1.4.0: 1456 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1457 | dev: true 1458 | 1459 | /normalize-path/3.0.0: 1460 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1461 | engines: {node: '>=0.10.0'} 1462 | dev: true 1463 | 1464 | /nth-check/2.1.1: 1465 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1466 | dependencies: 1467 | boolbase: 1.0.0 1468 | dev: true 1469 | 1470 | /once/1.4.0: 1471 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1472 | dependencies: 1473 | wrappy: 1.0.2 1474 | dev: true 1475 | 1476 | /open/8.4.0: 1477 | resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} 1478 | engines: {node: '>=12'} 1479 | dependencies: 1480 | define-lazy-prop: 2.0.0 1481 | is-docker: 2.2.1 1482 | is-wsl: 2.2.0 1483 | dev: true 1484 | 1485 | /optionator/0.9.1: 1486 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1487 | engines: {node: '>= 0.8.0'} 1488 | dependencies: 1489 | deep-is: 0.1.4 1490 | fast-levenshtein: 2.0.6 1491 | levn: 0.4.1 1492 | prelude-ls: 1.2.1 1493 | type-check: 0.4.0 1494 | word-wrap: 1.2.3 1495 | dev: true 1496 | 1497 | /p-limit/3.1.0: 1498 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1499 | engines: {node: '>=10'} 1500 | dependencies: 1501 | yocto-queue: 0.1.0 1502 | dev: true 1503 | 1504 | /p-locate/5.0.0: 1505 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1506 | engines: {node: '>=10'} 1507 | dependencies: 1508 | p-limit: 3.1.0 1509 | dev: true 1510 | 1511 | /parent-module/1.0.1: 1512 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1513 | engines: {node: '>=6'} 1514 | dependencies: 1515 | callsites: 3.1.0 1516 | dev: true 1517 | 1518 | /path-exists/4.0.0: 1519 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1520 | engines: {node: '>=8'} 1521 | dev: true 1522 | 1523 | /path-is-absolute/1.0.1: 1524 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1525 | engines: {node: '>=0.10.0'} 1526 | dev: true 1527 | 1528 | /path-key/3.1.1: 1529 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1530 | engines: {node: '>=8'} 1531 | dev: true 1532 | 1533 | /path-parse/1.0.7: 1534 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1535 | dev: true 1536 | 1537 | /path-type/4.0.0: 1538 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1539 | engines: {node: '>=8'} 1540 | dev: true 1541 | 1542 | /picocolors/1.0.0: 1543 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1544 | 1545 | /picomatch/2.3.1: 1546 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1547 | engines: {node: '>=8.6'} 1548 | dev: true 1549 | 1550 | /pinia/2.0.28_prq2uz4lho2pwp6irk4cfkrxwu: 1551 | resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==} 1552 | peerDependencies: 1553 | '@vue/composition-api': ^1.4.0 1554 | typescript: '>=4.4.4' 1555 | vue: ^2.6.14 || ^3.2.0 1556 | peerDependenciesMeta: 1557 | '@vue/composition-api': 1558 | optional: true 1559 | typescript: 1560 | optional: true 1561 | dependencies: 1562 | '@vue/devtools-api': 6.4.5 1563 | typescript: 4.9.4 1564 | vue: 3.2.45 1565 | vue-demi: 0.13.11_vue@3.2.45 1566 | dev: false 1567 | 1568 | /postcss-selector-parser/6.0.11: 1569 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} 1570 | engines: {node: '>=4'} 1571 | dependencies: 1572 | cssesc: 3.0.0 1573 | util-deprecate: 1.0.2 1574 | dev: true 1575 | 1576 | /postcss/8.4.20: 1577 | resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 1578 | engines: {node: ^10 || ^12 || >=14} 1579 | dependencies: 1580 | nanoid: 3.3.4 1581 | picocolors: 1.0.0 1582 | source-map-js: 1.0.2 1583 | 1584 | /prelude-ls/1.2.1: 1585 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1586 | engines: {node: '>= 0.8.0'} 1587 | dev: true 1588 | 1589 | /prettier-linter-helpers/1.0.0: 1590 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1591 | engines: {node: '>=6.0.0'} 1592 | dependencies: 1593 | fast-diff: 1.2.0 1594 | dev: true 1595 | 1596 | /prettier/2.8.1: 1597 | resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} 1598 | engines: {node: '>=10.13.0'} 1599 | hasBin: true 1600 | dev: true 1601 | 1602 | /punycode/2.1.1: 1603 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1604 | engines: {node: '>=6'} 1605 | dev: true 1606 | 1607 | /queue-microtask/1.2.3: 1608 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1609 | dev: true 1610 | 1611 | /readdirp/3.6.0: 1612 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1613 | engines: {node: '>=8.10.0'} 1614 | dependencies: 1615 | picomatch: 2.3.1 1616 | dev: true 1617 | 1618 | /regexpp/3.2.0: 1619 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1620 | engines: {node: '>=8'} 1621 | dev: true 1622 | 1623 | /resolve-from/4.0.0: 1624 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1625 | engines: {node: '>=4'} 1626 | dev: true 1627 | 1628 | /resolve/1.22.1: 1629 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1630 | hasBin: true 1631 | dependencies: 1632 | is-core-module: 2.11.0 1633 | path-parse: 1.0.7 1634 | supports-preserve-symlinks-flag: 1.0.0 1635 | dev: true 1636 | 1637 | /reusify/1.0.4: 1638 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1639 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1640 | dev: true 1641 | 1642 | /rimraf/3.0.2: 1643 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1644 | hasBin: true 1645 | dependencies: 1646 | glob: 7.2.3 1647 | dev: true 1648 | 1649 | /rollup/3.9.0: 1650 | resolution: {integrity: sha512-nGGylpmblyjTpF4lEUPgmOw6OVxRvnI6Iuuh6Lz4O/X66cVOX1XJSsqP1YamxQ+mPuFE7qJxLFDSCk8rNv5dDw==} 1651 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1652 | hasBin: true 1653 | optionalDependencies: 1654 | fsevents: 2.3.2 1655 | dev: true 1656 | 1657 | /run-parallel/1.2.0: 1658 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1659 | dependencies: 1660 | queue-microtask: 1.2.3 1661 | dev: true 1662 | 1663 | /sass/1.57.1: 1664 | resolution: {integrity: sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==} 1665 | engines: {node: '>=12.0.0'} 1666 | hasBin: true 1667 | dependencies: 1668 | chokidar: 3.5.3 1669 | immutable: 4.2.1 1670 | source-map-js: 1.0.2 1671 | dev: true 1672 | 1673 | /semver/7.3.8: 1674 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 1675 | engines: {node: '>=10'} 1676 | hasBin: true 1677 | dependencies: 1678 | lru-cache: 6.0.0 1679 | dev: true 1680 | 1681 | /shebang-command/2.0.0: 1682 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1683 | engines: {node: '>=8'} 1684 | dependencies: 1685 | shebang-regex: 3.0.0 1686 | dev: true 1687 | 1688 | /shebang-regex/3.0.0: 1689 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1690 | engines: {node: '>=8'} 1691 | dev: true 1692 | 1693 | /slash/3.0.0: 1694 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1695 | engines: {node: '>=8'} 1696 | dev: true 1697 | 1698 | /source-map-js/1.0.2: 1699 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1700 | engines: {node: '>=0.10.0'} 1701 | 1702 | /source-map/0.6.1: 1703 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1704 | engines: {node: '>=0.10.0'} 1705 | 1706 | /sourcemap-codec/1.4.8: 1707 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1708 | deprecated: Please use @jridgewell/sourcemap-codec instead 1709 | 1710 | /strip-ansi/6.0.1: 1711 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1712 | engines: {node: '>=8'} 1713 | dependencies: 1714 | ansi-regex: 5.0.1 1715 | dev: true 1716 | 1717 | /strip-json-comments/3.1.1: 1718 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1719 | engines: {node: '>=8'} 1720 | dev: true 1721 | 1722 | /supports-color/7.2.0: 1723 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1724 | engines: {node: '>=8'} 1725 | dependencies: 1726 | has-flag: 4.0.0 1727 | dev: true 1728 | 1729 | /supports-preserve-symlinks-flag/1.0.0: 1730 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1731 | engines: {node: '>= 0.4'} 1732 | dev: true 1733 | 1734 | /text-table/0.2.0: 1735 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1736 | dev: true 1737 | 1738 | /to-fast-properties/2.0.0: 1739 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1740 | engines: {node: '>=4'} 1741 | 1742 | /to-regex-range/5.0.1: 1743 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1744 | engines: {node: '>=8.0'} 1745 | dependencies: 1746 | is-number: 7.0.0 1747 | dev: true 1748 | 1749 | /tslib/1.14.1: 1750 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1751 | dev: true 1752 | 1753 | /tsutils/3.21.0_typescript@4.9.4: 1754 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1755 | engines: {node: '>= 6'} 1756 | peerDependencies: 1757 | 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' 1758 | dependencies: 1759 | tslib: 1.14.1 1760 | typescript: 4.9.4 1761 | dev: true 1762 | 1763 | /type-check/0.4.0: 1764 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1765 | engines: {node: '>= 0.8.0'} 1766 | dependencies: 1767 | prelude-ls: 1.2.1 1768 | dev: true 1769 | 1770 | /type-fest/0.20.2: 1771 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1772 | engines: {node: '>=10'} 1773 | dev: true 1774 | 1775 | /typescript/4.9.4: 1776 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 1777 | engines: {node: '>=4.2.0'} 1778 | hasBin: true 1779 | 1780 | /uri-js/4.4.1: 1781 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1782 | dependencies: 1783 | punycode: 2.1.1 1784 | dev: true 1785 | 1786 | /util-deprecate/1.0.2: 1787 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1788 | dev: true 1789 | 1790 | /vant/4.0.6_vue@3.2.45: 1791 | resolution: {integrity: sha512-bgO08pzQmfD1MjkwZypy5N/g9CZlQ7XH5Cvse/7HHCJ1zIvF0OSoGWNHyQm7kFJQkuxER3QnN6r4XkeCDfYDgw==} 1792 | peerDependencies: 1793 | vue: ^3.0.0 1794 | dependencies: 1795 | '@vant/popperjs': 1.3.0 1796 | '@vant/use': 1.4.3 1797 | vue: 3.2.45 1798 | dev: false 1799 | 1800 | /vite-plugin-monkey/2.10.2_vite@4.0.3: 1801 | resolution: {integrity: sha512-TNKEpUHlNNntwjUvBbQezDJdizXigKr2XcIJdjVFVb+VYs0Z6AR9Q3cXNiPGZzpS1oDjvz39k6zO8HhFV3MsgQ==} 1802 | engines: {node: ^14.18 || >= 16, pnpm: '>=6'} 1803 | peerDependencies: 1804 | vite: '>=3.0.0' 1805 | dependencies: 1806 | cross-spawn: 7.0.3 1807 | detect-port: 1.5.1 1808 | htmlparser2: 8.0.1 1809 | mrmime: 1.0.1 1810 | open: 8.4.0 1811 | picocolors: 1.0.0 1812 | vite: 4.0.3_sass@1.57.1 1813 | transitivePeerDependencies: 1814 | - supports-color 1815 | dev: true 1816 | 1817 | /vite/4.0.3_sass@1.57.1: 1818 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 1819 | engines: {node: ^14.18.0 || >=16.0.0} 1820 | hasBin: true 1821 | peerDependencies: 1822 | '@types/node': '>= 14' 1823 | less: '*' 1824 | sass: '*' 1825 | stylus: '*' 1826 | sugarss: '*' 1827 | terser: ^5.4.0 1828 | peerDependenciesMeta: 1829 | '@types/node': 1830 | optional: true 1831 | less: 1832 | optional: true 1833 | sass: 1834 | optional: true 1835 | stylus: 1836 | optional: true 1837 | sugarss: 1838 | optional: true 1839 | terser: 1840 | optional: true 1841 | dependencies: 1842 | esbuild: 0.16.12 1843 | postcss: 8.4.20 1844 | resolve: 1.22.1 1845 | rollup: 3.9.0 1846 | sass: 1.57.1 1847 | optionalDependencies: 1848 | fsevents: 2.3.2 1849 | dev: true 1850 | 1851 | /vue-demi/0.13.11_vue@3.2.45: 1852 | resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} 1853 | engines: {node: '>=12'} 1854 | hasBin: true 1855 | requiresBuild: true 1856 | peerDependencies: 1857 | '@vue/composition-api': ^1.0.0-rc.1 1858 | vue: ^3.0.0-0 || ^2.6.0 1859 | peerDependenciesMeta: 1860 | '@vue/composition-api': 1861 | optional: true 1862 | dependencies: 1863 | vue: 3.2.45 1864 | dev: false 1865 | 1866 | /vue-eslint-parser/9.1.0_eslint@8.30.0: 1867 | resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 1868 | engines: {node: ^14.17.0 || >=16.0.0} 1869 | peerDependencies: 1870 | eslint: '>=6.0.0' 1871 | dependencies: 1872 | debug: 4.3.4 1873 | eslint: 8.30.0 1874 | eslint-scope: 7.1.1 1875 | eslint-visitor-keys: 3.3.0 1876 | espree: 9.4.1 1877 | esquery: 1.4.0 1878 | lodash: 4.17.21 1879 | semver: 7.3.8 1880 | transitivePeerDependencies: 1881 | - supports-color 1882 | dev: true 1883 | 1884 | /vue-template-compiler/2.7.14: 1885 | resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} 1886 | dependencies: 1887 | de-indent: 1.0.2 1888 | he: 1.2.0 1889 | dev: true 1890 | 1891 | /vue-tsc/1.0.18_typescript@4.9.4: 1892 | resolution: {integrity: sha512-JFLAz3Xh/iyTnMGdlfG3TuvcaJyFcqyELpLv50jyvOYLAS2+WHzac0IB73FQ37HmGm/4IWMkQZS5r/9FKSejQQ==} 1893 | hasBin: true 1894 | peerDependencies: 1895 | typescript: '*' 1896 | dependencies: 1897 | '@volar/vue-language-core': 1.0.18 1898 | '@volar/vue-typescript': 1.0.18 1899 | typescript: 4.9.4 1900 | dev: true 1901 | 1902 | /vue/3.2.45: 1903 | resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==} 1904 | dependencies: 1905 | '@vue/compiler-dom': 3.2.45 1906 | '@vue/compiler-sfc': 3.2.45 1907 | '@vue/runtime-dom': 3.2.45 1908 | '@vue/server-renderer': 3.2.45_vue@3.2.45 1909 | '@vue/shared': 3.2.45 1910 | 1911 | /which/2.0.2: 1912 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1913 | engines: {node: '>= 8'} 1914 | hasBin: true 1915 | dependencies: 1916 | isexe: 2.0.0 1917 | dev: true 1918 | 1919 | /word-wrap/1.2.3: 1920 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1921 | engines: {node: '>=0.10.0'} 1922 | dev: true 1923 | 1924 | /wrappy/1.0.2: 1925 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1926 | dev: true 1927 | 1928 | /xml-name-validator/4.0.0: 1929 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 1930 | engines: {node: '>=12'} 1931 | dev: true 1932 | 1933 | /yallist/4.0.0: 1934 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1935 | dev: true 1936 | 1937 | /yocto-queue/0.1.0: 1938 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1939 | engines: {node: '>=10'} 1940 | dev: true 1941 | -------------------------------------------------------------------------------- /src/assets/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/data/ajaxhook.ts: -------------------------------------------------------------------------------- 1 | const IS_WEIXIN = navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1 2 | /** 3 | * Ajax Hook Config 4 | * @description 用于拦截、直接返回或缓存请求 5 | */ 6 | export default { 7 | cache: [ 8 | { 9 | url: 'https://bbs-api.mihoyo.com/user/wapi/getUserFullInfo', 10 | prefix: true, 11 | }, 12 | { 13 | url: 'https://passport-api-v4.mihoyo.com/account/ma-cn-session/web/verifyLtoken', 14 | prefix: true, 15 | }, 16 | { 17 | url: 'https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookieToken', 18 | prefix: true, 19 | }, 20 | { 21 | url: 'https://api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/spot_kind/get_spot_kinds', 22 | prefix: false, 23 | }, 24 | { 25 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/label/tree', 26 | prefix: false, 27 | }, 28 | { 29 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/game_item', 30 | prefix: false, 31 | }, 32 | { 33 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/get_public_notice', 34 | prefix: false, 35 | }, 36 | { 37 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/get_guide', 38 | prefix: false, 39 | }, 40 | { 41 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/get_feedback', 42 | prefix: false, 43 | }, 44 | { 45 | url: 'https://api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/point/mark_map_point_list', 46 | prefix: false, 47 | }, 48 | { 49 | url: 'https://waf-api-takumi.mihoyo.com/common/map_user/ys_obc/v1/map/point/list', 50 | prefix: false, 51 | }, 52 | ], 53 | direct: [ 54 | ...(IS_WEIXIN 55 | ? [] 56 | : [ 57 | { 58 | url: 'https://api.mihoyo.com/weixin_api/get/signature', 59 | response: { 60 | status: 200, 61 | headers: { 62 | 'Content-Type': 'application/json', 63 | }, 64 | response: JSON.stringify({ 65 | retcode: 0, 66 | message: 'succ', 67 | data: { 68 | timestamp: Date.now(), 69 | noncestr: '', 70 | signature: '', 71 | }, 72 | }), 73 | }, 74 | }, 75 | ]), 76 | ], 77 | } 78 | -------------------------------------------------------------------------------- /src/data/overlays.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapOverlay } from './../lib/overlay' 2 | /** 3 | * Overlay Config 4 | * @description 配置地图叠加层 5 | */ 6 | export default [ 7 | { 8 | name: '米游社 - 须弥 - 沙漠地下', 9 | image: 'https://upload-bbs.mihoyo.com/upload/2022/10/29/300350281/4b5f2f9a5186d4c27d52910a39211b7f_2427272594906556713.png', 10 | position: [6420, -6890], 11 | resolution: 3072, 12 | rule: ['webstatic.mihoyo.com', 'act.hoyolab.com'], 13 | }, 14 | { 15 | name: '米游社 - 须弥 - 森林地下', 16 | image: 'https://upload-bbs.mihoyo.com/upload/2022/10/29/300350281/e316346f4572c7d7e8778e71eabe95e0_6486682272623226706.png', 17 | position: [4515, -5350], 18 | resolution: 3072, 19 | rule: ['webstatic.mihoyo.com', 'act.hoyolab.com'], 20 | }, 21 | ] as ZQMapOverlay[] 22 | -------------------------------------------------------------------------------- /src/lib/api.ts: -------------------------------------------------------------------------------- 1 | import { WsInvokeResponse } from './webcontrol' 2 | import { unsafeWindow } from '$' 3 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 4 | export const XHR = new (unsafeWindow as any).XMLHttpRequest() as typeof XMLHttpRequest 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 6 | export const WS = new (unsafeWindow as any).WebSocket() as typeof WebSocket 7 | export const signedLaunch = async (token: string) => { 8 | if (/zhiqiong-uwp/.test(navigator.userAgent)) { 9 | try { 10 | unsafeWindow.chrome.webview.postMessage({ action: 'PLUGIN', token }) 11 | await new Promise((resolve) => { 12 | setTimeout(resolve, 2000) 13 | }) 14 | } catch (e) {} 15 | } else { 16 | const launchBase = 'cocogoat-control://launch' 17 | const signapiBase = 'https://77.cocogoat.work/v2/frostflake/sign' 18 | const launchParams = `?register-token=${token}®ister-origin=${location.origin}` 19 | let launchUrl = `${launchBase}${launchParams}` 20 | try { 21 | // remote-sign launch url 22 | const res = await getWithTimeout<{ url: string }>(signapiBase + launchParams, 2000) 23 | if (res.status === 201 && res.body && res.body.url) { 24 | launchUrl = res.body.url 25 | } 26 | } catch (e) {} 27 | // open url scheme in iframe 28 | const iframe = document.createElement('iframe') 29 | iframe.src = launchUrl 30 | iframe.style.display = 'none' 31 | document.body.appendChild(iframe) 32 | await new Promise((resolve) => { 33 | setTimeout(resolve, 2000) 34 | }) 35 | document.body.removeChild(iframe) 36 | } 37 | } 38 | const getWithTimeout = async function (url: string, timeout: number): Promise> { 39 | return new Promise((resolve, reject) => { 40 | const xhr = new XHR() 41 | xhr.timeout = timeout 42 | xhr.open('GET', url) 43 | xhr.send() 44 | xhr.onload = () => { 45 | if (xhr.status === 200 || xhr.status === 201) { 46 | resolve({ 47 | status: xhr.status, 48 | body: JSON.parse(xhr.responseText), 49 | }) 50 | } else { 51 | reject(new Error(xhr.statusText)) 52 | } 53 | } 54 | xhr.onerror = (e) => { 55 | reject(e) 56 | } 57 | xhr.ontimeout = () => { 58 | reject(new Error('timeout')) 59 | } 60 | }) 61 | } 62 | -------------------------------------------------------------------------------- /src/lib/app.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapOverlay } from './overlay' 2 | import type { unsafeWindow } from '$' 3 | import { BaseRule } from '../rules/base' 4 | import { createApp } from '../ui' 5 | import overlays from '../data/overlays' 6 | import { ruleMatcher } from './ruleMatcher' 7 | import { getSyncOptions, ZhiqiongGlobalOptions } from './store' 8 | import { markRaw, reactive, watch } from 'vue' 9 | 10 | export class ZhiqiongApp { 11 | rule: BaseRule 12 | window: typeof unsafeWindow 13 | app: ReturnType 14 | root = markRaw(document.createElement('section')) 15 | matchedOverlays: ZQMapOverlay[] 16 | options!: ZhiqiongGlobalOptions 17 | 18 | ws?: WebSocket 19 | 20 | isPinned = false 21 | isShared = false 22 | isShowOverlay = false 23 | 24 | showSettings = false 25 | 26 | notify = '' 27 | notifyProgress = -1 28 | 29 | constructor(rule: typeof BaseRule, window: typeof unsafeWindow) { 30 | const reactiveThis = reactive(this) 31 | this.window = markRaw(window) 32 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 33 | this.rule = markRaw(new (rule as any)(reactiveThis)) 34 | this.app = markRaw(createApp(reactiveThis)) 35 | this.matchedOverlays = markRaw(ruleMatcher(window.location, overlays)) 36 | watch( 37 | () => reactiveThis.isShowOverlay, 38 | (val) => reactiveThis.rule.setOverlay(val), 39 | ) 40 | const init = (async () => { 41 | reactiveThis.options = await getSyncOptions() 42 | await reactiveThis.rule.init() 43 | const mp = await reactiveThis.rule.getMountpoint() 44 | reactiveThis.root.id = 'zhiqiong-root' 45 | mp.appendChild(reactiveThis.root) 46 | reactiveThis.app.mount(reactiveThis.root) 47 | reactiveThis.rule.setPosition({ 48 | x: 0, 49 | y: 0, 50 | characterRotation: 0, 51 | viewportRotation: 0, 52 | mapId: 0, 53 | err: 0, 54 | errors: [], 55 | }) 56 | })() 57 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 58 | // @ts-ignore 59 | // eslint-disable-next-line no-constructor-return 60 | return init.then(() => reactive(this)) 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/lib/overlay.ts: -------------------------------------------------------------------------------- 1 | import { RuleItem } from './ruleMatcher' 2 | export interface ZQMapOverlay { 3 | name: string 4 | image: string 5 | position: [number, number] 6 | resolution: number 7 | rule: RuleItem[] 8 | data: T 9 | } 10 | -------------------------------------------------------------------------------- /src/lib/position.ts: -------------------------------------------------------------------------------- 1 | export enum ZQMapId { 2 | TEAVAT, 3 | ENKANOMIYA, 4 | CHASM, 5 | } 6 | export interface ZQPositionError { 7 | code: number 8 | message: string 9 | } 10 | export interface ZQMapPosition { 11 | mapId: ZQMapId 12 | x: number 13 | y: number 14 | characterRotation: number 15 | viewportRotation: number 16 | err: number 17 | errors: ZQPositionError[] 18 | } 19 | -------------------------------------------------------------------------------- /src/lib/ruleMatcher.ts: -------------------------------------------------------------------------------- 1 | export type RuleItem = RegExp | string | ((location: typeof window.location) => boolean) 2 | export interface RuleMatchable { 3 | rule: RuleItem[] 4 | } 5 | 6 | export function ruleMatcherSingle(location: typeof window.location, rule: RuleItem): boolean { 7 | if (rule instanceof RegExp) { 8 | return rule.test(location.href) 9 | } 10 | if (typeof rule === 'string') { 11 | return location.host === rule 12 | } 13 | return rule(location) 14 | } 15 | 16 | export function ruleMatcher(location: typeof window.location, rules: T[]): T[] { 17 | return rules.filter((rule) => rule.rule.some((r) => ruleMatcherSingle(location, r))) 18 | } 19 | -------------------------------------------------------------------------------- /src/lib/size.ts: -------------------------------------------------------------------------------- 1 | export const formatSize = (size: number) => { 2 | if (size < 1024) { 3 | return size.toFixed(2) + 'B' 4 | } 5 | if (size < 1024 * 1024) { 6 | return (size / 1024).toFixed(2) + 'KB' 7 | } 8 | if (size < 1024 * 1024 * 1024) { 9 | return (size / 1024 / 1024).toFixed(2) + 'MB' 10 | } 11 | if (size < 1024 * 1024 * 1024 * 1024) { 12 | return (size / 1024 / 1024 / 1024).toFixed(2) + 'GB' 13 | } 14 | return (size / 1024 / 1024 / 1024 / 1024).toFixed(2) + 'TB' 15 | } 16 | -------------------------------------------------------------------------------- /src/lib/store.ts: -------------------------------------------------------------------------------- 1 | import { GM } from '$' 2 | import { reactive, watch } from 'vue' 3 | const createEmptyOptions = () => { 4 | return { 5 | enableAjaxHook: false, 6 | } 7 | } 8 | export type ZhiqiongGlobalOptions = ReturnType 9 | export const getOrCreateOptions = async (): Promise => { 10 | const opt = await GM.getValue('zhiqiong_options', '{}') 11 | try { 12 | const json = JSON.parse(opt) 13 | return Object.assign(createEmptyOptions(), json) 14 | } catch (e) { 15 | return createEmptyOptions() 16 | } 17 | } 18 | export const getSyncOptions = async () => { 19 | const opt = reactive(await getOrCreateOptions()) 20 | watch(opt, (val) => { 21 | GM.setValue('zhiqiong_options', JSON.stringify(val)) 22 | }) 23 | return opt 24 | } 25 | 26 | export const createStatus = () => { 27 | return reactive({ 28 | connected: false, 29 | isPinned: false, 30 | showOverlay: false, 31 | isShared: false, 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /src/lib/uuid.ts: -------------------------------------------------------------------------------- 1 | export const uuid = () => { 2 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { 3 | const r = (Math.random() * 16) | 0 4 | const v = c == 'x' ? r : (r & 0x3) | 0x8 5 | return v.toString(16) 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /src/lib/versionCompare.ts: -------------------------------------------------------------------------------- 1 | export const versionCompare = (a: string, b: string) => { 2 | const aParts = a.split('.') 3 | const bParts = b.split('.') 4 | const len = Math.max(aParts.length, bParts.length) 5 | for (let i = 0; i < len; i++) { 6 | const aPart = parseInt(aParts[i], 10) 7 | const bPart = parseInt(bParts[i], 10) 8 | if (aPart === bPart) { 9 | continue 10 | } 11 | if (aPart === undefined) { 12 | return -1 13 | } 14 | if (bPart === undefined) { 15 | return 1 16 | } 17 | return aPart - bPart > 0 ? 1 : -1 18 | } 19 | return 0 20 | } 21 | -------------------------------------------------------------------------------- /src/lib/webcontrol.ts: -------------------------------------------------------------------------------- 1 | import { uuid } from './uuid' 2 | import { WS, XHR } from './api' 3 | import { EventEmitter } from 'eventemitter3' 4 | export interface WsInvokeResponse { 5 | status: number 6 | body: T 7 | } 8 | export class CocogoatWebControl { 9 | host = 'localhost' 10 | post = 32333 11 | token = uuid() 12 | ws: WebSocket | null = null 13 | ev = new EventEmitter() 14 | constructor(port?: number) { 15 | if (port) this.post = port 16 | } 17 | ping() { 18 | return new Promise((resolve, reject) => { 19 | const xhr = new XHR() 20 | xhr.timeout = 1500 21 | xhr.open('GET', `http://${this.host}:${this.post}/`) 22 | xhr.send() 23 | xhr.onload = () => { 24 | if (xhr.status === 200) { 25 | resolve(JSON.parse(xhr.responseText)) 26 | } else { 27 | reject(new Error(xhr.statusText)) 28 | } 29 | } 30 | xhr.onerror = (e) => { 31 | reject(e) 32 | } 33 | xhr.ontimeout = () => { 34 | reject(new Error('timeout')) 35 | } 36 | }) 37 | } 38 | async authorize() { 39 | if (this.ws) return 40 | let res: Response 41 | try { 42 | res = await fetch(`http://${this.host}:${this.post}/token`, { 43 | method: 'POST', 44 | headers: { 45 | Authorization: 'Bearer ' + this.token, 46 | }, 47 | }) 48 | } catch (e) { 49 | return 'NETWORK' 50 | } 51 | if (!res.ok) return 'DENIED' 52 | const data = await res.json() 53 | this.token = data.token 54 | const ws = new WS(`ws://${this.host}:${this.post}/ws/${this.token}`) 55 | ws.onclose = () => { 56 | this.ws = null 57 | this.ev.emit('close') 58 | } 59 | ws.onmessage = (e) => { 60 | const data = JSON.parse(e.data) 61 | this.ev.emit(data.id || data.action, data.data) 62 | } 63 | await new Promise((resolve, reject) => { 64 | ws.onopen = () => { 65 | ws.onerror = null 66 | this.ev.emit('open') 67 | resolve() 68 | } 69 | ws.onerror = reject 70 | }) 71 | this.ws = ws 72 | return true 73 | } 74 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 75 | wsInvoke(action: string, ...data: any[]): Promise> { 76 | const body = { action, version: 7, data } 77 | if (!this.ws) throw new Error('WebSocket not connected') 78 | const id = Math.round(Date.now() * 1000 + Math.random() * 1000).toString(16) 79 | const reqjson = { 80 | id, 81 | action: 'api', 82 | data: { 83 | url: '/api/cvautotrack', 84 | method: 'POST', 85 | body: JSON.stringify(body), 86 | }, 87 | } 88 | const resp = new Promise((resolve) => { 89 | console.log('wsInvoke ' + action + ' ' + id) 90 | this.ev.on(id, resolve) 91 | }) 92 | this.ws.send(JSON.stringify(reqjson)) 93 | return resp as Promise> 94 | } 95 | async debugCapture() { 96 | const res = await this.wsInvoke<{ 97 | data: string 98 | }>('DebugCaptureRes') 99 | if (res.body.data) { 100 | return res.body.data 101 | } else { 102 | throw new Error(JSON.stringify(res.body)) 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { RuleList } from './rules/index' 2 | import { GM, unsafeWindow } from '$' 3 | import { ZhiqiongApp } from './lib/app' 4 | import { ruleMatcher } from './lib/ruleMatcher' 5 | 6 | import type * as L from 'leaflet' 7 | declare global { 8 | interface Window { 9 | $map: ZhiqiongApp 10 | L: typeof L 11 | map: L.Map 12 | chrome: { 13 | webview: { 14 | postMessage: (message: unknown) => void 15 | } 16 | } 17 | } 18 | } 19 | 20 | ;(async () => { 21 | const rules = ruleMatcher(unsafeWindow.location, RuleList) 22 | if (rules.length === 1) { 23 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 24 | unsafeWindow.$map = await new ZhiqiongApp(rules[0] as any, unsafeWindow) 25 | GM.registerMenuCommand('设置', () => { 26 | unsafeWindow.$map.showSettings = true 27 | }) 28 | } 29 | })() 30 | -------------------------------------------------------------------------------- /src/rules/base.ts: -------------------------------------------------------------------------------- 1 | import { ZhiqiongApp } from './../lib/app' 2 | import { ZQMapPosition } from './../lib/position' 3 | import type { unsafeWindow } from '$' 4 | import { RuleItem } from './../lib/ruleMatcher' 5 | export abstract class BaseRule { 6 | static rule: RuleItem[] = [] 7 | app: ZhiqiongApp 8 | window: typeof unsafeWindow 9 | constructor(app: ZhiqiongApp) { 10 | this.app = app 11 | this.window = app.window 12 | } 13 | abstract init(): Promise 14 | abstract setOverlay(enable: boolean): void 15 | abstract setPosition(pos: ZQMapPosition): void 16 | async getMountpoint(): Promise { 17 | return (document.querySelector('.mhy-map-container') || 18 | document.querySelector('.btn-wrap') || 19 | document.body) as HTMLElement 20 | } 21 | } 22 | 23 | export const runInitInterval = (cb: () => boolean) => { 24 | return new Promise((resolve) => { 25 | if (cb()) { 26 | resolve() 27 | return 28 | } 29 | const initInterval = setInterval(() => { 30 | if (!cb()) return 31 | clearInterval(initInterval) 32 | resolve() 33 | }, 500) 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /src/rules/ghzs/ghzs.scss: -------------------------------------------------------------------------------- 1 | .zhiqiong-rule-ghzs { 2 | .fixmodel.bottom, 3 | .gonggao.visi-div, 4 | .share.visi-div, 5 | .fixmodel.posi-left.top-left1 { 6 | display: none; 7 | } 8 | .zhiqiong-actions { 9 | bottom: 68px; 10 | margin-left: -16px; 11 | right: -44px; 12 | left: auto; 13 | .mhy-map__action-btn { 14 | height: 35px; 15 | background-color: rgba(29, 40, 57, 0.8); 16 | box-sizing: border-box; 17 | border: 0.01rem solid rgba(255, 255, 255, 0.05); 18 | border-radius: 0.08rem; 19 | } 20 | } 21 | .filter-btn.visi-div { 22 | width: 40px !important; 23 | margin-right: -12px; 24 | display: flex; 25 | align-items: center; 26 | justify-content: center; 27 | } 28 | 29 | .filter-popup .visi-div::after { 30 | border-radius: 0 !important; 31 | } 32 | 33 | @media screen and (max-width: 450px) { 34 | .filter-popup { 35 | zoom: 0.8; 36 | } 37 | .fixmodel.posi-left.top-left { 38 | display: none; 39 | } 40 | .area-item { 41 | height: 0.95rem !important; 42 | } 43 | } 44 | @media screen and (max-height: 450px) { 45 | .filter-popup { 46 | zoom: 0.8; 47 | } 48 | .fixmodel.posi-left.top-left { 49 | display: none; 50 | } 51 | .area-item { 52 | height: 0.95rem !important; 53 | } 54 | } 55 | @media screen and (max-height: 840px) { 56 | .areafixmodel-container.areafixmodel { 57 | top: 128px !important; 58 | } 59 | .zone-btn { 60 | display: none; 61 | } 62 | .fixmodel.top { 63 | top: 0 !important; 64 | right: 0 !important; 65 | } 66 | .area-item { 67 | height: 0.95rem !important; 68 | } 69 | .map-btn.visi-box { 70 | margin-right: 0; 71 | border-radius: 0; 72 | border: 0; 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/rules/ghzs/ghzs.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapPosition } from '../../lib/position' 2 | import { runInitInterval } from '../base' 3 | import { LeafletRule } from '../leaflet' 4 | import './ghzs.scss' 5 | 6 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 7 | type GhzsAny = any 8 | export class GhzsRule extends LeafletRule { 9 | static rule = ['static-web.ghzs.com'] 10 | vue: GhzsAny 11 | async init(): Promise { 12 | this.window.document.body.classList.add('zhiqiong-rule-ghzs') 13 | await runInitInterval(() => { 14 | this.vue = (this.window.document.querySelector('#map-app'))?.__vue__ 15 | this.map = this.vue.$children[0].mapContainer 16 | return !!(this.vue && this.map) 17 | }) 18 | await super.init() 19 | } 20 | setPosition(pos: ZQMapPosition) { 21 | const y = pos.x / 1.49 + 22670 22 | const x = pos.y / 1.51 + 19950 23 | const zoomfactor = 2 ** (7 - this.map.getZoom()) 24 | const { lat, lng } = this.map.unproject([x / zoomfactor, y / zoomfactor]) 25 | pos.x = lat 26 | pos.y = lng 27 | pos.characterRotation = 0 - pos.characterRotation 28 | pos.viewportRotation = 0 - pos.viewportRotation 29 | return super.setPosition(pos) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/rules/hoyolab/index.ts: -------------------------------------------------------------------------------- 1 | import { MiyousheRule } from '../miyoushe' 2 | 3 | export class HoyolabRule extends MiyousheRule { 4 | static rule = ['act.hoyolab.com'] 5 | async init(): Promise { 6 | this.window.document.body.classList.add('zhiqiong-rule-hoyolab') 7 | await super.init() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/rules/index.ts: -------------------------------------------------------------------------------- 1 | import { BaseRule } from './base' 2 | import { GhzsRule } from './ghzs/ghzs' 3 | import { HoyolabRule } from './hoyolab/index' 4 | import { MiyousheRule } from './miyoushe/index' 5 | import { KongyingV3Rule } from './kongying/kongying-v3' 6 | export const RuleList: typeof BaseRule[] = [MiyousheRule, HoyolabRule, GhzsRule, KongyingV3Rule] 7 | -------------------------------------------------------------------------------- /src/rules/kongying/kongying-v2.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 酒馆v2已经不再维护,故先不适配 3 | */ 4 | import { Map } from 'leaflet' 5 | import { LeafletRule } from '../leaflet' 6 | const hasCsp = !!( 7 | document.querySelector('meta[http-equiv=Content-Security-Policy]') || 8 | document.querySelector('meta[http-equiv=content-security-Policy]') 9 | ) 10 | export class KongyingV2Rule extends LeafletRule { 11 | static rule = [ 12 | (location: Location) => { 13 | if (location.host !== 'yuanshen.site') return false 14 | if (!hasCsp) { 15 | if (location.pathname === 'zhiqiong-next.dll') { 16 | installAntiCSPMode() 17 | return true 18 | } 19 | } 20 | return false 21 | }, 22 | ] 23 | async findMap(): Promise { 24 | return this.window.map 25 | } 26 | } 27 | function installAntiCSPMode() { 28 | // 29 | } 30 | -------------------------------------------------------------------------------- /src/rules/kongying/kongying-v3.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapPosition } from '../../lib/position' 2 | import { runInitInterval } from '../base' 3 | import { LeafletRule } from '../leaflet' 4 | import './v3.scss' 5 | 6 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 7 | type KongyingAny = any 8 | export class KongyingV3Rule extends LeafletRule { 9 | static rule = ['v3.yuanshen.site'] 10 | vue: KongyingAny 11 | root: KongyingAny 12 | async init(): Promise { 13 | this.window.document.body.classList.add('zhiqiong-rule-kongyingv3') 14 | await runInitInterval(() => { 15 | this.vue = (this.window.document.querySelector('#q-app'))?.__vue_app__ 16 | this.root = this.vue._container?._vnode?.component 17 | this.map = this.root?.subTree?.component?.subTree?.component?.ctx?.map 18 | return !!(this.vue && this.root && this.map) 19 | }) 20 | await super.init() 21 | } 22 | setPosition(pos: ZQMapPosition) { 23 | const y = pos.x / 1.5 24 | const x = pos.y / 1.5 25 | pos.x = y 26 | pos.y = x 27 | pos.characterRotation = 0 - pos.characterRotation 28 | pos.viewportRotation = 0 - pos.viewportRotation 29 | return super.setPosition(pos) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/rules/kongying/v3.scss: -------------------------------------------------------------------------------- 1 | .zhiqiong-rule-kongyingv3 { 2 | .switch_list { 3 | margin-left: 40px; 4 | } 5 | .zhiqiong-actions { 6 | z-index: 2000; 7 | left: 6px; 8 | bottom: 26px; 9 | } 10 | .footer a:last-child { 11 | display: none; 12 | } 13 | .area_selector_fold { 14 | zoom: 0.8; 15 | } 16 | 17 | .extra_btn.row { 18 | zoom: 0.8; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/rules/leaflet.scss: -------------------------------------------------------------------------------- 1 | .zhiqiong-rule-leaflet { 2 | .zhiqiong-user-position { 3 | display: none; 4 | background: transparent no-repeat center; 5 | background-size: contain; 6 | z-index: 10001 !important; 7 | transition: all 0.2s; 8 | --dir: 0deg; 9 | --rot: 0deg; 10 | } 11 | .zhiqiong-activated .zhiqiong-user-position { 12 | display: block; 13 | } 14 | .zhiqiong-user-position:before { 15 | content: ' '; 16 | display: block; 17 | width: 48px; 18 | height: 48px; 19 | margin: -24px; 20 | background: transparent no-repeat center; 21 | background-size: contain; 22 | background-image: url(data:image/png;base64,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); 23 | position: relative; 24 | z-index: 3; 25 | transform: rotate(var(--dir)); 26 | transform-origin: center; 27 | transition: transform 0.2s; 28 | } 29 | .zhiqiong-user-position:after { 30 | content: ' '; 31 | display: block; 32 | position: relative; 33 | background: transparent no-repeat center; 34 | background-size: contain; 35 | background-image: url('data:image/png;base64,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'); 36 | width: 133px; 37 | height: 97px; 38 | margin-top: -115px; 39 | margin-left: -66px; 40 | opacity: 0.8; 41 | z-index: 2; 42 | transform: rotate(var(--rot)); 43 | transform-origin: bottom center; 44 | transition: transform 0.2s; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/rules/leaflet.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapPosition } from './../lib/position' 2 | import type L from 'leaflet' 3 | import { ZQMapOverlay } from '../lib/overlay' 4 | import { BaseRule } from './base' 5 | import './leaflet.scss' 6 | 7 | export abstract class LeafletRule extends BaseRule { 8 | L!: typeof L 9 | map!: L.Map 10 | icon!: L.DivIcon 11 | marker!: L.Marker 12 | overlay!: L.LayerGroup 13 | dom!: HTMLDivElement 14 | icondom!: HTMLDivElement 15 | async findMap(): Promise { 16 | if (!this.map) throw new Error('Map not found') 17 | return this.map 18 | } 19 | async findLeaflet(): Promise { 20 | return this.window.L 21 | } 22 | async init(): Promise { 23 | this.window.document.body.classList.add('zhiqiong-rule-leaflet') 24 | const overlays = this.app.matchedOverlays as ZQMapOverlay[] 25 | ;[this.L, this.map] = await Promise.all([this.findLeaflet(), this.findMap()]) 26 | const L = this.L 27 | const map = this.map 28 | this.icon = L.divIcon({ 29 | iconSize: [1, 1], 30 | className: 'zhiqiong-user-position', 31 | }) 32 | this.marker = L.marker([0, 0], { icon: this.icon }).addTo(map) 33 | this.overlay = L.layerGroup([]) 34 | this.dom = map.getContainer() as HTMLDivElement 35 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 36 | this.icondom = (this.marker)._icon as HTMLDivElement 37 | overlays.forEach((item) => { 38 | new Image().src = item.image 39 | L.imageOverlay( 40 | item.image, 41 | L.latLngBounds([ 42 | item.position, 43 | [item.position[0] - item.resolution, item.position[1] + item.resolution], 44 | ]), 45 | { 46 | opacity: 1, 47 | interactive: false, 48 | }, 49 | ).addTo(this.overlay) 50 | }) 51 | let tmpDragging = -1 52 | let tmpMousePos = [0, 0] 53 | map.addEventListener('mousedown', (e) => { 54 | if (!this.app.ws) return 55 | tmpDragging = Date.now() 56 | tmpMousePos = [e.originalEvent.clientX, e.originalEvent.clientY] 57 | }) 58 | this.dom.addEventListener('touchstart', (e) => { 59 | tmpDragging = Date.now() 60 | tmpMousePos = [e.touches[0].clientX, e.touches[0].clientY] 61 | }) 62 | map.addEventListener('mouseup', () => { 63 | if (!this.app.ws) return 64 | tmpDragging = -1 65 | }) 66 | this.dom.addEventListener('touchend', () => { 67 | tmpDragging = -1 68 | }) 69 | map.addEventListener('mousemove', (e) => { 70 | if (tmpDragging > 0 && Date.now() - tmpDragging > 100) { 71 | const nowMousePos = [e.originalEvent.clientX, e.originalEvent.clientY] 72 | const diff = [Math.abs(nowMousePos[0] - tmpMousePos[0]), Math.abs(nowMousePos[1] - tmpMousePos[1])] 73 | if (diff[0] > 20 || diff[1] > 20) this.app.isPinned = false 74 | } 75 | }) 76 | this.dom.addEventListener('touchmove', (e) => { 77 | if (tmpDragging > 0 && Date.now() - tmpDragging > 100) { 78 | // check pos 79 | const nowMousePos = [e.touches[0].clientX, e.touches[0].clientY] 80 | const diff = [Math.abs(nowMousePos[0] - tmpMousePos[0]), Math.abs(nowMousePos[1] - tmpMousePos[1])] 81 | if (diff[0] > 20 || diff[1] > 20) this.app.isPinned = false 82 | } 83 | }) 84 | } 85 | setOverlay(enable: boolean) { 86 | if (enable) { 87 | if (!this.map.hasLayer(this.overlay)) { 88 | this.map.addLayer(this.overlay) 89 | } 90 | } else { 91 | if (this.map.hasLayer(this.overlay)) { 92 | this.map.removeLayer(this.overlay) 93 | } 94 | } 95 | } 96 | setPosition(pos: ZQMapPosition) { 97 | this.marker.setLatLng([pos.x, pos.y]) 98 | this.icondom.style.setProperty('--dir', 0 - pos.viewportRotation + 'deg') 99 | this.icondom.style.setProperty('--rot', 0 - pos.characterRotation + 'deg') 100 | if (this.app.isPinned) this.map.setView([pos.x, pos.y]) 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/rules/miyoushe/index.ts: -------------------------------------------------------------------------------- 1 | import { ZQMapPosition } from './../../lib/position' 2 | import { runInitInterval } from '../base' 3 | import { LeafletRule } from '../leaflet' 4 | import './miyoushe.scss' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 6 | type MiyousheAny = any 7 | export class MiyousheRule extends LeafletRule { 8 | vue: MiyousheAny 9 | main: MiyousheAny 10 | gis: MiyousheAny 11 | static rule = ['webstatic.mihoyo.com'] 12 | async init(): Promise { 13 | this.window.document.body.classList.add('zhiqiong-rule-miyoushe') 14 | await runInitInterval(() => { 15 | this.vue = (document.querySelector('#root'))?.__vue__ 16 | this.main = this.vue?.$children[0] 17 | this.gis = this.main?.$children[0] 18 | this.map = this.gis?.$children[0]?.map || this.gis?.map 19 | if (!this.vue || !this.main || !this.map) return false 20 | return true 21 | }) 22 | Object.defineProperty(this.gis, '$isMobile', { 23 | get() { 24 | return window.innerWidth <= 900 25 | }, 26 | }) 27 | await super.init() 28 | } 29 | setPosition(pos: ZQMapPosition) { 30 | pos.x = (pos.x + 5890) / 2 31 | pos.y = (pos.y - 2285) / 2 32 | pos.characterRotation = 0 - pos.characterRotation 33 | pos.viewportRotation = 0 - pos.viewportRotation 34 | return super.setPosition(pos) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/rules/miyoushe/miyoushe.scss: -------------------------------------------------------------------------------- 1 | .zhiqiong-rule-miyoushe { 2 | .mhy-map__waypoint--folded { 3 | margin-left: 80px; 4 | margin-bottom: 10px; 5 | zoom: 0.7; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/ui/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 31 | 32 | 92 | -------------------------------------------------------------------------------- /src/ui/components/ActionsArea.vue: -------------------------------------------------------------------------------- 1 | 72 | 73 | 80 | 81 | 158 | -------------------------------------------------------------------------------- /src/ui/components/OptionDialog.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 40 | 41 | 56 | -------------------------------------------------------------------------------- /src/ui/index.ts: -------------------------------------------------------------------------------- 1 | import { ZhiqiongApp } from './../lib/app' 2 | import { createApp as vueCreateApp } from 'vue' 3 | import './style.scss' 4 | import App from './App.vue' 5 | import 'vant/lib/index.css' 6 | 7 | export const createApp = (zqapp: ZhiqiongApp) => { 8 | const app = vueCreateApp(App, { app: zqapp }) 9 | return app 10 | } 11 | -------------------------------------------------------------------------------- /src/ui/style.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuehaiTeam/zhiqiong/eb78361a5654645bbe43296e2e6e92b1b0491aaa/src/ui/style.scss -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | /** 4 | * alias of vite-plugin-monkey/dist/client 5 | */ 6 | declare module '$' { 7 | export * from 'vite-plugin-monkey/dist/client' 8 | } 9 | 10 | // if set mountGmApi=true 11 | // type MonkeyWindow = import('vite-plugin-monkey/dist/client').MonkeyWindow; 12 | // declare const unsafeWindow: MonkeyWindow['unsafeWindow']; 13 | // declare const GM_addStyle: MonkeyWindow['GM_addStyle']; 14 | // declare const GM_addElement: MonkeyWindow['GM_addElement']; 15 | // declare const GM_deleteValue: MonkeyWindow['GM_deleteValue']; 16 | // declare const GM_listValues: MonkeyWindow['GM_listValues']; 17 | // declare const GM_addValueChangeListener: MonkeyWindow['GM_addValueChangeListener']; 18 | // declare const GM_removeValueChangeListener: MonkeyWindow['GM_removeValueChangeListener']; 19 | // declare const GM_setValue: MonkeyWindow['GM_setValue']; 20 | // declare const GM_getValue: MonkeyWindow['GM_getValue']; 21 | // declare const GM_log: MonkeyWindow['GM_log']; 22 | // declare const GM_getResourceText: MonkeyWindow['GM_getResourceText']; 23 | // declare const GM_getResourceURL: MonkeyWindow['GM_getResourceURL']; 24 | // declare const GM_registerMenuCommand: MonkeyWindow['GM_registerMenuCommand']; 25 | // declare const GM_unregisterMenuCommand: MonkeyWindow['GM_unregisterMenuCommand']; 26 | // declare const GM_openInTab: MonkeyWindow['GM_openInTab']; 27 | // declare const GM_xmlhttpRequest: MonkeyWindow['GM_xmlhttpRequest']; 28 | // declare const GM_download: MonkeyWindow['GM_download']; 29 | // declare const GM_getTab: MonkeyWindow['GM_getTab']; 30 | // declare const GM_saveTab: MonkeyWindow['GM_saveTab']; 31 | // declare const GM_getTabs: MonkeyWindow['GM_getTabs']; 32 | // declare const GM_notification: MonkeyWindow['GM_notification']; 33 | // declare const GM_setClipboard: MonkeyWindow['GM_setClipboard']; 34 | // declare const GM_info: MonkeyWindow['GM_info']; 35 | // declare const GM_cookie: MonkeyWindow['GM_cookie']; 36 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "moduleResolution": "Node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "resolveJsonModule": true, 10 | "isolatedModules": true, 11 | "esModuleInterop": true, 12 | "lib": ["ESNext", "DOM"], 13 | "skipLibCheck": true, 14 | "noEmit": true 15 | }, 16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], 17 | "references": [ 18 | { 19 | "path": "./tsconfig.node.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "resolveJsonModule": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, loadEnv } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import monkey, { cdn } from 'vite-plugin-monkey' 4 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 5 | // @ts-ignore 6 | import pkgjson from './package.json' 7 | // https://vitejs.dev/config/ 8 | export default defineConfig((ctx) => { 9 | const env = loadEnv(ctx.mode, '.') 10 | const clver = (env.VITE_FROSTFLAKE_MIN_VERSION as string).split('.').map((v) => parseInt(v, 10)) 11 | const jsver = (pkgjson.version as string).split('.').map((v) => parseInt(v, 10)) 12 | const gfver = [clver[0], clver[1], jsver[0], jsver[1]].join('.') + '-r' + jsver[2] 13 | return { 14 | plugins: [ 15 | vue(), 16 | monkey({ 17 | entry: 'src/main.ts', 18 | userscript: { 19 | name: '志琼·原神地图', 20 | version: gfver, 21 | author: 'YuehaiTeam', 22 | icon: 'https://webstatic.mihoyo.com/ys/app/interactive-map/mapicon.png', 23 | namespace: 'yuehaiteam/zhiqiong-next', 24 | match: [ 25 | 'https://cocogoat.work/*', 26 | 'https://webstatic.mihoyo.com/ys/app/interactive-map/*', 27 | 'https://act.hoyolab.com/ys/app/interactive-map/*', 28 | 'https://v3.yuanshen.site/*', 29 | 'https://static-web.ghzs.com/cspage_pro/yuanshenMap*', 30 | ], 31 | grant: ['unsafeWindow'], 32 | }, 33 | build: { 34 | externalGlobals: { 35 | vue: cdn.baomitu('Vue', 'dist/vue.global.prod.js'), 36 | vant: cdn.baomitu('vant', 'vant.min.js'), 37 | eventemitter3: cdn.baomitu('eventemitter3', 'index.min.js'), 38 | }, 39 | externalResource: { 40 | 'vant/lib/index.css': cdn.baomitu('vant', 'vant.min.css'), 41 | }, 42 | }, 43 | }), 44 | ], 45 | } 46 | }) 47 | --------------------------------------------------------------------------------