├── .github └── workflows │ ├── main.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── Dockerfile ├── LICENSE ├── NOTICE.md ├── README.md ├── dist ├── NOTICE.md ├── README.md ├── helloworld.html └── package.json ├── docker-compose.yaml ├── generate.sh ├── make-debug.sh ├── make-profile.sh ├── make.sh └── types ├── generate.js ├── generate_types.sh ├── jsconfig.json ├── package-lock.json └── package.json /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: PhysX-JS-WebIDL - Build Library 2 | 3 | on: 4 | push 5 | 6 | jobs: 7 | build: 8 | name: Build PhysX-JS-WebIDL 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout Repository 12 | uses: actions/checkout@v4 13 | with: 14 | lfs: true 15 | submodules: recursive 16 | 17 | - name: Set up Docker Compose 18 | run: | 19 | sudo apt-get update 20 | sudo apt-get install -y docker-compose 21 | 22 | - name: Build Docker Environment 23 | run: sudo docker compose up 24 | 25 | - name: Build PhysX-JS-WebIDL 26 | run: sudo docker compose run --rm builder ./make.sh 27 | 28 | # Upload the build results - Retained for 90 days by default 29 | - name: Upload Build Artifacts 30 | uses: actions/upload-artifact@v4 31 | if: ${{ always() }} 32 | with: 33 | name: Build Products 34 | path: dist 35 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: PhysX-JS-WebIDL - Release Library 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | 8 | jobs: 9 | build: 10 | name: Build PhysX-JS-WebIDL 11 | runs-on: ubuntu-latest 12 | environment: publish 13 | permissions: 14 | contents: write 15 | id-token: write 16 | 17 | steps: 18 | - name: Checkout Repository 19 | uses: actions/checkout@v4 20 | with: 21 | lfs: true 22 | submodules: recursive 23 | 24 | - name: Set up Docker Compose 25 | run: | 26 | sudo apt-get update 27 | sudo apt-get install -y docker-compose 28 | 29 | - name: Build Docker Environment 30 | run: sudo docker compose up 31 | 32 | - name: Build PhysX-JS-WebIDL 33 | run: sudo docker compose run --rm builder ./make.sh 34 | 35 | - name: Create release 36 | uses: ncipollo/release-action@v1 37 | with: 38 | allowUpdates: true 39 | artifacts: "dist/*" 40 | draft: true 41 | updateOnlyUnreleased: true 42 | 43 | - name: Setup node 44 | uses: actions/setup-node@v4 45 | with: 46 | node-version: '20.x' 47 | registry-url: 'https://registry.npmjs.org' 48 | 49 | - name: Publish to npmjs 50 | working-directory: ./dist 51 | run: npm publish --provenance --access public 52 | env: 53 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 54 | 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "PhysX"] 2 | path = PhysX 3 | url = git@github.com:fabmax/PhysX.git 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM emscripten/emsdk:3.1.51 2 | 3 | RUN apt-get update 4 | RUN apt-get install python3 -y 5 | RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash \ 6 | && export NVM_DIR="$HOME/.nvm" \ 7 | && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" \ 8 | && nvm install 20.17.0 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Max Thiele 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 | -------------------------------------------------------------------------------- /NOTICE.md: -------------------------------------------------------------------------------- 1 | # Notices for physx-js-webidl 2 | 3 | * Project home: https://github.com/fabmax/physx-js-webidl 4 | 5 | ## Declared Project Licenses 6 | 7 | This program and the accompanying materials are made available under the terms 8 | of the **MIT License** which is available at https://opensource.org/licenses/MIT 9 | 10 | ## Third-party Content 11 | 12 | This software includes a binary distribution of [NVIDIA PhysX 5.6.0](https://github.com/NVIDIAGameWorks/PhysX). 13 | 14 | NVIDIA PhysX comes under the following license: 15 | 16 | ``` 17 | Copyright (c) 2021 NVIDIA Corporation. All rights reserved. 18 | 19 | Redistribution and use in source and binary forms, with or without 20 | modification, are permitted provided that the following conditions 21 | are met: 22 | * Redistributions of source code must retain the above copyright 23 | notice, this list of conditions and the following disclaimer. 24 | * Redistributions in binary form must reproduce the above copyright 25 | notice, this list of conditions and the following disclaimer in the 26 | documentation and/or other materials provided with the distribution. 27 | * Neither the name of NVIDIA CORPORATION nor the names of its 28 | contributors may be used to endorse or promote products derived 29 | from this software without specific prior written permission. 30 | 31 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY 32 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 33 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 34 | PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 35 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 36 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 37 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 38 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 39 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 40 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 41 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # physx-js-webidl 2 | Javascript/WASM bindings for Nvidia PhysX 5.6.0. 3 | 4 | Looking for pre-built binaries / build instructions? See [below](#pre-built-binaries) 5 | 6 | ## Library coverage 7 | 8 | The bindings include most major parts of the PhysX SDK (excluding CUDA stuff, which is not possible with WASM): 9 | - [x] Basics 10 | - Static and dynamic actors 11 | - All geometry types (box, capsule, sphere, plane, convex mesh, triangle mesh and height field) 12 | - [x] All joint types (revolute, spherical, prismatic, fixed, distance and D6) 13 | - [x] Articulations 14 | - [x] Vehicles 15 | - [x] Character controllers 16 | - [x] Scene serialization 17 | 18 | ## Getting started 19 | There is a basic [hello world example](dist/helloworld.html): 10 boxes falling on the ground (drawn as wireframe on a plain canvas). 20 | 21 | ## Documentation 22 | The API is very close to the original PhysX C++ API, so you can simply use the official 23 | [PhysX API documentation](https://nvidia-omniverse.github.io/PhysX/physx/5.6.0/index.html) 24 | 25 | However, in order to make the bindings work with emscripten a few additional wrappers are needed here and there. So it might 26 | make sense to also take a look into the [PhysXWasm.idl](https://github.com/fabmax/PhysX/blob/webidl-bindings/physx/source/webidlbindings/src/wasm/PhysXWasm.idl) 27 | interface definiton file. 28 | 29 | Update as of `v2.2.0`: Thanks to Shannon Poole, PhysX enums can now be accessed by their qualified names (e.g. `PhysX.PxIDENTITYEnum.PxIdentity`, 30 | see also the hello world demo mentioned above). 31 | 32 | ## Demos 33 | I use this library in my engine [kool](https://github.com/fabmax/kool) and have a few demos in place: 34 | - [Vehicle](https://fabmax.github.io/kool/kool-js/?demo=phys-vehicle): Basic vehicle demo with a few obstacles. 35 | - [Character](https://fabmax.github.io/kool/kool-js/?demo=phys-terrain): 3rd person character demo on an island. 36 | - [Ragdolls](https://fabmax.github.io/kool/kool-js/?demo=phys-ragdoll): A simple ragdoll demo. 37 | - [Joints](https://fabmax.github.io/kool/kool-js/?demo=phys-joints): A chain running over two gears. 38 | - [Collision](https://fabmax.github.io/kool/kool-js/?demo=physics): The obligatory box (and other shapes) collision physics demo. 39 | 40 | However, the demos are written in kotlin, not javascript. 41 | 42 | ## Pre-built binaries 43 | This library is published as a [npm package](https://www.npmjs.com/package/physx-js-webidl): 44 | ``` 45 | npm i physx-js-webidl 46 | ``` 47 | Alternatively you can grab the pre-built binaries (.wasm + support .js) from the latest [Release](https://github.com/fabmax/physx-js-webidl/releases). 48 | 49 | ## Building 50 | In order to build the library you need a recent version of the [emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html) - I'm 51 | using version `3.1.51`. Alternatively, you can use docker as described below. 52 | After successful build, the binaries (.wasm + support .js) will appear in the `dist` directory. 53 | 54 | ``` 55 | # Clone this repo 56 | git clone https://github.com/fabmax/physx-js-webidl 57 | 58 | # Enter that directory 59 | cd physx-js-webidl 60 | 61 | # Download submodule containing the PhysX code 62 | git submodule update --init 63 | 64 | # Generate build-scripts 65 | ./generate.sh 66 | 67 | # Build 68 | ./make.sh 69 | ``` 70 | 71 | To add bindings to additional PhysX interfaces you only have to edit the 72 | [PhysXJs.idl](https://github.com/fabmax/PhysX/blob/webidl-bindings/physx/source/webidlbindings/src/wasm/PhysXWasm.idl) 73 | file located in `PhysX/physx/source/webidlbindings/src/wasm/` and recompile the library. 74 | 75 | ### Build with Docker 76 | 77 | The docker build also generates typescript definitions. 78 | 79 | ``` 80 | # Build the image 81 | docker compose up 82 | 83 | # Build Release 84 | docker compose run --rm builder ./make.sh 85 | 86 | # Build Profile 87 | docker compose run --rm builder ./make-profile.sh 88 | 89 | # Build Debug 90 | docker compose run --rm builder ./make-debug.sh 91 | ``` 92 | 93 | -------------------------------------------------------------------------------- /dist/NOTICE.md: -------------------------------------------------------------------------------- 1 | # Notices for physx-js-webidl 2 | 3 | * Project home: https://github.com/fabmax/physx-js-webidl 4 | 5 | ## Declared Project Licenses 6 | 7 | This program and the accompanying materials are made available under the terms 8 | of the **MIT License** which is available at https://opensource.org/licenses/MIT 9 | 10 | ## Third-party Content 11 | 12 | This software includes a binary distribution of [NVIDIA PhysX 5.6.0](https://github.com/NVIDIAGameWorks/PhysX). 13 | 14 | NVIDIA PhysX comes under the following license: 15 | 16 | ``` 17 | Copyright (c) 2021 NVIDIA Corporation. All rights reserved. 18 | 19 | Redistribution and use in source and binary forms, with or without 20 | modification, are permitted provided that the following conditions 21 | are met: 22 | * Redistributions of source code must retain the above copyright 23 | notice, this list of conditions and the following disclaimer. 24 | * Redistributions in binary form must reproduce the above copyright 25 | notice, this list of conditions and the following disclaimer in the 26 | documentation and/or other materials provided with the distribution. 27 | * Neither the name of NVIDIA CORPORATION nor the names of its 28 | contributors may be used to endorse or promote products derived 29 | from this software without specific prior written permission. 30 | 31 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY 32 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 33 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 34 | PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 35 | CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 36 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 37 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 38 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 39 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 40 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 41 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42 | ``` -------------------------------------------------------------------------------- /dist/README.md: -------------------------------------------------------------------------------- 1 | # physx-js-webidl 2 | Javascript/WASM bindings for Nvidia PhysX 5.6.0. 3 | 4 | Looking for pre-built binaries / build instructions? See [below](#pre-built-binaries) 5 | 6 | ## Library coverage 7 | 8 | The bindings include most major parts of the PhysX SDK (excluding CUDA stuff, which is not possible with WASM): 9 | - [x] Basics 10 | - Static and dynamic actors 11 | - All geometry types (box, capsule, sphere, plane, convex mesh, triangle mesh and height field) 12 | - [x] All joint types (revolute, spherical, prismatic, fixed, distance and D6) 13 | - [x] Articulations 14 | - [x] Vehicles 15 | - [x] Character controllers 16 | - [x] Scene serialization 17 | 18 | ## Getting started 19 | There is a basic [hello world example](dist/helloworld.html): 10 boxes falling on the ground (drawn as wireframe on a plain canvas). 20 | 21 | ## Documentation 22 | The API is very close to the original PhysX C++ API, so you can simply use the official 23 | [PhysX API documentation](https://nvidia-omniverse.github.io/PhysX/physx/5.6.0/index.html) 24 | 25 | However, in order to make the bindings work with emscripten a few additional wrappers are needed here and there. So it might 26 | make sense to also take a look into the [PhysXWasm.idl](https://github.com/fabmax/PhysX/blob/webidl-bindings/physx/source/webidlbindings/src/wasm/PhysXWasm.idl) 27 | interface definiton file. 28 | 29 | Update as of `v2.2.0`: Thanks to Shannon Poole, PhysX enums can now be accessed by their qualified names (e.g. `PhysX.PxIDENTITYEnum.PxIdentity`, 30 | see also the hello world demo mentioned above). 31 | 32 | ## Demos 33 | I use this library in my engine [kool](https://github.com/fabmax/kool) and have a few demos in place: 34 | - [Vehicle](https://fabmax.github.io/kool/kool-js/?demo=phys-vehicle): Basic vehicle demo with a few obstacles. 35 | - [Character](https://fabmax.github.io/kool/kool-js/?demo=phys-terrain): 3rd person character demo on an island. 36 | - [Ragdolls](https://fabmax.github.io/kool/kool-js/?demo=phys-ragdoll): A simple ragdoll demo. 37 | - [Joints](https://fabmax.github.io/kool/kool-js/?demo=phys-joints): A chain running over two gears. 38 | - [Collision](https://fabmax.github.io/kool/kool-js/?demo=physics): The obligatory box (and other shapes) collision physics demo. 39 | 40 | However, the demos are written in kotlin, not javascript. 41 | 42 | ## Pre-built binaries 43 | This library is published as a [npm package](https://www.npmjs.com/package/physx-js-webidl): 44 | ``` 45 | npm i physx-js-webidl 46 | ``` 47 | Alternatively you can grab the pre-built binaries (.wasm + support .js) from the latest [Release](https://github.com/fabmax/physx-js-webidl/releases). 48 | 49 | ## Building 50 | In order to build the library you need a recent version of the [emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html) - I'm 51 | using version `3.1.51`. Alternatively, you can use docker as described below. 52 | After successful build, the binaries (.wasm + support .js) will appear in the `dist` directory. 53 | 54 | ``` 55 | # Clone this repo 56 | git clone https://github.com/fabmax/physx-js-webidl 57 | 58 | # Enter that directory 59 | cd physx-js-webidl 60 | 61 | # Download submodule containing the PhysX code 62 | git submodule update --init 63 | 64 | # Generate build-scripts 65 | ./generate.sh 66 | 67 | # Build 68 | ./make.sh 69 | ``` 70 | 71 | To add bindings to additional PhysX interfaces you only have to edit the 72 | [PhysXJs.idl](https://github.com/fabmax/PhysX/blob/webidl-bindings/physx/source/webidlbindings/src/wasm/PhysXWasm.idl) 73 | file located in `PhysX/physx/source/webidlbindings/src/wasm/` and recompile the library. 74 | 75 | ### Build with Docker 76 | 77 | The docker build also generates typescript definitions. 78 | 79 | ``` 80 | # Build the image 81 | docker compose up 82 | 83 | # Build Release 84 | docker compose run --rm builder ./make.sh 85 | 86 | # Build Profile 87 | docker compose run --rm builder ./make-profile.sh 88 | 89 | # Build Debug 90 | docker compose run --rm builder ./make-debug.sh 91 | ``` 92 | 93 | -------------------------------------------------------------------------------- /dist/helloworld.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | PhysX Test 4 | 16 | 17 | 18 | 19 | 20 | 21 | 181 | 182 | -------------------------------------------------------------------------------- /dist/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "physx-js-webidl", 3 | "version": "2.6.1", 4 | "description": "Javascript/WASM bindings for Nvidia PhysX 5.6.0", 5 | "author": "fabmax", 6 | "main": "physx-js-webidl.js", 7 | "types": "physx-js-webidl.d.ts", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/fabmax/physx-js-webidl.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/fabmax/physx-js-webidl/issues" 14 | }, 15 | "homepage": "https://github.com/fabmax/physx-js-webidl#readme", 16 | "keywords": [ 17 | "physics", 18 | "emscripten", 19 | "WebIDL", 20 | "webassembly", 21 | "PhysX" 22 | ], 23 | "license": "MIT License" 24 | } 25 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | builder: 3 | build: . 4 | volumes: 5 | - .:/src 6 | - packman:/root/packman-repo 7 | entrypoint: ["bash", "-c"] 8 | command: ./generate.sh 9 | 10 | volumes: 11 | packman: -------------------------------------------------------------------------------- /generate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # make sure packman is up-to-date to avoid failing build: 4 | # https://github.com/NVIDIA-Omniverse/PhysX/discussions/230 5 | # not needed anymore (as of 5.3.1) 6 | #./PhysX/physx/buildtools/packman/packman update -y 7 | 8 | cd ./PhysX/physx 9 | rm -rf compiler/emscripten-* 10 | ./generate_projects.sh emscripten 11 | 12 | if [ -d "/src/types" ]; then 13 | cd /src/types 14 | ./generate_types.sh 15 | fi 16 | -------------------------------------------------------------------------------- /make-debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd PhysX/physx/compiler/emscripten-debug/ 4 | rm sdk_source_bin/physx-js-webidl.* 5 | make -j8 6 | 7 | mkdir -p ../../../../dist-debug/ 8 | cp sdk_source_bin/physx-js-webidl.js ../../../../dist-debug/ 9 | cp sdk_source_bin/physx-js-webidl.wasm ../../../../dist-debug/ 10 | 11 | if [ -d "/src/types" ]; then 12 | cp /src/types/physx-js-webidl.d.ts /src/dist-debug/ 13 | fi -------------------------------------------------------------------------------- /make-profile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd PhysX/physx/compiler/emscripten-profile/ 4 | rm sdk_source_bin/physx-js-webidl.* 5 | make -j8 6 | 7 | mkdir -p ../../../../dist-profile/ 8 | cp sdk_source_bin/physx-js-webidl.js ../../../../dist-profile/ 9 | cp sdk_source_bin/physx-js-webidl.wasm ../../../../dist-profile/ 10 | 11 | if [ -d "/src/types" ]; then 12 | cp /src/types/physx-js-webidl.d.ts /src/dist-profile/ 13 | fi -------------------------------------------------------------------------------- /make.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd PhysX/physx/compiler/emscripten-release/ 4 | rm sdk_source_bin/physx-js-webidl.* 5 | make -j8 6 | 7 | cp sdk_source_bin/physx-js-webidl.js ../../../../dist/ 8 | cp sdk_source_bin/physx-js-webidl.wasm ../../../../dist/ 9 | 10 | if [ -d "/src/types" ]; then 11 | cp /src/types/physx-js-webidl.d.ts /src/dist/ 12 | fi 13 | -------------------------------------------------------------------------------- /types/generate.js: -------------------------------------------------------------------------------- 1 | import { readFile, writeFile } from 'fs/promises' 2 | import { resolve } from 'path' 3 | import ts from 'typescript' 4 | 5 | let source_content = await readFile(resolve(process.cwd(), 'input.d.ts'), 'utf-8') 6 | let source_file = ts.createSourceFile('input.d.ts', source_content, ts.ScriptTarget.ESNext, true) 7 | let output = 'declare function PhysX(target?: WebAssembly.Module | BufferSource): Promise' 8 | 9 | /** 10 | * @param {ts.Node} node 11 | */ 12 | let add_node = (node, indent = 0) => { 13 | output += `\n${' '.repeat(indent)}` + source_content.substring(node.pos, node.end) 14 | } 15 | 16 | /** 17 | * @param {ts.ClassDeclaration} node 18 | */ 19 | let add_class = (node, indent = 0) => { 20 | let value = source_content.substring(node.pos, node.end) 21 | 22 | if (node.name?.text == 'NativeArrayHelpers') { 23 | value = value.replaceAll('static ', '') 24 | } 25 | 26 | output += `\n${' '.repeat(indent)}` + value 27 | } 28 | 29 | /** 30 | * Prefixes enum values with e. 31 | * @param {ts.EnumDeclaration} node 32 | */ 33 | let add_enum = (node, indent = 0) => { 34 | output += `\n${' '.repeat(indent)}enum ` + node.name.getText() + ' {' // source_content.substring(node.pos, node.end) 35 | 36 | node.forEachChild((node) => { 37 | if (ts.isEnumMember(node)) { 38 | let value = node.getText() 39 | 40 | if (value.indexOf('::') != -1) { 41 | value = '\'' + value.split('::')[1] 42 | } 43 | else { 44 | value = '\'e' + value.slice(1) 45 | } 46 | 47 | output += `\n${' '.repeat(indent)} ${value},` 48 | } 49 | }) 50 | 51 | output += `\n${' '.repeat(indent)}}` 52 | } 53 | 54 | /** 55 | * @param {ts.ModuleDeclaration} module 56 | */ 57 | function add_module(module) { 58 | if (!module.body) { 59 | return 60 | } 61 | 62 | output += '\ndeclare namespace ' + module.name.getText() + ' {' 63 | 64 | module.body.forEachChild((node) => { 65 | if (ts.isClassDeclaration(node)) { 66 | add_class(node, 4) 67 | } 68 | else if (ts.isEnumDeclaration(node)) { 69 | add_enum(node, 4); 70 | } 71 | else { 72 | add_node(node, 4) 73 | } 74 | }) 75 | 76 | output += '\n}' 77 | } 78 | 79 | source_file.forEachChild((node) => { 80 | if (ts.isFunctionDeclaration(node)) { 81 | return 82 | } 83 | 84 | if (ts.isClassDeclaration(node)) { 85 | add_class(node, 4) 86 | } 87 | else if (ts.isEnumDeclaration(node)) { 88 | add_enum(node) 89 | } else if (ts.isModuleDeclaration(node)) { 90 | add_module(node); 91 | } 92 | else { 93 | add_node(node) 94 | } 95 | }) 96 | 97 | await writeFile(resolve(process.cwd(), './physx-js-webidl.d.ts'), output, 'utf-8') 98 | -------------------------------------------------------------------------------- /types/generate_types.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash +x 2 | 3 | echo Installing NPM packages ... 4 | npm i 5 | echo Generating Typescript types ... 6 | ./node_modules/.bin/webidl2ts -d -e -n PhysX -i ../PhysX/physx/source/webidlbindings/src/wasm/PhysXWasm.idl -o input.d.ts 7 | echo Fixing Typescript types ... 8 | node generate.js 9 | -------------------------------------------------------------------------------- /types/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "lib": [ "esnext" ], 5 | "module": "esnext", 6 | "moduleResolution": "bundler", 7 | "strict": true, 8 | "checkJs": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /types/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "physx-js-webidl", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "physx-js-webidl", 8 | "devDependencies": { 9 | "@milkshakeio/webidl2ts": "^1.0.8", 10 | "@types/node": "^22.7.4", 11 | "typescript": "^5.6.2" 12 | } 13 | }, 14 | "node_modules/@milkshakeio/webidl2ts": { 15 | "version": "1.0.8", 16 | "resolved": "https://registry.npmjs.org/@milkshakeio/webidl2ts/-/webidl2ts-1.0.8.tgz", 17 | "integrity": "sha512-oaOOun0uUOxU194V7nzMnOnnwmyPo42T9S5x0FkfPei46ZTEZELVyv0Tb8f66TO9jhIMDmeoMcD1xCDvv/2JGQ==", 18 | "dev": true, 19 | "license": "MIT", 20 | "dependencies": { 21 | "jsdom": "19.0.0", 22 | "typescript": "4.0.5", 23 | "webidl2": "24.1.1", 24 | "yargs": "16.1.0" 25 | }, 26 | "bin": { 27 | "webidl2ts": "dist/cli.js" 28 | } 29 | }, 30 | "node_modules/@milkshakeio/webidl2ts/node_modules/typescript": { 31 | "version": "4.0.5", 32 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", 33 | "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", 34 | "dev": true, 35 | "license": "Apache-2.0", 36 | "bin": { 37 | "tsc": "bin/tsc", 38 | "tsserver": "bin/tsserver" 39 | }, 40 | "engines": { 41 | "node": ">=4.2.0" 42 | } 43 | }, 44 | "node_modules/@tootallnate/once": { 45 | "version": "2.0.0", 46 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", 47 | "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", 48 | "dev": true, 49 | "license": "MIT", 50 | "engines": { 51 | "node": ">= 10" 52 | } 53 | }, 54 | "node_modules/@types/node": { 55 | "version": "22.7.4", 56 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", 57 | "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", 58 | "dev": true, 59 | "license": "MIT", 60 | "dependencies": { 61 | "undici-types": "~6.19.2" 62 | } 63 | }, 64 | "node_modules/abab": { 65 | "version": "2.0.6", 66 | "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", 67 | "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", 68 | "deprecated": "Use your platform's native atob() and btoa() methods instead", 69 | "dev": true, 70 | "license": "BSD-3-Clause" 71 | }, 72 | "node_modules/acorn": { 73 | "version": "8.12.1", 74 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 75 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 76 | "dev": true, 77 | "license": "MIT", 78 | "bin": { 79 | "acorn": "bin/acorn" 80 | }, 81 | "engines": { 82 | "node": ">=0.4.0" 83 | } 84 | }, 85 | "node_modules/acorn-globals": { 86 | "version": "6.0.0", 87 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", 88 | "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", 89 | "dev": true, 90 | "license": "MIT", 91 | "dependencies": { 92 | "acorn": "^7.1.1", 93 | "acorn-walk": "^7.1.1" 94 | } 95 | }, 96 | "node_modules/acorn-globals/node_modules/acorn": { 97 | "version": "7.4.1", 98 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 99 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 100 | "dev": true, 101 | "license": "MIT", 102 | "bin": { 103 | "acorn": "bin/acorn" 104 | }, 105 | "engines": { 106 | "node": ">=0.4.0" 107 | } 108 | }, 109 | "node_modules/acorn-walk": { 110 | "version": "7.2.0", 111 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 112 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 113 | "dev": true, 114 | "license": "MIT", 115 | "engines": { 116 | "node": ">=0.4.0" 117 | } 118 | }, 119 | "node_modules/agent-base": { 120 | "version": "6.0.2", 121 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 122 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 123 | "dev": true, 124 | "license": "MIT", 125 | "dependencies": { 126 | "debug": "4" 127 | }, 128 | "engines": { 129 | "node": ">= 6.0.0" 130 | } 131 | }, 132 | "node_modules/ansi-regex": { 133 | "version": "5.0.1", 134 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 135 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 136 | "dev": true, 137 | "license": "MIT", 138 | "engines": { 139 | "node": ">=8" 140 | } 141 | }, 142 | "node_modules/ansi-styles": { 143 | "version": "4.3.0", 144 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 145 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 146 | "dev": true, 147 | "license": "MIT", 148 | "dependencies": { 149 | "color-convert": "^2.0.1" 150 | }, 151 | "engines": { 152 | "node": ">=8" 153 | }, 154 | "funding": { 155 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 156 | } 157 | }, 158 | "node_modules/asynckit": { 159 | "version": "0.4.0", 160 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 161 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 162 | "dev": true, 163 | "license": "MIT" 164 | }, 165 | "node_modules/browser-process-hrtime": { 166 | "version": "1.0.0", 167 | "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", 168 | "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", 169 | "dev": true, 170 | "license": "BSD-2-Clause" 171 | }, 172 | "node_modules/cliui": { 173 | "version": "7.0.4", 174 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 175 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 176 | "dev": true, 177 | "license": "ISC", 178 | "dependencies": { 179 | "string-width": "^4.2.0", 180 | "strip-ansi": "^6.0.0", 181 | "wrap-ansi": "^7.0.0" 182 | } 183 | }, 184 | "node_modules/color-convert": { 185 | "version": "2.0.1", 186 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 187 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 188 | "dev": true, 189 | "license": "MIT", 190 | "dependencies": { 191 | "color-name": "~1.1.4" 192 | }, 193 | "engines": { 194 | "node": ">=7.0.0" 195 | } 196 | }, 197 | "node_modules/color-name": { 198 | "version": "1.1.4", 199 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 200 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 201 | "dev": true, 202 | "license": "MIT" 203 | }, 204 | "node_modules/combined-stream": { 205 | "version": "1.0.8", 206 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 207 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 208 | "dev": true, 209 | "license": "MIT", 210 | "dependencies": { 211 | "delayed-stream": "~1.0.0" 212 | }, 213 | "engines": { 214 | "node": ">= 0.8" 215 | } 216 | }, 217 | "node_modules/cssom": { 218 | "version": "0.5.0", 219 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", 220 | "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", 221 | "dev": true, 222 | "license": "MIT" 223 | }, 224 | "node_modules/cssstyle": { 225 | "version": "2.3.0", 226 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", 227 | "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", 228 | "dev": true, 229 | "license": "MIT", 230 | "dependencies": { 231 | "cssom": "~0.3.6" 232 | }, 233 | "engines": { 234 | "node": ">=8" 235 | } 236 | }, 237 | "node_modules/cssstyle/node_modules/cssom": { 238 | "version": "0.3.8", 239 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", 240 | "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", 241 | "dev": true, 242 | "license": "MIT" 243 | }, 244 | "node_modules/data-urls": { 245 | "version": "3.0.2", 246 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", 247 | "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", 248 | "dev": true, 249 | "license": "MIT", 250 | "dependencies": { 251 | "abab": "^2.0.6", 252 | "whatwg-mimetype": "^3.0.0", 253 | "whatwg-url": "^11.0.0" 254 | }, 255 | "engines": { 256 | "node": ">=12" 257 | } 258 | }, 259 | "node_modules/data-urls/node_modules/whatwg-url": { 260 | "version": "11.0.0", 261 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 262 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 263 | "dev": true, 264 | "license": "MIT", 265 | "dependencies": { 266 | "tr46": "^3.0.0", 267 | "webidl-conversions": "^7.0.0" 268 | }, 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/debug": { 274 | "version": "4.3.7", 275 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 276 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 277 | "dev": true, 278 | "license": "MIT", 279 | "dependencies": { 280 | "ms": "^2.1.3" 281 | }, 282 | "engines": { 283 | "node": ">=6.0" 284 | }, 285 | "peerDependenciesMeta": { 286 | "supports-color": { 287 | "optional": true 288 | } 289 | } 290 | }, 291 | "node_modules/decimal.js": { 292 | "version": "10.4.3", 293 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 294 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", 295 | "dev": true, 296 | "license": "MIT" 297 | }, 298 | "node_modules/delayed-stream": { 299 | "version": "1.0.0", 300 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 301 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 302 | "dev": true, 303 | "license": "MIT", 304 | "engines": { 305 | "node": ">=0.4.0" 306 | } 307 | }, 308 | "node_modules/domexception": { 309 | "version": "4.0.0", 310 | "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", 311 | "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", 312 | "deprecated": "Use your platform's native DOMException instead", 313 | "dev": true, 314 | "license": "MIT", 315 | "dependencies": { 316 | "webidl-conversions": "^7.0.0" 317 | }, 318 | "engines": { 319 | "node": ">=12" 320 | } 321 | }, 322 | "node_modules/emoji-regex": { 323 | "version": "8.0.0", 324 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 325 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 326 | "dev": true, 327 | "license": "MIT" 328 | }, 329 | "node_modules/escalade": { 330 | "version": "3.2.0", 331 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 332 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 333 | "dev": true, 334 | "license": "MIT", 335 | "engines": { 336 | "node": ">=6" 337 | } 338 | }, 339 | "node_modules/escodegen": { 340 | "version": "2.1.0", 341 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", 342 | "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", 343 | "dev": true, 344 | "license": "BSD-2-Clause", 345 | "dependencies": { 346 | "esprima": "^4.0.1", 347 | "estraverse": "^5.2.0", 348 | "esutils": "^2.0.2" 349 | }, 350 | "bin": { 351 | "escodegen": "bin/escodegen.js", 352 | "esgenerate": "bin/esgenerate.js" 353 | }, 354 | "engines": { 355 | "node": ">=6.0" 356 | }, 357 | "optionalDependencies": { 358 | "source-map": "~0.6.1" 359 | } 360 | }, 361 | "node_modules/esprima": { 362 | "version": "4.0.1", 363 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 364 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 365 | "dev": true, 366 | "license": "BSD-2-Clause", 367 | "bin": { 368 | "esparse": "bin/esparse.js", 369 | "esvalidate": "bin/esvalidate.js" 370 | }, 371 | "engines": { 372 | "node": ">=4" 373 | } 374 | }, 375 | "node_modules/estraverse": { 376 | "version": "5.3.0", 377 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 378 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 379 | "dev": true, 380 | "license": "BSD-2-Clause", 381 | "engines": { 382 | "node": ">=4.0" 383 | } 384 | }, 385 | "node_modules/esutils": { 386 | "version": "2.0.3", 387 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 388 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 389 | "dev": true, 390 | "license": "BSD-2-Clause", 391 | "engines": { 392 | "node": ">=0.10.0" 393 | } 394 | }, 395 | "node_modules/form-data": { 396 | "version": "4.0.0", 397 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 398 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 399 | "dev": true, 400 | "license": "MIT", 401 | "dependencies": { 402 | "asynckit": "^0.4.0", 403 | "combined-stream": "^1.0.8", 404 | "mime-types": "^2.1.12" 405 | }, 406 | "engines": { 407 | "node": ">= 6" 408 | } 409 | }, 410 | "node_modules/get-caller-file": { 411 | "version": "2.0.5", 412 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 413 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 414 | "dev": true, 415 | "license": "ISC", 416 | "engines": { 417 | "node": "6.* || 8.* || >= 10.*" 418 | } 419 | }, 420 | "node_modules/html-encoding-sniffer": { 421 | "version": "3.0.0", 422 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", 423 | "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", 424 | "dev": true, 425 | "license": "MIT", 426 | "dependencies": { 427 | "whatwg-encoding": "^2.0.0" 428 | }, 429 | "engines": { 430 | "node": ">=12" 431 | } 432 | }, 433 | "node_modules/http-proxy-agent": { 434 | "version": "5.0.0", 435 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", 436 | "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", 437 | "dev": true, 438 | "license": "MIT", 439 | "dependencies": { 440 | "@tootallnate/once": "2", 441 | "agent-base": "6", 442 | "debug": "4" 443 | }, 444 | "engines": { 445 | "node": ">= 6" 446 | } 447 | }, 448 | "node_modules/https-proxy-agent": { 449 | "version": "5.0.1", 450 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 451 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 452 | "dev": true, 453 | "license": "MIT", 454 | "dependencies": { 455 | "agent-base": "6", 456 | "debug": "4" 457 | }, 458 | "engines": { 459 | "node": ">= 6" 460 | } 461 | }, 462 | "node_modules/iconv-lite": { 463 | "version": "0.6.3", 464 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 465 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 466 | "dev": true, 467 | "license": "MIT", 468 | "dependencies": { 469 | "safer-buffer": ">= 2.1.2 < 3.0.0" 470 | }, 471 | "engines": { 472 | "node": ">=0.10.0" 473 | } 474 | }, 475 | "node_modules/is-fullwidth-code-point": { 476 | "version": "3.0.0", 477 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 478 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 479 | "dev": true, 480 | "license": "MIT", 481 | "engines": { 482 | "node": ">=8" 483 | } 484 | }, 485 | "node_modules/is-potential-custom-element-name": { 486 | "version": "1.0.1", 487 | "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", 488 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", 489 | "dev": true, 490 | "license": "MIT" 491 | }, 492 | "node_modules/jsdom": { 493 | "version": "19.0.0", 494 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", 495 | "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", 496 | "dev": true, 497 | "license": "MIT", 498 | "dependencies": { 499 | "abab": "^2.0.5", 500 | "acorn": "^8.5.0", 501 | "acorn-globals": "^6.0.0", 502 | "cssom": "^0.5.0", 503 | "cssstyle": "^2.3.0", 504 | "data-urls": "^3.0.1", 505 | "decimal.js": "^10.3.1", 506 | "domexception": "^4.0.0", 507 | "escodegen": "^2.0.0", 508 | "form-data": "^4.0.0", 509 | "html-encoding-sniffer": "^3.0.0", 510 | "http-proxy-agent": "^5.0.0", 511 | "https-proxy-agent": "^5.0.0", 512 | "is-potential-custom-element-name": "^1.0.1", 513 | "nwsapi": "^2.2.0", 514 | "parse5": "6.0.1", 515 | "saxes": "^5.0.1", 516 | "symbol-tree": "^3.2.4", 517 | "tough-cookie": "^4.0.0", 518 | "w3c-hr-time": "^1.0.2", 519 | "w3c-xmlserializer": "^3.0.0", 520 | "webidl-conversions": "^7.0.0", 521 | "whatwg-encoding": "^2.0.0", 522 | "whatwg-mimetype": "^3.0.0", 523 | "whatwg-url": "^10.0.0", 524 | "ws": "^8.2.3", 525 | "xml-name-validator": "^4.0.0" 526 | }, 527 | "engines": { 528 | "node": ">=12" 529 | }, 530 | "peerDependencies": { 531 | "canvas": "^2.5.0" 532 | }, 533 | "peerDependenciesMeta": { 534 | "canvas": { 535 | "optional": true 536 | } 537 | } 538 | }, 539 | "node_modules/mime-db": { 540 | "version": "1.52.0", 541 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 542 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 543 | "dev": true, 544 | "license": "MIT", 545 | "engines": { 546 | "node": ">= 0.6" 547 | } 548 | }, 549 | "node_modules/mime-types": { 550 | "version": "2.1.35", 551 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 552 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 553 | "dev": true, 554 | "license": "MIT", 555 | "dependencies": { 556 | "mime-db": "1.52.0" 557 | }, 558 | "engines": { 559 | "node": ">= 0.6" 560 | } 561 | }, 562 | "node_modules/ms": { 563 | "version": "2.1.3", 564 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 565 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 566 | "dev": true, 567 | "license": "MIT" 568 | }, 569 | "node_modules/nwsapi": { 570 | "version": "2.2.13", 571 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", 572 | "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", 573 | "dev": true, 574 | "license": "MIT" 575 | }, 576 | "node_modules/parse5": { 577 | "version": "6.0.1", 578 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 579 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", 580 | "dev": true, 581 | "license": "MIT" 582 | }, 583 | "node_modules/psl": { 584 | "version": "1.9.0", 585 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 586 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", 587 | "dev": true, 588 | "license": "MIT" 589 | }, 590 | "node_modules/punycode": { 591 | "version": "2.3.1", 592 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 593 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 594 | "dev": true, 595 | "license": "MIT", 596 | "engines": { 597 | "node": ">=6" 598 | } 599 | }, 600 | "node_modules/querystringify": { 601 | "version": "2.2.0", 602 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 603 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", 604 | "dev": true, 605 | "license": "MIT" 606 | }, 607 | "node_modules/require-directory": { 608 | "version": "2.1.1", 609 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 610 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 611 | "dev": true, 612 | "license": "MIT", 613 | "engines": { 614 | "node": ">=0.10.0" 615 | } 616 | }, 617 | "node_modules/requires-port": { 618 | "version": "1.0.0", 619 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 620 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", 621 | "dev": true, 622 | "license": "MIT" 623 | }, 624 | "node_modules/safer-buffer": { 625 | "version": "2.1.2", 626 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 627 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 628 | "dev": true, 629 | "license": "MIT" 630 | }, 631 | "node_modules/saxes": { 632 | "version": "5.0.1", 633 | "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", 634 | "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", 635 | "dev": true, 636 | "license": "ISC", 637 | "dependencies": { 638 | "xmlchars": "^2.2.0" 639 | }, 640 | "engines": { 641 | "node": ">=10" 642 | } 643 | }, 644 | "node_modules/source-map": { 645 | "version": "0.6.1", 646 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 647 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 648 | "dev": true, 649 | "license": "BSD-3-Clause", 650 | "optional": true, 651 | "engines": { 652 | "node": ">=0.10.0" 653 | } 654 | }, 655 | "node_modules/string-width": { 656 | "version": "4.2.3", 657 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 658 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 659 | "dev": true, 660 | "license": "MIT", 661 | "dependencies": { 662 | "emoji-regex": "^8.0.0", 663 | "is-fullwidth-code-point": "^3.0.0", 664 | "strip-ansi": "^6.0.1" 665 | }, 666 | "engines": { 667 | "node": ">=8" 668 | } 669 | }, 670 | "node_modules/strip-ansi": { 671 | "version": "6.0.1", 672 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 673 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 674 | "dev": true, 675 | "license": "MIT", 676 | "dependencies": { 677 | "ansi-regex": "^5.0.1" 678 | }, 679 | "engines": { 680 | "node": ">=8" 681 | } 682 | }, 683 | "node_modules/symbol-tree": { 684 | "version": "3.2.4", 685 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", 686 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", 687 | "dev": true, 688 | "license": "MIT" 689 | }, 690 | "node_modules/tough-cookie": { 691 | "version": "4.1.4", 692 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", 693 | "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", 694 | "dev": true, 695 | "license": "BSD-3-Clause", 696 | "dependencies": { 697 | "psl": "^1.1.33", 698 | "punycode": "^2.1.1", 699 | "universalify": "^0.2.0", 700 | "url-parse": "^1.5.3" 701 | }, 702 | "engines": { 703 | "node": ">=6" 704 | } 705 | }, 706 | "node_modules/tr46": { 707 | "version": "3.0.0", 708 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 709 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 710 | "dev": true, 711 | "license": "MIT", 712 | "dependencies": { 713 | "punycode": "^2.1.1" 714 | }, 715 | "engines": { 716 | "node": ">=12" 717 | } 718 | }, 719 | "node_modules/typescript": { 720 | "version": "5.6.2", 721 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", 722 | "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", 723 | "dev": true, 724 | "license": "Apache-2.0", 725 | "bin": { 726 | "tsc": "bin/tsc", 727 | "tsserver": "bin/tsserver" 728 | }, 729 | "engines": { 730 | "node": ">=14.17" 731 | } 732 | }, 733 | "node_modules/undici-types": { 734 | "version": "6.19.8", 735 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 736 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 737 | "dev": true, 738 | "license": "MIT" 739 | }, 740 | "node_modules/universalify": { 741 | "version": "0.2.0", 742 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 743 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 744 | "dev": true, 745 | "license": "MIT", 746 | "engines": { 747 | "node": ">= 4.0.0" 748 | } 749 | }, 750 | "node_modules/url-parse": { 751 | "version": "1.5.10", 752 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 753 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 754 | "dev": true, 755 | "license": "MIT", 756 | "dependencies": { 757 | "querystringify": "^2.1.1", 758 | "requires-port": "^1.0.0" 759 | } 760 | }, 761 | "node_modules/w3c-hr-time": { 762 | "version": "1.0.2", 763 | "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", 764 | "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", 765 | "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", 766 | "dev": true, 767 | "license": "MIT", 768 | "dependencies": { 769 | "browser-process-hrtime": "^1.0.0" 770 | } 771 | }, 772 | "node_modules/w3c-xmlserializer": { 773 | "version": "3.0.0", 774 | "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", 775 | "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", 776 | "dev": true, 777 | "license": "MIT", 778 | "dependencies": { 779 | "xml-name-validator": "^4.0.0" 780 | }, 781 | "engines": { 782 | "node": ">=12" 783 | } 784 | }, 785 | "node_modules/webidl-conversions": { 786 | "version": "7.0.0", 787 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 788 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 789 | "dev": true, 790 | "license": "BSD-2-Clause", 791 | "engines": { 792 | "node": ">=12" 793 | } 794 | }, 795 | "node_modules/webidl2": { 796 | "version": "24.1.1", 797 | "resolved": "https://registry.npmjs.org/webidl2/-/webidl2-24.1.1.tgz", 798 | "integrity": "sha512-LzzG6K6gplBsIU/gQ1HOQ6++aX0lMQSB5bOHwFS8GIxdXuFDHN0siqTBQO0tZNkWakIsDGpkX+9pVyKNeYaibQ==", 799 | "dev": true, 800 | "license": "W3C" 801 | }, 802 | "node_modules/whatwg-encoding": { 803 | "version": "2.0.0", 804 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", 805 | "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", 806 | "dev": true, 807 | "license": "MIT", 808 | "dependencies": { 809 | "iconv-lite": "0.6.3" 810 | }, 811 | "engines": { 812 | "node": ">=12" 813 | } 814 | }, 815 | "node_modules/whatwg-mimetype": { 816 | "version": "3.0.0", 817 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", 818 | "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", 819 | "dev": true, 820 | "license": "MIT", 821 | "engines": { 822 | "node": ">=12" 823 | } 824 | }, 825 | "node_modules/whatwg-url": { 826 | "version": "10.0.0", 827 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", 828 | "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", 829 | "dev": true, 830 | "license": "MIT", 831 | "dependencies": { 832 | "tr46": "^3.0.0", 833 | "webidl-conversions": "^7.0.0" 834 | }, 835 | "engines": { 836 | "node": ">=12" 837 | } 838 | }, 839 | "node_modules/wrap-ansi": { 840 | "version": "7.0.0", 841 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 842 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 843 | "dev": true, 844 | "license": "MIT", 845 | "dependencies": { 846 | "ansi-styles": "^4.0.0", 847 | "string-width": "^4.1.0", 848 | "strip-ansi": "^6.0.0" 849 | }, 850 | "engines": { 851 | "node": ">=10" 852 | }, 853 | "funding": { 854 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 855 | } 856 | }, 857 | "node_modules/ws": { 858 | "version": "8.18.0", 859 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 860 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 861 | "dev": true, 862 | "license": "MIT", 863 | "engines": { 864 | "node": ">=10.0.0" 865 | }, 866 | "peerDependencies": { 867 | "bufferutil": "^4.0.1", 868 | "utf-8-validate": ">=5.0.2" 869 | }, 870 | "peerDependenciesMeta": { 871 | "bufferutil": { 872 | "optional": true 873 | }, 874 | "utf-8-validate": { 875 | "optional": true 876 | } 877 | } 878 | }, 879 | "node_modules/xml-name-validator": { 880 | "version": "4.0.0", 881 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", 882 | "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", 883 | "dev": true, 884 | "license": "Apache-2.0", 885 | "engines": { 886 | "node": ">=12" 887 | } 888 | }, 889 | "node_modules/xmlchars": { 890 | "version": "2.2.0", 891 | "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", 892 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", 893 | "dev": true, 894 | "license": "MIT" 895 | }, 896 | "node_modules/y18n": { 897 | "version": "5.0.8", 898 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 899 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 900 | "dev": true, 901 | "license": "ISC", 902 | "engines": { 903 | "node": ">=10" 904 | } 905 | }, 906 | "node_modules/yargs": { 907 | "version": "16.1.0", 908 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", 909 | "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", 910 | "dev": true, 911 | "license": "MIT", 912 | "dependencies": { 913 | "cliui": "^7.0.2", 914 | "escalade": "^3.1.1", 915 | "get-caller-file": "^2.0.5", 916 | "require-directory": "^2.1.1", 917 | "string-width": "^4.2.0", 918 | "y18n": "^5.0.2", 919 | "yargs-parser": "^20.2.2" 920 | }, 921 | "engines": { 922 | "node": ">=10" 923 | } 924 | }, 925 | "node_modules/yargs-parser": { 926 | "version": "20.2.9", 927 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 928 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 929 | "dev": true, 930 | "license": "ISC", 931 | "engines": { 932 | "node": ">=10" 933 | } 934 | } 935 | } 936 | } 937 | -------------------------------------------------------------------------------- /types/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "physx-js-webidl", 3 | "type": "module", 4 | "devDependencies": { 5 | "@milkshakeio/webidl2ts": "^1.0.8", 6 | "@types/node": "^22.7.4", 7 | "typescript": "^5.6.2" 8 | } 9 | } 10 | --------------------------------------------------------------------------------