├── .gitattributes ├── .gitignore ├── .gitmodules ├── .husky └── pre-commit ├── .prettierignore ├── .prettierrc.json ├── .run ├── build.run.xml ├── cleanup.run.xml └── dev.run.xml ├── .yarn ├── plugins │ └── @yarnpkg │ │ └── plugin-interactive-tools.cjs └── releases │ └── yarn-3.2.1.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── assets ├── docs │ └── example.png ├── github.png └── twitter.png ├── favicon.ico ├── index.html ├── package-lock.json ├── package.json ├── scripts └── cleanup.js ├── src ├── demo │ ├── Box.ts │ ├── Demo.ts │ ├── shader.frag │ └── shader.vert ├── engine │ ├── Camera.ts │ ├── Engine.ts │ ├── Experience.ts │ ├── GameEntity.ts │ ├── Raycaster.ts │ ├── RenderEngine.ts │ ├── RenderLoop.ts │ ├── Resources.ts │ ├── Sizes.ts │ ├── interface │ │ ├── DebugUI.ts │ │ ├── InfoUI.ts │ │ ├── Loader.ts │ │ ├── info.scss │ │ └── loader.scss │ └── utilities │ │ └── EventEmitter.ts ├── main.ts ├── style.scss ├── types │ └── glsl.d.ts └── vite-env.d.ts ├── tsconfig.json ├── vite.config.js └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | /.yarn/releases/** binary 2 | /.yarn/plugins/** binary 3 | -------------------------------------------------------------------------------- /.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 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | .pnp.* 27 | .yarn/* 28 | !.yarn/patches 29 | !.yarn/plugins 30 | !.yarn/releases 31 | !.yarn/sdks 32 | !.yarn/versions 33 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/shaders/lygia"] 2 | path = src/shaders/lygia 3 | url = https://github.com/patriciogonzalezvivo/lygia.git 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx lint-staged 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | assets 3 | public 4 | 5 | .yarn 6 | .husky 7 | package-lock.json 8 | .yarnrc.yml 9 | 10 | *.glsl 11 | *.vert 12 | *.frag 13 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /.run/build.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-threejs-typescript-starter", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "simple-threejs-typescript-starter", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "lil-gui": "^0.16.1", 13 | "three": "^0.141.0" 14 | }, 15 | "devDependencies": { 16 | "@types/three": "^0.141.0", 17 | "sass": "^1.52.3", 18 | "typescript": "^4.7.4", 19 | "vite": "^2.9.12", 20 | "vite-plugin-glsl": "^0.1.5" 21 | } 22 | }, 23 | "node_modules/@rollup/pluginutils": { 24 | "version": "4.2.1", 25 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 26 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 27 | "dev": true, 28 | "dependencies": { 29 | "estree-walker": "^2.0.1", 30 | "picomatch": "^2.2.2" 31 | }, 32 | "engines": { 33 | "node": ">= 8.0.0" 34 | } 35 | }, 36 | "node_modules/@types/three": { 37 | "version": "0.141.0", 38 | "resolved": "https://registry.npmjs.org/@types/three/-/three-0.141.0.tgz", 39 | "integrity": "sha512-OJdKDgTPVBUgc+s74DYoy4aLznbFFC38Xm4ElmU1YwGNgR7GGFVvFCX7lpVgOsT6S1zSJtGdajTsOYE8/xY9nA==", 40 | "dev": true, 41 | "dependencies": { 42 | "@types/webxr": "*" 43 | } 44 | }, 45 | "node_modules/@types/webxr": { 46 | "version": "0.4.0", 47 | "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.4.0.tgz", 48 | "integrity": "sha512-LQvrACV3Pj17GpkwHwXuTd733gfY+D7b9mKdrTmLdO7vo7P/o6209Qqtk63y/FCv/lspdmi0pWz6Qe/ull9kQg==", 49 | "dev": true 50 | }, 51 | "node_modules/anymatch": { 52 | "version": "3.1.2", 53 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 54 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 55 | "dev": true, 56 | "dependencies": { 57 | "normalize-path": "^3.0.0", 58 | "picomatch": "^2.0.4" 59 | }, 60 | "engines": { 61 | "node": ">= 8" 62 | } 63 | }, 64 | "node_modules/binary-extensions": { 65 | "version": "2.2.0", 66 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 67 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 68 | "dev": true, 69 | "engines": { 70 | "node": ">=8" 71 | } 72 | }, 73 | "node_modules/braces": { 74 | "version": "3.0.2", 75 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 76 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 77 | "dev": true, 78 | "dependencies": { 79 | "fill-range": "^7.0.1" 80 | }, 81 | "engines": { 82 | "node": ">=8" 83 | } 84 | }, 85 | "node_modules/chokidar": { 86 | "version": "3.5.3", 87 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 88 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 89 | "dev": true, 90 | "funding": [ 91 | { 92 | "type": "individual", 93 | "url": "https://paulmillr.com/funding/" 94 | } 95 | ], 96 | "dependencies": { 97 | "anymatch": "~3.1.2", 98 | "braces": "~3.0.2", 99 | "glob-parent": "~5.1.2", 100 | "is-binary-path": "~2.1.0", 101 | "is-glob": "~4.0.1", 102 | "normalize-path": "~3.0.0", 103 | "readdirp": "~3.6.0" 104 | }, 105 | "engines": { 106 | "node": ">= 8.10.0" 107 | }, 108 | "optionalDependencies": { 109 | "fsevents": "~2.3.2" 110 | } 111 | }, 112 | "node_modules/esbuild": { 113 | "version": "0.14.45", 114 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.45.tgz", 115 | "integrity": "sha512-JOxGUD8jcs8xE8DjyGWC8by/vLMCXTJ/wuauWipL5kJRZx1dhpqIntb31QHjA45GZJWaXv7SjC/Zwu1bCkXWtQ==", 116 | "dev": true, 117 | "hasInstallScript": true, 118 | "bin": { 119 | "esbuild": "bin/esbuild" 120 | }, 121 | "engines": { 122 | "node": ">=12" 123 | }, 124 | "optionalDependencies": { 125 | "esbuild-android-64": "0.14.45", 126 | "esbuild-android-arm64": "0.14.45", 127 | "esbuild-darwin-64": "0.14.45", 128 | "esbuild-darwin-arm64": "0.14.45", 129 | "esbuild-freebsd-64": "0.14.45", 130 | "esbuild-freebsd-arm64": "0.14.45", 131 | "esbuild-linux-32": "0.14.45", 132 | "esbuild-linux-64": "0.14.45", 133 | "esbuild-linux-arm": "0.14.45", 134 | "esbuild-linux-arm64": "0.14.45", 135 | "esbuild-linux-mips64le": "0.14.45", 136 | "esbuild-linux-ppc64le": "0.14.45", 137 | "esbuild-linux-riscv64": "0.14.45", 138 | "esbuild-linux-s390x": "0.14.45", 139 | "esbuild-netbsd-64": "0.14.45", 140 | "esbuild-openbsd-64": "0.14.45", 141 | "esbuild-sunos-64": "0.14.45", 142 | "esbuild-windows-32": "0.14.45", 143 | "esbuild-windows-64": "0.14.45", 144 | "esbuild-windows-arm64": "0.14.45" 145 | } 146 | }, 147 | "node_modules/esbuild-android-64": { 148 | "version": "0.14.45", 149 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.45.tgz", 150 | "integrity": "sha512-krVmwL2uXQN1A+Ci4u2MR+Y0IAvQK0u3no5TsgguHVhTy138szjuohScCGjkpvLCpGLk7P4kFP1LKuntvJ0d4A==", 151 | "cpu": [ 152 | "x64" 153 | ], 154 | "dev": true, 155 | "optional": true, 156 | "os": [ 157 | "android" 158 | ], 159 | "engines": { 160 | "node": ">=12" 161 | } 162 | }, 163 | "node_modules/esbuild-android-arm64": { 164 | "version": "0.14.45", 165 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.45.tgz", 166 | "integrity": "sha512-62POGdzAjM+XOXEM5MmFW6k9Pjdjg1hTrXKKBbPE700LFF36B+1Jv9QkskT5UadbTk4cdH9BQ7bGiRPYY0p/Dw==", 167 | "cpu": [ 168 | "arm64" 169 | ], 170 | "dev": true, 171 | "optional": true, 172 | "os": [ 173 | "android" 174 | ], 175 | "engines": { 176 | "node": ">=12" 177 | } 178 | }, 179 | "node_modules/esbuild-darwin-64": { 180 | "version": "0.14.45", 181 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.45.tgz", 182 | "integrity": "sha512-dbkVUAnGx5IeZesWnIhnvxy7dSvgUQvfy0TVLzd9XVP3oI/VsKs8UNsfPrxI5HiN4SINv7oPAbxWceMpB7IqNA==", 183 | "cpu": [ 184 | "x64" 185 | ], 186 | "dev": true, 187 | "optional": true, 188 | "os": [ 189 | "darwin" 190 | ], 191 | "engines": { 192 | "node": ">=12" 193 | } 194 | }, 195 | "node_modules/esbuild-darwin-arm64": { 196 | "version": "0.14.45", 197 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.45.tgz", 198 | "integrity": "sha512-O6Bz7nnOae5rvbh2Ueo8ibSr7+/eLjsbPdgeMsAZri+LkOa7nsVPnhmocpO3Hy/LWfagTtHy1O9HRPIaArPmTg==", 199 | "cpu": [ 200 | "arm64" 201 | ], 202 | "dev": true, 203 | "optional": true, 204 | "os": [ 205 | "darwin" 206 | ], 207 | "engines": { 208 | "node": ">=12" 209 | } 210 | }, 211 | "node_modules/esbuild-freebsd-64": { 212 | "version": "0.14.45", 213 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.45.tgz", 214 | "integrity": "sha512-y1X2nr3XSWnDC7MRcy21EVAT0TiCtdefOntJ+SQcZnPBTURzX77f99S8lDF2KswukChkiacpd2Wd4VZieo7w7Q==", 215 | "cpu": [ 216 | "x64" 217 | ], 218 | "dev": true, 219 | "optional": true, 220 | "os": [ 221 | "freebsd" 222 | ], 223 | "engines": { 224 | "node": ">=12" 225 | } 226 | }, 227 | "node_modules/esbuild-freebsd-arm64": { 228 | "version": "0.14.45", 229 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.45.tgz", 230 | "integrity": "sha512-r3ZNejkx1BKXQ6sYOP6C5rTwgiUajyAh03wygLWZtl+SLyygvAnu+OouqtveesufjBDgujp4wZXP/n8PVqXkqg==", 231 | "cpu": [ 232 | "arm64" 233 | ], 234 | "dev": true, 235 | "optional": true, 236 | "os": [ 237 | "freebsd" 238 | ], 239 | "engines": { 240 | "node": ">=12" 241 | } 242 | }, 243 | "node_modules/esbuild-linux-32": { 244 | "version": "0.14.45", 245 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.45.tgz", 246 | "integrity": "sha512-Qk9cCO3PJig/Y+SdslN/Th4pbAjgaH9oUjVH28eMsLTPf6QDUuK6EED91jepJdR3vxhcnVjyl6JqtOWmP+uxCg==", 247 | "cpu": [ 248 | "ia32" 249 | ], 250 | "dev": true, 251 | "optional": true, 252 | "os": [ 253 | "linux" 254 | ], 255 | "engines": { 256 | "node": ">=12" 257 | } 258 | }, 259 | "node_modules/esbuild-linux-64": { 260 | "version": "0.14.45", 261 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.45.tgz", 262 | "integrity": "sha512-IybO2ugqvc/Zzn1Kih3x0FVjYAy3GTCwhtcp91dbdqk3wPqxYCzObYspa8ca0s+OovI0Cnb+rhXrUtq8gBqlqw==", 263 | "cpu": [ 264 | "x64" 265 | ], 266 | "dev": true, 267 | "optional": true, 268 | "os": [ 269 | "linux" 270 | ], 271 | "engines": { 272 | "node": ">=12" 273 | } 274 | }, 275 | "node_modules/esbuild-linux-arm": { 276 | "version": "0.14.45", 277 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.45.tgz", 278 | "integrity": "sha512-qKWJ4A4TAcxXV2TBLPw3Av5X2SYNfyNnBHNJTQJ5VuevK6Aq5i6XEMvUgdlcVuZ9MYPfS5aJZWglzDzJMf1Lpw==", 279 | "cpu": [ 280 | "arm" 281 | ], 282 | "dev": true, 283 | "optional": true, 284 | "os": [ 285 | "linux" 286 | ], 287 | "engines": { 288 | "node": ">=12" 289 | } 290 | }, 291 | "node_modules/esbuild-linux-arm64": { 292 | "version": "0.14.45", 293 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.45.tgz", 294 | "integrity": "sha512-UNEyuHTwztrkEU/+mWIxGzKrYBo2cEtjYAZQVZB1kliANKgRITktg2miaO/b/VtNe84ob1aXSvW8XOPEn5RTGQ==", 295 | "cpu": [ 296 | "arm64" 297 | ], 298 | "dev": true, 299 | "optional": true, 300 | "os": [ 301 | "linux" 302 | ], 303 | "engines": { 304 | "node": ">=12" 305 | } 306 | }, 307 | "node_modules/esbuild-linux-mips64le": { 308 | "version": "0.14.45", 309 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.45.tgz", 310 | "integrity": "sha512-s/jcfw3Vpku5dIVSFVY7idJsGdIpIJ88IrkyprVgCG2yBeXatb67B7yIt0E1tL+OHrJJdNBw6GikCiMPAAu1VA==", 311 | "cpu": [ 312 | "mips64el" 313 | ], 314 | "dev": true, 315 | "optional": true, 316 | "os": [ 317 | "linux" 318 | ], 319 | "engines": { 320 | "node": ">=12" 321 | } 322 | }, 323 | "node_modules/esbuild-linux-ppc64le": { 324 | "version": "0.14.45", 325 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.45.tgz", 326 | "integrity": "sha512-lJItl6ESZnhSx951U9R7MTBopgwIELHlQzC6SBR023V5JC1rPRFDZ/UEBsV+7BFcCAfqlyb+odGEAmcBSf4XCA==", 327 | "cpu": [ 328 | "ppc64" 329 | ], 330 | "dev": true, 331 | "optional": true, 332 | "os": [ 333 | "linux" 334 | ], 335 | "engines": { 336 | "node": ">=12" 337 | } 338 | }, 339 | "node_modules/esbuild-linux-riscv64": { 340 | "version": "0.14.45", 341 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.45.tgz", 342 | "integrity": "sha512-8anMu+QLl9MununVCGJN2I/JvUWPm1EVsBBLq/J+Nz4hr8t6QOCuEp0HRaeMohyl2XiMFBchVu0mwa05rF7GFQ==", 343 | "cpu": [ 344 | "riscv64" 345 | ], 346 | "dev": true, 347 | "optional": true, 348 | "os": [ 349 | "linux" 350 | ], 351 | "engines": { 352 | "node": ">=12" 353 | } 354 | }, 355 | "node_modules/esbuild-linux-s390x": { 356 | "version": "0.14.45", 357 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.45.tgz", 358 | "integrity": "sha512-1TPeNvNCoahMw745KNTA6POKaFfSqQrBb3fdOL82GXZqyKU/6rHNwGP0NgHe88bAUMp3QZfjGfCGKxfBHL77RQ==", 359 | "cpu": [ 360 | "s390x" 361 | ], 362 | "dev": true, 363 | "optional": true, 364 | "os": [ 365 | "linux" 366 | ], 367 | "engines": { 368 | "node": ">=12" 369 | } 370 | }, 371 | "node_modules/esbuild-netbsd-64": { 372 | "version": "0.14.45", 373 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.45.tgz", 374 | "integrity": "sha512-55f2eZ8EQhhOZosqX0mApgRoI9PrVyXlHd9Uivk+B0B4WTKUgzkoHaVk4EkIUtNRQTpDWPciTlpb/C2tUYVejA==", 375 | "cpu": [ 376 | "x64" 377 | ], 378 | "dev": true, 379 | "optional": true, 380 | "os": [ 381 | "netbsd" 382 | ], 383 | "engines": { 384 | "node": ">=12" 385 | } 386 | }, 387 | "node_modules/esbuild-openbsd-64": { 388 | "version": "0.14.45", 389 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.45.tgz", 390 | "integrity": "sha512-Z5sNcT3oN9eryMW3mGn5HAgg7XCxiUS4isqH1tZXpsdOdOESbgbTEP0mBEJU0WU7Vt2gIN5XMbAp7Oigm0k71g==", 391 | "cpu": [ 392 | "x64" 393 | ], 394 | "dev": true, 395 | "optional": true, 396 | "os": [ 397 | "openbsd" 398 | ], 399 | "engines": { 400 | "node": ">=12" 401 | } 402 | }, 403 | "node_modules/esbuild-sunos-64": { 404 | "version": "0.14.45", 405 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.45.tgz", 406 | "integrity": "sha512-WmWu4wAm8mIxxK9aWFCj5VHunY3BHQDT3dAPexMLLszPyMF7RDtUYf+Dash9tjyitvnoxPAvR7DpWpirDLQIlQ==", 407 | "cpu": [ 408 | "x64" 409 | ], 410 | "dev": true, 411 | "optional": true, 412 | "os": [ 413 | "sunos" 414 | ], 415 | "engines": { 416 | "node": ">=12" 417 | } 418 | }, 419 | "node_modules/esbuild-windows-32": { 420 | "version": "0.14.45", 421 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.45.tgz", 422 | "integrity": "sha512-DPPehKwPJFBoSG+jILc/vcJNN8pTwz1m6FWojxqtqPhgw8OabTgN4vL7gNMqL/FSeDxF+zyvZeeMrZFYF1d81Q==", 423 | "cpu": [ 424 | "ia32" 425 | ], 426 | "dev": true, 427 | "optional": true, 428 | "os": [ 429 | "win32" 430 | ], 431 | "engines": { 432 | "node": ">=12" 433 | } 434 | }, 435 | "node_modules/esbuild-windows-64": { 436 | "version": "0.14.45", 437 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.45.tgz", 438 | "integrity": "sha512-t6bxFZcp9bLmSs+1pCNL/BW2bq3QEQHxU4HoiMEyWfF8QBU8iNXFI1iLGdyCzB1Ue2739h55tpOvojFrfyNPWA==", 439 | "cpu": [ 440 | "x64" 441 | ], 442 | "dev": true, 443 | "optional": true, 444 | "os": [ 445 | "win32" 446 | ], 447 | "engines": { 448 | "node": ">=12" 449 | } 450 | }, 451 | "node_modules/esbuild-windows-arm64": { 452 | "version": "0.14.45", 453 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.45.tgz", 454 | "integrity": "sha512-DnhrvjECBJ2L0owoznPb4RqQKZ498SM8J+YHqmqzi0Gf/enkUwwTjB8vPCK6dDuFnNU/NE8f94FhKdkBHYruDQ==", 455 | "cpu": [ 456 | "arm64" 457 | ], 458 | "dev": true, 459 | "optional": true, 460 | "os": [ 461 | "win32" 462 | ], 463 | "engines": { 464 | "node": ">=12" 465 | } 466 | }, 467 | "node_modules/estree-walker": { 468 | "version": "2.0.2", 469 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 470 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 471 | "dev": true 472 | }, 473 | "node_modules/fill-range": { 474 | "version": "7.0.1", 475 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 476 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 477 | "dev": true, 478 | "dependencies": { 479 | "to-regex-range": "^5.0.1" 480 | }, 481 | "engines": { 482 | "node": ">=8" 483 | } 484 | }, 485 | "node_modules/fsevents": { 486 | "version": "2.3.2", 487 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 488 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 489 | "dev": true, 490 | "hasInstallScript": true, 491 | "optional": true, 492 | "os": [ 493 | "darwin" 494 | ], 495 | "engines": { 496 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 497 | } 498 | }, 499 | "node_modules/function-bind": { 500 | "version": "1.1.1", 501 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 502 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 503 | "dev": true 504 | }, 505 | "node_modules/glob-parent": { 506 | "version": "5.1.2", 507 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 508 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 509 | "dev": true, 510 | "dependencies": { 511 | "is-glob": "^4.0.1" 512 | }, 513 | "engines": { 514 | "node": ">= 6" 515 | } 516 | }, 517 | "node_modules/has": { 518 | "version": "1.0.3", 519 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 520 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 521 | "dev": true, 522 | "dependencies": { 523 | "function-bind": "^1.1.1" 524 | }, 525 | "engines": { 526 | "node": ">= 0.4.0" 527 | } 528 | }, 529 | "node_modules/immutable": { 530 | "version": "4.1.0", 531 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", 532 | "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", 533 | "dev": true 534 | }, 535 | "node_modules/is-binary-path": { 536 | "version": "2.1.0", 537 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 538 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 539 | "dev": true, 540 | "dependencies": { 541 | "binary-extensions": "^2.0.0" 542 | }, 543 | "engines": { 544 | "node": ">=8" 545 | } 546 | }, 547 | "node_modules/is-core-module": { 548 | "version": "2.9.0", 549 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 550 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 551 | "dev": true, 552 | "dependencies": { 553 | "has": "^1.0.3" 554 | }, 555 | "funding": { 556 | "url": "https://github.com/sponsors/ljharb" 557 | } 558 | }, 559 | "node_modules/is-extglob": { 560 | "version": "2.1.1", 561 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 562 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 563 | "dev": true, 564 | "engines": { 565 | "node": ">=0.10.0" 566 | } 567 | }, 568 | "node_modules/is-glob": { 569 | "version": "4.0.3", 570 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 571 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 572 | "dev": true, 573 | "dependencies": { 574 | "is-extglob": "^2.1.1" 575 | }, 576 | "engines": { 577 | "node": ">=0.10.0" 578 | } 579 | }, 580 | "node_modules/is-number": { 581 | "version": "7.0.0", 582 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 583 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 584 | "dev": true, 585 | "engines": { 586 | "node": ">=0.12.0" 587 | } 588 | }, 589 | "node_modules/lil-gui": { 590 | "version": "0.16.1", 591 | "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.16.1.tgz", 592 | "integrity": "sha512-6wnnfBvQxJYRhdLyIA+w5b8utwbuVxNmtpTXElm36OSgHa8lyKp00Xz/4AEx3kvodT0AJYgbfadCFWAM0Q8DgQ==" 593 | }, 594 | "node_modules/nanoid": { 595 | "version": "3.3.4", 596 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 597 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 598 | "dev": true, 599 | "bin": { 600 | "nanoid": "bin/nanoid.cjs" 601 | }, 602 | "engines": { 603 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 604 | } 605 | }, 606 | "node_modules/normalize-path": { 607 | "version": "3.0.0", 608 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 609 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 610 | "dev": true, 611 | "engines": { 612 | "node": ">=0.10.0" 613 | } 614 | }, 615 | "node_modules/path-parse": { 616 | "version": "1.0.7", 617 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 618 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 619 | "dev": true 620 | }, 621 | "node_modules/picocolors": { 622 | "version": "1.0.0", 623 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 624 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 625 | "dev": true 626 | }, 627 | "node_modules/picomatch": { 628 | "version": "2.3.1", 629 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 630 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 631 | "dev": true, 632 | "engines": { 633 | "node": ">=8.6" 634 | }, 635 | "funding": { 636 | "url": "https://github.com/sponsors/jonschlinkert" 637 | } 638 | }, 639 | "node_modules/postcss": { 640 | "version": "8.4.14", 641 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 642 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 643 | "dev": true, 644 | "funding": [ 645 | { 646 | "type": "opencollective", 647 | "url": "https://opencollective.com/postcss/" 648 | }, 649 | { 650 | "type": "tidelift", 651 | "url": "https://tidelift.com/funding/github/npm/postcss" 652 | } 653 | ], 654 | "dependencies": { 655 | "nanoid": "^3.3.4", 656 | "picocolors": "^1.0.0", 657 | "source-map-js": "^1.0.2" 658 | }, 659 | "engines": { 660 | "node": "^10 || ^12 || >=14" 661 | } 662 | }, 663 | "node_modules/readdirp": { 664 | "version": "3.6.0", 665 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 666 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 667 | "dev": true, 668 | "dependencies": { 669 | "picomatch": "^2.2.1" 670 | }, 671 | "engines": { 672 | "node": ">=8.10.0" 673 | } 674 | }, 675 | "node_modules/resolve": { 676 | "version": "1.22.1", 677 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 678 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 679 | "dev": true, 680 | "dependencies": { 681 | "is-core-module": "^2.9.0", 682 | "path-parse": "^1.0.7", 683 | "supports-preserve-symlinks-flag": "^1.0.0" 684 | }, 685 | "bin": { 686 | "resolve": "bin/resolve" 687 | }, 688 | "funding": { 689 | "url": "https://github.com/sponsors/ljharb" 690 | } 691 | }, 692 | "node_modules/rollup": { 693 | "version": "2.75.6", 694 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", 695 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", 696 | "dev": true, 697 | "bin": { 698 | "rollup": "dist/bin/rollup" 699 | }, 700 | "engines": { 701 | "node": ">=10.0.0" 702 | }, 703 | "optionalDependencies": { 704 | "fsevents": "~2.3.2" 705 | } 706 | }, 707 | "node_modules/sass": { 708 | "version": "1.52.3", 709 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", 710 | "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", 711 | "dev": true, 712 | "dependencies": { 713 | "chokidar": ">=3.0.0 <4.0.0", 714 | "immutable": "^4.0.0", 715 | "source-map-js": ">=0.6.2 <2.0.0" 716 | }, 717 | "bin": { 718 | "sass": "sass.js" 719 | }, 720 | "engines": { 721 | "node": ">=12.0.0" 722 | } 723 | }, 724 | "node_modules/source-map-js": { 725 | "version": "1.0.2", 726 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 727 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 728 | "dev": true, 729 | "engines": { 730 | "node": ">=0.10.0" 731 | } 732 | }, 733 | "node_modules/supports-preserve-symlinks-flag": { 734 | "version": "1.0.0", 735 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 736 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 737 | "dev": true, 738 | "engines": { 739 | "node": ">= 0.4" 740 | }, 741 | "funding": { 742 | "url": "https://github.com/sponsors/ljharb" 743 | } 744 | }, 745 | "node_modules/three": { 746 | "version": "0.141.0", 747 | "resolved": "https://registry.npmjs.org/three/-/three-0.141.0.tgz", 748 | "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==" 749 | }, 750 | "node_modules/to-regex-range": { 751 | "version": "5.0.1", 752 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 753 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 754 | "dev": true, 755 | "dependencies": { 756 | "is-number": "^7.0.0" 757 | }, 758 | "engines": { 759 | "node": ">=8.0" 760 | } 761 | }, 762 | "node_modules/tslib": { 763 | "version": "2.4.0", 764 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 765 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 766 | "dev": true 767 | }, 768 | "node_modules/typescript": { 769 | "version": "4.7.4", 770 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 771 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 772 | "dev": true, 773 | "bin": { 774 | "tsc": "bin/tsc", 775 | "tsserver": "bin/tsserver" 776 | }, 777 | "engines": { 778 | "node": ">=4.2.0" 779 | } 780 | }, 781 | "node_modules/vite": { 782 | "version": "2.9.12", 783 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz", 784 | "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==", 785 | "dev": true, 786 | "dependencies": { 787 | "esbuild": "^0.14.27", 788 | "postcss": "^8.4.13", 789 | "resolve": "^1.22.0", 790 | "rollup": "^2.59.0" 791 | }, 792 | "bin": { 793 | "vite": "bin/vite.js" 794 | }, 795 | "engines": { 796 | "node": ">=12.2.0" 797 | }, 798 | "optionalDependencies": { 799 | "fsevents": "~2.3.2" 800 | }, 801 | "peerDependencies": { 802 | "less": "*", 803 | "sass": "*", 804 | "stylus": "*" 805 | }, 806 | "peerDependenciesMeta": { 807 | "less": { 808 | "optional": true 809 | }, 810 | "sass": { 811 | "optional": true 812 | }, 813 | "stylus": { 814 | "optional": true 815 | } 816 | } 817 | }, 818 | "node_modules/vite-plugin-glsl": { 819 | "version": "0.1.5", 820 | "resolved": "https://registry.npmjs.org/vite-plugin-glsl/-/vite-plugin-glsl-0.1.5.tgz", 821 | "integrity": "sha512-BsY0ndZthCXYipF/rc/Vri0s6N/JNwMyCDRJx7qiJNNY8+MiDgzhT2iOIHL7O7v3CvjOG9yOM2+WVTNvnHGT1w==", 822 | "dev": true, 823 | "dependencies": { 824 | "@rollup/pluginutils": "^4.2.1", 825 | "tslib": "^2.4.0" 826 | }, 827 | "engines": { 828 | "node": ">= 14.17.0", 829 | "npm": ">= 6.14.13" 830 | } 831 | } 832 | }, 833 | "dependencies": { 834 | "@rollup/pluginutils": { 835 | "version": "4.2.1", 836 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 837 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 838 | "dev": true, 839 | "requires": { 840 | "estree-walker": "^2.0.1", 841 | "picomatch": "^2.2.2" 842 | } 843 | }, 844 | "@types/three": { 845 | "version": "0.141.0", 846 | "resolved": "https://registry.npmjs.org/@types/three/-/three-0.141.0.tgz", 847 | "integrity": "sha512-OJdKDgTPVBUgc+s74DYoy4aLznbFFC38Xm4ElmU1YwGNgR7GGFVvFCX7lpVgOsT6S1zSJtGdajTsOYE8/xY9nA==", 848 | "dev": true, 849 | "requires": { 850 | "@types/webxr": "*" 851 | } 852 | }, 853 | "@types/webxr": { 854 | "version": "0.4.0", 855 | "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.4.0.tgz", 856 | "integrity": "sha512-LQvrACV3Pj17GpkwHwXuTd733gfY+D7b9mKdrTmLdO7vo7P/o6209Qqtk63y/FCv/lspdmi0pWz6Qe/ull9kQg==", 857 | "dev": true 858 | }, 859 | "anymatch": { 860 | "version": "3.1.2", 861 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 862 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 863 | "dev": true, 864 | "requires": { 865 | "normalize-path": "^3.0.0", 866 | "picomatch": "^2.0.4" 867 | } 868 | }, 869 | "binary-extensions": { 870 | "version": "2.2.0", 871 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 872 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 873 | "dev": true 874 | }, 875 | "braces": { 876 | "version": "3.0.2", 877 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 878 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 879 | "dev": true, 880 | "requires": { 881 | "fill-range": "^7.0.1" 882 | } 883 | }, 884 | "chokidar": { 885 | "version": "3.5.3", 886 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 887 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 888 | "dev": true, 889 | "requires": { 890 | "anymatch": "~3.1.2", 891 | "braces": "~3.0.2", 892 | "fsevents": "~2.3.2", 893 | "glob-parent": "~5.1.2", 894 | "is-binary-path": "~2.1.0", 895 | "is-glob": "~4.0.1", 896 | "normalize-path": "~3.0.0", 897 | "readdirp": "~3.6.0" 898 | } 899 | }, 900 | "esbuild": { 901 | "version": "0.14.45", 902 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.45.tgz", 903 | "integrity": "sha512-JOxGUD8jcs8xE8DjyGWC8by/vLMCXTJ/wuauWipL5kJRZx1dhpqIntb31QHjA45GZJWaXv7SjC/Zwu1bCkXWtQ==", 904 | "dev": true, 905 | "requires": { 906 | "esbuild-android-64": "0.14.45", 907 | "esbuild-android-arm64": "0.14.45", 908 | "esbuild-darwin-64": "0.14.45", 909 | "esbuild-darwin-arm64": "0.14.45", 910 | "esbuild-freebsd-64": "0.14.45", 911 | "esbuild-freebsd-arm64": "0.14.45", 912 | "esbuild-linux-32": "0.14.45", 913 | "esbuild-linux-64": "0.14.45", 914 | "esbuild-linux-arm": "0.14.45", 915 | "esbuild-linux-arm64": "0.14.45", 916 | "esbuild-linux-mips64le": "0.14.45", 917 | "esbuild-linux-ppc64le": "0.14.45", 918 | "esbuild-linux-riscv64": "0.14.45", 919 | "esbuild-linux-s390x": "0.14.45", 920 | "esbuild-netbsd-64": "0.14.45", 921 | "esbuild-openbsd-64": "0.14.45", 922 | "esbuild-sunos-64": "0.14.45", 923 | "esbuild-windows-32": "0.14.45", 924 | "esbuild-windows-64": "0.14.45", 925 | "esbuild-windows-arm64": "0.14.45" 926 | } 927 | }, 928 | "esbuild-android-64": { 929 | "version": "0.14.45", 930 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.45.tgz", 931 | "integrity": "sha512-krVmwL2uXQN1A+Ci4u2MR+Y0IAvQK0u3no5TsgguHVhTy138szjuohScCGjkpvLCpGLk7P4kFP1LKuntvJ0d4A==", 932 | "dev": true, 933 | "optional": true 934 | }, 935 | "esbuild-android-arm64": { 936 | "version": "0.14.45", 937 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.45.tgz", 938 | "integrity": "sha512-62POGdzAjM+XOXEM5MmFW6k9Pjdjg1hTrXKKBbPE700LFF36B+1Jv9QkskT5UadbTk4cdH9BQ7bGiRPYY0p/Dw==", 939 | "dev": true, 940 | "optional": true 941 | }, 942 | "esbuild-darwin-64": { 943 | "version": "0.14.45", 944 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.45.tgz", 945 | "integrity": "sha512-dbkVUAnGx5IeZesWnIhnvxy7dSvgUQvfy0TVLzd9XVP3oI/VsKs8UNsfPrxI5HiN4SINv7oPAbxWceMpB7IqNA==", 946 | "dev": true, 947 | "optional": true 948 | }, 949 | "esbuild-darwin-arm64": { 950 | "version": "0.14.45", 951 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.45.tgz", 952 | "integrity": "sha512-O6Bz7nnOae5rvbh2Ueo8ibSr7+/eLjsbPdgeMsAZri+LkOa7nsVPnhmocpO3Hy/LWfagTtHy1O9HRPIaArPmTg==", 953 | "dev": true, 954 | "optional": true 955 | }, 956 | "esbuild-freebsd-64": { 957 | "version": "0.14.45", 958 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.45.tgz", 959 | "integrity": "sha512-y1X2nr3XSWnDC7MRcy21EVAT0TiCtdefOntJ+SQcZnPBTURzX77f99S8lDF2KswukChkiacpd2Wd4VZieo7w7Q==", 960 | "dev": true, 961 | "optional": true 962 | }, 963 | "esbuild-freebsd-arm64": { 964 | "version": "0.14.45", 965 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.45.tgz", 966 | "integrity": "sha512-r3ZNejkx1BKXQ6sYOP6C5rTwgiUajyAh03wygLWZtl+SLyygvAnu+OouqtveesufjBDgujp4wZXP/n8PVqXkqg==", 967 | "dev": true, 968 | "optional": true 969 | }, 970 | "esbuild-linux-32": { 971 | "version": "0.14.45", 972 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.45.tgz", 973 | "integrity": "sha512-Qk9cCO3PJig/Y+SdslN/Th4pbAjgaH9oUjVH28eMsLTPf6QDUuK6EED91jepJdR3vxhcnVjyl6JqtOWmP+uxCg==", 974 | "dev": true, 975 | "optional": true 976 | }, 977 | "esbuild-linux-64": { 978 | "version": "0.14.45", 979 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.45.tgz", 980 | "integrity": "sha512-IybO2ugqvc/Zzn1Kih3x0FVjYAy3GTCwhtcp91dbdqk3wPqxYCzObYspa8ca0s+OovI0Cnb+rhXrUtq8gBqlqw==", 981 | "dev": true, 982 | "optional": true 983 | }, 984 | "esbuild-linux-arm": { 985 | "version": "0.14.45", 986 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.45.tgz", 987 | "integrity": "sha512-qKWJ4A4TAcxXV2TBLPw3Av5X2SYNfyNnBHNJTQJ5VuevK6Aq5i6XEMvUgdlcVuZ9MYPfS5aJZWglzDzJMf1Lpw==", 988 | "dev": true, 989 | "optional": true 990 | }, 991 | "esbuild-linux-arm64": { 992 | "version": "0.14.45", 993 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.45.tgz", 994 | "integrity": "sha512-UNEyuHTwztrkEU/+mWIxGzKrYBo2cEtjYAZQVZB1kliANKgRITktg2miaO/b/VtNe84ob1aXSvW8XOPEn5RTGQ==", 995 | "dev": true, 996 | "optional": true 997 | }, 998 | "esbuild-linux-mips64le": { 999 | "version": "0.14.45", 1000 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.45.tgz", 1001 | "integrity": "sha512-s/jcfw3Vpku5dIVSFVY7idJsGdIpIJ88IrkyprVgCG2yBeXatb67B7yIt0E1tL+OHrJJdNBw6GikCiMPAAu1VA==", 1002 | "dev": true, 1003 | "optional": true 1004 | }, 1005 | "esbuild-linux-ppc64le": { 1006 | "version": "0.14.45", 1007 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.45.tgz", 1008 | "integrity": "sha512-lJItl6ESZnhSx951U9R7MTBopgwIELHlQzC6SBR023V5JC1rPRFDZ/UEBsV+7BFcCAfqlyb+odGEAmcBSf4XCA==", 1009 | "dev": true, 1010 | "optional": true 1011 | }, 1012 | "esbuild-linux-riscv64": { 1013 | "version": "0.14.45", 1014 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.45.tgz", 1015 | "integrity": "sha512-8anMu+QLl9MununVCGJN2I/JvUWPm1EVsBBLq/J+Nz4hr8t6QOCuEp0HRaeMohyl2XiMFBchVu0mwa05rF7GFQ==", 1016 | "dev": true, 1017 | "optional": true 1018 | }, 1019 | "esbuild-linux-s390x": { 1020 | "version": "0.14.45", 1021 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.45.tgz", 1022 | "integrity": "sha512-1TPeNvNCoahMw745KNTA6POKaFfSqQrBb3fdOL82GXZqyKU/6rHNwGP0NgHe88bAUMp3QZfjGfCGKxfBHL77RQ==", 1023 | "dev": true, 1024 | "optional": true 1025 | }, 1026 | "esbuild-netbsd-64": { 1027 | "version": "0.14.45", 1028 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.45.tgz", 1029 | "integrity": "sha512-55f2eZ8EQhhOZosqX0mApgRoI9PrVyXlHd9Uivk+B0B4WTKUgzkoHaVk4EkIUtNRQTpDWPciTlpb/C2tUYVejA==", 1030 | "dev": true, 1031 | "optional": true 1032 | }, 1033 | "esbuild-openbsd-64": { 1034 | "version": "0.14.45", 1035 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.45.tgz", 1036 | "integrity": "sha512-Z5sNcT3oN9eryMW3mGn5HAgg7XCxiUS4isqH1tZXpsdOdOESbgbTEP0mBEJU0WU7Vt2gIN5XMbAp7Oigm0k71g==", 1037 | "dev": true, 1038 | "optional": true 1039 | }, 1040 | "esbuild-sunos-64": { 1041 | "version": "0.14.45", 1042 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.45.tgz", 1043 | "integrity": "sha512-WmWu4wAm8mIxxK9aWFCj5VHunY3BHQDT3dAPexMLLszPyMF7RDtUYf+Dash9tjyitvnoxPAvR7DpWpirDLQIlQ==", 1044 | "dev": true, 1045 | "optional": true 1046 | }, 1047 | "esbuild-windows-32": { 1048 | "version": "0.14.45", 1049 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.45.tgz", 1050 | "integrity": "sha512-DPPehKwPJFBoSG+jILc/vcJNN8pTwz1m6FWojxqtqPhgw8OabTgN4vL7gNMqL/FSeDxF+zyvZeeMrZFYF1d81Q==", 1051 | "dev": true, 1052 | "optional": true 1053 | }, 1054 | "esbuild-windows-64": { 1055 | "version": "0.14.45", 1056 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.45.tgz", 1057 | "integrity": "sha512-t6bxFZcp9bLmSs+1pCNL/BW2bq3QEQHxU4HoiMEyWfF8QBU8iNXFI1iLGdyCzB1Ue2739h55tpOvojFrfyNPWA==", 1058 | "dev": true, 1059 | "optional": true 1060 | }, 1061 | "esbuild-windows-arm64": { 1062 | "version": "0.14.45", 1063 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.45.tgz", 1064 | "integrity": "sha512-DnhrvjECBJ2L0owoznPb4RqQKZ498SM8J+YHqmqzi0Gf/enkUwwTjB8vPCK6dDuFnNU/NE8f94FhKdkBHYruDQ==", 1065 | "dev": true, 1066 | "optional": true 1067 | }, 1068 | "estree-walker": { 1069 | "version": "2.0.2", 1070 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1071 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1072 | "dev": true 1073 | }, 1074 | "fill-range": { 1075 | "version": "7.0.1", 1076 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1077 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1078 | "dev": true, 1079 | "requires": { 1080 | "to-regex-range": "^5.0.1" 1081 | } 1082 | }, 1083 | "fsevents": { 1084 | "version": "2.3.2", 1085 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1086 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1087 | "dev": true, 1088 | "optional": true 1089 | }, 1090 | "function-bind": { 1091 | "version": "1.1.1", 1092 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1093 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1094 | "dev": true 1095 | }, 1096 | "glob-parent": { 1097 | "version": "5.1.2", 1098 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1099 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1100 | "dev": true, 1101 | "requires": { 1102 | "is-glob": "^4.0.1" 1103 | } 1104 | }, 1105 | "has": { 1106 | "version": "1.0.3", 1107 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1108 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1109 | "dev": true, 1110 | "requires": { 1111 | "function-bind": "^1.1.1" 1112 | } 1113 | }, 1114 | "immutable": { 1115 | "version": "4.1.0", 1116 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", 1117 | "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", 1118 | "dev": true 1119 | }, 1120 | "is-binary-path": { 1121 | "version": "2.1.0", 1122 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1123 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1124 | "dev": true, 1125 | "requires": { 1126 | "binary-extensions": "^2.0.0" 1127 | } 1128 | }, 1129 | "is-core-module": { 1130 | "version": "2.9.0", 1131 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 1132 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 1133 | "dev": true, 1134 | "requires": { 1135 | "has": "^1.0.3" 1136 | } 1137 | }, 1138 | "is-extglob": { 1139 | "version": "2.1.1", 1140 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1141 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1142 | "dev": true 1143 | }, 1144 | "is-glob": { 1145 | "version": "4.0.3", 1146 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1147 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1148 | "dev": true, 1149 | "requires": { 1150 | "is-extglob": "^2.1.1" 1151 | } 1152 | }, 1153 | "is-number": { 1154 | "version": "7.0.0", 1155 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1156 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1157 | "dev": true 1158 | }, 1159 | "lil-gui": { 1160 | "version": "0.16.1", 1161 | "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.16.1.tgz", 1162 | "integrity": "sha512-6wnnfBvQxJYRhdLyIA+w5b8utwbuVxNmtpTXElm36OSgHa8lyKp00Xz/4AEx3kvodT0AJYgbfadCFWAM0Q8DgQ==" 1163 | }, 1164 | "nanoid": { 1165 | "version": "3.3.4", 1166 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1167 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1168 | "dev": true 1169 | }, 1170 | "normalize-path": { 1171 | "version": "3.0.0", 1172 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1173 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1174 | "dev": true 1175 | }, 1176 | "path-parse": { 1177 | "version": "1.0.7", 1178 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1179 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1180 | "dev": true 1181 | }, 1182 | "picocolors": { 1183 | "version": "1.0.0", 1184 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1185 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1186 | "dev": true 1187 | }, 1188 | "picomatch": { 1189 | "version": "2.3.1", 1190 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1191 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1192 | "dev": true 1193 | }, 1194 | "postcss": { 1195 | "version": "8.4.14", 1196 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 1197 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 1198 | "dev": true, 1199 | "requires": { 1200 | "nanoid": "^3.3.4", 1201 | "picocolors": "^1.0.0", 1202 | "source-map-js": "^1.0.2" 1203 | } 1204 | }, 1205 | "readdirp": { 1206 | "version": "3.6.0", 1207 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1208 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1209 | "dev": true, 1210 | "requires": { 1211 | "picomatch": "^2.2.1" 1212 | } 1213 | }, 1214 | "resolve": { 1215 | "version": "1.22.1", 1216 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1217 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1218 | "dev": true, 1219 | "requires": { 1220 | "is-core-module": "^2.9.0", 1221 | "path-parse": "^1.0.7", 1222 | "supports-preserve-symlinks-flag": "^1.0.0" 1223 | } 1224 | }, 1225 | "rollup": { 1226 | "version": "2.75.6", 1227 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", 1228 | "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", 1229 | "dev": true, 1230 | "requires": { 1231 | "fsevents": "~2.3.2" 1232 | } 1233 | }, 1234 | "sass": { 1235 | "version": "1.52.3", 1236 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", 1237 | "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", 1238 | "dev": true, 1239 | "requires": { 1240 | "chokidar": ">=3.0.0 <4.0.0", 1241 | "immutable": "^4.0.0", 1242 | "source-map-js": ">=0.6.2 <2.0.0" 1243 | } 1244 | }, 1245 | "source-map-js": { 1246 | "version": "1.0.2", 1247 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1248 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1249 | "dev": true 1250 | }, 1251 | "supports-preserve-symlinks-flag": { 1252 | "version": "1.0.0", 1253 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1254 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1255 | "dev": true 1256 | }, 1257 | "three": { 1258 | "version": "0.141.0", 1259 | "resolved": "https://registry.npmjs.org/three/-/three-0.141.0.tgz", 1260 | "integrity": "sha512-JaSDAPWuk4RTzG5BYRQm8YZbERUxTfTDVouWgHMisS2to4E5fotMS9F2zPFNOIJyEFTTQDDKPpsgZVThKU3pXA==" 1261 | }, 1262 | "to-regex-range": { 1263 | "version": "5.0.1", 1264 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1265 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1266 | "dev": true, 1267 | "requires": { 1268 | "is-number": "^7.0.0" 1269 | } 1270 | }, 1271 | "tslib": { 1272 | "version": "2.4.0", 1273 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 1274 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 1275 | "dev": true 1276 | }, 1277 | "typescript": { 1278 | "version": "4.7.4", 1279 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 1280 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 1281 | "dev": true 1282 | }, 1283 | "vite": { 1284 | "version": "2.9.12", 1285 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.12.tgz", 1286 | "integrity": "sha512-suxC36dQo9Rq1qMB2qiRorNJtJAdxguu5TMvBHOc/F370KvqAe9t48vYp+/TbPKRNrMh/J55tOUmkuIqstZaew==", 1287 | "dev": true, 1288 | "requires": { 1289 | "esbuild": "^0.14.27", 1290 | "fsevents": "~2.3.2", 1291 | "postcss": "^8.4.13", 1292 | "resolve": "^1.22.0", 1293 | "rollup": "^2.59.0" 1294 | } 1295 | }, 1296 | "vite-plugin-glsl": { 1297 | "version": "0.1.5", 1298 | "resolved": "https://registry.npmjs.org/vite-plugin-glsl/-/vite-plugin-glsl-0.1.5.tgz", 1299 | "integrity": "sha512-BsY0ndZthCXYipF/rc/Vri0s6N/JNwMyCDRJx7qiJNNY8+MiDgzhT2iOIHL7O7v3CvjOG9yOM2+WVTNvnHGT1w==", 1300 | "dev": true, 1301 | "requires": { 1302 | "@rollup/pluginutils": "^4.2.1", 1303 | "tslib": "^2.4.0" 1304 | } 1305 | } 1306 | } 1307 | } 1308 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "threejs-ts-starter", 3 | "version": "0.1.0", 4 | "description": "Simple starter for Three.js projects with TypeScript", 5 | "main": "index.html", 6 | "repository": "https://github.com/mayacoda/simple-threejs-typescript-starter", 7 | "author": "Maya Nedeljković Batić", 8 | "license": "MIT", 9 | "scripts": { 10 | "dev": "vite", 11 | "build": "tsc && vite build", 12 | "preview": "vite preview", 13 | "cleanup": "node ./scripts/cleanup.js", 14 | "prepare": "husky install", 15 | "preinstall": "git submodule update --init --recursive" 16 | }, 17 | "type": "module", 18 | "dependencies": { 19 | "lil-gui": "^0.18.2", 20 | "three": "^0.157.0" 21 | }, 22 | "devDependencies": { 23 | "@types/three": "^0.156.0", 24 | "husky": "^8.0.3", 25 | "lint-staged": "^13.3.0", 26 | "prettier": "2.8.8", 27 | "sass": "^1.69.0", 28 | "typescript": "^5.2.2", 29 | "vite": "^4.4.11", 30 | "vite-plugin-glsl": "^1.1.2" 31 | }, 32 | "packageManager": "yarn@3.2.1", 33 | "lint-staged": { 34 | "**/*": "prettier --write --ignore-unknown" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /scripts/cleanup.js: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs' 2 | 3 | // remove src/demo directory 4 | fs.rm('./src/demo', { recursive: true }, () => {}) 5 | 6 | // remove public/space_dog directory 7 | fs.rm('./public/space_dog', { recursive: true }, () => {}) 8 | 9 | fs.rm('./assets/docs', { recursive: true }, () => {}) 10 | 11 | // rewrite src/main.ts to only include the style import 12 | fs.writeFileSync( 13 | './src/main.ts', 14 | `import './style.scss' 15 | import { Engine } from './engine/Engine' 16 | import { Experience } from './engine/Experience' 17 | 18 | new Engine({ 19 | canvas: document.querySelector('#canvas') as HTMLCanvasElement, 20 | experience: class implements Experience { 21 | resources = [] 22 | init() {} 23 | update() {} 24 | resize() {} 25 | } 26 | })` 27 | ) 28 | 29 | fs.writeFileSync( 30 | './README.md', 31 | `# Simple Three.js + TypeScript + Vite Starter 32 | 33 | Local development: 34 | \`\`\`bash 35 | yarn 36 | yarn dev 37 | \`\`\` 38 | ` 39 | ) 40 | 41 | console.log('🧹 Repo cleaned up') 42 | -------------------------------------------------------------------------------- /src/demo/Box.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import vertexShader from './shader.vert' 3 | import fragmentShader from './shader.frag' 4 | 5 | export class Box extends THREE.Mesh { 6 | constructor() { 7 | const geometry = new THREE.BoxGeometry(1, 1, 1) 8 | const material = new THREE.ShaderMaterial({ 9 | vertexShader, 10 | fragmentShader, 11 | }) 12 | 13 | super(geometry, material) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/demo/Demo.ts: -------------------------------------------------------------------------------- 1 | import { Engine } from '../engine/Engine' 2 | import * as THREE from 'three' 3 | import { Box } from './Box' 4 | import { Experience } from '../engine/Experience' 5 | import { Resource } from '../engine/Resources' 6 | 7 | export class Demo implements Experience { 8 | resources: Resource[] = [] 9 | 10 | constructor(private engine: Engine) {} 11 | 12 | init() { 13 | const plane = new THREE.Mesh( 14 | new THREE.PlaneGeometry(10, 10), 15 | new THREE.MeshStandardMaterial({ color: 0xffffff }) 16 | ) 17 | 18 | plane.rotation.x = -Math.PI / 2 19 | plane.receiveShadow = true 20 | 21 | this.engine.scene.add(plane) 22 | this.engine.scene.add(new THREE.AmbientLight(0xffffff, 0.5)) 23 | 24 | let directionalLight = new THREE.DirectionalLight(0xffffff, 1) 25 | directionalLight.castShadow = true 26 | directionalLight.position.set(2, 2, 2) 27 | 28 | this.engine.scene.add(directionalLight) 29 | 30 | const box = new Box() 31 | box.castShadow = true 32 | box.rotation.y = Math.PI / 4 33 | box.position.set(0, 0.5, 0) 34 | 35 | this.engine.scene.add(box) 36 | } 37 | 38 | resize() {} 39 | 40 | update() {} 41 | } 42 | -------------------------------------------------------------------------------- /src/demo/shader.frag: -------------------------------------------------------------------------------- 1 | #include "../shaders/lygia/color/palette/water.glsl" 2 | 3 | varying vec2 vUv; 4 | 5 | void main() { 6 | gl_FragColor = vec4(water(vUv.y), 1.0); 7 | } 8 | -------------------------------------------------------------------------------- /src/demo/shader.vert: -------------------------------------------------------------------------------- 1 | varying vec2 vUv; 2 | 3 | void main() { 4 | vUv = uv; 5 | gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.0); 6 | } 7 | -------------------------------------------------------------------------------- /src/engine/Camera.ts: -------------------------------------------------------------------------------- 1 | import { Engine } from './Engine' 2 | import * as THREE from 'three' 3 | import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js' 4 | import { GameEntity } from './GameEntity' 5 | 6 | export class Camera implements GameEntity { 7 | public instance!: THREE.PerspectiveCamera 8 | private controls!: OrbitControls 9 | 10 | constructor(private engine: Engine) { 11 | this.initCamera() 12 | this.initControls() 13 | } 14 | 15 | private initCamera() { 16 | this.instance = new THREE.PerspectiveCamera( 17 | 75, 18 | window.innerWidth / window.innerHeight, 19 | 0.1, 20 | 1000 21 | ) 22 | this.instance.position.z = 5 23 | this.instance.position.y = 2 24 | this.engine.scene.add(this.instance) 25 | } 26 | 27 | private initControls() { 28 | this.controls = new OrbitControls(this.instance, this.engine.canvas) 29 | this.controls.update() 30 | } 31 | 32 | resize() { 33 | this.instance.aspect = this.engine.sizes.aspectRatio 34 | this.instance.updateProjectionMatrix() 35 | } 36 | 37 | update() { 38 | this.controls.update() 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/engine/Engine.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { RenderEngine } from './RenderEngine' 3 | import { RenderLoop } from './RenderLoop' 4 | import { DebugUI } from './interface/DebugUI' 5 | import { Sizes } from './Sizes' 6 | import { Camera } from './Camera' 7 | import { Resources } from './Resources' 8 | import { InfoConfig, InfoUI } from './interface/InfoUI' 9 | import { Experience, ExperienceConstructor } from './Experience' 10 | import { Loader } from './interface/Loader' 11 | import { Raycaster } from './Raycaster' 12 | 13 | export class Engine { 14 | public readonly camera!: Camera 15 | public readonly scene!: THREE.Scene 16 | public readonly renderEngine!: RenderEngine 17 | public readonly time!: RenderLoop 18 | public readonly debug!: DebugUI 19 | public readonly raycaster!: Raycaster 20 | public readonly infoUI!: InfoUI 21 | public readonly sizes!: Sizes 22 | public readonly canvas!: HTMLCanvasElement 23 | public readonly resources!: Resources 24 | public readonly experience!: Experience 25 | private readonly loader!: Loader 26 | 27 | constructor({ 28 | canvas, 29 | experience, 30 | info, 31 | }: { 32 | canvas: HTMLCanvasElement 33 | experience: ExperienceConstructor 34 | info?: InfoConfig 35 | }) { 36 | if (!canvas) { 37 | throw new Error('No canvas provided') 38 | } 39 | 40 | this.canvas = canvas 41 | this.sizes = new Sizes(this) 42 | this.debug = new DebugUI() 43 | this.time = new RenderLoop(this) 44 | this.scene = new THREE.Scene() 45 | this.camera = new Camera(this) 46 | this.raycaster = new Raycaster(this) 47 | this.infoUI = new InfoUI(info) 48 | this.renderEngine = new RenderEngine(this) 49 | this.experience = new experience(this) 50 | this.resources = new Resources(this.experience.resources) 51 | this.loader = new Loader() 52 | 53 | this.resources.on('loaded', () => { 54 | this.experience.init() 55 | this.loader.complete() 56 | }) 57 | 58 | this.resources.on('progress', (progress: number) => { 59 | this.loader.setProgress(progress) 60 | }) 61 | } 62 | 63 | update(delta: number) { 64 | if (!this.loader.isComplete) return 65 | 66 | this.camera.update() 67 | this.renderEngine.update() 68 | this.experience.update(delta) 69 | this.debug.update() 70 | } 71 | 72 | resize() { 73 | this.camera.resize() 74 | this.renderEngine.resize() 75 | if (this.experience.resize) { 76 | this.experience.resize() 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/engine/Experience.ts: -------------------------------------------------------------------------------- 1 | import { GameEntity } from './GameEntity' 2 | import { Engine } from './Engine' 3 | import { Resource } from './Resources' 4 | 5 | export type ExperienceConstructor = new (engine: Engine) => Experience 6 | export interface Experience extends GameEntity { 7 | init(): void 8 | resources: Resource[] 9 | } 10 | -------------------------------------------------------------------------------- /src/engine/GameEntity.ts: -------------------------------------------------------------------------------- 1 | export interface GameEntity { 2 | update(delta: number): void 3 | resize?(): void 4 | } 5 | -------------------------------------------------------------------------------- /src/engine/Raycaster.ts: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from './utilities/EventEmitter' 2 | import * as THREE from 'three' 3 | import { Engine } from './Engine' 4 | 5 | export class Raycaster extends EventEmitter { 6 | private raycaster: THREE.Raycaster 7 | private pointer: THREE.Vector2 8 | 9 | constructor(private engine: Engine) { 10 | super() 11 | this.raycaster = new THREE.Raycaster() 12 | this.pointer = new THREE.Vector2() 13 | 14 | document.addEventListener('mousemove', (event) => { 15 | const x = (event.clientX / this.engine.sizes.width) * 2 - 1 16 | const y = -(event.clientY / this.engine.sizes.height) * 2 + 1 17 | this.setPointer(x, y) 18 | if (this.listenerCount('move')) { 19 | this.emit('move', this.getIntersections()) 20 | } 21 | }) 22 | 23 | document.addEventListener('click', (event) => { 24 | if (!(event.target instanceof HTMLCanvasElement)) return 25 | const point = this.mouseEventToVector2(event) 26 | this.setPointer(point.x, point.y) 27 | this.update() 28 | if (this.listenerCount('click')) { 29 | this.emit('click', this.getIntersections()) 30 | } 31 | }) 32 | } 33 | 34 | public update() { 35 | this.raycaster.setFromCamera(this.pointer, this.engine.camera.instance) 36 | } 37 | 38 | public setPointer(x: number, y: number) { 39 | this.pointer.x = x 40 | this.pointer.y = y 41 | } 42 | 43 | public getIntersections() { 44 | return this.raycaster.intersectObjects(this.engine.scene.children, true) 45 | } 46 | 47 | private mouseEventToVector2(event: MouseEvent) { 48 | const x = (event.clientX / this.engine.sizes.width) * 2 - 1 49 | const y = -(event.clientY / this.engine.sizes.height) * 2 + 1 50 | return new THREE.Vector2(x, y) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/engine/RenderEngine.ts: -------------------------------------------------------------------------------- 1 | import { WebGLRenderer } from 'three' 2 | import { Engine } from './Engine' 3 | import * as THREE from 'three' 4 | import { GameEntity } from './GameEntity' 5 | import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer' 6 | import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass' 7 | 8 | export class RenderEngine implements GameEntity { 9 | private readonly renderer: WebGLRenderer 10 | composer: EffectComposer 11 | 12 | constructor(private engine: Engine) { 13 | this.renderer = new WebGLRenderer({ 14 | canvas: this.engine.canvas, 15 | antialias: true, 16 | }) 17 | 18 | this.renderer.outputEncoding = THREE.sRGBEncoding 19 | this.renderer.toneMapping = THREE.CineonToneMapping 20 | this.renderer.toneMappingExposure = 1.75 21 | this.renderer.shadowMap.enabled = true 22 | this.renderer.shadowMap.type = THREE.PCFSoftShadowMap 23 | this.renderer.setClearColor('#000000') 24 | this.renderer.setSize(this.engine.sizes.width, this.engine.sizes.height) 25 | this.renderer.setPixelRatio(Math.min(this.engine.sizes.pixelRatio, 2)) 26 | 27 | this.composer = new EffectComposer(this.renderer) 28 | 29 | const renderPass = new RenderPass( 30 | this.engine.scene, 31 | this.engine.camera.instance 32 | ) 33 | this.composer.addPass(renderPass) 34 | } 35 | 36 | update() { 37 | this.composer.render() 38 | } 39 | 40 | resize() { 41 | this.renderer.setSize(this.engine.sizes.width, this.engine.sizes.height) 42 | this.composer.setSize(this.engine.sizes.width, this.engine.sizes.height) 43 | this.composer.render() 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/engine/RenderLoop.ts: -------------------------------------------------------------------------------- 1 | import { Engine } from './Engine' 2 | import * as THREE from 'three' 3 | 4 | export class RenderLoop { 5 | private clock: THREE.Clock 6 | public deltaTime: number = 16 7 | public currentTime: number = 0 8 | 9 | constructor(private engine: Engine) { 10 | this.clock = new THREE.Clock() 11 | window.requestAnimationFrame(() => this.update()) 12 | } 13 | 14 | update() { 15 | const step = () => { 16 | requestAnimationFrame(step) 17 | const elapsedTime = this.clock.getElapsedTime() 18 | 19 | this.deltaTime = elapsedTime - this.currentTime 20 | 21 | this.currentTime = elapsedTime 22 | 23 | this.engine.update(this.deltaTime) 24 | } 25 | step() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/engine/Resources.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader' 3 | import { EventEmitter } from './utilities/EventEmitter' 4 | 5 | export type Resource = 6 | | { 7 | name: string 8 | type: Exclude 9 | path: string 10 | } 11 | | { 12 | name: string 13 | type: 'cubeTexture' 14 | path: string[] 15 | } 16 | 17 | type AssetType = 'gltf' | 'texture' | 'cubeTexture' 18 | 19 | type Loaders = { 20 | gltf: GLTFLoader 21 | texture: THREE.TextureLoader 22 | cubeTexture: THREE.CubeTextureLoader 23 | } 24 | 25 | export class Resources extends EventEmitter { 26 | private loadingManager = new THREE.LoadingManager( 27 | () => { 28 | this.emit('loaded') 29 | }, 30 | // @ts-ignore 31 | (url: string, item: number, total: number) => { 32 | this.emit('progress', item / total) 33 | }, 34 | (url: string) => { 35 | console.error(`Failed to load ${url}`) 36 | } 37 | ) 38 | private loaders!: Loaders 39 | public items: Record = {} 40 | 41 | constructor(private readonly resources: Resource[]) { 42 | super() 43 | this.initLoaders() 44 | this.load() 45 | } 46 | 47 | private initLoaders() { 48 | this.loaders = { 49 | gltf: new GLTFLoader(this.loadingManager), 50 | texture: new THREE.TextureLoader(this.loadingManager), 51 | cubeTexture: new THREE.CubeTextureLoader(this.loadingManager), 52 | } 53 | } 54 | 55 | getItem(name: string) { 56 | let item = this.items[name] 57 | if (!item) { 58 | throw new Error(`Resource ${name} not found`) 59 | } 60 | return item 61 | } 62 | 63 | load() { 64 | if (this.resources.length === 0) { 65 | setTimeout(() => { 66 | this.emit('loaded') 67 | }) 68 | } 69 | 70 | for (const resource of this.resources) { 71 | switch (resource.type) { 72 | case 'gltf': 73 | this.loaders.gltf.load( 74 | resource.path, 75 | (file) => (this.items[resource.name] = file) 76 | ) 77 | break 78 | case 'texture': 79 | this.loaders.texture.load( 80 | resource.path, 81 | (file) => (this.items[resource.name] = file) 82 | ) 83 | break 84 | case 'cubeTexture': 85 | this.loaders.cubeTexture.load( 86 | resource.path, 87 | (file) => (this.items[resource.name] = file) 88 | ) 89 | break 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/engine/Sizes.ts: -------------------------------------------------------------------------------- 1 | import { Engine } from './Engine' 2 | import { EventEmitter } from './utilities/EventEmitter' 3 | 4 | type Sizing = 'cover' | 'contain' 5 | 6 | export class Sizes extends EventEmitter { 7 | public width!: number 8 | public height!: number 9 | public pixelRatio: number = Math.min(window.devicePixelRatio, 2) 10 | public aspectRatio!: number 11 | 12 | public sizing: Sizing = 'contain' 13 | 14 | constructor(private engine: Engine) { 15 | super() 16 | this.setContainsSizing() 17 | 18 | window.addEventListener('resize', () => { 19 | this.resize() 20 | this.engine.resize() 21 | this.emit('resize') 22 | }) 23 | } 24 | 25 | public setContainsSizing() { 26 | this.width = window.innerWidth 27 | this.height = window.innerHeight 28 | 29 | this.aspectRatio = this.width / this.height 30 | } 31 | 32 | public setCoverSizing() { 33 | const maxWidth = window.innerWidth 34 | const maxHeight = window.innerHeight 35 | 36 | if (maxWidth / maxHeight < this.aspectRatio) { 37 | this.width = maxWidth 38 | this.height = maxWidth / this.aspectRatio 39 | } else { 40 | this.width = maxHeight * this.aspectRatio 41 | this.height = maxHeight 42 | } 43 | } 44 | 45 | setAspectRatio(aspectRatio: number) { 46 | this.aspectRatio = aspectRatio 47 | } 48 | 49 | setSizing(sizing: Sizing) { 50 | this.sizing = sizing 51 | 52 | this.resize() 53 | } 54 | 55 | resize() { 56 | if (this.sizing === 'contain') { 57 | this.setContainsSizing() 58 | } else { 59 | this.setCoverSizing() 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/engine/interface/DebugUI.ts: -------------------------------------------------------------------------------- 1 | import * as lilGui from 'lil-gui' 2 | import Stats from 'three/examples/jsm/libs/stats.module' 3 | 4 | let instance: DebugUI | null = null 5 | 6 | export class DebugUI { 7 | gui!: lilGui.GUI 8 | stats!: Stats 9 | 10 | constructor() { 11 | if (instance) { 12 | return this 13 | } 14 | 15 | instance = this 16 | 17 | this.stats = new Stats() 18 | document.body.appendChild(this.stats.dom) 19 | 20 | this.gui = new lilGui.GUI() 21 | 22 | if (!window.location.search.includes('debug')) { 23 | this.gui.hide() 24 | this.stats.dom.style.display = 'none' 25 | } 26 | 27 | window.addEventListener('keydown', (event) => { 28 | if (event.key === 'h') { 29 | if (this.gui._hidden) { 30 | this.gui.show() 31 | this.stats.dom.style.display = 'block' 32 | } else { 33 | this.gui.hide() 34 | this.stats.dom.style.display = 'none' 35 | } 36 | } 37 | }) 38 | } 39 | 40 | update() { 41 | this.stats.update() 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/engine/interface/InfoUI.ts: -------------------------------------------------------------------------------- 1 | import './info.scss' 2 | import twitterLogo from '../../../assets/twitter.png' 3 | import githubLogo from '../../../assets/github.png' 4 | 5 | export type InfoConfig = { 6 | twitter?: string 7 | github?: string 8 | description?: string 9 | title?: string 10 | documentTitle?: string 11 | } 12 | 13 | export class InfoUI { 14 | constructor(config: InfoConfig = {}) { 15 | if (config.documentTitle) { 16 | document.title = config.documentTitle 17 | } 18 | 19 | const container = document.createElement('div') 20 | container.classList.add('info-container') 21 | container.insertAdjacentHTML( 22 | 'beforeend', 23 | ` 24 | ${config.title ? `

${config.title}

` : ''} 25 | ${ 26 | config.description 27 | ? `
28 |

${config.description}

29 |
` 30 | : `` 31 | } 32 | 48 | ` 49 | ) 50 | document.body.prepend(container) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/engine/interface/Loader.ts: -------------------------------------------------------------------------------- 1 | import './loader.scss' 2 | 3 | export class Loader { 4 | private readonly element: HTMLDivElement 5 | public isComplete = false 6 | 7 | constructor() { 8 | this.element = document.createElement('div') 9 | this.element.classList.add('loader') 10 | this.element.insertAdjacentHTML( 11 | 'beforeend', 12 | ` 13 |
14 |

0%

15 |
16 |
17 | ` 18 | ) 19 | 20 | this.start() 21 | } 22 | 23 | start() { 24 | document.body.prepend(this.element) 25 | } 26 | 27 | setProgress(progress: number) { 28 | const progressNumber = this.element.querySelector( 29 | '.progress-number' 30 | ) as HTMLHeadingElement 31 | 32 | progressNumber!.innerText = `${Math.floor(progress * 100)}%` 33 | 34 | const progressBar = this.element.querySelector( 35 | '.progress-bar' 36 | ) as HTMLDivElement 37 | 38 | progressBar.style.width = `${progress * 100}%` 39 | } 40 | 41 | complete() { 42 | this.element.remove() 43 | this.isComplete = true 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/engine/interface/info.scss: -------------------------------------------------------------------------------- 1 | .info-container { 2 | position: absolute; 3 | bottom: 0; 4 | left: 0; 5 | padding: 16px 20px; 6 | 7 | display: flex; 8 | flex-direction: column; 9 | 10 | user-select: none; 11 | opacity: 40%; 12 | transition: opacity 0.3s ease-in-out; 13 | 14 | color: #fff; 15 | font-family: 'Helvetica', 'Arial', sans-serif; 16 | text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); 17 | 18 | &:hover { 19 | opacity: 100%; 20 | } 21 | 22 | h1 { 23 | margin-bottom: 0; 24 | font-weight: normal; 25 | } 26 | 27 | .description { 28 | width: 250px; 29 | max-width: 100%; 30 | margin-bottom: 4px; 31 | } 32 | 33 | .social-container { 34 | display: flex; 35 | flex-direction: row; 36 | justify-content: flex-start; 37 | align-items: center; 38 | } 39 | 40 | .social-button { 41 | display: flex; 42 | width: 24px; 43 | height: 24px; 44 | padding: 8px; 45 | margin-right: 8px; 46 | border-radius: 50px; 47 | align-items: center; 48 | 49 | background: #fff; 50 | transition: box-shadow 0.3s ease-in-out; 51 | 52 | &:hover { 53 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); 54 | } 55 | 56 | img { 57 | max-width: 100%; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/engine/interface/loader.scss: -------------------------------------------------------------------------------- 1 | .loader { 2 | width: 100%; 3 | height: 100%; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | 8 | color: #fff; 9 | font-family: 'Helvetica', 'Arial', sans-serif; 10 | font-weight: normal; 11 | 12 | .loader-inner { 13 | width: 500px; 14 | max-width: 95%; 15 | } 16 | 17 | .progress-number { 18 | text-align: center; 19 | } 20 | 21 | .progress-bar { 22 | background-color: #fff; 23 | transition: width 0.3s ease-in-out; 24 | 25 | height: 5px; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/engine/utilities/EventEmitter.ts: -------------------------------------------------------------------------------- 1 | export class EventEmitter { 2 | private listeners: { [key: string]: Function[] } = {} 3 | 4 | protected listenerCount(event: string) { 5 | return this.listeners[event] ? this.listeners[event].length : 0 6 | } 7 | 8 | public on(event: string, listener: Function) { 9 | if (!this.listeners[event]) { 10 | this.listeners[event] = [] 11 | } 12 | 13 | this.listeners[event].push(listener) 14 | 15 | return () => this.off(event, listener) 16 | } 17 | 18 | public off(event: string, listener: Function) { 19 | if (!this.listeners[event]) { 20 | return 21 | } 22 | 23 | const index = this.listeners[event].indexOf(listener) 24 | 25 | if (index === -1) { 26 | return 27 | } 28 | 29 | this.listeners[event].splice(index, 1) 30 | } 31 | 32 | public emit(event: string, ...args: any[]) { 33 | if (!this.listeners[event]) { 34 | return 35 | } 36 | 37 | this.listeners[event].forEach((listener) => listener(...args)) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import './style.scss' 2 | import { Engine } from './engine/Engine' 3 | import { Demo } from './demo/Demo' 4 | 5 | new Engine({ 6 | canvas: document.querySelector('#canvas') as HTMLCanvasElement, 7 | experience: Demo, 8 | info: { 9 | twitter: 'https://twitter.com/maya_ndljk', 10 | github: 'https://github.com/mayacoda/simple-threejs-typescript-starter', 11 | description: 'A simple Three.js + Typescript + Vite starter project', 12 | documentTitle: 'Three.js + Typescript + Vite', 13 | title: 'A cube on a plane', 14 | }, 15 | }) 16 | -------------------------------------------------------------------------------- /src/style.scss: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | #canvas { 4 | height: 100%; 5 | width: 100%; 6 | margin: 0; 7 | padding: 0; 8 | overflow: hidden; 9 | background: #000; 10 | } 11 | 12 | #canvas { 13 | outline: none; 14 | } 15 | -------------------------------------------------------------------------------- /src/types/glsl.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.glsl' { 2 | const value: string 3 | export default value 4 | } 5 | 6 | declare module '*.frag' { 7 | const value: string 8 | export default value 9 | } 10 | 11 | declare module '*.vert' { 12 | const value: string 13 | export default value 14 | } 15 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ESNext", "DOM"], 7 | "moduleResolution": "Node", 8 | "strict": true, 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "noEmit": true, 14 | "noUnusedLocals": true, 15 | "noUnusedParameters": true, 16 | "noImplicitReturns": true, 17 | "skipLibCheck": true 18 | }, 19 | "include": ["src"] 20 | } 21 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import glsl from 'vite-plugin-glsl' 2 | import { defineConfig } from 'vite' 3 | 4 | export default defineConfig({ 5 | plugins: [glsl()], 6 | }) 7 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 6 6 | cacheKey: 8 7 | 8 | "@esbuild/android-arm64@npm:0.18.20": 9 | version: 0.18.20 10 | resolution: "@esbuild/android-arm64@npm:0.18.20" 11 | conditions: os=android & cpu=arm64 12 | languageName: node 13 | linkType: hard 14 | 15 | "@esbuild/android-arm@npm:0.18.20": 16 | version: 0.18.20 17 | resolution: "@esbuild/android-arm@npm:0.18.20" 18 | conditions: os=android & cpu=arm 19 | languageName: node 20 | linkType: hard 21 | 22 | "@esbuild/android-x64@npm:0.18.20": 23 | version: 0.18.20 24 | resolution: "@esbuild/android-x64@npm:0.18.20" 25 | conditions: os=android & cpu=x64 26 | languageName: node 27 | linkType: hard 28 | 29 | "@esbuild/darwin-arm64@npm:0.18.20": 30 | version: 0.18.20 31 | resolution: "@esbuild/darwin-arm64@npm:0.18.20" 32 | conditions: os=darwin & cpu=arm64 33 | languageName: node 34 | linkType: hard 35 | 36 | "@esbuild/darwin-x64@npm:0.18.20": 37 | version: 0.18.20 38 | resolution: "@esbuild/darwin-x64@npm:0.18.20" 39 | conditions: os=darwin & cpu=x64 40 | languageName: node 41 | linkType: hard 42 | 43 | "@esbuild/freebsd-arm64@npm:0.18.20": 44 | version: 0.18.20 45 | resolution: "@esbuild/freebsd-arm64@npm:0.18.20" 46 | conditions: os=freebsd & cpu=arm64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@esbuild/freebsd-x64@npm:0.18.20": 51 | version: 0.18.20 52 | resolution: "@esbuild/freebsd-x64@npm:0.18.20" 53 | conditions: os=freebsd & cpu=x64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@esbuild/linux-arm64@npm:0.18.20": 58 | version: 0.18.20 59 | resolution: "@esbuild/linux-arm64@npm:0.18.20" 60 | conditions: os=linux & cpu=arm64 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/linux-arm@npm:0.18.20": 65 | version: 0.18.20 66 | resolution: "@esbuild/linux-arm@npm:0.18.20" 67 | conditions: os=linux & cpu=arm 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/linux-ia32@npm:0.18.20": 72 | version: 0.18.20 73 | resolution: "@esbuild/linux-ia32@npm:0.18.20" 74 | conditions: os=linux & cpu=ia32 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/linux-loong64@npm:0.18.20": 79 | version: 0.18.20 80 | resolution: "@esbuild/linux-loong64@npm:0.18.20" 81 | conditions: os=linux & cpu=loong64 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/linux-mips64el@npm:0.18.20": 86 | version: 0.18.20 87 | resolution: "@esbuild/linux-mips64el@npm:0.18.20" 88 | conditions: os=linux & cpu=mips64el 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/linux-ppc64@npm:0.18.20": 93 | version: 0.18.20 94 | resolution: "@esbuild/linux-ppc64@npm:0.18.20" 95 | conditions: os=linux & cpu=ppc64 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/linux-riscv64@npm:0.18.20": 100 | version: 0.18.20 101 | resolution: "@esbuild/linux-riscv64@npm:0.18.20" 102 | conditions: os=linux & cpu=riscv64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/linux-s390x@npm:0.18.20": 107 | version: 0.18.20 108 | resolution: "@esbuild/linux-s390x@npm:0.18.20" 109 | conditions: os=linux & cpu=s390x 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/linux-x64@npm:0.18.20": 114 | version: 0.18.20 115 | resolution: "@esbuild/linux-x64@npm:0.18.20" 116 | conditions: os=linux & cpu=x64 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/netbsd-x64@npm:0.18.20": 121 | version: 0.18.20 122 | resolution: "@esbuild/netbsd-x64@npm:0.18.20" 123 | conditions: os=netbsd & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/openbsd-x64@npm:0.18.20": 128 | version: 0.18.20 129 | resolution: "@esbuild/openbsd-x64@npm:0.18.20" 130 | conditions: os=openbsd & cpu=x64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/sunos-x64@npm:0.18.20": 135 | version: 0.18.20 136 | resolution: "@esbuild/sunos-x64@npm:0.18.20" 137 | conditions: os=sunos & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/win32-arm64@npm:0.18.20": 142 | version: 0.18.20 143 | resolution: "@esbuild/win32-arm64@npm:0.18.20" 144 | conditions: os=win32 & cpu=arm64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/win32-ia32@npm:0.18.20": 149 | version: 0.18.20 150 | resolution: "@esbuild/win32-ia32@npm:0.18.20" 151 | conditions: os=win32 & cpu=ia32 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/win32-x64@npm:0.18.20": 156 | version: 0.18.20 157 | resolution: "@esbuild/win32-x64@npm:0.18.20" 158 | conditions: os=win32 & cpu=x64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@gar/promisify@npm:^1.1.3": 163 | version: 1.1.3 164 | resolution: "@gar/promisify@npm:1.1.3" 165 | checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 166 | languageName: node 167 | linkType: hard 168 | 169 | "@npmcli/fs@npm:^2.1.0": 170 | version: 2.1.1 171 | resolution: "@npmcli/fs@npm:2.1.1" 172 | dependencies: 173 | "@gar/promisify": ^1.1.3 174 | semver: ^7.3.5 175 | checksum: 4944a0545d38d3e6e29780eeb3cd4be6059c1e9627509d2c9ced635c53b852d28b37cdc615a2adf815b51ab8673adb6507e370401a20a7e90c8a6dc4fac02389 176 | languageName: node 177 | linkType: hard 178 | 179 | "@npmcli/move-file@npm:^2.0.0": 180 | version: 2.0.0 181 | resolution: "@npmcli/move-file@npm:2.0.0" 182 | dependencies: 183 | mkdirp: ^1.0.4 184 | rimraf: ^3.0.2 185 | checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 186 | languageName: node 187 | linkType: hard 188 | 189 | "@rollup/pluginutils@npm:^5.0.2": 190 | version: 5.0.2 191 | resolution: "@rollup/pluginutils@npm:5.0.2" 192 | dependencies: 193 | "@types/estree": ^1.0.0 194 | estree-walker: ^2.0.2 195 | picomatch: ^2.3.1 196 | peerDependencies: 197 | rollup: ^1.20.0||^2.0.0||^3.0.0 198 | peerDependenciesMeta: 199 | rollup: 200 | optional: true 201 | checksum: edea15e543bebc7dcac3b0ac8bc7b8e8e6dbd46e2864dbe5dd28072de1fbd5b0e10d545a610c0edaa178e8a7ac432e2a2a52e547ece1308471412caba47db8ce 202 | languageName: node 203 | linkType: hard 204 | 205 | "@tootallnate/once@npm:2": 206 | version: 2.0.0 207 | resolution: "@tootallnate/once@npm:2.0.0" 208 | checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 209 | languageName: node 210 | linkType: hard 211 | 212 | "@types/estree@npm:^1.0.0": 213 | version: 1.0.0 214 | resolution: "@types/estree@npm:1.0.0" 215 | checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 216 | languageName: node 217 | linkType: hard 218 | 219 | "@types/stats.js@npm:*": 220 | version: 0.17.1 221 | resolution: "@types/stats.js@npm:0.17.1" 222 | checksum: 9b05d22f4d3be1aaa2ac3104273fd80457ad6ed9c816f4cd73873aec76c823b8f2f4a437c803dc5a1df8a9d5e6bf33af6c7baf9cb8269ddf7ef4b7d2c1e3ed72 223 | languageName: node 224 | linkType: hard 225 | 226 | "@types/three@npm:^0.156.0": 227 | version: 0.156.0 228 | resolution: "@types/three@npm:0.156.0" 229 | dependencies: 230 | "@types/stats.js": "*" 231 | "@types/webxr": "*" 232 | fflate: ~0.6.10 233 | meshoptimizer: ~0.18.1 234 | checksum: c81b3d656c22d400a180cd54af96b3dd7c3f41b7dba71f714a623474de43c77afe92395889e60765eb86221fd79d07a4730d4c4f1b441933daf9460b6bdba47f 235 | languageName: node 236 | linkType: hard 237 | 238 | "@types/webxr@npm:*": 239 | version: 0.4.0 240 | resolution: "@types/webxr@npm:0.4.0" 241 | checksum: 4388c18a5b08ef4aa97f2177d3d80d384c5557c4b06278215d46472585923128fb316353e5fb799d22ffe99be149af90d0c27c41cb3681e82228088e48b24184 242 | languageName: node 243 | linkType: hard 244 | 245 | "abbrev@npm:1": 246 | version: 1.1.1 247 | resolution: "abbrev@npm:1.1.1" 248 | checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 249 | languageName: node 250 | linkType: hard 251 | 252 | "agent-base@npm:6, agent-base@npm:^6.0.2": 253 | version: 6.0.2 254 | resolution: "agent-base@npm:6.0.2" 255 | dependencies: 256 | debug: 4 257 | checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d 258 | languageName: node 259 | linkType: hard 260 | 261 | "agentkeepalive@npm:^4.2.1": 262 | version: 4.2.1 263 | resolution: "agentkeepalive@npm:4.2.1" 264 | dependencies: 265 | debug: ^4.1.0 266 | depd: ^1.1.2 267 | humanize-ms: ^1.2.1 268 | checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 269 | languageName: node 270 | linkType: hard 271 | 272 | "aggregate-error@npm:^3.0.0": 273 | version: 3.1.0 274 | resolution: "aggregate-error@npm:3.1.0" 275 | dependencies: 276 | clean-stack: ^2.0.0 277 | indent-string: ^4.0.0 278 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 279 | languageName: node 280 | linkType: hard 281 | 282 | "ansi-escapes@npm:^5.0.0": 283 | version: 5.0.0 284 | resolution: "ansi-escapes@npm:5.0.0" 285 | dependencies: 286 | type-fest: ^1.0.2 287 | checksum: d4b5eb8207df38367945f5dd2ef41e08c28edc192dc766ef18af6b53736682f49d8bfcfa4e4d6ecbc2e2f97c258fda084fb29a9e43b69170b71090f771afccac 288 | languageName: node 289 | linkType: hard 290 | 291 | "ansi-regex@npm:^5.0.1": 292 | version: 5.0.1 293 | resolution: "ansi-regex@npm:5.0.1" 294 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b 295 | languageName: node 296 | linkType: hard 297 | 298 | "ansi-regex@npm:^6.0.1": 299 | version: 6.0.1 300 | resolution: "ansi-regex@npm:6.0.1" 301 | checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 302 | languageName: node 303 | linkType: hard 304 | 305 | "ansi-styles@npm:^6.0.0": 306 | version: 6.1.0 307 | resolution: "ansi-styles@npm:6.1.0" 308 | checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 309 | languageName: node 310 | linkType: hard 311 | 312 | "ansi-styles@npm:^6.1.0": 313 | version: 6.2.1 314 | resolution: "ansi-styles@npm:6.2.1" 315 | checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 316 | languageName: node 317 | linkType: hard 318 | 319 | "anymatch@npm:~3.1.2": 320 | version: 3.1.2 321 | resolution: "anymatch@npm:3.1.2" 322 | dependencies: 323 | normalize-path: ^3.0.0 324 | picomatch: ^2.0.4 325 | checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9 326 | languageName: node 327 | linkType: hard 328 | 329 | "aproba@npm:^1.0.3 || ^2.0.0": 330 | version: 2.0.0 331 | resolution: "aproba@npm:2.0.0" 332 | checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 333 | languageName: node 334 | linkType: hard 335 | 336 | "are-we-there-yet@npm:^3.0.0": 337 | version: 3.0.0 338 | resolution: "are-we-there-yet@npm:3.0.0" 339 | dependencies: 340 | delegates: ^1.0.0 341 | readable-stream: ^3.6.0 342 | checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 343 | languageName: node 344 | linkType: hard 345 | 346 | "balanced-match@npm:^1.0.0": 347 | version: 1.0.2 348 | resolution: "balanced-match@npm:1.0.2" 349 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 350 | languageName: node 351 | linkType: hard 352 | 353 | "binary-extensions@npm:^2.0.0": 354 | version: 2.2.0 355 | resolution: "binary-extensions@npm:2.2.0" 356 | checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 357 | languageName: node 358 | linkType: hard 359 | 360 | "brace-expansion@npm:^1.1.7": 361 | version: 1.1.11 362 | resolution: "brace-expansion@npm:1.1.11" 363 | dependencies: 364 | balanced-match: ^1.0.0 365 | concat-map: 0.0.1 366 | checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 367 | languageName: node 368 | linkType: hard 369 | 370 | "brace-expansion@npm:^2.0.1": 371 | version: 2.0.1 372 | resolution: "brace-expansion@npm:2.0.1" 373 | dependencies: 374 | balanced-match: ^1.0.0 375 | checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 376 | languageName: node 377 | linkType: hard 378 | 379 | "braces@npm:^3.0.2, braces@npm:~3.0.2": 380 | version: 3.0.2 381 | resolution: "braces@npm:3.0.2" 382 | dependencies: 383 | fill-range: ^7.0.1 384 | checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 385 | languageName: node 386 | linkType: hard 387 | 388 | "cacache@npm:^16.1.0": 389 | version: 16.1.1 390 | resolution: "cacache@npm:16.1.1" 391 | dependencies: 392 | "@npmcli/fs": ^2.1.0 393 | "@npmcli/move-file": ^2.0.0 394 | chownr: ^2.0.0 395 | fs-minipass: ^2.1.0 396 | glob: ^8.0.1 397 | infer-owner: ^1.0.4 398 | lru-cache: ^7.7.1 399 | minipass: ^3.1.6 400 | minipass-collect: ^1.0.2 401 | minipass-flush: ^1.0.5 402 | minipass-pipeline: ^1.2.4 403 | mkdirp: ^1.0.4 404 | p-map: ^4.0.0 405 | promise-inflight: ^1.0.1 406 | rimraf: ^3.0.2 407 | ssri: ^9.0.0 408 | tar: ^6.1.11 409 | unique-filename: ^1.1.1 410 | checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a 411 | languageName: node 412 | linkType: hard 413 | 414 | "chalk@npm:5.3.0": 415 | version: 5.3.0 416 | resolution: "chalk@npm:5.3.0" 417 | checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 418 | languageName: node 419 | linkType: hard 420 | 421 | "chokidar@npm:>=3.0.0 <4.0.0": 422 | version: 3.5.3 423 | resolution: "chokidar@npm:3.5.3" 424 | dependencies: 425 | anymatch: ~3.1.2 426 | braces: ~3.0.2 427 | fsevents: ~2.3.2 428 | glob-parent: ~5.1.2 429 | is-binary-path: ~2.1.0 430 | is-glob: ~4.0.1 431 | normalize-path: ~3.0.0 432 | readdirp: ~3.6.0 433 | dependenciesMeta: 434 | fsevents: 435 | optional: true 436 | checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c 437 | languageName: node 438 | linkType: hard 439 | 440 | "chownr@npm:^2.0.0": 441 | version: 2.0.0 442 | resolution: "chownr@npm:2.0.0" 443 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f 444 | languageName: node 445 | linkType: hard 446 | 447 | "clean-stack@npm:^2.0.0": 448 | version: 2.2.0 449 | resolution: "clean-stack@npm:2.2.0" 450 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 451 | languageName: node 452 | linkType: hard 453 | 454 | "cli-cursor@npm:^4.0.0": 455 | version: 4.0.0 456 | resolution: "cli-cursor@npm:4.0.0" 457 | dependencies: 458 | restore-cursor: ^4.0.0 459 | checksum: ab3f3ea2076e2176a1da29f9d64f72ec3efad51c0960898b56c8a17671365c26e67b735920530eaf7328d61f8bd41c27f46b9cf6e4e10fe2fa44b5e8c0e392cc 460 | languageName: node 461 | linkType: hard 462 | 463 | "cli-truncate@npm:^3.1.0": 464 | version: 3.1.0 465 | resolution: "cli-truncate@npm:3.1.0" 466 | dependencies: 467 | slice-ansi: ^5.0.0 468 | string-width: ^5.0.0 469 | checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a 470 | languageName: node 471 | linkType: hard 472 | 473 | "color-support@npm:^1.1.3": 474 | version: 1.1.3 475 | resolution: "color-support@npm:1.1.3" 476 | bin: 477 | color-support: bin.js 478 | checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b 479 | languageName: node 480 | linkType: hard 481 | 482 | "colorette@npm:^2.0.20": 483 | version: 2.0.20 484 | resolution: "colorette@npm:2.0.20" 485 | checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d 486 | languageName: node 487 | linkType: hard 488 | 489 | "commander@npm:11.0.0": 490 | version: 11.0.0 491 | resolution: "commander@npm:11.0.0" 492 | checksum: 6621954e1e1d078b4991c1f5bbd9439ad37aa7768d6ab4842de1dbd4d222c8a27e1b8e62108b3a92988614af45031d5bb2a2aaa92951f4d0c934d1a1ac564bb4 493 | languageName: node 494 | linkType: hard 495 | 496 | "concat-map@npm:0.0.1": 497 | version: 0.0.1 498 | resolution: "concat-map@npm:0.0.1" 499 | checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af 500 | languageName: node 501 | linkType: hard 502 | 503 | "console-control-strings@npm:^1.1.0": 504 | version: 1.1.0 505 | resolution: "console-control-strings@npm:1.1.0" 506 | checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed 507 | languageName: node 508 | linkType: hard 509 | 510 | "cross-spawn@npm:^7.0.3": 511 | version: 7.0.3 512 | resolution: "cross-spawn@npm:7.0.3" 513 | dependencies: 514 | path-key: ^3.1.0 515 | shebang-command: ^2.0.0 516 | which: ^2.0.1 517 | checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 518 | languageName: node 519 | linkType: hard 520 | 521 | "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.3.3": 522 | version: 4.3.4 523 | resolution: "debug@npm:4.3.4" 524 | dependencies: 525 | ms: 2.1.2 526 | peerDependenciesMeta: 527 | supports-color: 528 | optional: true 529 | checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 530 | languageName: node 531 | linkType: hard 532 | 533 | "delegates@npm:^1.0.0": 534 | version: 1.0.0 535 | resolution: "delegates@npm:1.0.0" 536 | checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd 537 | languageName: node 538 | linkType: hard 539 | 540 | "depd@npm:^1.1.2": 541 | version: 1.1.2 542 | resolution: "depd@npm:1.1.2" 543 | checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 544 | languageName: node 545 | linkType: hard 546 | 547 | "eastasianwidth@npm:^0.2.0": 548 | version: 0.2.0 549 | resolution: "eastasianwidth@npm:0.2.0" 550 | checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed 551 | languageName: node 552 | linkType: hard 553 | 554 | "emoji-regex@npm:^8.0.0": 555 | version: 8.0.0 556 | resolution: "emoji-regex@npm:8.0.0" 557 | checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 558 | languageName: node 559 | linkType: hard 560 | 561 | "emoji-regex@npm:^9.2.2": 562 | version: 9.2.2 563 | resolution: "emoji-regex@npm:9.2.2" 564 | checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 565 | languageName: node 566 | linkType: hard 567 | 568 | "encoding@npm:^0.1.13": 569 | version: 0.1.13 570 | resolution: "encoding@npm:0.1.13" 571 | dependencies: 572 | iconv-lite: ^0.6.2 573 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f 574 | languageName: node 575 | linkType: hard 576 | 577 | "env-paths@npm:^2.2.0": 578 | version: 2.2.1 579 | resolution: "env-paths@npm:2.2.1" 580 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e 581 | languageName: node 582 | linkType: hard 583 | 584 | "err-code@npm:^2.0.2": 585 | version: 2.0.3 586 | resolution: "err-code@npm:2.0.3" 587 | checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 588 | languageName: node 589 | linkType: hard 590 | 591 | "esbuild@npm:^0.18.10": 592 | version: 0.18.20 593 | resolution: "esbuild@npm:0.18.20" 594 | dependencies: 595 | "@esbuild/android-arm": 0.18.20 596 | "@esbuild/android-arm64": 0.18.20 597 | "@esbuild/android-x64": 0.18.20 598 | "@esbuild/darwin-arm64": 0.18.20 599 | "@esbuild/darwin-x64": 0.18.20 600 | "@esbuild/freebsd-arm64": 0.18.20 601 | "@esbuild/freebsd-x64": 0.18.20 602 | "@esbuild/linux-arm": 0.18.20 603 | "@esbuild/linux-arm64": 0.18.20 604 | "@esbuild/linux-ia32": 0.18.20 605 | "@esbuild/linux-loong64": 0.18.20 606 | "@esbuild/linux-mips64el": 0.18.20 607 | "@esbuild/linux-ppc64": 0.18.20 608 | "@esbuild/linux-riscv64": 0.18.20 609 | "@esbuild/linux-s390x": 0.18.20 610 | "@esbuild/linux-x64": 0.18.20 611 | "@esbuild/netbsd-x64": 0.18.20 612 | "@esbuild/openbsd-x64": 0.18.20 613 | "@esbuild/sunos-x64": 0.18.20 614 | "@esbuild/win32-arm64": 0.18.20 615 | "@esbuild/win32-ia32": 0.18.20 616 | "@esbuild/win32-x64": 0.18.20 617 | dependenciesMeta: 618 | "@esbuild/android-arm": 619 | optional: true 620 | "@esbuild/android-arm64": 621 | optional: true 622 | "@esbuild/android-x64": 623 | optional: true 624 | "@esbuild/darwin-arm64": 625 | optional: true 626 | "@esbuild/darwin-x64": 627 | optional: true 628 | "@esbuild/freebsd-arm64": 629 | optional: true 630 | "@esbuild/freebsd-x64": 631 | optional: true 632 | "@esbuild/linux-arm": 633 | optional: true 634 | "@esbuild/linux-arm64": 635 | optional: true 636 | "@esbuild/linux-ia32": 637 | optional: true 638 | "@esbuild/linux-loong64": 639 | optional: true 640 | "@esbuild/linux-mips64el": 641 | optional: true 642 | "@esbuild/linux-ppc64": 643 | optional: true 644 | "@esbuild/linux-riscv64": 645 | optional: true 646 | "@esbuild/linux-s390x": 647 | optional: true 648 | "@esbuild/linux-x64": 649 | optional: true 650 | "@esbuild/netbsd-x64": 651 | optional: true 652 | "@esbuild/openbsd-x64": 653 | optional: true 654 | "@esbuild/sunos-x64": 655 | optional: true 656 | "@esbuild/win32-arm64": 657 | optional: true 658 | "@esbuild/win32-ia32": 659 | optional: true 660 | "@esbuild/win32-x64": 661 | optional: true 662 | bin: 663 | esbuild: bin/esbuild 664 | checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b 665 | languageName: node 666 | linkType: hard 667 | 668 | "estree-walker@npm:^2.0.2": 669 | version: 2.0.2 670 | resolution: "estree-walker@npm:2.0.2" 671 | checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc 672 | languageName: node 673 | linkType: hard 674 | 675 | "eventemitter3@npm:^5.0.1": 676 | version: 5.0.1 677 | resolution: "eventemitter3@npm:5.0.1" 678 | checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 679 | languageName: node 680 | linkType: hard 681 | 682 | "execa@npm:7.2.0": 683 | version: 7.2.0 684 | resolution: "execa@npm:7.2.0" 685 | dependencies: 686 | cross-spawn: ^7.0.3 687 | get-stream: ^6.0.1 688 | human-signals: ^4.3.0 689 | is-stream: ^3.0.0 690 | merge-stream: ^2.0.0 691 | npm-run-path: ^5.1.0 692 | onetime: ^6.0.0 693 | signal-exit: ^3.0.7 694 | strip-final-newline: ^3.0.0 695 | checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc 696 | languageName: node 697 | linkType: hard 698 | 699 | "fflate@npm:~0.6.10": 700 | version: 0.6.10 701 | resolution: "fflate@npm:0.6.10" 702 | checksum: 96384bc4090987fe565c0de8204e3830f538144ec950576fea50aee1b42adbe9fc3ed5e7905dfa7979faaa20979def330dbebce548f3dcafc3e118cc9838526d 703 | languageName: node 704 | linkType: hard 705 | 706 | "fill-range@npm:^7.0.1": 707 | version: 7.0.1 708 | resolution: "fill-range@npm:7.0.1" 709 | dependencies: 710 | to-regex-range: ^5.0.1 711 | checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 712 | languageName: node 713 | linkType: hard 714 | 715 | "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": 716 | version: 2.1.0 717 | resolution: "fs-minipass@npm:2.1.0" 718 | dependencies: 719 | minipass: ^3.0.0 720 | checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 721 | languageName: node 722 | linkType: hard 723 | 724 | "fs.realpath@npm:^1.0.0": 725 | version: 1.0.0 726 | resolution: "fs.realpath@npm:1.0.0" 727 | checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 728 | languageName: node 729 | linkType: hard 730 | 731 | "fsevents@npm:~2.3.2": 732 | version: 2.3.2 733 | resolution: "fsevents@npm:2.3.2" 734 | dependencies: 735 | node-gyp: latest 736 | checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f 737 | conditions: os=darwin 738 | languageName: node 739 | linkType: hard 740 | 741 | "fsevents@patch:fsevents@~2.3.2#~builtin": 742 | version: 2.3.2 743 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" 744 | dependencies: 745 | node-gyp: latest 746 | conditions: os=darwin 747 | languageName: node 748 | linkType: hard 749 | 750 | "gauge@npm:^4.0.3": 751 | version: 4.0.4 752 | resolution: "gauge@npm:4.0.4" 753 | dependencies: 754 | aproba: ^1.0.3 || ^2.0.0 755 | color-support: ^1.1.3 756 | console-control-strings: ^1.1.0 757 | has-unicode: ^2.0.1 758 | signal-exit: ^3.0.7 759 | string-width: ^4.2.3 760 | strip-ansi: ^6.0.1 761 | wide-align: ^1.1.5 762 | checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d 763 | languageName: node 764 | linkType: hard 765 | 766 | "get-stream@npm:^6.0.1": 767 | version: 6.0.1 768 | resolution: "get-stream@npm:6.0.1" 769 | checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad 770 | languageName: node 771 | linkType: hard 772 | 773 | "glob-parent@npm:~5.1.2": 774 | version: 5.1.2 775 | resolution: "glob-parent@npm:5.1.2" 776 | dependencies: 777 | is-glob: ^4.0.1 778 | checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e 779 | languageName: node 780 | linkType: hard 781 | 782 | "glob@npm:^7.1.3, glob@npm:^7.1.4": 783 | version: 7.2.3 784 | resolution: "glob@npm:7.2.3" 785 | dependencies: 786 | fs.realpath: ^1.0.0 787 | inflight: ^1.0.4 788 | inherits: 2 789 | minimatch: ^3.1.1 790 | once: ^1.3.0 791 | path-is-absolute: ^1.0.0 792 | checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 793 | languageName: node 794 | linkType: hard 795 | 796 | "glob@npm:^8.0.1": 797 | version: 8.0.3 798 | resolution: "glob@npm:8.0.3" 799 | dependencies: 800 | fs.realpath: ^1.0.0 801 | inflight: ^1.0.4 802 | inherits: 2 803 | minimatch: ^5.0.1 804 | once: ^1.3.0 805 | checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 806 | languageName: node 807 | linkType: hard 808 | 809 | "graceful-fs@npm:^4.2.6": 810 | version: 4.2.10 811 | resolution: "graceful-fs@npm:4.2.10" 812 | checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da 813 | languageName: node 814 | linkType: hard 815 | 816 | "has-unicode@npm:^2.0.1": 817 | version: 2.0.1 818 | resolution: "has-unicode@npm:2.0.1" 819 | checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 820 | languageName: node 821 | linkType: hard 822 | 823 | "http-cache-semantics@npm:^4.1.0": 824 | version: 4.1.0 825 | resolution: "http-cache-semantics@npm:4.1.0" 826 | checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 827 | languageName: node 828 | linkType: hard 829 | 830 | "http-proxy-agent@npm:^5.0.0": 831 | version: 5.0.0 832 | resolution: "http-proxy-agent@npm:5.0.0" 833 | dependencies: 834 | "@tootallnate/once": 2 835 | agent-base: 6 836 | debug: 4 837 | checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 838 | languageName: node 839 | linkType: hard 840 | 841 | "https-proxy-agent@npm:^5.0.0": 842 | version: 5.0.1 843 | resolution: "https-proxy-agent@npm:5.0.1" 844 | dependencies: 845 | agent-base: 6 846 | debug: 4 847 | checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 848 | languageName: node 849 | linkType: hard 850 | 851 | "human-signals@npm:^4.3.0": 852 | version: 4.3.1 853 | resolution: "human-signals@npm:4.3.1" 854 | checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 855 | languageName: node 856 | linkType: hard 857 | 858 | "humanize-ms@npm:^1.2.1": 859 | version: 1.2.1 860 | resolution: "humanize-ms@npm:1.2.1" 861 | dependencies: 862 | ms: ^2.0.0 863 | checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 864 | languageName: node 865 | linkType: hard 866 | 867 | "husky@npm:^8.0.3": 868 | version: 8.0.3 869 | resolution: "husky@npm:8.0.3" 870 | bin: 871 | husky: lib/bin.js 872 | checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 873 | languageName: node 874 | linkType: hard 875 | 876 | "iconv-lite@npm:^0.6.2": 877 | version: 0.6.3 878 | resolution: "iconv-lite@npm:0.6.3" 879 | dependencies: 880 | safer-buffer: ">= 2.1.2 < 3.0.0" 881 | checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf 882 | languageName: node 883 | linkType: hard 884 | 885 | "immutable@npm:^4.0.0": 886 | version: 4.1.0 887 | resolution: "immutable@npm:4.1.0" 888 | checksum: b9bc1f14fb18eb382d48339c064b24a1f97ae4cf43102e0906c0a6e186a27afcd18b55ca4a0b63c98eefb58143e2b5ebc7755a5fb4da4a7ad84b7a6096ac5b13 889 | languageName: node 890 | linkType: hard 891 | 892 | "imurmurhash@npm:^0.1.4": 893 | version: 0.1.4 894 | resolution: "imurmurhash@npm:0.1.4" 895 | checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 896 | languageName: node 897 | linkType: hard 898 | 899 | "indent-string@npm:^4.0.0": 900 | version: 4.0.0 901 | resolution: "indent-string@npm:4.0.0" 902 | checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 903 | languageName: node 904 | linkType: hard 905 | 906 | "infer-owner@npm:^1.0.4": 907 | version: 1.0.4 908 | resolution: "infer-owner@npm:1.0.4" 909 | checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 910 | languageName: node 911 | linkType: hard 912 | 913 | "inflight@npm:^1.0.4": 914 | version: 1.0.6 915 | resolution: "inflight@npm:1.0.6" 916 | dependencies: 917 | once: ^1.3.0 918 | wrappy: 1 919 | checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd 920 | languageName: node 921 | linkType: hard 922 | 923 | "inherits@npm:2, inherits@npm:^2.0.3": 924 | version: 2.0.4 925 | resolution: "inherits@npm:2.0.4" 926 | checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 927 | languageName: node 928 | linkType: hard 929 | 930 | "ip@npm:^2.0.0": 931 | version: 2.0.0 932 | resolution: "ip@npm:2.0.0" 933 | checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 934 | languageName: node 935 | linkType: hard 936 | 937 | "is-binary-path@npm:~2.1.0": 938 | version: 2.1.0 939 | resolution: "is-binary-path@npm:2.1.0" 940 | dependencies: 941 | binary-extensions: ^2.0.0 942 | checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c 943 | languageName: node 944 | linkType: hard 945 | 946 | "is-extglob@npm:^2.1.1": 947 | version: 2.1.1 948 | resolution: "is-extglob@npm:2.1.1" 949 | checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 950 | languageName: node 951 | linkType: hard 952 | 953 | "is-fullwidth-code-point@npm:^3.0.0": 954 | version: 3.0.0 955 | resolution: "is-fullwidth-code-point@npm:3.0.0" 956 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 957 | languageName: node 958 | linkType: hard 959 | 960 | "is-fullwidth-code-point@npm:^4.0.0": 961 | version: 4.0.0 962 | resolution: "is-fullwidth-code-point@npm:4.0.0" 963 | checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d 964 | languageName: node 965 | linkType: hard 966 | 967 | "is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": 968 | version: 4.0.3 969 | resolution: "is-glob@npm:4.0.3" 970 | dependencies: 971 | is-extglob: ^2.1.1 972 | checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 973 | languageName: node 974 | linkType: hard 975 | 976 | "is-lambda@npm:^1.0.1": 977 | version: 1.0.1 978 | resolution: "is-lambda@npm:1.0.1" 979 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 980 | languageName: node 981 | linkType: hard 982 | 983 | "is-number@npm:^7.0.0": 984 | version: 7.0.0 985 | resolution: "is-number@npm:7.0.0" 986 | checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a 987 | languageName: node 988 | linkType: hard 989 | 990 | "is-stream@npm:^3.0.0": 991 | version: 3.0.0 992 | resolution: "is-stream@npm:3.0.0" 993 | checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 994 | languageName: node 995 | linkType: hard 996 | 997 | "isexe@npm:^2.0.0": 998 | version: 2.0.0 999 | resolution: "isexe@npm:2.0.0" 1000 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 1001 | languageName: node 1002 | linkType: hard 1003 | 1004 | "lil-gui@npm:^0.18.2": 1005 | version: 0.18.2 1006 | resolution: "lil-gui@npm:0.18.2" 1007 | checksum: 3898de5432e130ed03ab9c86074c0f19ccda9eee4e6493b5250973df06a482bc92fa91ff6f8019315486aeca6ff62b5962bf871f87462de7af7e289fb37118b6 1008 | languageName: node 1009 | linkType: hard 1010 | 1011 | "lilconfig@npm:2.1.0": 1012 | version: 2.1.0 1013 | resolution: "lilconfig@npm:2.1.0" 1014 | checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 1015 | languageName: node 1016 | linkType: hard 1017 | 1018 | "lint-staged@npm:^13.3.0": 1019 | version: 13.3.0 1020 | resolution: "lint-staged@npm:13.3.0" 1021 | dependencies: 1022 | chalk: 5.3.0 1023 | commander: 11.0.0 1024 | debug: 4.3.4 1025 | execa: 7.2.0 1026 | lilconfig: 2.1.0 1027 | listr2: 6.6.1 1028 | micromatch: 4.0.5 1029 | pidtree: 0.6.0 1030 | string-argv: 0.3.2 1031 | yaml: 2.3.1 1032 | bin: 1033 | lint-staged: bin/lint-staged.js 1034 | checksum: f7c146cc2849c9ce4f1d2808d990fcbdef5e0bb79e6e79cc895f53c91f5ac4dcefdb8c3465156b38a015dcb051f2795c6bda4f20a1e2f2fa654c7ba521b2d2e0 1035 | languageName: node 1036 | linkType: hard 1037 | 1038 | "listr2@npm:6.6.1": 1039 | version: 6.6.1 1040 | resolution: "listr2@npm:6.6.1" 1041 | dependencies: 1042 | cli-truncate: ^3.1.0 1043 | colorette: ^2.0.20 1044 | eventemitter3: ^5.0.1 1045 | log-update: ^5.0.1 1046 | rfdc: ^1.3.0 1047 | wrap-ansi: ^8.1.0 1048 | peerDependencies: 1049 | enquirer: ">= 2.3.0 < 3" 1050 | peerDependenciesMeta: 1051 | enquirer: 1052 | optional: true 1053 | checksum: 99600e8a51f838f7208bce7e16d6b3d91d361f13881e6aa91d0b561a9a093ddcf63b7bc2a7b47aec7fdbff9d0e8c9f68cb66e6dfe2d857e5b1df8ab045c26ce8 1054 | languageName: node 1055 | linkType: hard 1056 | 1057 | "log-update@npm:^5.0.1": 1058 | version: 5.0.1 1059 | resolution: "log-update@npm:5.0.1" 1060 | dependencies: 1061 | ansi-escapes: ^5.0.0 1062 | cli-cursor: ^4.0.0 1063 | slice-ansi: ^5.0.0 1064 | strip-ansi: ^7.0.1 1065 | wrap-ansi: ^8.0.1 1066 | checksum: 2c6b47dcce6f9233df6d232a37d9834cb3657a0749ef6398f1706118de74c55f158587d4128c225297ea66803f35c5ac3db4f3f617046d817233c45eedc32ef1 1067 | languageName: node 1068 | linkType: hard 1069 | 1070 | "lru-cache@npm:^6.0.0": 1071 | version: 6.0.0 1072 | resolution: "lru-cache@npm:6.0.0" 1073 | dependencies: 1074 | yallist: ^4.0.0 1075 | checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 1076 | languageName: node 1077 | linkType: hard 1078 | 1079 | "lru-cache@npm:^7.7.1": 1080 | version: 7.13.1 1081 | resolution: "lru-cache@npm:7.13.1" 1082 | checksum: f53c7dd098a7afd6342b23f7182629edff206c7665de79445a7f5455440e768a4d1c6ec52e1a16175580c71535c9437dfb6f6bc22ca1a0e4a7454a97cde87329 1083 | languageName: node 1084 | linkType: hard 1085 | 1086 | "make-fetch-happen@npm:^10.0.3": 1087 | version: 10.2.0 1088 | resolution: "make-fetch-happen@npm:10.2.0" 1089 | dependencies: 1090 | agentkeepalive: ^4.2.1 1091 | cacache: ^16.1.0 1092 | http-cache-semantics: ^4.1.0 1093 | http-proxy-agent: ^5.0.0 1094 | https-proxy-agent: ^5.0.0 1095 | is-lambda: ^1.0.1 1096 | lru-cache: ^7.7.1 1097 | minipass: ^3.1.6 1098 | minipass-collect: ^1.0.2 1099 | minipass-fetch: ^2.0.3 1100 | minipass-flush: ^1.0.5 1101 | minipass-pipeline: ^1.2.4 1102 | negotiator: ^0.6.3 1103 | promise-retry: ^2.0.1 1104 | socks-proxy-agent: ^7.0.0 1105 | ssri: ^9.0.0 1106 | checksum: 2f6c294179972f56fab40fd8618f07841e06550692bb78f6da16e7afaa9dca78c345b08cf44a77a8907ef3948e4dc77e93eb7492b8381f1217d7ac057a7522f8 1107 | languageName: node 1108 | linkType: hard 1109 | 1110 | "merge-stream@npm:^2.0.0": 1111 | version: 2.0.0 1112 | resolution: "merge-stream@npm:2.0.0" 1113 | checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 1114 | languageName: node 1115 | linkType: hard 1116 | 1117 | "meshoptimizer@npm:~0.18.1": 1118 | version: 0.18.1 1119 | resolution: "meshoptimizer@npm:0.18.1" 1120 | checksum: 101dbed8abd4cf167cdb7a0bc13db90dd0743332c689e43b18cc5254d238f0766750752432401fa63dc7e9e32399ef68daacf48f0d89db1484042c1761c7362d 1121 | languageName: node 1122 | linkType: hard 1123 | 1124 | "micromatch@npm:4.0.5": 1125 | version: 4.0.5 1126 | resolution: "micromatch@npm:4.0.5" 1127 | dependencies: 1128 | braces: ^3.0.2 1129 | picomatch: ^2.3.1 1130 | checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc 1131 | languageName: node 1132 | linkType: hard 1133 | 1134 | "mimic-fn@npm:^2.1.0": 1135 | version: 2.1.0 1136 | resolution: "mimic-fn@npm:2.1.0" 1137 | checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a 1138 | languageName: node 1139 | linkType: hard 1140 | 1141 | "mimic-fn@npm:^4.0.0": 1142 | version: 4.0.0 1143 | resolution: "mimic-fn@npm:4.0.0" 1144 | checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 1145 | languageName: node 1146 | linkType: hard 1147 | 1148 | "minimatch@npm:^3.1.1": 1149 | version: 3.1.2 1150 | resolution: "minimatch@npm:3.1.2" 1151 | dependencies: 1152 | brace-expansion: ^1.1.7 1153 | checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a 1154 | languageName: node 1155 | linkType: hard 1156 | 1157 | "minimatch@npm:^5.0.1": 1158 | version: 5.1.0 1159 | resolution: "minimatch@npm:5.1.0" 1160 | dependencies: 1161 | brace-expansion: ^2.0.1 1162 | checksum: 15ce53d31a06361e8b7a629501b5c75491bc2b59712d53e802b1987121d91b433d73fcc5be92974fde66b2b51d8fb28d75a9ae900d249feb792bb1ba2a4f0a90 1163 | languageName: node 1164 | linkType: hard 1165 | 1166 | "minipass-collect@npm:^1.0.2": 1167 | version: 1.0.2 1168 | resolution: "minipass-collect@npm:1.0.2" 1169 | dependencies: 1170 | minipass: ^3.0.0 1171 | checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 1172 | languageName: node 1173 | linkType: hard 1174 | 1175 | "minipass-fetch@npm:^2.0.3": 1176 | version: 2.1.0 1177 | resolution: "minipass-fetch@npm:2.1.0" 1178 | dependencies: 1179 | encoding: ^0.1.13 1180 | minipass: ^3.1.6 1181 | minipass-sized: ^1.0.3 1182 | minizlib: ^2.1.2 1183 | dependenciesMeta: 1184 | encoding: 1185 | optional: true 1186 | checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f 1187 | languageName: node 1188 | linkType: hard 1189 | 1190 | "minipass-flush@npm:^1.0.5": 1191 | version: 1.0.5 1192 | resolution: "minipass-flush@npm:1.0.5" 1193 | dependencies: 1194 | minipass: ^3.0.0 1195 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf 1196 | languageName: node 1197 | linkType: hard 1198 | 1199 | "minipass-pipeline@npm:^1.2.4": 1200 | version: 1.2.4 1201 | resolution: "minipass-pipeline@npm:1.2.4" 1202 | dependencies: 1203 | minipass: ^3.0.0 1204 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b 1205 | languageName: node 1206 | linkType: hard 1207 | 1208 | "minipass-sized@npm:^1.0.3": 1209 | version: 1.0.3 1210 | resolution: "minipass-sized@npm:1.0.3" 1211 | dependencies: 1212 | minipass: ^3.0.0 1213 | checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 1214 | languageName: node 1215 | linkType: hard 1216 | 1217 | "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": 1218 | version: 3.3.4 1219 | resolution: "minipass@npm:3.3.4" 1220 | dependencies: 1221 | yallist: ^4.0.0 1222 | checksum: 5d95a7738c54852ba78d484141e850c792e062666a2d0c681a5ac1021275beb7e1acb077e59f9523ff1defb80901aea4e30fac10ded9a20a25d819a42916ef1b 1223 | languageName: node 1224 | linkType: hard 1225 | 1226 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": 1227 | version: 2.1.2 1228 | resolution: "minizlib@npm:2.1.2" 1229 | dependencies: 1230 | minipass: ^3.0.0 1231 | yallist: ^4.0.0 1232 | checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 1233 | languageName: node 1234 | linkType: hard 1235 | 1236 | "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": 1237 | version: 1.0.4 1238 | resolution: "mkdirp@npm:1.0.4" 1239 | bin: 1240 | mkdirp: bin/cmd.js 1241 | checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f 1242 | languageName: node 1243 | linkType: hard 1244 | 1245 | "ms@npm:2.1.2": 1246 | version: 2.1.2 1247 | resolution: "ms@npm:2.1.2" 1248 | checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f 1249 | languageName: node 1250 | linkType: hard 1251 | 1252 | "ms@npm:^2.0.0": 1253 | version: 2.1.3 1254 | resolution: "ms@npm:2.1.3" 1255 | checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d 1256 | languageName: node 1257 | linkType: hard 1258 | 1259 | "nanoid@npm:^3.3.6": 1260 | version: 3.3.6 1261 | resolution: "nanoid@npm:3.3.6" 1262 | bin: 1263 | nanoid: bin/nanoid.cjs 1264 | checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 1265 | languageName: node 1266 | linkType: hard 1267 | 1268 | "negotiator@npm:^0.6.3": 1269 | version: 0.6.3 1270 | resolution: "negotiator@npm:0.6.3" 1271 | checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 1272 | languageName: node 1273 | linkType: hard 1274 | 1275 | "node-gyp@npm:latest": 1276 | version: 9.1.0 1277 | resolution: "node-gyp@npm:9.1.0" 1278 | dependencies: 1279 | env-paths: ^2.2.0 1280 | glob: ^7.1.4 1281 | graceful-fs: ^4.2.6 1282 | make-fetch-happen: ^10.0.3 1283 | nopt: ^5.0.0 1284 | npmlog: ^6.0.0 1285 | rimraf: ^3.0.2 1286 | semver: ^7.3.5 1287 | tar: ^6.1.2 1288 | which: ^2.0.2 1289 | bin: 1290 | node-gyp: bin/node-gyp.js 1291 | checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 1292 | languageName: node 1293 | linkType: hard 1294 | 1295 | "nopt@npm:^5.0.0": 1296 | version: 5.0.0 1297 | resolution: "nopt@npm:5.0.0" 1298 | dependencies: 1299 | abbrev: 1 1300 | bin: 1301 | nopt: bin/nopt.js 1302 | checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f 1303 | languageName: node 1304 | linkType: hard 1305 | 1306 | "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": 1307 | version: 3.0.0 1308 | resolution: "normalize-path@npm:3.0.0" 1309 | checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 1310 | languageName: node 1311 | linkType: hard 1312 | 1313 | "npm-run-path@npm:^5.1.0": 1314 | version: 5.1.0 1315 | resolution: "npm-run-path@npm:5.1.0" 1316 | dependencies: 1317 | path-key: ^4.0.0 1318 | checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 1319 | languageName: node 1320 | linkType: hard 1321 | 1322 | "npmlog@npm:^6.0.0": 1323 | version: 6.0.2 1324 | resolution: "npmlog@npm:6.0.2" 1325 | dependencies: 1326 | are-we-there-yet: ^3.0.0 1327 | console-control-strings: ^1.1.0 1328 | gauge: ^4.0.3 1329 | set-blocking: ^2.0.0 1330 | checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a 1331 | languageName: node 1332 | linkType: hard 1333 | 1334 | "once@npm:^1.3.0": 1335 | version: 1.4.0 1336 | resolution: "once@npm:1.4.0" 1337 | dependencies: 1338 | wrappy: 1 1339 | checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 1340 | languageName: node 1341 | linkType: hard 1342 | 1343 | "onetime@npm:^5.1.0": 1344 | version: 5.1.2 1345 | resolution: "onetime@npm:5.1.2" 1346 | dependencies: 1347 | mimic-fn: ^2.1.0 1348 | checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 1349 | languageName: node 1350 | linkType: hard 1351 | 1352 | "onetime@npm:^6.0.0": 1353 | version: 6.0.0 1354 | resolution: "onetime@npm:6.0.0" 1355 | dependencies: 1356 | mimic-fn: ^4.0.0 1357 | checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 1358 | languageName: node 1359 | linkType: hard 1360 | 1361 | "p-map@npm:^4.0.0": 1362 | version: 4.0.0 1363 | resolution: "p-map@npm:4.0.0" 1364 | dependencies: 1365 | aggregate-error: ^3.0.0 1366 | checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c 1367 | languageName: node 1368 | linkType: hard 1369 | 1370 | "path-is-absolute@npm:^1.0.0": 1371 | version: 1.0.1 1372 | resolution: "path-is-absolute@npm:1.0.1" 1373 | checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 1374 | languageName: node 1375 | linkType: hard 1376 | 1377 | "path-key@npm:^3.1.0": 1378 | version: 3.1.1 1379 | resolution: "path-key@npm:3.1.1" 1380 | checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 1381 | languageName: node 1382 | linkType: hard 1383 | 1384 | "path-key@npm:^4.0.0": 1385 | version: 4.0.0 1386 | resolution: "path-key@npm:4.0.0" 1387 | checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 1388 | languageName: node 1389 | linkType: hard 1390 | 1391 | "picocolors@npm:^1.0.0": 1392 | version: 1.0.0 1393 | resolution: "picocolors@npm:1.0.0" 1394 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 1395 | languageName: node 1396 | linkType: hard 1397 | 1398 | "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": 1399 | version: 2.3.1 1400 | resolution: "picomatch@npm:2.3.1" 1401 | checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf 1402 | languageName: node 1403 | linkType: hard 1404 | 1405 | "pidtree@npm:0.6.0": 1406 | version: 0.6.0 1407 | resolution: "pidtree@npm:0.6.0" 1408 | bin: 1409 | pidtree: bin/pidtree.js 1410 | checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a 1411 | languageName: node 1412 | linkType: hard 1413 | 1414 | "postcss@npm:^8.4.27": 1415 | version: 8.4.31 1416 | resolution: "postcss@npm:8.4.31" 1417 | dependencies: 1418 | nanoid: ^3.3.6 1419 | picocolors: ^1.0.0 1420 | source-map-js: ^1.0.2 1421 | checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea 1422 | languageName: node 1423 | linkType: hard 1424 | 1425 | "prettier@npm:2.8.8": 1426 | version: 2.8.8 1427 | resolution: "prettier@npm:2.8.8" 1428 | bin: 1429 | prettier: bin-prettier.js 1430 | checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 1431 | languageName: node 1432 | linkType: hard 1433 | 1434 | "promise-inflight@npm:^1.0.1": 1435 | version: 1.0.1 1436 | resolution: "promise-inflight@npm:1.0.1" 1437 | checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 1438 | languageName: node 1439 | linkType: hard 1440 | 1441 | "promise-retry@npm:^2.0.1": 1442 | version: 2.0.1 1443 | resolution: "promise-retry@npm:2.0.1" 1444 | dependencies: 1445 | err-code: ^2.0.2 1446 | retry: ^0.12.0 1447 | checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 1448 | languageName: node 1449 | linkType: hard 1450 | 1451 | "readable-stream@npm:^3.6.0": 1452 | version: 3.6.0 1453 | resolution: "readable-stream@npm:3.6.0" 1454 | dependencies: 1455 | inherits: ^2.0.3 1456 | string_decoder: ^1.1.1 1457 | util-deprecate: ^1.0.1 1458 | checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 1459 | languageName: node 1460 | linkType: hard 1461 | 1462 | "readdirp@npm:~3.6.0": 1463 | version: 3.6.0 1464 | resolution: "readdirp@npm:3.6.0" 1465 | dependencies: 1466 | picomatch: ^2.2.1 1467 | checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 1468 | languageName: node 1469 | linkType: hard 1470 | 1471 | "restore-cursor@npm:^4.0.0": 1472 | version: 4.0.0 1473 | resolution: "restore-cursor@npm:4.0.0" 1474 | dependencies: 1475 | onetime: ^5.1.0 1476 | signal-exit: ^3.0.2 1477 | checksum: 5b675c5a59763bf26e604289eab35711525f11388d77f409453904e1e69c0d37ae5889295706b2c81d23bd780165084d040f9b68fffc32cc921519031c4fa4af 1478 | languageName: node 1479 | linkType: hard 1480 | 1481 | "retry@npm:^0.12.0": 1482 | version: 0.12.0 1483 | resolution: "retry@npm:0.12.0" 1484 | checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c 1485 | languageName: node 1486 | linkType: hard 1487 | 1488 | "rfdc@npm:^1.3.0": 1489 | version: 1.3.0 1490 | resolution: "rfdc@npm:1.3.0" 1491 | checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 1492 | languageName: node 1493 | linkType: hard 1494 | 1495 | "rimraf@npm:^3.0.2": 1496 | version: 3.0.2 1497 | resolution: "rimraf@npm:3.0.2" 1498 | dependencies: 1499 | glob: ^7.1.3 1500 | bin: 1501 | rimraf: bin.js 1502 | checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 1503 | languageName: node 1504 | linkType: hard 1505 | 1506 | "rollup@npm:^3.27.1": 1507 | version: 3.29.4 1508 | resolution: "rollup@npm:3.29.4" 1509 | dependencies: 1510 | fsevents: ~2.3.2 1511 | dependenciesMeta: 1512 | fsevents: 1513 | optional: true 1514 | bin: 1515 | rollup: dist/bin/rollup 1516 | checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e 1517 | languageName: node 1518 | linkType: hard 1519 | 1520 | "safe-buffer@npm:~5.2.0": 1521 | version: 5.2.1 1522 | resolution: "safe-buffer@npm:5.2.1" 1523 | checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 1524 | languageName: node 1525 | linkType: hard 1526 | 1527 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1528 | version: 2.1.2 1529 | resolution: "safer-buffer@npm:2.1.2" 1530 | checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 1531 | languageName: node 1532 | linkType: hard 1533 | 1534 | "sass@npm:^1.69.0": 1535 | version: 1.69.0 1536 | resolution: "sass@npm:1.69.0" 1537 | dependencies: 1538 | chokidar: ">=3.0.0 <4.0.0" 1539 | immutable: ^4.0.0 1540 | source-map-js: ">=0.6.2 <2.0.0" 1541 | bin: 1542 | sass: sass.js 1543 | checksum: eabea31ea3b1dd529c7eff345c8b6468afe6ab8011bd4f95caa2cffb8fb115cc055ea21de425be6197f7ed22516f5652eccb98d315d592ea152ada553f964b8a 1544 | languageName: node 1545 | linkType: hard 1546 | 1547 | "semver@npm:^7.3.5": 1548 | version: 7.3.7 1549 | resolution: "semver@npm:7.3.7" 1550 | dependencies: 1551 | lru-cache: ^6.0.0 1552 | bin: 1553 | semver: bin/semver.js 1554 | checksum: 2fa3e877568cd6ce769c75c211beaed1f9fce80b28338cadd9d0b6c40f2e2862bafd62c19a6cff42f3d54292b7c623277bcab8816a2b5521cf15210d43e75232 1555 | languageName: node 1556 | linkType: hard 1557 | 1558 | "set-blocking@npm:^2.0.0": 1559 | version: 2.0.0 1560 | resolution: "set-blocking@npm:2.0.0" 1561 | checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 1562 | languageName: node 1563 | linkType: hard 1564 | 1565 | "shebang-command@npm:^2.0.0": 1566 | version: 2.0.0 1567 | resolution: "shebang-command@npm:2.0.0" 1568 | dependencies: 1569 | shebang-regex: ^3.0.0 1570 | checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa 1571 | languageName: node 1572 | linkType: hard 1573 | 1574 | "shebang-regex@npm:^3.0.0": 1575 | version: 3.0.0 1576 | resolution: "shebang-regex@npm:3.0.0" 1577 | checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 1578 | languageName: node 1579 | linkType: hard 1580 | 1581 | "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": 1582 | version: 3.0.7 1583 | resolution: "signal-exit@npm:3.0.7" 1584 | checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 1585 | languageName: node 1586 | linkType: hard 1587 | 1588 | "slice-ansi@npm:^5.0.0": 1589 | version: 5.0.0 1590 | resolution: "slice-ansi@npm:5.0.0" 1591 | dependencies: 1592 | ansi-styles: ^6.0.0 1593 | is-fullwidth-code-point: ^4.0.0 1594 | checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e 1595 | languageName: node 1596 | linkType: hard 1597 | 1598 | "smart-buffer@npm:^4.2.0": 1599 | version: 4.2.0 1600 | resolution: "smart-buffer@npm:4.2.0" 1601 | checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b 1602 | languageName: node 1603 | linkType: hard 1604 | 1605 | "socks-proxy-agent@npm:^7.0.0": 1606 | version: 7.0.0 1607 | resolution: "socks-proxy-agent@npm:7.0.0" 1608 | dependencies: 1609 | agent-base: ^6.0.2 1610 | debug: ^4.3.3 1611 | socks: ^2.6.2 1612 | checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 1613 | languageName: node 1614 | linkType: hard 1615 | 1616 | "socks@npm:^2.6.2": 1617 | version: 2.7.0 1618 | resolution: "socks@npm:2.7.0" 1619 | dependencies: 1620 | ip: ^2.0.0 1621 | smart-buffer: ^4.2.0 1622 | checksum: 0b5d94e2b3c11e7937b40fc5dac1e80d8b92a330e68c51f1d271ce6980c70adca42a3f8cd47c4a5769956bada074823b53374f2dc5f2ea5c2121b222dec6eadf 1623 | languageName: node 1624 | linkType: hard 1625 | 1626 | "source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2": 1627 | version: 1.0.2 1628 | resolution: "source-map-js@npm:1.0.2" 1629 | checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c 1630 | languageName: node 1631 | linkType: hard 1632 | 1633 | "ssri@npm:^9.0.0": 1634 | version: 9.0.1 1635 | resolution: "ssri@npm:9.0.1" 1636 | dependencies: 1637 | minipass: ^3.1.1 1638 | checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb 1639 | languageName: node 1640 | linkType: hard 1641 | 1642 | "string-argv@npm:0.3.2": 1643 | version: 0.3.2 1644 | resolution: "string-argv@npm:0.3.2" 1645 | checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f 1646 | languageName: node 1647 | linkType: hard 1648 | 1649 | "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": 1650 | version: 4.2.3 1651 | resolution: "string-width@npm:4.2.3" 1652 | dependencies: 1653 | emoji-regex: ^8.0.0 1654 | is-fullwidth-code-point: ^3.0.0 1655 | strip-ansi: ^6.0.1 1656 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb 1657 | languageName: node 1658 | linkType: hard 1659 | 1660 | "string-width@npm:^5.0.0, string-width@npm:^5.0.1": 1661 | version: 5.1.2 1662 | resolution: "string-width@npm:5.1.2" 1663 | dependencies: 1664 | eastasianwidth: ^0.2.0 1665 | emoji-regex: ^9.2.2 1666 | strip-ansi: ^7.0.1 1667 | checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 1668 | languageName: node 1669 | linkType: hard 1670 | 1671 | "string_decoder@npm:^1.1.1": 1672 | version: 1.3.0 1673 | resolution: "string_decoder@npm:1.3.0" 1674 | dependencies: 1675 | safe-buffer: ~5.2.0 1676 | checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 1677 | languageName: node 1678 | linkType: hard 1679 | 1680 | "strip-ansi@npm:^6.0.1": 1681 | version: 6.0.1 1682 | resolution: "strip-ansi@npm:6.0.1" 1683 | dependencies: 1684 | ansi-regex: ^5.0.1 1685 | checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c 1686 | languageName: node 1687 | linkType: hard 1688 | 1689 | "strip-ansi@npm:^7.0.1": 1690 | version: 7.0.1 1691 | resolution: "strip-ansi@npm:7.0.1" 1692 | dependencies: 1693 | ansi-regex: ^6.0.1 1694 | checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 1695 | languageName: node 1696 | linkType: hard 1697 | 1698 | "strip-final-newline@npm:^3.0.0": 1699 | version: 3.0.0 1700 | resolution: "strip-final-newline@npm:3.0.0" 1701 | checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 1702 | languageName: node 1703 | linkType: hard 1704 | 1705 | "tar@npm:^6.1.11, tar@npm:^6.1.2": 1706 | version: 6.1.11 1707 | resolution: "tar@npm:6.1.11" 1708 | dependencies: 1709 | chownr: ^2.0.0 1710 | fs-minipass: ^2.0.0 1711 | minipass: ^3.0.0 1712 | minizlib: ^2.1.1 1713 | mkdirp: ^1.0.3 1714 | yallist: ^4.0.0 1715 | checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f 1716 | languageName: node 1717 | linkType: hard 1718 | 1719 | "three@npm:^0.157.0": 1720 | version: 0.157.0 1721 | resolution: "three@npm:0.157.0" 1722 | checksum: 444797461c9db09d8a4cad886e494c2e6dd5754f09ac7ac4af75a3bf1143ae79641388db31999edcc76c5dba9677639f09da2df8d0128396a1dd59e41226c85c 1723 | languageName: node 1724 | linkType: hard 1725 | 1726 | "threejs-ts-starter@workspace:.": 1727 | version: 0.0.0-use.local 1728 | resolution: "threejs-ts-starter@workspace:." 1729 | dependencies: 1730 | "@types/three": ^0.156.0 1731 | husky: ^8.0.3 1732 | lil-gui: ^0.18.2 1733 | lint-staged: ^13.3.0 1734 | prettier: 2.8.8 1735 | sass: ^1.69.0 1736 | three: ^0.157.0 1737 | typescript: ^5.2.2 1738 | vite: ^4.4.11 1739 | vite-plugin-glsl: ^1.1.2 1740 | languageName: unknown 1741 | linkType: soft 1742 | 1743 | "to-regex-range@npm:^5.0.1": 1744 | version: 5.0.1 1745 | resolution: "to-regex-range@npm:5.0.1" 1746 | dependencies: 1747 | is-number: ^7.0.0 1748 | checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed 1749 | languageName: node 1750 | linkType: hard 1751 | 1752 | "type-fest@npm:^1.0.2": 1753 | version: 1.4.0 1754 | resolution: "type-fest@npm:1.4.0" 1755 | checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 1756 | languageName: node 1757 | linkType: hard 1758 | 1759 | "typescript@npm:^5.2.2": 1760 | version: 5.2.2 1761 | resolution: "typescript@npm:5.2.2" 1762 | bin: 1763 | tsc: bin/tsc 1764 | tsserver: bin/tsserver 1765 | checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c 1766 | languageName: node 1767 | linkType: hard 1768 | 1769 | "typescript@patch:typescript@^5.2.2#~builtin": 1770 | version: 5.2.2 1771 | resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=7ad353" 1772 | bin: 1773 | tsc: bin/tsc 1774 | tsserver: bin/tsserver 1775 | checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 1776 | languageName: node 1777 | linkType: hard 1778 | 1779 | "unique-filename@npm:^1.1.1": 1780 | version: 1.1.1 1781 | resolution: "unique-filename@npm:1.1.1" 1782 | dependencies: 1783 | unique-slug: ^2.0.0 1784 | checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 1785 | languageName: node 1786 | linkType: hard 1787 | 1788 | "unique-slug@npm:^2.0.0": 1789 | version: 2.0.2 1790 | resolution: "unique-slug@npm:2.0.2" 1791 | dependencies: 1792 | imurmurhash: ^0.1.4 1793 | checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a 1794 | languageName: node 1795 | linkType: hard 1796 | 1797 | "util-deprecate@npm:^1.0.1": 1798 | version: 1.0.2 1799 | resolution: "util-deprecate@npm:1.0.2" 1800 | checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 1801 | languageName: node 1802 | linkType: hard 1803 | 1804 | "vite-plugin-glsl@npm:^1.1.2": 1805 | version: 1.1.2 1806 | resolution: "vite-plugin-glsl@npm:1.1.2" 1807 | dependencies: 1808 | "@rollup/pluginutils": ^5.0.2 1809 | peerDependencies: 1810 | vite: ^3.0.0 || ^4.0.0 1811 | checksum: 8b77944ce9529c52a83f39770bd4e9512e52e4db2d5ee3be270a7c0251d05ea713206a07e03e57c4cb0567bbaeee69c1845f3bc76e49fc4de01f4d2b6dc76578 1812 | languageName: node 1813 | linkType: hard 1814 | 1815 | "vite@npm:^4.4.11": 1816 | version: 4.4.11 1817 | resolution: "vite@npm:4.4.11" 1818 | dependencies: 1819 | esbuild: ^0.18.10 1820 | fsevents: ~2.3.2 1821 | postcss: ^8.4.27 1822 | rollup: ^3.27.1 1823 | peerDependencies: 1824 | "@types/node": ">= 14" 1825 | less: "*" 1826 | lightningcss: ^1.21.0 1827 | sass: "*" 1828 | stylus: "*" 1829 | sugarss: "*" 1830 | terser: ^5.4.0 1831 | dependenciesMeta: 1832 | fsevents: 1833 | optional: true 1834 | peerDependenciesMeta: 1835 | "@types/node": 1836 | optional: true 1837 | less: 1838 | optional: true 1839 | lightningcss: 1840 | optional: true 1841 | sass: 1842 | optional: true 1843 | stylus: 1844 | optional: true 1845 | sugarss: 1846 | optional: true 1847 | terser: 1848 | optional: true 1849 | bin: 1850 | vite: bin/vite.js 1851 | checksum: c22145c8385343a629cd546054b9da6eee60327540102bdfd1ad897fd2e78e0763ce6a18a9d84fdefde9da8fd2427d3bec9eb2697b47cf4068c7b4b52f7e3e6a 1852 | languageName: node 1853 | linkType: hard 1854 | 1855 | "which@npm:^2.0.1, which@npm:^2.0.2": 1856 | version: 2.0.2 1857 | resolution: "which@npm:2.0.2" 1858 | dependencies: 1859 | isexe: ^2.0.0 1860 | bin: 1861 | node-which: ./bin/node-which 1862 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 1863 | languageName: node 1864 | linkType: hard 1865 | 1866 | "wide-align@npm:^1.1.5": 1867 | version: 1.1.5 1868 | resolution: "wide-align@npm:1.1.5" 1869 | dependencies: 1870 | string-width: ^1.0.2 || 2 || 3 || 4 1871 | checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 1872 | languageName: node 1873 | linkType: hard 1874 | 1875 | "wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": 1876 | version: 8.1.0 1877 | resolution: "wrap-ansi@npm:8.1.0" 1878 | dependencies: 1879 | ansi-styles: ^6.1.0 1880 | string-width: ^5.0.1 1881 | strip-ansi: ^7.0.1 1882 | checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 1883 | languageName: node 1884 | linkType: hard 1885 | 1886 | "wrappy@npm:1": 1887 | version: 1.0.2 1888 | resolution: "wrappy@npm:1.0.2" 1889 | checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 1890 | languageName: node 1891 | linkType: hard 1892 | 1893 | "yallist@npm:^4.0.0": 1894 | version: 4.0.0 1895 | resolution: "yallist@npm:4.0.0" 1896 | checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 1897 | languageName: node 1898 | linkType: hard 1899 | 1900 | "yaml@npm:2.3.1": 1901 | version: 2.3.1 1902 | resolution: "yaml@npm:2.3.1" 1903 | checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54 1904 | languageName: node 1905 | linkType: hard 1906 | --------------------------------------------------------------------------------