├── .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 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.run/cleanup.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.run/dev.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
3 | plugins:
4 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
5 | spec: "@yarnpkg/plugin-interactive-tools"
6 |
7 | yarnPath: .yarn/releases/yarn-3.2.1.cjs
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Maya Nedeljkovich Batić
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Simple Three.js + TypeScript + Vite Starter
2 |
3 | This scaffolding lets you easily get started with using Three.js and TypeScript.
4 |
5 | 
6 |
7 | ## Features
8 |
9 | - Vite development environment
10 | - Full TypeScript support
11 | - Asset management
12 | - Debugging GUI and Stats
13 | - Social media and description overlay
14 | - Simple loading animation
15 | - Including shader chunks
16 | - [LYGIA Shader Library](https://lygia.xyz/)
17 |
18 | ## Prerequisites
19 |
20 | - [Node.js](https://nodejs.org)
21 | - [yarn](https://yarnpkg.com) OR [npm](https://www.npmjs.com)
22 |
23 | > 💡 This project uses **yarn@3.2.1** and **npm@8.1.2**. Other versions might lead to different package resolutions, proceed with caution. Example commands use **yarn**.
24 |
25 | ## Installation
26 |
27 | To use this scaffolding, run the following command:
28 |
29 | ```bash
30 | git clone https://github.com/mayacoda/simple-threejs-typescript-starter my-threejs-project
31 | cd my-threejs-project
32 | yarn install
33 | ```
34 |
35 | > ✅ If you are on GitHub, create a new repository using this repository as a template by clicking the green **Use this template** button in the top right.
36 |
37 | ## Development
38 |
39 | The starter includes a pre-configured Vite server which you can use to run and develop your project. To start the development server, run the following command:
40 |
41 | ```bash
42 | yarn dev
43 | ```
44 |
45 | To build the project, run:
46 |
47 | ```bash
48 | yarn build
49 | ```
50 |
51 | And if you wish to automatically start a server to preview your build, you can run:
52 |
53 | ```bash
54 | yarn build && yarn preview
55 | ```
56 |
57 | ### Engine
58 |
59 | The starter includes a utility `Engine` class which is responsible for setting up the renderer, render loop, scene, camera, and controls. All you have to do is provide a class that follows the `Experience` interface and pass it to the `Engine` constructor.
60 |
61 | ```typescript
62 | // in src/main.ts
63 |
64 | import { Engine } from './engine/Engine'
65 | import { Demo } from './demo/Demo'
66 |
67 | new Engine({
68 | canvas: document.querySelector('#canvas') as HTMLCanvasElement,
69 | experience: Demo,
70 | info: {
71 | twitter: 'https://twitter.com/maya_ndljk',
72 | github: 'https://github.com/mayacoda/simple-threejs-typescript-starter',
73 | description: 'A simple Three.js + Typescript + Vite starter project',
74 | documentTitle: 'Three.js + Typescript + Vite',
75 | title: 'A cube on a plane',
76 | },
77 | })
78 | ```
79 |
80 | Then inside the class which implements `Experience`, you have access to the entire engine and its components.
81 |
82 | ```typescript
83 | // in src/demo/Demo.ts
84 |
85 | import { Engine } from '../engine/Engine'
86 | import { Experience } from '../engine/Experience'
87 | import { Resource } from '../engine/Resources'
88 |
89 | export class Demo implements Experience {
90 | // list of resources required by the experience
91 | resources: Resource[] = []
92 |
93 | constructor(private engine: Engine) {}
94 |
95 | // initialize scene -- called by tne Engine after resources are loaded
96 | init() {}
97 |
98 | // called on resize
99 | resize() {}
100 |
101 | // called on each render
102 | update() {}
103 | }
104 | ```
105 |
106 | ### Removing the example scene
107 |
108 | To demonstrate how to use the scaffolding, this project includes an example scene. To remove it and start with a blank project, run:
109 |
110 | ```bash
111 | yarn cleanup
112 | ```
113 |
114 | This will also clear the content of this README.md file to just the basic commands for running the project.
115 |
116 | ### Serving Resources
117 |
118 | Resources loaded through THREE.js loaders need to go in the `/public` directory to avoid being compiled by Vite. This includes textures and models.
119 |
120 | More information about Vite's asset handling can be found [here](https://vitejs.dev/guide/assets.html).
121 |
122 | ### Including Shader Chunks
123 |
124 | Shaders are loaded using the [vite-plugin-glsl](https://github.com/UstymUkhman/vite-plugin-glsl) Vite plugin and can be located anywhere within the `/src` directory.
125 |
126 | The starter also includes the LYGIA Shader Library. To use it, import the shader chunks you need in your shader file.
127 |
128 | ```glsl
129 | // in src/demo/shader.frag
130 |
131 | #include "../shaders/lygia/color/palette/water.glsl"
132 |
133 | varying vec2 vUv;
134 |
135 | void main() {
136 | gl_FragColor = vec4(water(vUv.y), 1.0);
137 | }
138 | ```
--------------------------------------------------------------------------------
/assets/docs/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mayacoda/simple-threejs-typescript-starter/f498ef4e7b4e495366f2129eb29e6d8e449e76c7/assets/docs/example.png
--------------------------------------------------------------------------------
/assets/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mayacoda/simple-threejs-typescript-starter/f498ef4e7b4e495366f2129eb29e6d8e449e76c7/assets/github.png
--------------------------------------------------------------------------------
/assets/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mayacoda/simple-threejs-typescript-starter/f498ef4e7b4e495366f2129eb29e6d8e449e76c7/assets/twitter.png
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mayacoda/simple-threejs-typescript-starter/f498ef4e7b4e495366f2129eb29e6d8e449e76c7/favicon.ico
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Simple Three.js + TypeScript Starter
8 |
9 |
10 |
11 |
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 |
33 | ${
34 | config.twitter
35 | ? `
36 |
37 | `
38 | : ``
39 | }
40 | ${
41 | config.github
42 | ? `
43 |
44 | `
45 | : ``
46 | }
47 |
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 |
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 |
--------------------------------------------------------------------------------