├── .gitattributes ├── .github └── workflows │ └── main.yml ├── .gitignore ├── LICENSE ├── README.md ├── deno.json ├── deno.lock ├── esbuild-script.js ├── package.json ├── src ├── constants.ts ├── deno │ └── testUtils.ts ├── gaussianSplats.ts ├── gpuProfiler.ts ├── index.deno.ts ├── index.web.ts ├── loaders │ └── fileSplat.ts ├── passes │ ├── drawGroundPass.ts │ ├── passCtx.ts │ ├── renderSplatsGEO.ts │ ├── renderSplatsGEO.wgsl │ ├── renderUniformsBuffer.ts │ ├── sortPassCPU.ts │ ├── sortPassCPU_Naive.ts │ └── sortPassGPU │ │ ├── bitonicSort.test.ts │ │ ├── bitonicSort.ts │ │ ├── bitonicSort.wgsl │ │ ├── calcDepths.test.ts │ │ ├── calcDepths.ts │ │ ├── calcDepths.wgsl │ │ ├── index.ts │ │ ├── unrollIndices.test.ts │ │ ├── unrollIndices.ts │ │ └── unrollIndices.wgsl ├── renderer.ts ├── utils.ts └── web │ ├── camera2.ts │ ├── cavasResize.ts │ ├── fpsStats.ts │ ├── gui.ts │ └── input.ts ├── static ├── favicon.ico ├── index.html └── nike.splat └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | *.splat binary 2 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | 7 | permissions: 8 | contents: write 9 | 10 | jobs: 11 | build-and-deploy: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - run: corepack enable 16 | - uses: actions/setup-node@v4 17 | with: 18 | node-version: '20' 19 | cache: 'yarn' 20 | 21 | - name: Build 22 | run: | 23 | yarn install 24 | yarn build 25 | touch build/.nojekyll 26 | 27 | - name: Deploy 28 | uses: JamesIves/github-pages-deploy-action@v4 29 | with: 30 | folder: build 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | *.tsbuildinfo 4 | *.code-workspace 5 | node_modules 6 | 7 | # yarn 8 | .pnp.* 9 | .yarn/* 10 | !.yarn/patches 11 | !.yarn/plugins 12 | !.yarn/releases 13 | !.yarn/sdks 14 | !.yarn/versions 15 | yarn-debug.log* 16 | yarn-error.log* 17 | 18 | 19 | # build 20 | build 21 | static/*.pem 22 | 23 | 24 | # custom 25 | *.code-workspace 26 | _references 27 | output.png 28 | makefile 29 | scenes 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2024 Marcin Matuszczyk 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 | # Gaussian Splatting WebGPU ([Math blog post](https://www.sctheblog.com/blog/gaussian-splatting/) and [DEMO](https://scthe.github.io/gaussian-splatting-webgpu/)) 2 | 3 | I still remember the first time I saw [photogrammetry](https://en.wikipedia.org/wiki/Photogrammetry) in action. The artist [takes a lot of photos](https://www.youtube.com/watch?v=B5hBBFM2I_w) of a real object, plugs them into software, and receives a 3D object. 4 | 5 | In 2020, ["NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis"](https://arxiv.org/abs/2003.08934) introduced neural radiant fields. It uses a neural network to learn a 5D function (position x, y, z, viewing angle θ, ϕ) that returns a color and density/opacity. Watch the ["Why THIS is the Future of Imagery (and Nobody Knows it Yet)"](https://www.youtube.com/watch?v=YX5AoaWrowY) by Corridor Crew. Only 2 years later, Nvidia released [instant-ngp](https://github.com/NVlabs/instant-ngp) that speeds up the process. Along the way, we learned that neural networks are not even needed for this task - [Plenoxels](https://alexyu.net/plenoxels/). 6 | 7 | This leads us to ["3D Gaussian Splatting for Real-Time Radiance Field Rendering"](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) (August 2023). The model learns a point cloud that represents a scene. Each point is a Gaussian (imagine spindle or fusiform). With enough of them, we can represent the objects with stunning accuracy. 8 | 9 | In this repo, we have a WebGPU-based online renderer for a Gaussian splat file. I have written a dedicated blog post ["Notes for 3D Gaussian Splatting renderer"](https://www.sctheblog.com/blog/gaussian-splatting/) explaining the math behind this app. 10 | 11 | > WebGPU is so new it's [not available in Firefox](https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility). Use Chrome instead. 12 | 13 |
14 | 15 | ![gaussian-article-main-img](https://github.com/Scthe/gaussian-splatting-webgpu/assets/9325337/0700427f-4d46-4b95-bc63-d111a2aebc6b) 16 | 17 | *[Nike ZoomX Vaporfly Next%](https://x.com/alexcarliera/status/1701255887107522943) model by [Alex Carlier](https://www.alexcarlier.com/).* 18 | 19 | 20 | ## Features 21 | 22 | * [Math blog post](https://www.sctheblog.com/blog/gaussian-splatting/). 23 | * Compare depth sorting strategies. Includes sorting on the GPU, and 2 algorithms on the CPU. [Array.prototype.sort()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) is.. terrible. 24 | * Rendering both as [Gaussians projected to a square](https://www.sctheblog.com/blog/gaussian-splatting/#method-1-project-gaussian-to-a-square) and with [eigenvectors](https://www.sctheblog.com/blog/gaussian-splatting/#method-2-calculate-eigenvectors). 25 | 26 | 27 | ## Usage 28 | 29 | WebGPU does not work on Firefox. On Chrome, it requires HTTPS even during development. 30 | 31 | 1. `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem`. Move both files to `./static`. 32 | 2. `yarn install`. 33 | 3. `yarn dev`. Start a dev server that watches and compiles the code into `./build`. It also copies stuff from `./static`. 34 | 4. `yarn serve` in a separate terminal. Starts `http-server`. It's not included in `package.json`, but let's be honest - you already have it installed globally. 35 | 36 | Or `yarn build` for prod build. 37 | 38 | ### Camera control 39 | 40 | Use the `[W, S, A, D]` keys to move and `[Z, SPACEBAR]` to fly up or down. 41 | 42 | ### Running unit tests 43 | 44 | Node.js does not support WebGPU. Deno does (since [version 1.39](https://deno.com/blog/v1.39), December 14, 2023 - 5 months ago). Internally, it uses Firefox's [wgpu](https://github.com/gfx-rs/wgpu). It's not amazing: "WebGPU is still considered unstable in Deno". Compute is OK (with unit tests). Rendering struggles. 45 | 46 | Instruction: 47 | 48 | 1. Download the `.zip` file from [deno/releases](https://github.com/denoland/deno/releases/tag/v1.43.6). 49 | 2. `"/deno.exe" task test` 50 | 51 | 52 | 53 | ## FAQ 54 | 55 | ### What are the supported file formats? 56 | 57 | Only the .splat from [antimatter15/splat](https://github.com/antimatter15/splat). Writing file loaders is boring. 58 | 59 | ### How complicated is the renderer? 60 | 61 | 1. Load the `.ply` or `.splat` file. 62 | 2. Display it as a point cloud. Trivial using `instances=splatCount` with 4 vertices and triangle fan primitive. Then billboard it in a vertex shader. 63 | 3. Implement depth sorting (on CPU to make it easier). The Gaussians have transparency, so you need to render closest to the camera first. The simplest option is to generate an index buffer for each frame (no instancing or triangle fan). Add appropriate blend mode. At this point, your model should be recognizable. 64 | 4. Implement Gaussians. You can use my [notes](https://www.sctheblog.com/blog/gaussian-splatting/) as a reference. 65 | 5. Sorting on the GPU. The most popular (but hard to implement) is the [radix sort](https://en.wikipedia.org/wiki/Radix_sort). Instead, I've copied the [bitonic sorter](https://en.wikipedia.org/wiki/Bitonic_sorter) example code from Wikipedia. Iterate over `k` and `j` on the CPU (or as pre-generated uniform buffers) and over `i` inside the compute shader. 66 | 1. It could also be possible to kernel-fuse it, but WebGPU gets on my nerves (see below). The WGSL offers limited barriers. 67 | 2. In a non-fused approach, you need to generate 2 more shaders. One to precalculate depths by which you sort. The second one is to generate an index buffer after sorting (turn each `splatId` into 6 vertices). 68 | 69 | 70 | ### What could be some further improvements? 71 | 72 | 1. Tiled renderer, like in the original paper. 73 | 2. Spherical harmonics other than l=0; 74 | 3. Blog posts from Aras Pranckevičius: 75 | 1. ["Making Gaussian Splats smaller"](https://aras-p.info/blog/2023/09/13/Making-Gaussian-Splats-smaller/). 76 | 2. ["Making Gaussian Splats more smaller"](https://aras-p.info/blog/2023/09/27/Making-Gaussian-Splats-more-smaller/). 77 | 4. Other improvements in the field: 78 | 1. [awesome-3D-gaussian-splatting](https://github.com/MrNeRF/awesome-3D-gaussian-splatting). 79 | 2. ["Gaussian explosion"](https://aras-p.info/blog/2023/12/08/Gaussian-explosion/). 80 | 81 | 82 | ### Why does it not work on Firefox? 83 | 84 | This app uses WebGPU, a new API for writing 3D applications. Chrome has implemented the specification since [May 2023](https://developer.chrome.com/blog/webgpu-release). Firefox is still working on its [wgpu](https://github.com/gfx-rs/wgpu). Nothing I can do here. 85 | 86 | If you want to render Guassians in the browser, use antimatter15's [splat](https://github.com/antimatter15/splat) or huggingface's [gsplat.js](https://github.com/huggingface/gsplat.js). Both use WebGL, an older but more stable technology. 87 | 88 | 89 | ### Is WebGPU good? 90 | 91 | The answer will be biased, as I have [extensive](https://www.sctheblog.com/blog/vulkan-initialization/) [experience](https://www.sctheblog.com/blog/vulkan-synchronization/) [with](https://www.sctheblog.com/blog/vulkan-resources/) [Vulkan](https://www.sctheblog.com/blog/vulkan-frame/). It's like WebGPU, but 10x more complex. It would take something weird to raise my eyebrows. 92 | 93 | The WebGPU API is pleasant to use. It has compute shaders. Let's be honest, this is the killer feature. Unfortunately, this is where the positives end. 94 | 95 | * No Firefox support ATM. 96 | * The API lacks a lot of things. A few examples: 97 | * Want to check if the shader compiles correctly synchronously? Nope, [GPUCompilationInfo](https://developer.mozilla.org/en-US/docs/Web/API/GPUCompilationInfo) is not supported even in Chrome. Failed compilation operation does not even throw an error. Should I invoke the shader to check if the operation failed?! There exists an asynchronous [GPUDevice: pushErrorScope()](https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/pushErrorScope) (see below). But as [GPUDevice: createShaderModule()](https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/createShaderModule) is synchronous, it's a weird choice. Especially as it's common to text replace the content of the shaders before compilation. If I was given an error the moment the compilation failed, I could write a better error message. 98 | * Funny edge case: you can profile only on a per-render/compute-pass basis. Let's say you have a bitonic sort implementation that invokes shader 90 times. This leads to 180 timestamps (start + end). Oops! There was [writeTimestamp()](https://developer.mozilla.org/en-US/docs/Web/API/GPUCommandEncoder/writeTimestamp) to mark the code regions, but it was removed. 99 | * Clunky error handling. The errors are returned asynchronously, which is fine. ATM you sandwich the code between [GPUDevice: pushErrorScope()](https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/pushErrorScope) and [GPUDevice: popErrorScope()](https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/popErrorScope). Here is how it works in practice: 100 | * Imagine you create a buffer on the GPU. You do some calculations on it. Read it back to the CPU. It is filled with 0. Ahh, so obvious You forgot the `GPUBufferUsage.MAP_READ` flag! But, wait. The `GPUBufferUsage.MAP_READ` is not valid with most of the other combinations of `GPUBufferUsage`. This can happen to any buffer. The error message does not even contain the label of the GPUBuffer. BTW. How granular are your error scopes? 101 | * Each unit test has to call `popErrorScope()` before **EVERY** assertion. Otherwise, if the assertion fails, the test stops. No WebGPU logs in that case. In Deno, you could try to circumvent this with ['beforeunload'](https://docs.deno.com/runtime/manual/runtime/program_lifecycle) as there is no Jest's `afterEach()`. The whole mechanism is clunky. 102 | * In Vulkan, activate [validation layers](https://github.com/KhronosGroup/Vulkan-ValidationLayers) to get tons of high-quality logs. You can even do this from the external program. No need to recompile anything. Imagine having a browser dev tool tab that can (on the developer's request) hook and synchronously display the messages. 103 | * No tooling. In JS/other languages, I rarely use debuggers. But WebGPU works on the GPU. First, you have to check if the values from the CPU were received correctly. Then you need to e.g. select which pixel to debug. The fullscreen triangle on the 1024x720px image is 737280 fragment shader calls. Sure, Deno helps with unit tests. But you know what is better? [RenderDoc](https://renderdoc.org/), like I've used [when writing Vulkan code](https://www.sctheblog.com/blog/debugging-vulkan-using-renderdoc/). 104 | * Language servers for the code editor? Forget. The ones available are missing a lot of WGLS features e.g. [overrides](https://www.w3.org/TR/WGSL/#override-decls). 105 | * [WGSL - WebGPU Shading Language](https://www.w3.org/TR/WGSL/) a Rust-like language for writing shaders. Imagine if \*Web\*GPU used syntax similar to.. I don't know.. JS?! `function` instead of `fn`, `const` and `let` instead of `let` and `var` (yes, WGSL has this reversed wrt. to JS), `:` for return type instead of `->`, etc. I love it when someone's pet project spills into formal specifications. It says a lot about the authors and the community. Ofc. it's not like **there already was GLSL for WebGL and OpenGL**. Have fun rewriting all the shaders when porting the apps! 106 | 107 | I would not say that WebGPU is dead on arrival. Compute shaders are too strong of a value proposition. Fortunately, given the massive amount of bugs (Chrome is just slightly better than Firefox), and wgpu velocity, the 'arrival' is still years away. The fact that the dev experience is hostile is an icing on the cake. 108 | 109 | 110 | ## References 111 | 112 | * ["3D Gaussian Splatting for Real-Time Radiance Field Rendering"](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/). The Gaussian splatting paper. 113 | * ["EWA Volume Splatting"](https://www.cs.umd.edu/~zwicker/publications/EWAVolumeSplatting-VIS01.pdf) or ["EWA Splatting"](https://www.cs.umd.edu/~zwicker/publications/EWASplatting-TVCG02.pdf). Math for rendering using Gaussians. 114 | * ["NumByNum :: 3D Gaussian Splatting for Real-Time Radiance Field Rendering (Kerbl et al., 2023) Reviewed"](https://medium.com/@AriaLeeNotAriel/numbynum-3d-gaussian-splatting-for-real-time-radiance-field-rendering-kerbl-et-al-60c0b25e5544) by Aria Lee. 115 | * ["Gaussian Splatting Notes"](https://github.com/kwea123/gaussian_splatting_notes) by kwea123. 116 | * [gaussian-splatting](https://github.com/graphdeco-inria/gaussian-splatting). A reference implementation from [Inria](https://www.inria.fr/en) (authors of the paper). 117 | * [splat](https://github.com/antimatter15/splat) by antimatter15. An example of WebGL implementation. Since I'm using WebGPU, I had access to compute shaders. 118 | * [UnityGaussianSplatting](https://github.com/aras-p/UnityGaussianSplatting) by Aras Pranckevičius. Mostly out of curiosity about how things can be optimized. It did help that I've recently had a lot of exposure to Unity code when writing [ai-iris-avatar](https://github.com/Scthe/ai-iris-avatar) and ["Using Unity's strand-based hair package"](https://www.sctheblog.com/blog/unity-hair/). 119 | * [Deno](https://deno.com/) for WebGPU in JS without a browser. 120 | -------------------------------------------------------------------------------- /deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": { 3 | "start": "DENO_NO_PACKAGE_JSON=1 && deno run --allow-read=. --allow-write=. --unstable-webgpu src/index.deno.ts", 4 | "test": "DENO_NO_PACKAGE_JSON=1 && deno test --allow-read=. --allow-write=. --unstable-webgpu src" 5 | }, 6 | "imports": { 7 | "png": "https://deno.land/x/pngs@0.1.1/mod.ts", 8 | "std/webgpu": "jsr:@std/webgpu@^0.224.0", 9 | "wgpu-matrix": "npm:wgpu-matrix@2.9.0", 10 | "std-path": "https://deno.land/std@0.224.0/path/mod.ts", 11 | "assert": "https://deno.land/std@0.224.0/assert/mod.ts" 12 | }, 13 | "test": { 14 | "exclude": ["src/web"] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "packages": { 4 | "specifiers": { 5 | "jsr:@std/assert@^0.225.2": "jsr:@std/assert@0.225.2", 6 | "jsr:@std/webgpu@^0.224.0": "jsr:@std/webgpu@0.224.1", 7 | "npm:wgpu-matrix@2.9.0": "npm:wgpu-matrix@2.9.0" 8 | }, 9 | "jsr": { 10 | "@std/assert@0.225.2": { 11 | "integrity": "6fd566c3ea01654d29c2b633298b7fc7599716336233852eb87e9843658fa192" 12 | }, 13 | "@std/webgpu@0.224.1": { 14 | "integrity": "8e4c220814f33140f7f098b049ef4e3f851ae87cf0690643cda4ce734d5d5f2e", 15 | "dependencies": [ 16 | "jsr:@std/assert@^0.225.2" 17 | ] 18 | } 19 | }, 20 | "npm": { 21 | "wgpu-matrix@2.9.0": { 22 | "integrity": "sha512-RFhLcfghrbYaOt7OSiNIw2bqfrl2iHA30jM0Q+fm9v5MX5gQhcRs1Eqwar3MXrv2i5N0quv8UcXTzTD1KroulQ==", 23 | "dependencies": {} 24 | } 25 | } 26 | }, 27 | "remote": { 28 | "https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", 29 | "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", 30 | "https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293", 31 | "https://deno.land/std@0.224.0/assert/assert_array_includes.ts": "14c5094471bc8e4a7895fc6aa5a184300d8a1879606574cb1cd715ef36a4a3c7", 32 | "https://deno.land/std@0.224.0/assert/assert_equals.ts": "3bbca947d85b9d374a108687b1a8ba3785a7850436b5a8930d81f34a32cb8c74", 33 | "https://deno.land/std@0.224.0/assert/assert_exists.ts": "43420cf7f956748ae6ed1230646567b3593cb7a36c5a5327269279c870c5ddfd", 34 | "https://deno.land/std@0.224.0/assert/assert_false.ts": "3e9be8e33275db00d952e9acb0cd29481a44fa0a4af6d37239ff58d79e8edeff", 35 | "https://deno.land/std@0.224.0/assert/assert_greater.ts": "5e57b201fd51b64ced36c828e3dfd773412c1a6120c1a5a99066c9b261974e46", 36 | "https://deno.land/std@0.224.0/assert/assert_greater_or_equal.ts": "9870030f997a08361b6f63400273c2fb1856f5db86c0c3852aab2a002e425c5b", 37 | "https://deno.land/std@0.224.0/assert/assert_instance_of.ts": "e22343c1fdcacfaea8f37784ad782683ec1cf599ae9b1b618954e9c22f376f2c", 38 | "https://deno.land/std@0.224.0/assert/assert_is_error.ts": "f856b3bc978a7aa6a601f3fec6603491ab6255118afa6baa84b04426dd3cc491", 39 | "https://deno.land/std@0.224.0/assert/assert_less.ts": "60b61e13a1982865a72726a5fa86c24fad7eb27c3c08b13883fb68882b307f68", 40 | "https://deno.land/std@0.224.0/assert/assert_less_or_equal.ts": "d2c84e17faba4afe085e6c9123a63395accf4f9e00150db899c46e67420e0ec3", 41 | "https://deno.land/std@0.224.0/assert/assert_match.ts": "ace1710dd3b2811c391946954234b5da910c5665aed817943d086d4d4871a8b7", 42 | "https://deno.land/std@0.224.0/assert/assert_not_equals.ts": "78d45dd46133d76ce624b2c6c09392f6110f0df9b73f911d20208a68dee2ef29", 43 | "https://deno.land/std@0.224.0/assert/assert_not_instance_of.ts": "3434a669b4d20cdcc5359779301a0588f941ffdc2ad68803c31eabdb4890cf7a", 44 | "https://deno.land/std@0.224.0/assert/assert_not_match.ts": "df30417240aa2d35b1ea44df7e541991348a063d9ee823430e0b58079a72242a", 45 | "https://deno.land/std@0.224.0/assert/assert_not_strict_equals.ts": "37f73880bd672709373d6dc2c5f148691119bed161f3020fff3548a0496f71b8", 46 | "https://deno.land/std@0.224.0/assert/assert_object_match.ts": "411450fd194fdaabc0089ae68f916b545a49d7b7e6d0026e84a54c9e7eed2693", 47 | "https://deno.land/std@0.224.0/assert/assert_rejects.ts": "4bee1d6d565a5b623146a14668da8f9eb1f026a4f338bbf92b37e43e0aa53c31", 48 | "https://deno.land/std@0.224.0/assert/assert_strict_equals.ts": "b4f45f0fd2e54d9029171876bd0b42dd9ed0efd8f853ab92a3f50127acfa54f5", 49 | "https://deno.land/std@0.224.0/assert/assert_string_includes.ts": "496b9ecad84deab72c8718735373feb6cdaa071eb91a98206f6f3cb4285e71b8", 50 | "https://deno.land/std@0.224.0/assert/assert_throws.ts": "c6508b2879d465898dab2798009299867e67c570d7d34c90a2d235e4553906eb", 51 | "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", 52 | "https://deno.land/std@0.224.0/assert/equal.ts": "bddf07bb5fc718e10bb72d5dc2c36c1ce5a8bdd3b647069b6319e07af181ac47", 53 | "https://deno.land/std@0.224.0/assert/fail.ts": "0eba674ffb47dff083f02ced76d5130460bff1a9a68c6514ebe0cdea4abadb68", 54 | "https://deno.land/std@0.224.0/assert/mod.ts": "48b8cb8a619ea0b7958ad7ee9376500fe902284bb36f0e32c598c3dc34cbd6f3", 55 | "https://deno.land/std@0.224.0/assert/unimplemented.ts": "8c55a5793e9147b4f1ef68cd66496b7d5ba7a9e7ca30c6da070c1a58da723d73", 56 | "https://deno.land/std@0.224.0/assert/unreachable.ts": "5ae3dbf63ef988615b93eb08d395dda771c96546565f9e521ed86f6510c29e19", 57 | "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", 58 | "https://deno.land/std@0.224.0/internal/diff.ts": "6234a4b493ebe65dc67a18a0eb97ef683626a1166a1906232ce186ae9f65f4e6", 59 | "https://deno.land/std@0.224.0/internal/format.ts": "0a98ee226fd3d43450245b1844b47003419d34d210fa989900861c79820d21c2", 60 | "https://deno.land/std@0.224.0/internal/mod.ts": "534125398c8e7426183e12dc255bb635d94e06d0f93c60a297723abe69d3b22e", 61 | "https://deno.land/std@0.224.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", 62 | "https://deno.land/std@0.224.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", 63 | "https://deno.land/std@0.224.0/path/_common/common.ts": "ef73c2860694775fe8ffcbcdd387f9f97c7a656febf0daa8c73b56f4d8a7bd4c", 64 | "https://deno.land/std@0.224.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", 65 | "https://deno.land/std@0.224.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", 66 | "https://deno.land/std@0.224.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", 67 | "https://deno.land/std@0.224.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", 68 | "https://deno.land/std@0.224.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", 69 | "https://deno.land/std@0.224.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", 70 | "https://deno.land/std@0.224.0/path/_common/normalize_string.ts": "33edef773c2a8e242761f731adeb2bd6d683e9c69e4e3d0092985bede74f4ac3", 71 | "https://deno.land/std@0.224.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", 72 | "https://deno.land/std@0.224.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", 73 | "https://deno.land/std@0.224.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", 74 | "https://deno.land/std@0.224.0/path/_interface.ts": "8dfeb930ca4a772c458a8c7bbe1e33216fe91c253411338ad80c5b6fa93ddba0", 75 | "https://deno.land/std@0.224.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", 76 | "https://deno.land/std@0.224.0/path/basename.ts": "7ee495c2d1ee516ffff48fb9a93267ba928b5a3486b550be73071bc14f8cc63e", 77 | "https://deno.land/std@0.224.0/path/common.ts": "03e52e22882402c986fe97ca3b5bb4263c2aa811c515ce84584b23bac4cc2643", 78 | "https://deno.land/std@0.224.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", 79 | "https://deno.land/std@0.224.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", 80 | "https://deno.land/std@0.224.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", 81 | "https://deno.land/std@0.224.0/path/format.ts": "6ce1779b0980296cf2bc20d66436b12792102b831fd281ab9eb08fa8a3e6f6ac", 82 | "https://deno.land/std@0.224.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", 83 | "https://deno.land/std@0.224.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", 84 | "https://deno.land/std@0.224.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", 85 | "https://deno.land/std@0.224.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", 86 | "https://deno.land/std@0.224.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", 87 | "https://deno.land/std@0.224.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", 88 | "https://deno.land/std@0.224.0/path/mod.ts": "f6bd79cb08be0e604201bc9de41ac9248582699d1b2ee0ab6bc9190d472cf9cd", 89 | "https://deno.land/std@0.224.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", 90 | "https://deno.land/std@0.224.0/path/normalize_glob.ts": "cc89a77a7d3b1d01053b9dcd59462b75482b11e9068ae6c754b5cf5d794b374f", 91 | "https://deno.land/std@0.224.0/path/parse.ts": "77ad91dcb235a66c6f504df83087ce2a5471e67d79c402014f6e847389108d5a", 92 | "https://deno.land/std@0.224.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", 93 | "https://deno.land/std@0.224.0/path/posix/basename.ts": "d2fa5fbbb1c5a3ab8b9326458a8d4ceac77580961b3739cd5bfd1d3541a3e5f0", 94 | "https://deno.land/std@0.224.0/path/posix/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", 95 | "https://deno.land/std@0.224.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", 96 | "https://deno.land/std@0.224.0/path/posix/dirname.ts": "76cd348ffe92345711409f88d4d8561d8645353ac215c8e9c80140069bf42f00", 97 | "https://deno.land/std@0.224.0/path/posix/extname.ts": "e398c1d9d1908d3756a7ed94199fcd169e79466dd88feffd2f47ce0abf9d61d2", 98 | "https://deno.land/std@0.224.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", 99 | "https://deno.land/std@0.224.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", 100 | "https://deno.land/std@0.224.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", 101 | "https://deno.land/std@0.224.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", 102 | "https://deno.land/std@0.224.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", 103 | "https://deno.land/std@0.224.0/path/posix/join.ts": "7fc2cb3716aa1b863e990baf30b101d768db479e70b7313b4866a088db016f63", 104 | "https://deno.land/std@0.224.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", 105 | "https://deno.land/std@0.224.0/path/posix/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", 106 | "https://deno.land/std@0.224.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", 107 | "https://deno.land/std@0.224.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", 108 | "https://deno.land/std@0.224.0/path/posix/parse.ts": "09dfad0cae530f93627202f28c1befa78ea6e751f92f478ca2cc3b56be2cbb6a", 109 | "https://deno.land/std@0.224.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", 110 | "https://deno.land/std@0.224.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", 111 | "https://deno.land/std@0.224.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", 112 | "https://deno.land/std@0.224.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", 113 | "https://deno.land/std@0.224.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", 114 | "https://deno.land/std@0.224.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", 115 | "https://deno.land/std@0.224.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", 116 | "https://deno.land/std@0.224.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", 117 | "https://deno.land/std@0.224.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", 118 | "https://deno.land/std@0.224.0/path/windows/basename.ts": "6bbc57bac9df2cec43288c8c5334919418d784243a00bc10de67d392ab36d660", 119 | "https://deno.land/std@0.224.0/path/windows/common.ts": "26f60ccc8b2cac3e1613000c23ac5a7d392715d479e5be413473a37903a2b5d4", 120 | "https://deno.land/std@0.224.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", 121 | "https://deno.land/std@0.224.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", 122 | "https://deno.land/std@0.224.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", 123 | "https://deno.land/std@0.224.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", 124 | "https://deno.land/std@0.224.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", 125 | "https://deno.land/std@0.224.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", 126 | "https://deno.land/std@0.224.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", 127 | "https://deno.land/std@0.224.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", 128 | "https://deno.land/std@0.224.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", 129 | "https://deno.land/std@0.224.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", 130 | "https://deno.land/std@0.224.0/path/windows/mod.ts": "2301fc1c54a28b349e20656f68a85f75befa0ee9b6cd75bfac3da5aca9c3f604", 131 | "https://deno.land/std@0.224.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", 132 | "https://deno.land/std@0.224.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", 133 | "https://deno.land/std@0.224.0/path/windows/parse.ts": "08804327b0484d18ab4d6781742bf374976de662f8642e62a67e93346e759707", 134 | "https://deno.land/std@0.224.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", 135 | "https://deno.land/std@0.224.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", 136 | "https://deno.land/std@0.224.0/path/windows/to_file_url.ts": "40e560ee4854fe5a3d4d12976cef2f4e8914125c81b11f1108e127934ced502e", 137 | "https://deno.land/std@0.224.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", 138 | "https://deno.land/std@0.97.0/encoding/base64.ts": "eecae390f1f1d1cae6f6c6d732ede5276bf4b9cd29b1d281678c054dc5cc009e", 139 | "https://deno.land/x/gmath@0.1.11/mod.ts": "696f0a39bef39268a717f110b391a2280f1a25072546d88ada03bd0aba03279b", 140 | "https://deno.land/x/gmath@0.1.11/src/angle.ts": "116e5d0495900ff17352f8bab6765332d76ac672a93ec69afbb5f80576aa2169", 141 | "https://deno.land/x/gmath@0.1.11/src/decomposed.ts": "0ebd6ee5276fb74ec8f0decdd9c7b08c98609d7dc382c38696ebde3c27176ba2", 142 | "https://deno.land/x/gmath@0.1.11/src/matrix2.ts": "4b89304811d5c8cf55586a9ac103812666e4a3ccede21d12c62ca5c2a1fb3a56", 143 | "https://deno.land/x/gmath@0.1.11/src/matrix3.ts": "a198ccc90d010cde481daa24350241e63fc7eb3eab9c5d2efc88903d895b1492", 144 | "https://deno.land/x/gmath@0.1.11/src/matrix4.ts": "4a588ffcec8a2d0a922163e5425e69916533c811042dbb7f1603f136076d379e", 145 | "https://deno.land/x/gmath@0.1.11/src/projection.ts": "5f9bd9fe110276db5ad30ee4380df5d15a147ed4b75fab03728821f42ebc1a4d", 146 | "https://deno.land/x/gmath@0.1.11/src/quaternion.ts": "575d4e0ee783dfd0440593285b64a87238d022f0b758612624d65a8d2f8f915a", 147 | "https://deno.land/x/gmath@0.1.11/src/util.ts": "1b19327d98124babb35a3a19084919384f107d7dc8ea1c995538a34817f57c19", 148 | "https://deno.land/x/gmath@0.1.11/src/vector2.ts": "f9da5bd2c17aa9b4199991ab8bc64d1d7b7a2cc0425a354350c2e7c18ddfc204", 149 | "https://deno.land/x/gmath@0.1.11/src/vector3.ts": "30b920c9e98bd9fe06ee61f66016a8f7fa3235a95f3151c85c602a6b88cc0a00", 150 | "https://deno.land/x/gmath@0.1.11/src/vector4.ts": "c7240ab5e5d087dd1091ce904f721df80457894e81ce0b5a23272c5045df61ee", 151 | "https://deno.land/x/gmath@0.1.11/wasm/mod.ts": "724fed398ddc3c261e72946a73cf8cc2eee08ae599327e85e8a90d9752481ad7", 152 | "https://deno.land/x/gmath@0.1.11/wasm/wasm.js": "77db62126e548d63271853ec35371630dbe84707456f293f5ab8bd2bae6bb831", 153 | "https://deno.land/x/lz4@v0.1.2/mod.ts": "4decfc1a3569d03fd1813bd39128b71c8f082850fe98ecfdde20025772916582", 154 | "https://deno.land/x/lz4@v0.1.2/wasm.js": "b9c65605327ba273f0c76a6dc596ec534d4cda0f0225d7a94ebc606782319e46", 155 | "https://deno.land/x/pngs@0.1.1/mod.ts": "9dc8a7daed1497b94a77b68c954164a9f0b2a6f40866481bdfdbbaf015b5f764", 156 | "https://deno.land/x/pngs@0.1.1/wasm.js": "e3d4a8f293b267c9859a2164ca7b4603869bc92fe0d5ad4f109925858bce0c4c" 157 | }, 158 | "workspace": { 159 | "dependencies": [ 160 | "jsr:@std/webgpu@^0.224.0", 161 | "npm:wgpu-matrix@2.9.0" 162 | ], 163 | "packageJson": { 164 | "dependencies": [ 165 | "npm:@types/dat.gui@^0.7.9", 166 | "npm:dat.gui@^0.7.9", 167 | "npm:esbuild-copy-static-files@^0.1.0", 168 | "npm:esbuild@^0.21.3", 169 | "npm:rimraf@^5.0.7", 170 | "npm:typescript@^5.4.5", 171 | "npm:wgpu-matrix@^2.9.0" 172 | ] 173 | } 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /esbuild-script.js: -------------------------------------------------------------------------------- 1 | const esbuild = require('esbuild'); 2 | const copyStaticFiles = require('esbuild-copy-static-files'); 3 | 4 | const config = { 5 | entryPoints: ['./src/index.web.ts'], 6 | outdir: './build', 7 | bundle: true, 8 | define: {}, 9 | loader: { 10 | '.wgsl': 'text', 11 | }, 12 | // plugins 13 | plugins: [ 14 | copyStaticFiles({ 15 | src: './static', 16 | dest: './build', 17 | dereference: true, 18 | errorOnExist: false, 19 | recursive: true, 20 | }), 21 | ], 22 | }; 23 | 24 | const defineProductionFlag = (flag) => 25 | (config.define.IS_PRODUCTION = String(flag)); 26 | 27 | async function buildProd() { 28 | console.log('Executing prod build'); 29 | defineProductionFlag(true); 30 | 31 | config.minify = true; 32 | // config.format = 'esm'; // produces invalid build? some module imports or smth. 'type="module"' in 95 | 96 | 97 | -------------------------------------------------------------------------------- /static/nike.splat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Scthe/gaussian-splatting-webgpu/b9065aeb77b210e5fa2523850ba83e40d456aafa/static/nike.splat -------------------------------------------------------------------------------- /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: 8 6 | cacheKey: 10c0 7 | 8 | "@esbuild/aix-ppc64@npm:0.21.3": 9 | version: 0.21.3 10 | resolution: "@esbuild/aix-ppc64@npm:0.21.3" 11 | conditions: os=aix & cpu=ppc64 12 | languageName: node 13 | linkType: hard 14 | 15 | "@esbuild/android-arm64@npm:0.21.3": 16 | version: 0.21.3 17 | resolution: "@esbuild/android-arm64@npm:0.21.3" 18 | conditions: os=android & cpu=arm64 19 | languageName: node 20 | linkType: hard 21 | 22 | "@esbuild/android-arm@npm:0.21.3": 23 | version: 0.21.3 24 | resolution: "@esbuild/android-arm@npm:0.21.3" 25 | conditions: os=android & cpu=arm 26 | languageName: node 27 | linkType: hard 28 | 29 | "@esbuild/android-x64@npm:0.21.3": 30 | version: 0.21.3 31 | resolution: "@esbuild/android-x64@npm:0.21.3" 32 | conditions: os=android & cpu=x64 33 | languageName: node 34 | linkType: hard 35 | 36 | "@esbuild/darwin-arm64@npm:0.21.3": 37 | version: 0.21.3 38 | resolution: "@esbuild/darwin-arm64@npm:0.21.3" 39 | conditions: os=darwin & cpu=arm64 40 | languageName: node 41 | linkType: hard 42 | 43 | "@esbuild/darwin-x64@npm:0.21.3": 44 | version: 0.21.3 45 | resolution: "@esbuild/darwin-x64@npm:0.21.3" 46 | conditions: os=darwin & cpu=x64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@esbuild/freebsd-arm64@npm:0.21.3": 51 | version: 0.21.3 52 | resolution: "@esbuild/freebsd-arm64@npm:0.21.3" 53 | conditions: os=freebsd & cpu=arm64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@esbuild/freebsd-x64@npm:0.21.3": 58 | version: 0.21.3 59 | resolution: "@esbuild/freebsd-x64@npm:0.21.3" 60 | conditions: os=freebsd & cpu=x64 61 | languageName: node 62 | linkType: hard 63 | 64 | "@esbuild/linux-arm64@npm:0.21.3": 65 | version: 0.21.3 66 | resolution: "@esbuild/linux-arm64@npm:0.21.3" 67 | conditions: os=linux & cpu=arm64 68 | languageName: node 69 | linkType: hard 70 | 71 | "@esbuild/linux-arm@npm:0.21.3": 72 | version: 0.21.3 73 | resolution: "@esbuild/linux-arm@npm:0.21.3" 74 | conditions: os=linux & cpu=arm 75 | languageName: node 76 | linkType: hard 77 | 78 | "@esbuild/linux-ia32@npm:0.21.3": 79 | version: 0.21.3 80 | resolution: "@esbuild/linux-ia32@npm:0.21.3" 81 | conditions: os=linux & cpu=ia32 82 | languageName: node 83 | linkType: hard 84 | 85 | "@esbuild/linux-loong64@npm:0.21.3": 86 | version: 0.21.3 87 | resolution: "@esbuild/linux-loong64@npm:0.21.3" 88 | conditions: os=linux & cpu=loong64 89 | languageName: node 90 | linkType: hard 91 | 92 | "@esbuild/linux-mips64el@npm:0.21.3": 93 | version: 0.21.3 94 | resolution: "@esbuild/linux-mips64el@npm:0.21.3" 95 | conditions: os=linux & cpu=mips64el 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/linux-ppc64@npm:0.21.3": 100 | version: 0.21.3 101 | resolution: "@esbuild/linux-ppc64@npm:0.21.3" 102 | conditions: os=linux & cpu=ppc64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/linux-riscv64@npm:0.21.3": 107 | version: 0.21.3 108 | resolution: "@esbuild/linux-riscv64@npm:0.21.3" 109 | conditions: os=linux & cpu=riscv64 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/linux-s390x@npm:0.21.3": 114 | version: 0.21.3 115 | resolution: "@esbuild/linux-s390x@npm:0.21.3" 116 | conditions: os=linux & cpu=s390x 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/linux-x64@npm:0.21.3": 121 | version: 0.21.3 122 | resolution: "@esbuild/linux-x64@npm:0.21.3" 123 | conditions: os=linux & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/netbsd-x64@npm:0.21.3": 128 | version: 0.21.3 129 | resolution: "@esbuild/netbsd-x64@npm:0.21.3" 130 | conditions: os=netbsd & cpu=x64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/openbsd-x64@npm:0.21.3": 135 | version: 0.21.3 136 | resolution: "@esbuild/openbsd-x64@npm:0.21.3" 137 | conditions: os=openbsd & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/sunos-x64@npm:0.21.3": 142 | version: 0.21.3 143 | resolution: "@esbuild/sunos-x64@npm:0.21.3" 144 | conditions: os=sunos & cpu=x64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/win32-arm64@npm:0.21.3": 149 | version: 0.21.3 150 | resolution: "@esbuild/win32-arm64@npm:0.21.3" 151 | conditions: os=win32 & cpu=arm64 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/win32-ia32@npm:0.21.3": 156 | version: 0.21.3 157 | resolution: "@esbuild/win32-ia32@npm:0.21.3" 158 | conditions: os=win32 & cpu=ia32 159 | languageName: node 160 | linkType: hard 161 | 162 | "@esbuild/win32-x64@npm:0.21.3": 163 | version: 0.21.3 164 | resolution: "@esbuild/win32-x64@npm:0.21.3" 165 | conditions: os=win32 & cpu=x64 166 | languageName: node 167 | linkType: hard 168 | 169 | "@isaacs/cliui@npm:^8.0.2": 170 | version: 8.0.2 171 | resolution: "@isaacs/cliui@npm:8.0.2" 172 | dependencies: 173 | string-width: "npm:^5.1.2" 174 | string-width-cjs: "npm:string-width@^4.2.0" 175 | strip-ansi: "npm:^7.0.1" 176 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1" 177 | wrap-ansi: "npm:^8.1.0" 178 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" 179 | checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e 180 | languageName: node 181 | linkType: hard 182 | 183 | "@pkgjs/parseargs@npm:^0.11.0": 184 | version: 0.11.0 185 | resolution: "@pkgjs/parseargs@npm:0.11.0" 186 | checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd 187 | languageName: node 188 | linkType: hard 189 | 190 | "@types/dat.gui@npm:^0.7.9": 191 | version: 0.7.13 192 | resolution: "@types/dat.gui@npm:0.7.13" 193 | checksum: 10c0/070ab25cea25988d5a1b7550b1af2959039e1ca82a8a975c59ed553b4d68e775f62ba6fb9893bedddf44201d593792f615b2e840814977263843dfd7da818d08 194 | languageName: node 195 | linkType: hard 196 | 197 | "ansi-regex@npm:^5.0.1": 198 | version: 5.0.1 199 | resolution: "ansi-regex@npm:5.0.1" 200 | checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 201 | languageName: node 202 | linkType: hard 203 | 204 | "ansi-regex@npm:^6.0.1": 205 | version: 6.0.1 206 | resolution: "ansi-regex@npm:6.0.1" 207 | checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 208 | languageName: node 209 | linkType: hard 210 | 211 | "ansi-styles@npm:^4.0.0": 212 | version: 4.3.0 213 | resolution: "ansi-styles@npm:4.3.0" 214 | dependencies: 215 | color-convert: "npm:^2.0.1" 216 | checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 217 | languageName: node 218 | linkType: hard 219 | 220 | "ansi-styles@npm:^6.1.0": 221 | version: 6.2.1 222 | resolution: "ansi-styles@npm:6.2.1" 223 | checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c 224 | languageName: node 225 | linkType: hard 226 | 227 | "balanced-match@npm:^1.0.0": 228 | version: 1.0.2 229 | resolution: "balanced-match@npm:1.0.2" 230 | checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee 231 | languageName: node 232 | linkType: hard 233 | 234 | "brace-expansion@npm:^2.0.1": 235 | version: 2.0.1 236 | resolution: "brace-expansion@npm:2.0.1" 237 | dependencies: 238 | balanced-match: "npm:^1.0.0" 239 | checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f 240 | languageName: node 241 | linkType: hard 242 | 243 | "color-convert@npm:^2.0.1": 244 | version: 2.0.1 245 | resolution: "color-convert@npm:2.0.1" 246 | dependencies: 247 | color-name: "npm:~1.1.4" 248 | checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 249 | languageName: node 250 | linkType: hard 251 | 252 | "color-name@npm:~1.1.4": 253 | version: 1.1.4 254 | resolution: "color-name@npm:1.1.4" 255 | checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 256 | languageName: node 257 | linkType: hard 258 | 259 | "cross-spawn@npm:^7.0.0": 260 | version: 7.0.3 261 | resolution: "cross-spawn@npm:7.0.3" 262 | dependencies: 263 | path-key: "npm:^3.1.0" 264 | shebang-command: "npm:^2.0.0" 265 | which: "npm:^2.0.1" 266 | checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 267 | languageName: node 268 | linkType: hard 269 | 270 | "dat.gui@npm:^0.7.9": 271 | version: 0.7.9 272 | resolution: "dat.gui@npm:0.7.9" 273 | checksum: 10c0/33cc1515bfe083143cee5b9e5a87d93e8a24a851b9e63f5c2afb30b2e7bd953832792e539e90b1d68f31508ad873e0de8b762013122b413471cc9dc019a8d0b9 274 | languageName: node 275 | linkType: hard 276 | 277 | "eastasianwidth@npm:^0.2.0": 278 | version: 0.2.0 279 | resolution: "eastasianwidth@npm:0.2.0" 280 | checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 281 | languageName: node 282 | linkType: hard 283 | 284 | "emoji-regex@npm:^8.0.0": 285 | version: 8.0.0 286 | resolution: "emoji-regex@npm:8.0.0" 287 | checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 288 | languageName: node 289 | linkType: hard 290 | 291 | "emoji-regex@npm:^9.2.2": 292 | version: 9.2.2 293 | resolution: "emoji-regex@npm:9.2.2" 294 | checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 295 | languageName: node 296 | linkType: hard 297 | 298 | "esbuild-copy-static-files@npm:^0.1.0": 299 | version: 0.1.0 300 | resolution: "esbuild-copy-static-files@npm:0.1.0" 301 | checksum: 10c0/c60cebb316fd66d8f5fbf7afee95ac59d02005ee3a0e5f79740b5f18b80911abdfe6e854b3de11fd0abd461af8617dc21f0c6b4f1d1b0860b24f290b7fa9df9c 302 | languageName: node 303 | linkType: hard 304 | 305 | "esbuild@npm:^0.21.3": 306 | version: 0.21.3 307 | resolution: "esbuild@npm:0.21.3" 308 | dependencies: 309 | "@esbuild/aix-ppc64": "npm:0.21.3" 310 | "@esbuild/android-arm": "npm:0.21.3" 311 | "@esbuild/android-arm64": "npm:0.21.3" 312 | "@esbuild/android-x64": "npm:0.21.3" 313 | "@esbuild/darwin-arm64": "npm:0.21.3" 314 | "@esbuild/darwin-x64": "npm:0.21.3" 315 | "@esbuild/freebsd-arm64": "npm:0.21.3" 316 | "@esbuild/freebsd-x64": "npm:0.21.3" 317 | "@esbuild/linux-arm": "npm:0.21.3" 318 | "@esbuild/linux-arm64": "npm:0.21.3" 319 | "@esbuild/linux-ia32": "npm:0.21.3" 320 | "@esbuild/linux-loong64": "npm:0.21.3" 321 | "@esbuild/linux-mips64el": "npm:0.21.3" 322 | "@esbuild/linux-ppc64": "npm:0.21.3" 323 | "@esbuild/linux-riscv64": "npm:0.21.3" 324 | "@esbuild/linux-s390x": "npm:0.21.3" 325 | "@esbuild/linux-x64": "npm:0.21.3" 326 | "@esbuild/netbsd-x64": "npm:0.21.3" 327 | "@esbuild/openbsd-x64": "npm:0.21.3" 328 | "@esbuild/sunos-x64": "npm:0.21.3" 329 | "@esbuild/win32-arm64": "npm:0.21.3" 330 | "@esbuild/win32-ia32": "npm:0.21.3" 331 | "@esbuild/win32-x64": "npm:0.21.3" 332 | dependenciesMeta: 333 | "@esbuild/aix-ppc64": 334 | optional: true 335 | "@esbuild/android-arm": 336 | optional: true 337 | "@esbuild/android-arm64": 338 | optional: true 339 | "@esbuild/android-x64": 340 | optional: true 341 | "@esbuild/darwin-arm64": 342 | optional: true 343 | "@esbuild/darwin-x64": 344 | optional: true 345 | "@esbuild/freebsd-arm64": 346 | optional: true 347 | "@esbuild/freebsd-x64": 348 | optional: true 349 | "@esbuild/linux-arm": 350 | optional: true 351 | "@esbuild/linux-arm64": 352 | optional: true 353 | "@esbuild/linux-ia32": 354 | optional: true 355 | "@esbuild/linux-loong64": 356 | optional: true 357 | "@esbuild/linux-mips64el": 358 | optional: true 359 | "@esbuild/linux-ppc64": 360 | optional: true 361 | "@esbuild/linux-riscv64": 362 | optional: true 363 | "@esbuild/linux-s390x": 364 | optional: true 365 | "@esbuild/linux-x64": 366 | optional: true 367 | "@esbuild/netbsd-x64": 368 | optional: true 369 | "@esbuild/openbsd-x64": 370 | optional: true 371 | "@esbuild/sunos-x64": 372 | optional: true 373 | "@esbuild/win32-arm64": 374 | optional: true 375 | "@esbuild/win32-ia32": 376 | optional: true 377 | "@esbuild/win32-x64": 378 | optional: true 379 | bin: 380 | esbuild: bin/esbuild 381 | checksum: 10c0/5bf85ccd11cc7e7fbbb7ca3458a0fa019ec9b38e1ed9e61f0866b29419e7348231da0aa336e4645c3bda8e757fa20bd3fd8a5f73256308488086a6c7ec9b6ac5 382 | languageName: node 383 | linkType: hard 384 | 385 | "foreground-child@npm:^3.1.0": 386 | version: 3.1.1 387 | resolution: "foreground-child@npm:3.1.1" 388 | dependencies: 389 | cross-spawn: "npm:^7.0.0" 390 | signal-exit: "npm:^4.0.1" 391 | checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 392 | languageName: node 393 | linkType: hard 394 | 395 | "gaussian-splatting-webgpu@workspace:.": 396 | version: 0.0.0-use.local 397 | resolution: "gaussian-splatting-webgpu@workspace:." 398 | dependencies: 399 | "@types/dat.gui": "npm:^0.7.9" 400 | dat.gui: "npm:^0.7.9" 401 | esbuild: "npm:^0.21.3" 402 | esbuild-copy-static-files: "npm:^0.1.0" 403 | rimraf: "npm:^5.0.7" 404 | typescript: "npm:^5.4.5" 405 | wgpu-matrix: "npm:^2.9.0" 406 | languageName: unknown 407 | linkType: soft 408 | 409 | "glob@npm:^10.3.7": 410 | version: 10.3.15 411 | resolution: "glob@npm:10.3.15" 412 | dependencies: 413 | foreground-child: "npm:^3.1.0" 414 | jackspeak: "npm:^2.3.6" 415 | minimatch: "npm:^9.0.1" 416 | minipass: "npm:^7.0.4" 417 | path-scurry: "npm:^1.11.0" 418 | bin: 419 | glob: dist/esm/bin.mjs 420 | checksum: 10c0/cda748ddc181b31b3df9548c0991800406d5cc3b3f8110e37a8751ec1e39f37cdae7d7782d5422d7df92775121cdf00599992dff22f7ff1260344843af227c2b 421 | languageName: node 422 | linkType: hard 423 | 424 | "is-fullwidth-code-point@npm:^3.0.0": 425 | version: 3.0.0 426 | resolution: "is-fullwidth-code-point@npm:3.0.0" 427 | checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc 428 | languageName: node 429 | linkType: hard 430 | 431 | "isexe@npm:^2.0.0": 432 | version: 2.0.0 433 | resolution: "isexe@npm:2.0.0" 434 | checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d 435 | languageName: node 436 | linkType: hard 437 | 438 | "jackspeak@npm:^2.3.6": 439 | version: 2.3.6 440 | resolution: "jackspeak@npm:2.3.6" 441 | dependencies: 442 | "@isaacs/cliui": "npm:^8.0.2" 443 | "@pkgjs/parseargs": "npm:^0.11.0" 444 | dependenciesMeta: 445 | "@pkgjs/parseargs": 446 | optional: true 447 | checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 448 | languageName: node 449 | linkType: hard 450 | 451 | "lru-cache@npm:^10.2.0": 452 | version: 10.2.2 453 | resolution: "lru-cache@npm:10.2.2" 454 | checksum: 10c0/402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6 455 | languageName: node 456 | linkType: hard 457 | 458 | "minimatch@npm:^9.0.1": 459 | version: 9.0.4 460 | resolution: "minimatch@npm:9.0.4" 461 | dependencies: 462 | brace-expansion: "npm:^2.0.1" 463 | checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 464 | languageName: node 465 | linkType: hard 466 | 467 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.4": 468 | version: 7.1.1 469 | resolution: "minipass@npm:7.1.1" 470 | checksum: 10c0/fdccc2f99c31083f45f881fd1e6971d798e333e078ab3c8988fb818c470fbd5e935388ad9adb286397eba50baebf46ef8ff487c8d3f455a69c6f3efc327bdff9 471 | languageName: node 472 | linkType: hard 473 | 474 | "path-key@npm:^3.1.0": 475 | version: 3.1.1 476 | resolution: "path-key@npm:3.1.1" 477 | checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c 478 | languageName: node 479 | linkType: hard 480 | 481 | "path-scurry@npm:^1.11.0": 482 | version: 1.11.1 483 | resolution: "path-scurry@npm:1.11.1" 484 | dependencies: 485 | lru-cache: "npm:^10.2.0" 486 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 487 | checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d 488 | languageName: node 489 | linkType: hard 490 | 491 | "rimraf@npm:^5.0.7": 492 | version: 5.0.7 493 | resolution: "rimraf@npm:5.0.7" 494 | dependencies: 495 | glob: "npm:^10.3.7" 496 | bin: 497 | rimraf: dist/esm/bin.mjs 498 | checksum: 10c0/bd6dbfaa98ae34ce1e54d1e06045d2d63e8859d9a1979bb4a4628b652b459a2d17b17dc20ee072b034bd2d09bd691e801d24c4d9cfe94e16fdbcc8470a1d4807 499 | languageName: node 500 | linkType: hard 501 | 502 | "shebang-command@npm:^2.0.0": 503 | version: 2.0.0 504 | resolution: "shebang-command@npm:2.0.0" 505 | dependencies: 506 | shebang-regex: "npm:^3.0.0" 507 | checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e 508 | languageName: node 509 | linkType: hard 510 | 511 | "shebang-regex@npm:^3.0.0": 512 | version: 3.0.0 513 | resolution: "shebang-regex@npm:3.0.0" 514 | checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 515 | languageName: node 516 | linkType: hard 517 | 518 | "signal-exit@npm:^4.0.1": 519 | version: 4.1.0 520 | resolution: "signal-exit@npm:4.1.0" 521 | checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 522 | languageName: node 523 | linkType: hard 524 | 525 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": 526 | version: 4.2.3 527 | resolution: "string-width@npm:4.2.3" 528 | dependencies: 529 | emoji-regex: "npm:^8.0.0" 530 | is-fullwidth-code-point: "npm:^3.0.0" 531 | strip-ansi: "npm:^6.0.1" 532 | checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b 533 | languageName: node 534 | linkType: hard 535 | 536 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2": 537 | version: 5.1.2 538 | resolution: "string-width@npm:5.1.2" 539 | dependencies: 540 | eastasianwidth: "npm:^0.2.0" 541 | emoji-regex: "npm:^9.2.2" 542 | strip-ansi: "npm:^7.0.1" 543 | checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca 544 | languageName: node 545 | linkType: hard 546 | 547 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": 548 | version: 6.0.1 549 | resolution: "strip-ansi@npm:6.0.1" 550 | dependencies: 551 | ansi-regex: "npm:^5.0.1" 552 | checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 553 | languageName: node 554 | linkType: hard 555 | 556 | "strip-ansi@npm:^7.0.1": 557 | version: 7.1.0 558 | resolution: "strip-ansi@npm:7.1.0" 559 | dependencies: 560 | ansi-regex: "npm:^6.0.1" 561 | checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 562 | languageName: node 563 | linkType: hard 564 | 565 | "typescript@npm:^5.4.5": 566 | version: 5.4.5 567 | resolution: "typescript@npm:5.4.5" 568 | bin: 569 | tsc: bin/tsc 570 | tsserver: bin/tsserver 571 | checksum: 10c0/2954022ada340fd3d6a9e2b8e534f65d57c92d5f3989a263754a78aba549f7e6529acc1921913560a4b816c46dce7df4a4d29f9f11a3dc0d4213bb76d043251e 572 | languageName: node 573 | linkType: hard 574 | 575 | "typescript@patch:typescript@npm%3A^5.4.5#optional!builtin": 576 | version: 5.4.5 577 | resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" 578 | bin: 579 | tsc: bin/tsc 580 | tsserver: bin/tsserver 581 | checksum: 10c0/db2ad2a16ca829f50427eeb1da155e7a45e598eec7b086d8b4e8ba44e5a235f758e606d681c66992230d3fc3b8995865e5fd0b22a2c95486d0b3200f83072ec9 582 | languageName: node 583 | linkType: hard 584 | 585 | "wgpu-matrix@npm:^2.9.0": 586 | version: 2.9.0 587 | resolution: "wgpu-matrix@npm:2.9.0" 588 | checksum: 10c0/c136c2e4d8eb8101a54d2776a73a2de696f44dfdc7ad65d4f1b14c39637c5670faa64d380cc7b3ec23fe1aafbae8b0b153b81f722a8c10f8660e3a94b2c1202b 589 | languageName: node 590 | linkType: hard 591 | 592 | "which@npm:^2.0.1": 593 | version: 2.0.2 594 | resolution: "which@npm:2.0.2" 595 | dependencies: 596 | isexe: "npm:^2.0.0" 597 | bin: 598 | node-which: ./bin/node-which 599 | checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f 600 | languageName: node 601 | linkType: hard 602 | 603 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 604 | version: 7.0.0 605 | resolution: "wrap-ansi@npm:7.0.0" 606 | dependencies: 607 | ansi-styles: "npm:^4.0.0" 608 | string-width: "npm:^4.1.0" 609 | strip-ansi: "npm:^6.0.0" 610 | checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da 611 | languageName: node 612 | linkType: hard 613 | 614 | "wrap-ansi@npm:^8.1.0": 615 | version: 8.1.0 616 | resolution: "wrap-ansi@npm:8.1.0" 617 | dependencies: 618 | ansi-styles: "npm:^6.1.0" 619 | string-width: "npm:^5.0.1" 620 | strip-ansi: "npm:^7.0.1" 621 | checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 622 | languageName: node 623 | linkType: hard 624 | --------------------------------------------------------------------------------