diff --git a/fission/.eslintrc.cjs b/fission/.eslintrc.cjs
new file mode 100644
index 0000000000..d30ae5ead3
--- /dev/null
+++ b/fission/.eslintrc.cjs
@@ -0,0 +1,27 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parser: '@typescript-eslint/parser',
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ '@typescript-eslint/no-unused-vars': [
+ 'warn', // or "error"
+ {
+ 'argsIgnorePattern': '^_',
+ 'varsIgnorePattern': '^_',
+ 'caughtErrorsIgnorePattern': '^_'
+ }
+ ]
+ },
+
+}
diff --git a/fission/.gitignore b/fission/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/fission/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/fission/README.md b/fission/README.md
new file mode 100644
index 0000000000..1f5486ae17
--- /dev/null
+++ b/fission/README.md
@@ -0,0 +1,30 @@
+# Fission: Synthesis' web-based robot simulator
+
+## Gettings Started
+### Requirements
+1. NPM (v10.2.4 recommended)
+2. NodeJS (v20.10.0 recommended)
+3. TypeScript (v4.8.4 recommended) *Unknown if this is actually required*
+
+### Building
+To build, install all dependencies:
+```bash
+npm i
+```
+#### Development Server
+To run the development server, run the following package script:
+```bash
+npm run dev
+```
+
+#### Production Preview
+To preview the production build, run the following package script:
+```bash
+npm run preview
+```
+
+#### Testing
+To run unit tests, run the following package script:
+```bash
+npm run test
+```
\ No newline at end of file
diff --git a/fission/index.html b/fission/index.html
new file mode 100644
index 0000000000..e4b78eae12
--- /dev/null
+++ b/fission/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite + React + TS
+
+
+
+
+
+
diff --git a/fission/package-lock.json b/fission/package-lock.json
new file mode 100644
index 0000000000..2e0a8c7c23
--- /dev/null
+++ b/fission/package-lock.json
@@ -0,0 +1,5469 @@
+{
+ "name": "vite-proj",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "vite-proj",
+ "version": "0.0.0",
+ "dependencies": {
+ "@barclah/jolt-physics": "^0.16.2",
+ "@react-three/drei": "^9.96.5",
+ "@react-three/fiber": "^8.15.15",
+ "@types/node": "^20.10.6",
+ "@types/react": "^18.2.47",
+ "@types/react-dom": "^18.2.18",
+ "@types/three": "^0.160.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "three": "^0.159.0"
+ },
+ "devDependencies": {
+ "@emotion/react": "^11.11.3",
+ "@emotion/styled": "^11.11.0",
+ "@mui/material": "^5.15.6",
+ "@types/react": "^18.2.56",
+ "@types/react-dom": "^18.2.19",
+ "@typescript-eslint/eslint-plugin": "^7.0.2",
+ "@typescript-eslint/parser": "^7.0.2",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "eslint": "^8.56.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.5",
+ "protobufjs": "^7.2.6",
+ "protobufjs-cli": "^1.1.2",
+ "typescript": "^5.2.2",
+ "vite": "^5.1.4",
+ "vitest": "^1.3.1"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz",
+ "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
+ "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.24.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
+ "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@barclah/jolt-physics": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@barclah/jolt-physics/-/jolt-physics-0.16.2.tgz",
+ "integrity": "sha512-HgSKDE2LadVNT1ZKZK6KbNmy5CFWLNvhnZHbYif8tpBfoN+JLpnUyZRaiR/0x1O0eV+upxWww+vnaos2gDB+cg=="
+ },
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
+ "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/serialize": "^1.1.2",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
+ "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/sheet": "^1.2.2",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
+ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==",
+ "dev": true
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
+ "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==",
+ "dev": true
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.11.4",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz",
+ "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/cache": "^11.11.0",
+ "@emotion/serialize": "^1.1.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1",
+ "@emotion/weak-memoize": "^0.3.1",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz",
+ "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/hash": "^0.9.1",
+ "@emotion/memoize": "^0.8.1",
+ "@emotion/unitless": "^0.8.1",
+ "@emotion/utils": "^1.2.1",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
+ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==",
+ "dev": true
+ },
+ "node_modules/@emotion/styled": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz",
+ "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.11.0",
+ "@emotion/is-prop-valid": "^1.2.1",
+ "@emotion/serialize": "^1.1.2",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
+ "@emotion/utils": "^1.2.1"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0-rc.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+ "dev": true
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
+ "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "dev": true,
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
+ "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==",
+ "dev": true
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
+ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==",
+ "dev": true
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz",
+ "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.1"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz",
+ "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/core": "^1.0.0",
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
+ "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/dom": "^1.6.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
+ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==",
+ "dev": true
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
+ "dev": true
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jsdoc/salty": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz",
+ "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.21"
+ },
+ "engines": {
+ "node": ">=v12.0.0"
+ }
+ },
+ "node_modules/@mediapipe/tasks-vision": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.8.tgz",
+ "integrity": "sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q=="
+ },
+ "node_modules/@mui/base": {
+ "version": "5.0.0-beta.37",
+ "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.37.tgz",
+ "integrity": "sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@floating-ui/react-dom": "^2.0.8",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.11",
+ "@popperjs/core": "^2.11.8",
+ "clsx": "^2.1.0",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz",
+ "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "node_modules/@mui/material": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.11.tgz",
+ "integrity": "sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@mui/base": "5.0.0-beta.37",
+ "@mui/core-downloads-tracker": "^5.15.11",
+ "@mui/system": "^5.15.11",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.11",
+ "@types/react-transition-group": "^4.4.10",
+ "clsx": "^2.1.0",
+ "csstype": "^3.1.3",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/private-theming": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz",
+ "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@mui/utils": "^5.15.11",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/styled-engine": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz",
+ "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@emotion/cache": "^11.11.0",
+ "csstype": "^3.1.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.4.1",
+ "@emotion/styled": "^11.3.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/system": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.11.tgz",
+ "integrity": "sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@mui/private-theming": "^5.15.11",
+ "@mui/styled-engine": "^5.15.11",
+ "@mui/types": "^7.2.13",
+ "@mui/utils": "^5.15.11",
+ "clsx": "^2.1.0",
+ "csstype": "^3.1.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/types": {
+ "version": "7.2.13",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz",
+ "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils": {
+ "version": "5.15.11",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz",
+ "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.23.9",
+ "@types/prop-types": "^15.7.11",
+ "prop-types": "^15.8.1",
+ "react-is": "^18.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0",
+ "react": "^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+ "dev": true,
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
+ "dev": true
+ },
+ "node_modules/@react-spring/animated": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.6.1.tgz",
+ "integrity": "sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==",
+ "dependencies": {
+ "@react-spring/shared": "~9.6.1",
+ "@react-spring/types": "~9.6.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/core": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.6.1.tgz",
+ "integrity": "sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==",
+ "dependencies": {
+ "@react-spring/animated": "~9.6.1",
+ "@react-spring/rafz": "~9.6.1",
+ "@react-spring/shared": "~9.6.1",
+ "@react-spring/types": "~9.6.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-spring/donate"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/rafz": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.6.1.tgz",
+ "integrity": "sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ=="
+ },
+ "node_modules/@react-spring/shared": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.6.1.tgz",
+ "integrity": "sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==",
+ "dependencies": {
+ "@react-spring/rafz": "~9.6.1",
+ "@react-spring/types": "~9.6.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/three": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.6.1.tgz",
+ "integrity": "sha512-Tyw2YhZPKJAX3t2FcqvpLRb71CyTe1GvT3V+i+xJzfALgpk10uPGdGaQQ5Xrzmok1340DAeg2pR/MCfaW7b8AA==",
+ "dependencies": {
+ "@react-spring/animated": "~9.6.1",
+ "@react-spring/core": "~9.6.1",
+ "@react-spring/shared": "~9.6.1",
+ "@react-spring/types": "~9.6.1"
+ },
+ "peerDependencies": {
+ "@react-three/fiber": ">=6.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "three": ">=0.126"
+ }
+ },
+ "node_modules/@react-spring/types": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.6.1.tgz",
+ "integrity": "sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q=="
+ },
+ "node_modules/@react-three/drei": {
+ "version": "9.99.6",
+ "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-9.99.6.tgz",
+ "integrity": "sha512-K5EyoHf+NF6YW4HGA0VN00VkmCV/3uspKXxvs6W1zZDAz2TqQEfiV8+Gc7FHgMjvsoU5QbrmPg36+CJ2gLrc7Q==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@mediapipe/tasks-vision": "0.10.8",
+ "@react-spring/three": "~9.6.1",
+ "@use-gesture/react": "^10.2.24",
+ "camera-controls": "^2.4.2",
+ "cross-env": "^7.0.3",
+ "detect-gpu": "^5.0.28",
+ "glsl-noise": "^0.0.0",
+ "maath": "^0.10.7",
+ "meshline": "^3.1.6",
+ "react-composer": "^5.0.3",
+ "stats-gl": "^2.0.0",
+ "stats.js": "^0.17.0",
+ "suspend-react": "^0.1.3",
+ "three-mesh-bvh": "^0.7.0",
+ "three-stdlib": "^2.29.4",
+ "troika-three-text": "^0.49.0",
+ "tunnel-rat": "^0.1.2",
+ "utility-types": "^3.10.0",
+ "uuid": "^9.0.1",
+ "zustand": "^3.7.1"
+ },
+ "peerDependencies": {
+ "@react-three/fiber": ">=8.0",
+ "react": ">=18.0",
+ "react-dom": ">=18.0",
+ "three": ">=0.137"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@react-three/fiber": {
+ "version": "8.15.19",
+ "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.15.19.tgz",
+ "integrity": "sha512-WbFU7T6485v8Onnp+JJnrzKFvvGP7OFyJmHlqXiXc2RcXl9Sax+ykJxiNwEXWjGjcgF9/KTfv0+pAVkP0vZlKg==",
+ "dependencies": {
+ "@babel/runtime": "^7.17.8",
+ "@types/react-reconciler": "^0.26.7",
+ "@types/webxr": "*",
+ "base64-js": "^1.5.1",
+ "buffer": "^6.0.3",
+ "its-fine": "^1.0.6",
+ "react-reconciler": "^0.27.0",
+ "react-use-measure": "^2.1.1",
+ "scheduler": "^0.21.0",
+ "suspend-react": "^0.1.3",
+ "zustand": "^3.7.1"
+ },
+ "peerDependencies": {
+ "expo": ">=43.0",
+ "expo-asset": ">=8.4",
+ "expo-file-system": ">=11.0",
+ "expo-gl": ">=11.0",
+ "react": ">=18.0",
+ "react-dom": ">=18.0",
+ "react-native": ">=0.64",
+ "three": ">=0.133"
+ },
+ "peerDependenciesMeta": {
+ "expo": {
+ "optional": true
+ },
+ "expo-asset": {
+ "optional": true
+ },
+ "expo-file-system": {
+ "optional": true
+ },
+ "expo-gl": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@react-three/fiber/node_modules/scheduler": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
+ "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz",
+ "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz",
+ "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz",
+ "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz",
+ "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz",
+ "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz",
+ "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz",
+ "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz",
+ "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz",
+ "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz",
+ "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz",
+ "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz",
+ "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz",
+ "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "node_modules/@swc/core": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz",
+ "integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.2",
+ "@swc/types": "^0.1.5"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.4.2",
+ "@swc/core-darwin-x64": "1.4.2",
+ "@swc/core-linux-arm-gnueabihf": "1.4.2",
+ "@swc/core-linux-arm64-gnu": "1.4.2",
+ "@swc/core-linux-arm64-musl": "1.4.2",
+ "@swc/core-linux-x64-gnu": "1.4.2",
+ "@swc/core-linux-x64-musl": "1.4.2",
+ "@swc/core-win32-arm64-msvc": "1.4.2",
+ "@swc/core-win32-ia32-msvc": "1.4.2",
+ "@swc/core-win32-x64-msvc": "1.4.2"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.2.tgz",
+ "integrity": "sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.2.tgz",
+ "integrity": "sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.2.tgz",
+ "integrity": "sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.2.tgz",
+ "integrity": "sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.2.tgz",
+ "integrity": "sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz",
+ "integrity": "sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz",
+ "integrity": "sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.2.tgz",
+ "integrity": "sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.2.tgz",
+ "integrity": "sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.2.tgz",
+ "integrity": "sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
+ },
+ "node_modules/@types/draco3d": {
+ "version": "1.4.9",
+ "resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.9.tgz",
+ "integrity": "sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA=="
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
+ "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
+ "dev": true
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "12.2.3",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
+ "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/linkify-it": "*",
+ "@types/mdurl": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
+ "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/offscreencanvas": {
+ "version": "2019.7.3",
+ "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz",
+ "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A=="
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "dev": true
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
+ },
+ "node_modules/@types/react": {
+ "version": "18.2.61",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.61.tgz",
+ "integrity": "sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.2.19",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz",
+ "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-reconciler": {
+ "version": "0.26.7",
+ "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz",
+ "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.10",
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz",
+ "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
+ "node_modules/@types/stats.js": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz",
+ "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ=="
+ },
+ "node_modules/@types/three": {
+ "version": "0.160.0",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.160.0.tgz",
+ "integrity": "sha512-jWlbUBovicUKaOYxzgkLlhkiEQJkhCVvg4W2IYD2trqD2om3VK4DGLpHH5zQHNr7RweZK/5re/4IVhbhvxbV9w==",
+ "dependencies": {
+ "@types/stats.js": "*",
+ "@types/webxr": "*",
+ "fflate": "~0.6.10",
+ "meshoptimizer": "~0.18.1"
+ }
+ },
+ "node_modules/@types/webxr": {
+ "version": "0.5.14",
+ "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.14.tgz",
+ "integrity": "sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA=="
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz",
+ "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "7.1.1",
+ "@typescript-eslint/type-utils": "7.1.1",
+ "@typescript-eslint/utils": "7.1.1",
+ "@typescript-eslint/visitor-keys": "7.1.1",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^7.0.0",
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz",
+ "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "7.1.1",
+ "@typescript-eslint/types": "7.1.1",
+ "@typescript-eslint/typescript-estree": "7.1.1",
+ "@typescript-eslint/visitor-keys": "7.1.1",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz",
+ "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.1.1",
+ "@typescript-eslint/visitor-keys": "7.1.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz",
+ "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "7.1.1",
+ "@typescript-eslint/utils": "7.1.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz",
+ "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz",
+ "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.1.1",
+ "@typescript-eslint/visitor-keys": "7.1.1",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz",
+ "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "7.1.1",
+ "@typescript-eslint/types": "7.1.1",
+ "@typescript-eslint/typescript-estree": "7.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz",
+ "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "7.1.1",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
+ "node_modules/@use-gesture/core": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.0.tgz",
+ "integrity": "sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A=="
+ },
+ "node_modules/@use-gesture/react": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@use-gesture/react/-/react-10.3.0.tgz",
+ "integrity": "sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA==",
+ "dependencies": {
+ "@use-gesture/core": "10.3.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0"
+ }
+ },
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz",
+ "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==",
+ "dev": true,
+ "dependencies": {
+ "@swc/core": "^1.3.107"
+ },
+ "peerDependencies": {
+ "vite": "^4 || ^5"
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz",
+ "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/spy": "1.3.1",
+ "@vitest/utils": "1.3.1",
+ "chai": "^4.3.10"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz",
+ "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/utils": "1.3.1",
+ "p-limit": "^5.0.0",
+ "pathe": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner/node_modules/p-limit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
+ "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vitest/runner/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz",
+ "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.30.5",
+ "pathe": "^1.1.1",
+ "pretty-format": "^29.7.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz",
+ "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==",
+ "dev": true,
+ "dependencies": {
+ "tinyspy": "^2.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz",
+ "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==",
+ "dev": true,
+ "dependencies": {
+ "diff-sequences": "^29.6.3",
+ "estree-walker": "^3.0.3",
+ "loupe": "^2.3.7",
+ "pretty-format": "^29.7.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.11.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/bidi-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
+ "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==",
+ "dependencies": {
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camera-controls": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.8.3.tgz",
+ "integrity": "sha512-zFjqUR6onLkG+z1A6vAWfzovxZxWVSvp6e5t3lfZgfgPZtX3n74aykNAUaoRbq8Y3tOxadHkDjbfGDOP9hFf2w==",
+ "peerDependencies": {
+ "three": ">=0.126.1"
+ }
+ },
+ "node_modules/catharsis": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
+ "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.15"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/chai": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
+ "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.3",
+ "deep-eql": "^4.1.3",
+ "get-func-name": "^2.0.2",
+ "loupe": "^2.3.6",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
+ "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
+ "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
+ "node_modules/debounce": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
+ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
+ "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/detect-gpu": {
+ "version": "5.0.38",
+ "resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.38.tgz",
+ "integrity": "sha512-36QeGHSXYcJ/RfrnPEScR8GDprbXFG4ZhXsfVNVHztZr38+fRxgHnJl3CjYXXjbeRUhu3ZZBJh6Lg0A9v0Qd8A==",
+ "dependencies": {
+ "webgl-constants": "^1.1.1"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/draco3d": {
+ "version": "1.5.7",
+ "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz",
+ "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="
+ },
+ "node_modules/entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.19.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.19.12",
+ "@esbuild/android-arm": "0.19.12",
+ "@esbuild/android-arm64": "0.19.12",
+ "@esbuild/android-x64": "0.19.12",
+ "@esbuild/darwin-arm64": "0.19.12",
+ "@esbuild/darwin-x64": "0.19.12",
+ "@esbuild/freebsd-arm64": "0.19.12",
+ "@esbuild/freebsd-x64": "0.19.12",
+ "@esbuild/linux-arm": "0.19.12",
+ "@esbuild/linux-arm64": "0.19.12",
+ "@esbuild/linux-ia32": "0.19.12",
+ "@esbuild/linux-loong64": "0.19.12",
+ "@esbuild/linux-mips64el": "0.19.12",
+ "@esbuild/linux-ppc64": "0.19.12",
+ "@esbuild/linux-riscv64": "0.19.12",
+ "@esbuild/linux-s390x": "0.19.12",
+ "@esbuild/linux-x64": "0.19.12",
+ "@esbuild/netbsd-x64": "0.19.12",
+ "@esbuild/openbsd-x64": "0.19.12",
+ "@esbuild/sunos-x64": "0.19.12",
+ "@esbuild/win32-arm64": "0.19.12",
+ "@esbuild/win32-ia32": "0.19.12",
+ "@esbuild/win32-x64": "0.19.12"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
+ "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/escodegen/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/escodegen/node_modules/type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.5.tgz",
+ "integrity": "sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==",
+ "dev": true,
+ "peerDependencies": {
+ "eslint": ">=7"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fflate": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz",
+ "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg=="
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glsl-noise": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz",
+ "integrity": "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w=="
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
+ "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/hoist-non-react-statics/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/ignore": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/its-fine": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.1.1.tgz",
+ "integrity": "sha512-v1Ia1xl20KbuSGlwoaGsW0oxsw8Be+TrXweidxD9oT/1lAh6O3K3/GIM95Tt6WCiv6W+h2M7RB1TwdoAjQyyKw==",
+ "dependencies": {
+ "@types/react-reconciler": "^0.28.0"
+ },
+ "peerDependencies": {
+ "react": ">=18.0"
+ }
+ },
+ "node_modules/its-fine/node_modules/@types/react-reconciler": {
+ "version": "0.28.8",
+ "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
+ "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/js2xmlparser": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
+ "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
+ "dev": true,
+ "dependencies": {
+ "xmlcreate": "^2.0.4"
+ }
+ },
+ "node_modules/jsdoc": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz",
+ "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@jsdoc/salty": "^0.2.1",
+ "@types/markdown-it": "^12.2.3",
+ "bluebird": "^3.7.2",
+ "catharsis": "^0.9.0",
+ "escape-string-regexp": "^2.0.0",
+ "js2xmlparser": "^4.0.2",
+ "klaw": "^3.0.0",
+ "markdown-it": "^12.3.2",
+ "markdown-it-anchor": "^8.4.1",
+ "marked": "^4.0.10",
+ "mkdirp": "^1.0.4",
+ "requizzle": "^0.2.3",
+ "strip-json-comments": "^3.1.0",
+ "underscore": "~1.13.2"
+ },
+ "bin": {
+ "jsdoc": "jsdoc.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/jsdoc/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
+ "dev": true
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/klaw": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
+ "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/linkify-it": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "dev": true,
+ "dependencies": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "node_modules/local-pkg": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
+ "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+ "dev": true,
+ "dependencies": {
+ "mlly": "^1.4.2",
+ "pkg-types": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
+ "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.1"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/maath": {
+ "version": "0.10.7",
+ "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.7.tgz",
+ "integrity": "sha512-zQ2xd7dNOIVTjAS+hj22fyj1EFYmOJX6tzKjZ92r6WDoq8hyFxjuGA2q950tmR4iC/EKXoMQdSipkaJVuUHDTg==",
+ "peerDependencies": {
+ "@types/three": ">=0.144.0",
+ "three": ">=0.144.0"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.8",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
+ "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "~2.1.0",
+ "linkify-it": "^3.0.1",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.js"
+ }
+ },
+ "node_modules/markdown-it-anchor": {
+ "version": "8.6.7",
+ "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
+ "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
+ "dev": true,
+ "peerDependencies": {
+ "@types/markdown-it": "*",
+ "markdown-it": "*"
+ }
+ },
+ "node_modules/marked": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "dev": true
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/meshline": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/meshline/-/meshline-3.2.0.tgz",
+ "integrity": "sha512-ZaJkC967GTuef7UBdO0rGPX544oIWaNo7tYedVHSoR2lje6RR16fX8IsgMxgxoYYERtjqsRWIYBSPBxG4QR84Q==",
+ "peerDependencies": {
+ "three": ">=0.137"
+ }
+ },
+ "node_modules/meshoptimizer": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
+ "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw=="
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz",
+ "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.3",
+ "pathe": "^1.1.2",
+ "pkg-types": "^1.0.3",
+ "ufo": "^1.3.2"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkg-types": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
+ "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
+ "dev": true,
+ "dependencies": {
+ "jsonc-parser": "^3.2.0",
+ "mlly": "^1.2.0",
+ "pathe": "^1.1.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
+ "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/potpack": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz",
+ "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ=="
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/protobufjs": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
+ "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/node": ">=13.7.0",
+ "long": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/protobufjs-cli": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.2.tgz",
+ "integrity": "sha512-8ivXWxT39gZN4mm4ArQyJrRgnIwZqffBWoLDsE21TmMcKI3XwJMV4lEF2WU02C4JAtgYYc2SfJIltelD8to35g==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "escodegen": "^1.13.0",
+ "espree": "^9.0.0",
+ "estraverse": "^5.1.0",
+ "glob": "^8.0.0",
+ "jsdoc": "^4.0.0",
+ "minimist": "^1.2.0",
+ "semver": "^7.1.2",
+ "tmp": "^0.2.1",
+ "uglify-js": "^3.7.7"
+ },
+ "bin": {
+ "pbjs": "bin/pbjs",
+ "pbts": "bin/pbts"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "protobufjs": "^7.0.0"
+ }
+ },
+ "node_modules/protobufjs-cli/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/protobufjs-cli/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-composer": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/react-composer/-/react-composer-5.0.3.tgz",
+ "integrity": "sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==",
+ "dependencies": {
+ "prop-types": "^15.6.0"
+ },
+ "peerDependencies": {
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
+ "dev": true
+ },
+ "node_modules/react-reconciler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz",
+ "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.21.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0"
+ }
+ },
+ "node_modules/react-reconciler/node_modules/scheduler": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
+ "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/react-use-measure": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz",
+ "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==",
+ "dependencies": {
+ "debounce": "^1.2.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.13",
+ "react-dom": ">=16.13"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requizzle": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz",
+ "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz",
+ "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.12.0",
+ "@rollup/rollup-android-arm64": "4.12.0",
+ "@rollup/rollup-darwin-arm64": "4.12.0",
+ "@rollup/rollup-darwin-x64": "4.12.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.12.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.12.0",
+ "@rollup/rollup-linux-arm64-musl": "4.12.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.12.0",
+ "@rollup/rollup-linux-x64-gnu": "4.12.0",
+ "@rollup/rollup-linux-x64-musl": "4.12.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.12.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.12.0",
+ "@rollup/rollup-win32-x64-msvc": "4.12.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true
+ },
+ "node_modules/stats-gl": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stats-gl/-/stats-gl-2.0.1.tgz",
+ "integrity": "sha512-EhFm1AxoSBK3MflkFawZ4jmOX1dWu0nBAtCpvGxGsondEvCpsohbpRpM8pi8UAcxG5eRsDsCiRcxdH20j3Rp9A=="
+ },
+ "node_modules/stats.js": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/stats.js/-/stats.js-0.17.0.tgz",
+ "integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw=="
+ },
+ "node_modules/std-env": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
+ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
+ "dev": true
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-literal": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz",
+ "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==",
+ "dev": true,
+ "dependencies": {
+ "js-tokens": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
+ "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
+ "dev": true
+ },
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "dev": true
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/suspend-react": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz",
+ "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==",
+ "peerDependencies": {
+ "react": ">=17.0"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/three": {
+ "version": "0.159.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.159.0.tgz",
+ "integrity": "sha512-eCmhlLGbBgucuo4VEA9IO3Qpc7dh8Bd4VKzr7WfW4+8hMcIfoAVi1ev0pJYN9PTTsCslbcKgBwr2wNZ1EvLInA=="
+ },
+ "node_modules/three-mesh-bvh": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.3.tgz",
+ "integrity": "sha512-3W6KjzmupjfE89GuHPT31kxKWZ4YGZPEZJNysJpiOZfQRsBQQgmK7v/VJPpjG6syhAvTnY+5Fr77EvIkTLpGSw==",
+ "peerDependencies": {
+ "three": ">= 0.151.0"
+ }
+ },
+ "node_modules/three-stdlib": {
+ "version": "2.29.5",
+ "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.29.5.tgz",
+ "integrity": "sha512-p9IQsH7gT9wVqAuMsimX2JTtEoCGHlwgm3HsAeXwWqP/PWV9DjYldbggLCr0B1TMzofi/58GG1X5KTQnG6ijpw==",
+ "dependencies": {
+ "@types/draco3d": "^1.4.0",
+ "@types/offscreencanvas": "^2019.6.4",
+ "@types/webxr": "^0.5.2",
+ "draco3d": "^1.4.1",
+ "fflate": "^0.6.9",
+ "potpack": "^1.0.1"
+ },
+ "peerDependencies": {
+ "three": ">=0.128.0"
+ }
+ },
+ "node_modules/tinybench": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz",
+ "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==",
+ "dev": true
+ },
+ "node_modules/tinypool": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz",
+ "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz",
+ "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/troika-three-text": {
+ "version": "0.49.0",
+ "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.49.0.tgz",
+ "integrity": "sha512-sn9BNC6eIX8OO3iAkPwjecJ7Pn21Ve8P1UNFMNeQzXx759rrqS4i4pSZs7FLMYdWyCKVXBFGimBySFwRKLjq/Q==",
+ "dependencies": {
+ "bidi-js": "^1.0.2",
+ "troika-three-utils": "^0.49.0",
+ "troika-worker-utils": "^0.49.0",
+ "webgl-sdf-generator": "1.1.1"
+ },
+ "peerDependencies": {
+ "three": ">=0.125.0"
+ }
+ },
+ "node_modules/troika-three-utils": {
+ "version": "0.49.0",
+ "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.49.0.tgz",
+ "integrity": "sha512-umitFL4cT+Fm/uONmaQEq4oZlyRHWwVClaS6ZrdcueRvwc2w+cpNQ47LlJKJswpqtMFWbEhOLy0TekmcPZOdYA==",
+ "peerDependencies": {
+ "three": ">=0.125.0"
+ }
+ },
+ "node_modules/troika-worker-utils": {
+ "version": "0.49.0",
+ "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.49.0.tgz",
+ "integrity": "sha512-1xZHoJrG0HFfCvT/iyN41DvI/nRykiBtHqFkGaGgJwq5iXfIZFBiPPEHFpPpgyKM3Oo5ITHXP5wM2TNQszYdVg=="
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
+ "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/tunnel-rat": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/tunnel-rat/-/tunnel-rat-0.1.2.tgz",
+ "integrity": "sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ==",
+ "dependencies": {
+ "zustand": "^4.3.2"
+ }
+ },
+ "node_modules/tunnel-rat/node_modules/zustand": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz",
+ "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==",
+ "dependencies": {
+ "use-sync-external-store": "1.2.0"
+ },
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16.8",
+ "immer": ">=9.0.6",
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "dev": true
+ },
+ "node_modules/ufo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
+ "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==",
+ "dev": true
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
+ "dev": true
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/utility-types": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz",
+ "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
+ "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.35",
+ "rollup": "^4.2.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-node": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz",
+ "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==",
+ "dev": true,
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.3.4",
+ "pathe": "^1.1.1",
+ "picocolors": "^1.0.0",
+ "vite": "^5.0.0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vitest": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz",
+ "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/expect": "1.3.1",
+ "@vitest/runner": "1.3.1",
+ "@vitest/snapshot": "1.3.1",
+ "@vitest/spy": "1.3.1",
+ "@vitest/utils": "1.3.1",
+ "acorn-walk": "^8.3.2",
+ "chai": "^4.3.10",
+ "debug": "^4.3.4",
+ "execa": "^8.0.1",
+ "local-pkg": "^0.5.0",
+ "magic-string": "^0.30.5",
+ "pathe": "^1.1.1",
+ "picocolors": "^1.0.0",
+ "std-env": "^3.5.0",
+ "strip-literal": "^2.0.0",
+ "tinybench": "^2.5.1",
+ "tinypool": "^0.8.2",
+ "vite": "^5.0.0",
+ "vite-node": "1.3.1",
+ "why-is-node-running": "^2.2.2"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "@vitest/browser": "1.3.1",
+ "@vitest/ui": "1.3.1",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webgl-constants": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz",
+ "integrity": "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg=="
+ },
+ "node_modules/webgl-sdf-generator": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz",
+ "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA=="
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
+ "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
+ "dev": true,
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xmlcreate": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
+ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zustand": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
+ "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
+ "engines": {
+ "node": ">=12.7.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/fission/package.json b/fission/package.json
new file mode 100644
index 0000000000..d7dc8f4d9d
--- /dev/null
+++ b/fission/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "vite-proj",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview",
+ "test": "vitest"
+ },
+ "dependencies": {
+ "@barclah/jolt-physics": "^0.16.2",
+ "@react-three/drei": "^9.96.5",
+ "@react-three/fiber": "^8.15.15",
+ "@types/node": "^20.10.6",
+ "@types/react": "^18.2.47",
+ "@types/react-dom": "^18.2.18",
+ "@types/three": "^0.160.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "three": "^0.159.0"
+ },
+ "devDependencies": {
+ "@emotion/react": "^11.11.3",
+ "@emotion/styled": "^11.11.0",
+ "@mui/material": "^5.15.6",
+ "@types/react": "^18.2.56",
+ "@types/react-dom": "^18.2.19",
+ "@typescript-eslint/eslint-plugin": "^7.0.2",
+ "@typescript-eslint/parser": "^7.0.2",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "eslint": "^8.56.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.5",
+ "protobufjs": "^7.2.6",
+ "protobufjs-cli": "^1.1.2",
+ "typescript": "^5.2.2",
+ "vite": "^5.1.4",
+ "vitest": "^1.3.1"
+ }
+}
diff --git a/fission/public/TestCube_v1.mira b/fission/public/TestCube_v1.mira
new file mode 100644
index 0000000000..f49d72bdeb
Binary files /dev/null and b/fission/public/TestCube_v1.mira differ
diff --git a/fission/public/robots.txt b/fission/public/robots.txt
new file mode 100644
index 0000000000..e9e57dc4d4
--- /dev/null
+++ b/fission/public/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/fission/public/vite.svg b/fission/public/vite.svg
new file mode 100644
index 0000000000..e7b8dfb1b2
--- /dev/null
+++ b/fission/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/fission/src/App.css b/fission/src/App.css
new file mode 100644
index 0000000000..74b5e05345
--- /dev/null
+++ b/fission/src/App.css
@@ -0,0 +1,38 @@
+.App {
+ text-align: center;
+}
+
+.App-logo {
+ height: 40vmin;
+ pointer-events: none;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .App-logo {
+ animation: App-logo-spin infinite 20s linear;
+ }
+}
+
+.App-header {
+ background-color: #282c34;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ font-size: calc(10px + 2vmin);
+ color: white;
+}
+
+.App-link {
+ color: #61dafb;
+}
+
+@keyframes App-logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
diff --git a/fission/src/App.tsx b/fission/src/App.tsx
new file mode 100644
index 0000000000..6065990df7
--- /dev/null
+++ b/fission/src/App.tsx
@@ -0,0 +1,27 @@
+import './App.css';
+// import MyThree from './graphics/ThreeExample.tsx';
+import MyThree from './graphics/JoltExample.tsx'
+import { useEffect, useState } from 'react';
+
+// import { mirabuf as Mirabuf } from './proto/mirabuf.js';
+// import DetailsPanel from './components/Details.tsx';
+
+function App() {
+ const [joltLoaded, setJoltLoaded] = useState(false);
+
+ useEffect(() => { (async () => {
+ setJoltLoaded(true);
+ })()}, []);
+
+ if (joltLoaded) {
+ return (
+ < MyThree />
+ );
+ } else {
+ return (
+ {joltLoaded ? "Jolt has loaded!" : "Jolt is loading..."}
+ )
+ }
+}
+
+export default App;
diff --git a/fission/src/assets/react.svg b/fission/src/assets/react.svg
new file mode 100644
index 0000000000..6c87de9bb3
--- /dev/null
+++ b/fission/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/fission/src/components/Details.css b/fission/src/components/Details.css
new file mode 100644
index 0000000000..2e969b5153
--- /dev/null
+++ b/fission/src/components/Details.css
@@ -0,0 +1,38 @@
+div#info {
+ position: fixed;
+ top: 10pt;
+ right: 10pt;
+ padding: 5pt;
+
+ border: none;
+ border-radius: 5pt;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: right;
+ gap: 2pt;
+
+ font-family: 'Ubuntu', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+p {
+ font-size: large;
+ margin: 0pt;
+ padding: 0pt;
+ color: white;
+
+ text-align: right;
+}
+
+button {
+
+ font-family: 'Ubuntu', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ border: none;
+ border-radius: 5pt;
+ padding: 5pt;
+}
\ No newline at end of file
diff --git a/fission/src/components/Details.tsx b/fission/src/components/Details.tsx
new file mode 100644
index 0000000000..a6d74070db
--- /dev/null
+++ b/fission/src/components/Details.tsx
@@ -0,0 +1,13 @@
+import React from "react";
+import * as THREE_ADDONS from 'three-addons';
+import './Details.css'
+
+export default function DetailsPanel({ballCount, fps, toggleSpawning}) {
+ return (
+
+
Ball Count: {ballCount}
+
{fps.toFixed(1)} FPS
+
+
+ )
+}
\ No newline at end of file
diff --git a/fission/src/graphics/JoltExample.tsx b/fission/src/graphics/JoltExample.tsx
new file mode 100644
index 0000000000..b3da35a477
--- /dev/null
+++ b/fission/src/graphics/JoltExample.tsx
@@ -0,0 +1,372 @@
+/**
+ * This example will be used to showcase how Jolt physics works.
+ */
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+import * as THREE from 'three';
+import Stats from 'stats.js';
+import JOLT from '../util/loading/JoltSyncLoader.ts';
+
+import { useEffect, useRef } from 'react';
+import React from 'react';
+import { Random } from '../util/Random.ts';
+
+const clock = new THREE.Clock();
+let time = 0;
+
+let stats: any;
+
+let renderer: any;
+let camera: any;
+let scene: any;
+
+let joltInterface: any;
+let physicsSystem: any;
+let bodyInterface: any;
+
+const dynamicObjects: any[] = [];
+
+const LAYER_NOT_MOVING = 0;
+const LAYER_MOVING = 1;
+const COUNT_OBJECT_LAYERS = 2;
+
+const wrapVec3 = (v) => new THREE.Vector3(v.GetX(), v.GetY(), v.GetZ());
+const wrapQuat = (q) => new THREE.Quaternion(q.GetX(), q.GetY(), q.GetZ(), q.GetW());
+
+
+// vvv Below are the functions required to initalize everything and draw a basic floor with collisions. vvv
+
+function setupCollisionFiltering(settings) {
+ let objectFilter = new JOLT.ObjectLayerPairFilterTable(COUNT_OBJECT_LAYERS);
+ objectFilter.EnableCollision(LAYER_NOT_MOVING, LAYER_MOVING);
+ objectFilter.EnableCollision(LAYER_MOVING, LAYER_MOVING);
+
+ const BP_LAYER_NOT_MOVING = new JOLT.BroadPhaseLayer(LAYER_NOT_MOVING);
+ const BP_LAYER_MOVING = new JOLT.BroadPhaseLayer(LAYER_MOVING);
+ const COUNT_BROAD_PHASE_LAYERS = 2;
+
+ let bpInterface = new JOLT.BroadPhaseLayerInterfaceTable(COUNT_OBJECT_LAYERS, COUNT_BROAD_PHASE_LAYERS);
+ bpInterface.MapObjectToBroadPhaseLayer(LAYER_NOT_MOVING, BP_LAYER_NOT_MOVING);
+ bpInterface.MapObjectToBroadPhaseLayer(LAYER_MOVING, BP_LAYER_MOVING);
+
+ settings.mObjectLayerPairFilter = objectFilter;
+ settings.mBroadPhaseLayerInterface = bpInterface;
+ settings.mObjectVsBroadPhaseLayerFilter = new JOLT.ObjectVsBroadPhaseLayerFilterTable(settings.mBroadPhaseLayerInterface, COUNT_BROAD_PHASE_LAYERS, settings.mObjectLayerPairFilter, COUNT_OBJECT_LAYERS);
+}
+
+function initPhysics() {
+ let settings = new JOLT.JoltSettings();
+ setupCollisionFiltering(settings);
+ joltInterface = new JOLT.JoltInterface(settings);
+ JOLT.destroy(settings);
+
+ physicsSystem = joltInterface.GetPhysicsSystem();
+ bodyInterface = physicsSystem.GetBodyInterface();
+}
+
+function initGraphics() {
+ renderer = new THREE.WebGLRenderer();
+ renderer.setClearColor(0xbfd1e5);
+ renderer.setPixelRatio(window.devicePixelRatio);
+ renderer.setSize(window.innerWidth, window.innerHeight);
+
+ camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.2, 2000);
+ camera.position.set(-5, 4, 5);
+ camera.lookAt(new THREE.Vector3(0, 0.5, 0));
+
+ scene = new THREE.Scene();
+
+ let directionalLight = new THREE.DirectionalLight(0xffffff, 2);
+ directionalLight.position.set(10, 10, 5);
+ scene.add(directionalLight);
+
+ let ambientLight = new THREE.AmbientLight(0xffffff, 0.1);
+ scene.add(ambientLight);
+
+ // TODO: Add controls.
+
+ // TODO: Add resize event
+}
+
+function createMeshForShape(shape) {
+ let scale = new JOLT.Vec3(1, 1, 1);
+ let triangleContext = new JOLT.ShapeGetTriangles(shape, JOLT.AABox.prototype.sBiggest(), shape.GetCenterOfMass(), JOLT.Quat.prototype.sIdentity(), scale);
+ JOLT.destroy(scale);
+
+ let vertices = new Float32Array(JOLT.HEAP32.buffer, triangleContext.GetVerticesData(), triangleContext.GetVerticesSize() / Float32Array.BYTES_PER_ELEMENT);
+ let buffer = new THREE.BufferAttribute(vertices, 3).clone();
+ JOLT.destroy(triangleContext);
+
+ let geometry = new THREE.BufferGeometry();
+ geometry.setAttribute('position', buffer);
+ geometry.computeVertexNormals();
+
+ return geometry;
+}
+
+function getThreeObjForBody(body, color) {
+ let material = new THREE.MeshPhongMaterial({ color: color });
+ let threeObj;
+ let shape = body.GetShape();
+
+ switch (shape.GetSubType()) {
+ case JOLT.EShapeSubType_Box:
+ let boxShape = JOLT.castObject(shape, JOLT.BoxShape);
+ let extent = wrapVec3(boxShape.GetHalfExtent()).multiplyScalar(2);
+ threeObj = new THREE.Mesh(new THREE.BoxGeometry(extent.x, extent.y, extent.z, 1, 1, 1), material);
+ break;
+ case JOLT.EShapeSubType_Capsule:
+ // TODO
+ case JOLT.EShapeSubType_Cylinder:
+ // TODO
+ case JOLT.EShapeSubType_Sphere:
+ // TODO
+ default:
+ threeObj = new THREE.Mesh(createMeshForShape(shape), material);
+ break;
+ }
+
+ threeObj.position.copy(wrapVec3(body.GetPosition()));
+ threeObj.quaternion.copy(wrapQuat(body.GetRotation()));
+
+ return threeObj;
+}
+
+function addToThreeScene(body, color) {
+ let threeObj = getThreeObjForBody(body, color);
+ threeObj.userData.body = body;
+ scene.add(threeObj);
+ dynamicObjects.push(threeObj);
+}
+
+function addToScene(body, color) {
+ bodyInterface.AddBody(body.GetID(), JOLT.EActivation_Activate);
+ addToThreeScene(body, color);
+}
+
+function removeFromScene(threeObject) {
+ let id = threeObject.userData.body.GetID();
+ bodyInterface.RemoveBody(id);
+ bodyInterface.DestroyBody(id);
+ delete threeObject.userData.body;
+
+ scene.remove(threeObject);
+ let idx = dynamicObjects.indexOf(threeObject);
+ dynamicObjects.splice(idx, 1);
+}
+
+function createFloor(size = 50) {
+ let shape = new JOLT.BoxShape(new JOLT.Vec3(size, 0.5, size), 0.05, undefined);
+ let position = new JOLT.Vec3(0, -0.5, 0);
+ let rotation = new JOLT.Quat(0, 0, 0, 1);
+ let creationSettings = new JOLT.BodyCreationSettings(shape, position, rotation, JOLT.EMotionType_Static, LAYER_NOT_MOVING)
+ let body = bodyInterface.CreateBody(creationSettings);
+ JOLT.destroy(position);
+ JOLT.destroy(rotation);
+ JOLT.destroy(creationSettings);
+ addToScene(body, 0xc7c7c7);
+
+ return body;
+}
+
+function updatePhysics(deltaTime) {
+ // If below 55hz run 2 steps. Otherwise things run very slow.
+ let numSteps = deltaTime > 1.0 / 55.0 ? 2 : 1;
+ joltInterface.Step(deltaTime, numSteps);
+}
+
+function render() {
+ stats.update();
+ requestAnimationFrame(render);
+
+ // Prevents a problem when rendering at 30hz. Referred to as the spiral of death.
+ let deltaTime = clock.getDelta();
+ deltaTime = Math.min(deltaTime, 1.0 / 30.0);
+
+ // Update transforms.
+ for (let i = 0, j = dynamicObjects.length; i < j; i++) {
+ let threeObj = dynamicObjects[i];
+ let body = threeObj.userData.body;
+ threeObj.position.copy(wrapVec3(body.GetPosition()));
+ threeObj.quaternion.copy(wrapQuat(body.GetRotation()));
+
+ if (body.GetBodyType() === JOLT.EBodyType_SoftBody) {
+ // TODO: Special soft body handle.
+ }
+ }
+
+ onTestUpdate(time, deltaTime);
+
+ time += deltaTime;
+ updatePhysics(1.0 / 60.0);
+ // controls.update(deltaTime); // TODO: Add controls?
+ renderer.render(scene, camera);
+}
+
+// vvv The following are test functions used to do various basic things. vvv
+
+const timePerObject = 0.05;
+let timeNextSpawn = time + timePerObject;
+
+// Swap the onTestUpdate function to run the performance test with the random cubes.
+// const onTestUpdate = (time, deltaTime) => spawnRandomCubes(time, deltaTime);
+const onTestUpdate = (time, deltaTime) => {};
+
+function spikeTestScene() {
+ let boxShape = new JOLT.BoxShape(new JOLT.Vec3(0.5, 0.5, 0.5), 0.1, undefined);
+ let boxCreationSettings = new JOLT.BodyCreationSettings(boxShape, new JOLT.Vec3(0, 0.5, 0), JOLT.Quat.prototype.sIdentity(), JOLT.EMotionType_Static, LAYER_NOT_MOVING);
+ boxCreationSettings.mCollisionGroup.SetSubGroupID(0);
+ let squareBodyBase = bodyInterface.CreateBody(boxCreationSettings);
+ addToScene(squareBodyBase, 0x00ff00);
+
+ let shape = new JOLT.BoxShape(new JOLT.Vec3(0.25, 1, 0.25), 0.1, undefined);
+ shape.GetMassProperties().mMass = 1;
+ let creationSettings = new JOLT.BodyCreationSettings(shape, new JOLT.Vec3(-0.25, 2, 0.75), JOLT.Quat.prototype.sIdentity(), JOLT.EMotionType_Dynamic, LAYER_MOVING);
+
+ // RECTANGLE BODY 1 (Red)
+ creationSettings.mCollisionGroup.SetSubGroupID(1);
+ let rectangleBody1 = bodyInterface.CreateBody(creationSettings);
+ addToScene(rectangleBody1, 0xff0000);
+
+ // RECTANGLE BODY 2 (Blue)
+ let shape2 = new JOLT.BoxShape(new JOLT.Vec3(0.25, 1, 0.25), 0.1, undefined);
+ shape2.GetMassProperties().mMass = 1;
+ let creationSettings2 = new JOLT.BodyCreationSettings(shape2, new JOLT.Vec3(-0.75, 4, 0.75), JOLT.Quat.prototype.sIdentity(), JOLT.EMotionType_Dynamic, LAYER_MOVING);
+ let rectangleBody2 = bodyInterface.CreateBody(creationSettings2);
+ addToScene(rectangleBody2, 0x3394e8);
+
+ // RECTANGLE BODY 3 (Yellow)
+ let shape3 = new JOLT.BoxShape(new JOLT.Vec3(0.25, 1, 0.25), 0.1, undefined);
+ shape3.GetMassProperties().mMass = 10000;
+ let creationSettings3 = new JOLT.BodyCreationSettings(shape3, new JOLT.Vec3(0.25, 4, 0.75), JOLT.Quat.prototype.sIdentity(), JOLT.EMotionType_Dynamic, LAYER_MOVING);
+ let rectangleBody3 = bodyInterface.CreateBody(creationSettings3);
+ addToScene(rectangleBody3, 0xffff00);
+
+ // Left here for future reference.
+ // GROUP FITLER
+ // let a = squareBodyBase.GetCollisionGroup();
+ // a.SetGroupID(0);
+ // a.SetSubGroupID(0);
+ // let b = rectangleBody1.GetCollisionGroup();
+ // b.SetGroupID(0);
+ // b.SetSubGroupID(0);
+ // let c = rectangleBody2.GetCollisionGroup();
+ // c.SetGroupID(0);
+ // c.SetSubGroupID(0);
+ // let filterTable = new Jolt.GroupFilterTable(3);
+ // filterTable.DisableCollision(0, 0);
+ // a.SetGroupFilter(filterTable);
+ // b.SetGroupFilter(filterTable);
+ // c.SetGroupFilter(filterTable);
+
+ // HINGE CONSTRAINT
+ let hingeConstraintSettings = new JOLT.HingeConstraintSettings();
+ let anchorPoint = new JOLT.Vec3(creationSettings.mPosition.GetX(), creationSettings.mPosition.GetY() - 1.0, creationSettings.mPosition.GetZ() -0.25);
+ hingeConstraintSettings.mPoint1 = hingeConstraintSettings.mPoint2 = anchorPoint;
+ let axis = new JOLT.Vec3(1, 0, 0)
+ let normAxis = new JOLT.Vec3(0, -1, 0);
+ hingeConstraintSettings.mHingeAxis1 = hingeConstraintSettings.mHingeAxis2 = axis;
+ hingeConstraintSettings.mNormalAxis1 = hingeConstraintSettings.mNormalAxis2 = normAxis;
+ physicsSystem.AddConstraint(hingeConstraintSettings.Create(squareBodyBase, rectangleBody1));
+
+ // HINGE CONSTRAINT 2
+ let hingeConstraintSettings2 = new JOLT.HingeConstraintSettings();
+ let anchorPoint2 = new JOLT.Vec3(creationSettings.mPosition.GetX() - 0.25, creationSettings.mPosition.GetY() + 1.0, creationSettings.mPosition.GetZ());
+ hingeConstraintSettings2.mPoint1 = hingeConstraintSettings2.mPoint2 = anchorPoint2;
+ let axis2 = new JOLT.Vec3(0, 0, 1)
+ let normAxis2 = new JOLT.Vec3(-1, 0, 0);
+ hingeConstraintSettings2.mHingeAxis1 = hingeConstraintSettings2.mHingeAxis2 = axis2;
+ hingeConstraintSettings2.mNormalAxis1 = hingeConstraintSettings2.mNormalAxis2 = normAxis2;
+ physicsSystem.AddConstraint(hingeConstraintSettings2.Create(rectangleBody1, rectangleBody2));
+
+ // HINGE CONSTRAINT 3
+ let hingeConstraintSettings3 = new JOLT.HingeConstraintSettings();
+ let anchorPoint3 = new JOLT.Vec3(creationSettings.mPosition.GetX() + 0.25, creationSettings.mPosition.GetY() + 1.0, creationSettings.mPosition.GetZ());
+ hingeConstraintSettings3.mPoint1 = hingeConstraintSettings3.mPoint2 = anchorPoint3;
+ let axis3 = new JOLT.Vec3(0, 0, 1)
+ let normAxis3 = new JOLT.Vec3(1, 0, 0);
+ hingeConstraintSettings3.mHingeAxis1 = hingeConstraintSettings3.mHingeAxis2 = axis3;
+ hingeConstraintSettings3.mNormalAxis1 = hingeConstraintSettings3.mNormalAxis2 = normAxis3;
+ physicsSystem.AddConstraint(hingeConstraintSettings3.Create(rectangleBody1, rectangleBody3));
+}
+
+function spawnRandomCubes(time, deltaTime) {
+ if (time > timeNextSpawn) {
+ makeRandomBox();
+ timeNextSpawn = time + timePerObject;
+ }
+
+ if (dynamicObjects.length > 500) {
+ removeFromScene(dynamicObjects[2]); // 0 &&|| 1 is the floor, don't want to remove that.
+ }
+}
+
+function getRandomQuat() {
+ let vec = new JOLT.Vec3(0.001 + Random(), Random(), Random());
+ let quat = JOLT.Quat.prototype.sRotation(vec.Normalized(), 2 * Math.PI * Random());
+ JOLT.destroy(vec);
+ return quat;
+}
+
+function makeRandomBox() {
+ let pos = new JOLT.Vec3((Random() - 0.5) * 25, 15, (Random() - 0.5) * 25);
+ let rot = getRandomQuat();
+
+ let x = Random();
+ let y = Random();
+ let z = Random();
+ let size = new JOLT.Vec3(x, y, z);
+ let shape = new JOLT.BoxShape(size, 0.05, undefined);
+ let creationSettings = new JOLT.BodyCreationSettings(shape, pos, rot, JOLT.EMotionType_Dynamic, LAYER_MOVING);
+ creationSettings.mRestitution = 0.5;
+ let body = bodyInterface.CreateBody(creationSettings);
+
+ JOLT.destroy(pos);
+ JOLT.destroy(rot);
+ JOLT.destroy(size);
+
+ // I feel as though this object should be freed at this point but doing so will cause a crash at runtime.
+ // This is the only object where this happens. I'm not sure why. Seems problematic.
+ // Jolt.destroy(shape);
+
+ JOLT.destroy(creationSettings);
+
+ addToScene(body, 0xff0000);
+}
+
+function MyThree() {
+ console.log("Running...");
+
+ const refContainer = useRef(null);
+
+ useEffect(() => {
+ initGraphics();
+
+ if (refContainer.current) {
+ refContainer.current.innerHTML = "";
+ refContainer.current.appendChild(renderer.domElement)
+
+ stats = new Stats();
+ stats.domElement.style.position = 'absolute';
+ stats.domElement.style.top = '0px';
+ refContainer.current.appendChild(stats.domElement);
+ }
+
+ initPhysics();
+ render();
+
+ createFloor();
+
+ // Spawn the y-cube of blocks as specified in the spike document.
+ spikeTestScene();
+ }, []);
+
+ return (
+
+ );
+}
+
+export default MyThree;
diff --git a/fission/src/graphics/ThreeExample.tsx b/fission/src/graphics/ThreeExample.tsx
new file mode 100644
index 0000000000..d77663be5b
--- /dev/null
+++ b/fission/src/graphics/ThreeExample.tsx
@@ -0,0 +1,281 @@
+/**
+ * This Example will be used not for the physics, but the rendering setup for ThreeJS.
+ */
+
+// SOURCE: https://dev.to/omher/how-to-start-using-react-and-threejs-in-a-few-minutes-2h6g
+import * as THREE from "three";
+
+import { useEffect, useRef, useState } from "react";
+// import { wasmWrapper } from '../WasmWrapper.mjs';
+import React from "react";
+import * as AppTest from "../App.tsx";
+import DetailsPanel from "../components/Details.tsx";
+
+var staticCube: THREE.Mesh;
+var mainBar: THREE.Mesh;
+var lightBar: THREE.Mesh;
+var heavyBar: THREE.Mesh;
+
+var scene: THREE.Scene;
+
+var lastBallSpawned: number = Date.now();
+var lastFrameCheck: number = Date.now();
+var numFrames: number = 0;
+
+var balls: Array<[THREE.Mesh, number]> = new Array();
+
+var materials = [
+ new THREE.MeshPhongMaterial({
+ color: 0xe32b50,
+ shininess: 0.5,
+ }),
+ new THREE.MeshPhongMaterial({
+ color: 0x4ccf57,
+ shininess: 0.5,
+ }),
+ new THREE.MeshPhongMaterial({
+ color: 0xcf4cca,
+ shininess: 0.5,
+ }),
+ new THREE.MeshPhongMaterial({
+ color: 0x8c37db,
+ shininess: 0.5,
+ }),
+ new THREE.MeshPhongMaterial({
+ color: 0xbddb37,
+ shininess: 0.5,
+ })
+];
+
+var matIndex = 0;
+
+var physicsInit = false;
+
+var spawnBalls = true;
+
+function createBall(
+ radius: number,
+ position: THREE.Vector3,
+ velocity: THREE.Vector3,
+ restitution: number
+) {
+ matIndex++;
+ var ballGeo = new THREE.SphereGeometry(radius);
+ var mesh = new THREE.Mesh(ballGeo, materials[matIndex % materials.length]);
+ mesh.receiveShadow = true;
+ mesh.castShadow = true;
+ scene.add(mesh);
+ var phys = PhysicsManager.getInstance().makeBall(position, radius);
+ phys.setLinvel(velocity, true);
+ phys.collider(0).setRestitution(restitution);
+ balls.push([mesh, phys.handle]);
+}
+
+function createBox(
+ halfExtents: RAPIER.Vector3,
+ position: RAPIER.Vector3,
+ velocity: RAPIER.Vector3,
+ restitution: number
+) {
+ matIndex++;
+ var ballGeo = new THREE.BoxGeometry(halfExtents.x * 2.0, halfExtents.y * 2.0, halfExtents.z * 2.0);
+ var mesh = new THREE.Mesh(ballGeo, materials[matIndex % materials.length]);
+ mesh.receiveShadow = true;
+ mesh.castShadow = true;
+ scene.add(mesh);
+ var phys = PhysicsManager.getInstance().makeBox(position, halfExtents);
+ phys.setLinvel(velocity, true);
+ phys.collider(0).setRestitution(restitution);
+ balls.push([mesh, phys.handle]);
+}
+
+function makeStaticBox(position: THREE.Vector3, extents: THREE.Vector3) {
+ var groundGeo = new THREE.BoxGeometry(extents.x, extents.y, extents.z);
+ var groundMat = new THREE.MeshPhongMaterial({
+ color: 0xeeeeee,
+ shininess: 0.1,
+ });
+ var ground = new THREE.Mesh(groundGeo, groundMat);
+ ground.receiveShadow = true;
+ ground.position.set(position.x, position.y, position.z);
+
+ scene.add(ground);
+}
+
+function MyThree() {
+
+ const [ballCount, setBallCount] = useState(0);
+ const [fps, setFps] = useState(0.0);
+
+ const refContainer = useRef(null);
+ useEffect(() => {
+
+ console.log('MyThree effect');
+
+ // === THREE.JS CODE START ===
+ scene = new THREE.Scene();
+ var camera = new THREE.PerspectiveCamera(
+ 75,
+ window.innerWidth / window.innerHeight,
+ 0.1,
+ 1000
+ );
+ var renderer = new THREE.WebGLRenderer();
+ renderer.setSize(window.innerWidth, window.innerHeight);
+ renderer.shadowMap.enabled = true;
+ renderer.shadowMap.type = THREE.PCFSoftShadowMap;
+ renderer.setClearColor(0x121212);
+
+ // document.body.appendChild( renderer.domElement );
+ // use ref as a mount point of the Three.js scene instead of the document.body
+ if (refContainer.current) {
+ refContainer.current.innerHTML = "";
+ refContainer.current.appendChild(renderer.domElement);
+ console.log("Added dom element");
+ }
+
+ // var geometry = new THREE.BoxGeometry(1.0, 1.0, 1.0);
+ // var material = new THREE.MeshPhongMaterial({
+ // color: 0xe32b50,
+ // shininess: 0.1,
+ // });
+
+ var [X, Y] = [30.0, 30.0];
+
+ makeStaticBox(new THREE.Vector3(0.0, -0.25, 0.0), new THREE.Vector3(X, 0.5, Y));
+ // makeStaticBox(new THREE.Vector3((-X / 2.0) + 0.25, -1.0, 0.0), new THREE.Vector3(0.5, 2.0, Y));
+ // makeStaticBox(new THREE.Vector3((X / 2.0) - 0.25, -1.0, 0.0), new THREE.Vector3(0.5, 2.0, Y));
+ // makeStaticBox(new THREE.Vector3(0.0, -1.0, (-Y / 2.0) + 0.25), new THREE.Vector3(X, 2.0, 0.5));
+ // makeStaticBox(new THREE.Vector3(0.0, -1.0, (Y / 2.0) - 0.25), new THREE.Vector3(X, 2.0, 0.5));
+
+ var directionalLight = new THREE.DirectionalLight(0xffffff, 3.0);
+ directionalLight.position.set(-1.0, 3.0, 2.0);
+ directionalLight.castShadow = true;
+
+ var ambientLight = new THREE.AmbientLight(0xffffff, 0.2);
+ scene.add(directionalLight, ambientLight);
+
+ camera.position.set(6.0, 5.0, 6.0);
+ camera.rotateY(3.14159 * 0.25);
+ camera.rotateX(-0.5);
+
+ var shadowMapSize = Math.min(1024, renderer.capabilities.maxTextureSize);
+ var shadowCamSize = 15;
+
+ // console.log(`Cam Top: ${directionalLight.shadow.camera.top}`);
+ // console.log(`Cam Bottom: ${directionalLight.shadow.camera.bottom}`);
+ // console.log(`Cam Left: ${directionalLight.shadow.camera.left}`);
+ // console.log(`Cam Right: ${directionalLight.shadow.camera.right}`);
+
+ directionalLight.shadow.camera.top = shadowCamSize;
+ directionalLight.shadow.camera.bottom = -shadowCamSize;
+ directionalLight.shadow.camera.left = -shadowCamSize;
+ directionalLight.shadow.camera.right = shadowCamSize;
+ directionalLight.shadow.mapSize = new THREE.Vector2(shadowMapSize, shadowMapSize);
+ directionalLight.shadow.blurSamples = 16;
+ directionalLight.shadow.normalBias = -0.05;
+
+ // directionalLight.shadow.camera = new THREE.OrthographicCamera()
+
+ // directionalLight.shadow.camera.position.copy(camera.position);
+ // directionalLight.shadow.camera.matrix.copy(camera.matrix);
+
+ var animate = function () {
+ requestAnimationFrame(animate);
+
+ // var pos: THREE.Vector3 = new THREE.Vector3();
+ // var rot: THREE.Quaternion = new THREE.Quaternion();
+ // var scale: THREE.Vector3 = new THREE.Vector3();
+
+ // ObjTransform.decompose(pos, rot, scale);
+
+ // cube.position.set(pos.x, pos.y, pos.z);
+ // cube.rotation.setFromQuaternion(rot);
+
+ renderer.render(scene, camera);
+ };
+ animate();
+ }, []);
+
+ useEffect(() => {
+ var frameReq: number | undefined = undefined;
+
+ async function physicsStuff() {
+ var update = function () {
+
+ var delta = Date.now() - lastFrameCheck;
+ lastFrameCheck = Date.now();
+ setFps(1000.0 / delta);
+
+ frameReq = requestAnimationFrame(update);
+
+ if (spawnBalls && Date.now() - lastBallSpawned > 10) {
+ lastBallSpawned = Date.now();
+
+ var randPos = {
+ x: Math.random() * 8.0 - 4.0,
+ y: 10.0,
+ z: Math.random() * 8.0 - 4.0
+ }
+
+ if (Math.random() > 0.3) {
+ createBall(
+ Math.random() * 0.3 + 0.1,
+ randPos,
+ new RAPIER.Vector3(
+ Math.random() * 0.5 - 0.25,
+ 0.0,
+ Math.random() * 0.5 - 0.25
+ ),
+ Math.random() * 0.3
+ );
+ } else {
+ createBox(
+ { x: 0.25, y: 0.25, z: 0.25 },
+ randPos,
+ { x: 0.0, y: 0.0, z: 0.0 },
+ Math.random() * 0.3
+ );
+ }
+ setBallCount(balls.length);
+
+ if (balls.length % 200 == 0) {
+ spawnBalls = false;
+ }
+ }
+
+ PhysicsManager.getInstance().step(delta / 1000.0);
+
+ for (var i = 0; i < balls.length; i++) {
+ var [mesh, handle] = balls[i];
+ var body = PhysicsManager.getInstance().getBody(handle);
+
+ (body) && Translations.loadMeshWithRigidbody(body, mesh);
+ }
+ };
+
+ frameReq = requestAnimationFrame(update);
+ }
+
+ physicsStuff();
+
+ return () => {
+ if (frameReq) {
+ cancelAnimationFrame(frameReq);
+ console.log("Canceling animation");
+ }
+ // wasmWrapper.coreDestroy();
+ };
+ }, []);
+
+ console.log('MyThree Component');
+
+ return (
+
+
+ < DetailsPanel ballCount={ballCount} fps={fps} toggleSpawning={() => { spawnBalls = !spawnBalls; }} />
+
+ );
+}
+
+export default MyThree;
diff --git a/fission/src/index.css b/fission/src/index.css
new file mode 100644
index 0000000000..6119ad9a8f
--- /dev/null
+++ b/fission/src/index.css
@@ -0,0 +1,68 @@
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+
+ color-scheme: light dark;
+ color: rgba(255, 255, 255, 0.87);
+ background-color: #242424;
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+}
diff --git a/fission/src/jolt/Wrapper.ts b/fission/src/jolt/Wrapper.ts
new file mode 100644
index 0000000000..2c5df00f93
--- /dev/null
+++ b/fission/src/jolt/Wrapper.ts
@@ -0,0 +1,7 @@
+export class Jolt_Shape {
+
+}
+
+export class Jolt_ConvexShape extends Jolt_Shape {
+
+}
\ No newline at end of file
diff --git a/fission/src/main.tsx b/fission/src/main.tsx
new file mode 100644
index 0000000000..3d7150da80
--- /dev/null
+++ b/fission/src/main.tsx
@@ -0,0 +1,10 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import App from './App.tsx'
+import './index.css'
+
+ReactDOM.createRoot(document.getElementById('root')!).render(
+
+
+ ,
+)
diff --git a/fission/src/proto/mirabuf.d.ts b/fission/src/proto/mirabuf.d.ts
new file mode 100644
index 0000000000..a10e89a8f9
--- /dev/null
+++ b/fission/src/proto/mirabuf.d.ts
@@ -0,0 +1,5145 @@
+import * as $protobuf from "protobufjs";
+import Long = require("long");
+/** Namespace mirabuf. */
+export namespace mirabuf {
+
+ /** Properties of an Assembly. */
+ interface IAssembly {
+
+ /** Basic information (name, Author, etc) */
+ info?: (mirabuf.IInfo|null);
+
+ /** All of the data in the assembly */
+ data?: (mirabuf.IAssemblyData|null);
+
+ /** Can it be effected by the simulation dynamically */
+ dynamic?: (boolean|null);
+
+ /** Overall physical data of the assembly */
+ physicalData?: (mirabuf.IPhysicalProperties|null);
+
+ /** The Design hierarchy represented by Part Refs - The first object is a root container for all top level items */
+ designHierarchy?: (mirabuf.IGraphContainer|null);
+
+ /** The Joint hierarchy for compound shapes */
+ jointHierarchy?: (mirabuf.IGraphContainer|null);
+
+ /** The Transform in space currently */
+ transform?: (mirabuf.ITransform|null);
+
+ /** Optional thumbnail saved from Fusion 360 or scraped from previous configuration */
+ thumbnail?: (mirabuf.IThumbnail|null);
+ }
+
+ /**
+ * Assembly
+ * Base Design to be interacted with
+ * THIS IS THE CURRENT FILE EXPORTED
+ */
+ class Assembly implements IAssembly {
+
+ /**
+ * Constructs a new Assembly.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IAssembly);
+
+ /** Basic information (name, Author, etc) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** All of the data in the assembly */
+ public data?: (mirabuf.IAssemblyData|null);
+
+ /** Can it be effected by the simulation dynamically */
+ public dynamic: boolean;
+
+ /** Overall physical data of the assembly */
+ public physicalData?: (mirabuf.IPhysicalProperties|null);
+
+ /** The Design hierarchy represented by Part Refs - The first object is a root container for all top level items */
+ public designHierarchy?: (mirabuf.IGraphContainer|null);
+
+ /** The Joint hierarchy for compound shapes */
+ public jointHierarchy?: (mirabuf.IGraphContainer|null);
+
+ /** The Transform in space currently */
+ public transform?: (mirabuf.ITransform|null);
+
+ /** Optional thumbnail saved from Fusion 360 or scraped from previous configuration */
+ public thumbnail?: (mirabuf.IThumbnail|null);
+
+ /**
+ * Creates a new Assembly instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Assembly instance
+ */
+ public static create(properties?: mirabuf.IAssembly): mirabuf.Assembly;
+
+ /**
+ * Encodes the specified Assembly message. Does not implicitly {@link mirabuf.Assembly.verify|verify} messages.
+ * @param message Assembly message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IAssembly, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Assembly message, length delimited. Does not implicitly {@link mirabuf.Assembly.verify|verify} messages.
+ * @param message Assembly message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IAssembly, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes an Assembly message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Assembly
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Assembly;
+
+ /**
+ * Decodes an Assembly message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Assembly
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Assembly;
+
+ /**
+ * Verifies an Assembly message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates an Assembly message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Assembly
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Assembly;
+
+ /**
+ * Creates a plain object from an Assembly message. Also converts values to other types if specified.
+ * @param message Assembly
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Assembly, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Assembly to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Assembly
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of an AssemblyData. */
+ interface IAssemblyData {
+
+ /** Meshes and Design Objects */
+ parts?: (mirabuf.IParts|null);
+
+ /** Joint Definition Set */
+ joints?: (mirabuf.joint.IJoints|null);
+
+ /** Appearance and Physical Material Set */
+ materials?: (mirabuf.material.IMaterials|null);
+
+ /** AssemblyData signals */
+ signals?: (mirabuf.signal.ISignals|null);
+ }
+
+ /** Data used to construct the assembly */
+ class AssemblyData implements IAssemblyData {
+
+ /**
+ * Constructs a new AssemblyData.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IAssemblyData);
+
+ /** Meshes and Design Objects */
+ public parts?: (mirabuf.IParts|null);
+
+ /** Joint Definition Set */
+ public joints?: (mirabuf.joint.IJoints|null);
+
+ /** Appearance and Physical Material Set */
+ public materials?: (mirabuf.material.IMaterials|null);
+
+ /** AssemblyData signals. */
+ public signals?: (mirabuf.signal.ISignals|null);
+
+ /**
+ * Creates a new AssemblyData instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns AssemblyData instance
+ */
+ public static create(properties?: mirabuf.IAssemblyData): mirabuf.AssemblyData;
+
+ /**
+ * Encodes the specified AssemblyData message. Does not implicitly {@link mirabuf.AssemblyData.verify|verify} messages.
+ * @param message AssemblyData message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IAssemblyData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified AssemblyData message, length delimited. Does not implicitly {@link mirabuf.AssemblyData.verify|verify} messages.
+ * @param message AssemblyData message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IAssemblyData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes an AssemblyData message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns AssemblyData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.AssemblyData;
+
+ /**
+ * Decodes an AssemblyData message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns AssemblyData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.AssemblyData;
+
+ /**
+ * Verifies an AssemblyData message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates an AssemblyData message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns AssemblyData
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.AssemblyData;
+
+ /**
+ * Creates a plain object from an AssemblyData message. Also converts values to other types if specified.
+ * @param message AssemblyData
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.AssemblyData, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this AssemblyData to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for AssemblyData
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Parts. */
+ interface IParts {
+
+ /** Part name, version, GUID */
+ info?: (mirabuf.IInfo|null);
+
+ /** Map of the Exported Part Definitions */
+ partDefinitions?: ({ [k: string]: mirabuf.IPartDefinition }|null);
+
+ /** Map of the Exported Parts that make up the object */
+ partInstances?: ({ [k: string]: mirabuf.IPartInstance }|null);
+
+ /** other associated data that can be used */
+ userData?: (mirabuf.IUserData|null);
+ }
+
+ /** Represents a Parts. */
+ class Parts implements IParts {
+
+ /**
+ * Constructs a new Parts.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IParts);
+
+ /** Part name, version, GUID */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Map of the Exported Part Definitions */
+ public partDefinitions: { [k: string]: mirabuf.IPartDefinition };
+
+ /** Map of the Exported Parts that make up the object */
+ public partInstances: { [k: string]: mirabuf.IPartInstance };
+
+ /** other associated data that can be used */
+ public userData?: (mirabuf.IUserData|null);
+
+ /**
+ * Creates a new Parts instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Parts instance
+ */
+ public static create(properties?: mirabuf.IParts): mirabuf.Parts;
+
+ /**
+ * Encodes the specified Parts message. Does not implicitly {@link mirabuf.Parts.verify|verify} messages.
+ * @param message Parts message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IParts, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Parts message, length delimited. Does not implicitly {@link mirabuf.Parts.verify|verify} messages.
+ * @param message Parts message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IParts, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Parts message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Parts
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Parts;
+
+ /**
+ * Decodes a Parts message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Parts
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Parts;
+
+ /**
+ * Verifies a Parts message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Parts message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Parts
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Parts;
+
+ /**
+ * Creates a plain object from a Parts message. Also converts values to other types if specified.
+ * @param message Parts
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Parts, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Parts to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Parts
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a PartDefinition. */
+ interface IPartDefinition {
+
+ /** Information about version - id - name */
+ info?: (mirabuf.IInfo|null);
+
+ /** Physical data associated with Part */
+ physicalData?: (mirabuf.IPhysicalProperties|null);
+
+ /** Base Transform applied - Most Likely Identity Matrix */
+ baseTransform?: (mirabuf.ITransform|null);
+
+ /** Mesh Bodies to populate part */
+ bodies?: (mirabuf.IBody[]|null);
+
+ /** Optional value to state whether an object is a dynamic object in a static assembly - all children are also considered overriden */
+ dynamic?: (boolean|null);
+
+ /** Optional value for overriding the friction value 0-1 */
+ frictionOverride?: (number|null);
+
+ /** Optional value for overriding an indiviaul object's mass */
+ massOverride?: (number|null);
+ }
+
+ /**
+ * Part Definition
+ * Unique Definition of a part that can be replicated.
+ * Useful for keeping the object counter down in the scene.
+ */
+ class PartDefinition implements IPartDefinition {
+
+ /**
+ * Constructs a new PartDefinition.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IPartDefinition);
+
+ /** Information about version - id - name */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Physical data associated with Part */
+ public physicalData?: (mirabuf.IPhysicalProperties|null);
+
+ /** Base Transform applied - Most Likely Identity Matrix */
+ public baseTransform?: (mirabuf.ITransform|null);
+
+ /** Mesh Bodies to populate part */
+ public bodies: mirabuf.IBody[];
+
+ /** Optional value to state whether an object is a dynamic object in a static assembly - all children are also considered overriden */
+ public dynamic: boolean;
+
+ /** Optional value for overriding the friction value 0-1 */
+ public frictionOverride: number;
+
+ /** Optional value for overriding an indiviaul object's mass */
+ public massOverride: number;
+
+ /**
+ * Creates a new PartDefinition instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns PartDefinition instance
+ */
+ public static create(properties?: mirabuf.IPartDefinition): mirabuf.PartDefinition;
+
+ /**
+ * Encodes the specified PartDefinition message. Does not implicitly {@link mirabuf.PartDefinition.verify|verify} messages.
+ * @param message PartDefinition message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IPartDefinition, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified PartDefinition message, length delimited. Does not implicitly {@link mirabuf.PartDefinition.verify|verify} messages.
+ * @param message PartDefinition message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IPartDefinition, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a PartDefinition message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns PartDefinition
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.PartDefinition;
+
+ /**
+ * Decodes a PartDefinition message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns PartDefinition
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.PartDefinition;
+
+ /**
+ * Verifies a PartDefinition message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a PartDefinition message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns PartDefinition
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.PartDefinition;
+
+ /**
+ * Creates a plain object from a PartDefinition message. Also converts values to other types if specified.
+ * @param message PartDefinition
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.PartDefinition, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this PartDefinition to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for PartDefinition
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a PartInstance. */
+ interface IPartInstance {
+
+ /** PartInstance info */
+ info?: (mirabuf.IInfo|null);
+
+ /** Reference to the Part Definition defined in Assembly Data */
+ partDefinitionReference?: (string|null);
+
+ /** Overriding the object transform (moves the part from the def) - in design hierarchy context */
+ transform?: (mirabuf.ITransform|null);
+
+ /** Position transform from a global scope */
+ globalTransform?: (mirabuf.ITransform|null);
+
+ /** Joints that interact with this element */
+ joints?: (string[]|null);
+
+ /** PartInstance appearance */
+ appearance?: (string|null);
+
+ /** Physical Material Reference to link to `Materials->PhysicalMaterial->Info->id` */
+ physicalMaterial?: (string|null);
+
+ /** Flag that if enabled indicates we should skip generating a collider, defaults to FALSE or undefined */
+ skipCollider?: (boolean|null);
+ }
+
+ /** Represents a PartInstance. */
+ class PartInstance implements IPartInstance {
+
+ /**
+ * Constructs a new PartInstance.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IPartInstance);
+
+ /** PartInstance info. */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Reference to the Part Definition defined in Assembly Data */
+ public partDefinitionReference: string;
+
+ /** Overriding the object transform (moves the part from the def) - in design hierarchy context */
+ public transform?: (mirabuf.ITransform|null);
+
+ /** Position transform from a global scope */
+ public globalTransform?: (mirabuf.ITransform|null);
+
+ /** Joints that interact with this element */
+ public joints: string[];
+
+ /** PartInstance appearance. */
+ public appearance: string;
+
+ /** Physical Material Reference to link to `Materials->PhysicalMaterial->Info->id` */
+ public physicalMaterial: string;
+
+ /** Flag that if enabled indicates we should skip generating a collider, defaults to FALSE or undefined */
+ public skipCollider: boolean;
+
+ /**
+ * Creates a new PartInstance instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns PartInstance instance
+ */
+ public static create(properties?: mirabuf.IPartInstance): mirabuf.PartInstance;
+
+ /**
+ * Encodes the specified PartInstance message. Does not implicitly {@link mirabuf.PartInstance.verify|verify} messages.
+ * @param message PartInstance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IPartInstance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified PartInstance message, length delimited. Does not implicitly {@link mirabuf.PartInstance.verify|verify} messages.
+ * @param message PartInstance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IPartInstance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a PartInstance message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns PartInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.PartInstance;
+
+ /**
+ * Decodes a PartInstance message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns PartInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.PartInstance;
+
+ /**
+ * Verifies a PartInstance message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a PartInstance message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns PartInstance
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.PartInstance;
+
+ /**
+ * Creates a plain object from a PartInstance message. Also converts values to other types if specified.
+ * @param message PartInstance
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.PartInstance, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this PartInstance to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for PartInstance
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Body. */
+ interface IBody {
+
+ /** Body info */
+ info?: (mirabuf.IInfo|null);
+
+ /** Reference to Part Definition */
+ part?: (string|null);
+
+ /** Triangle Mesh for rendering */
+ triangleMesh?: (mirabuf.ITriangleMesh|null);
+
+ /** Override Visual Appearance for the body */
+ appearanceOverride?: (string|null);
+ }
+
+ /** Represents a Body. */
+ class Body implements IBody {
+
+ /**
+ * Constructs a new Body.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IBody);
+
+ /** Body info. */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Reference to Part Definition */
+ public part: string;
+
+ /** Triangle Mesh for rendering */
+ public triangleMesh?: (mirabuf.ITriangleMesh|null);
+
+ /** Override Visual Appearance for the body */
+ public appearanceOverride: string;
+
+ /**
+ * Creates a new Body instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Body instance
+ */
+ public static create(properties?: mirabuf.IBody): mirabuf.Body;
+
+ /**
+ * Encodes the specified Body message. Does not implicitly {@link mirabuf.Body.verify|verify} messages.
+ * @param message Body message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IBody, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Body message, length delimited. Does not implicitly {@link mirabuf.Body.verify|verify} messages.
+ * @param message Body message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IBody, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Body message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Body
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Body;
+
+ /**
+ * Decodes a Body message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Body
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Body;
+
+ /**
+ * Verifies a Body message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Body message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Body
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Body;
+
+ /**
+ * Creates a plain object from a Body message. Also converts values to other types if specified.
+ * @param message Body
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Body, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Body to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Body
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a TriangleMesh. */
+ interface ITriangleMesh {
+
+ /** TriangleMesh info */
+ info?: (mirabuf.IInfo|null);
+
+ /** Is this object a Plane ? (Does it have volume) */
+ hasVolume?: (boolean|null);
+
+ /** Rendered Appearance properties referenced from Assembly Data */
+ materialReference?: (string|null);
+
+ /** Stored as true types, inidicies, verts, uv */
+ mesh?: (mirabuf.IMesh|null);
+
+ /** Stored as binary data in bytes */
+ bmesh?: (mirabuf.IBinaryMesh|null);
+ }
+
+ /** Traingle Mesh for Storing Display Mesh data */
+ class TriangleMesh implements ITriangleMesh {
+
+ /**
+ * Constructs a new TriangleMesh.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.ITriangleMesh);
+
+ /** TriangleMesh info. */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Is this object a Plane ? (Does it have volume) */
+ public hasVolume: boolean;
+
+ /** Rendered Appearance properties referenced from Assembly Data */
+ public materialReference: string;
+
+ /** Stored as true types, inidicies, verts, uv */
+ public mesh?: (mirabuf.IMesh|null);
+
+ /** Stored as binary data in bytes */
+ public bmesh?: (mirabuf.IBinaryMesh|null);
+
+ /** What kind of Mesh Data exists in this Triangle Mesh */
+ public meshType?: ("mesh"|"bmesh");
+
+ /**
+ * Creates a new TriangleMesh instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns TriangleMesh instance
+ */
+ public static create(properties?: mirabuf.ITriangleMesh): mirabuf.TriangleMesh;
+
+ /**
+ * Encodes the specified TriangleMesh message. Does not implicitly {@link mirabuf.TriangleMesh.verify|verify} messages.
+ * @param message TriangleMesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.ITriangleMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified TriangleMesh message, length delimited. Does not implicitly {@link mirabuf.TriangleMesh.verify|verify} messages.
+ * @param message TriangleMesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.ITriangleMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a TriangleMesh message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns TriangleMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.TriangleMesh;
+
+ /**
+ * Decodes a TriangleMesh message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns TriangleMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.TriangleMesh;
+
+ /**
+ * Verifies a TriangleMesh message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a TriangleMesh message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns TriangleMesh
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.TriangleMesh;
+
+ /**
+ * Creates a plain object from a TriangleMesh message. Also converts values to other types if specified.
+ * @param message TriangleMesh
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.TriangleMesh, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this TriangleMesh to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for TriangleMesh
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Mesh. */
+ interface IMesh {
+
+ /** Tri Mesh Verts vec3 */
+ verts?: (number[]|null);
+
+ /** Tri Mesh Normals vec3 */
+ normals?: (number[]|null);
+
+ /** Tri Mesh uv Mapping vec2 */
+ uv?: (number[]|null);
+
+ /** Tri Mesh indicies (Vert Map) */
+ indices?: (number[]|null);
+ }
+
+ /** Mesh Data stored as generic Data Structure */
+ class Mesh implements IMesh {
+
+ /**
+ * Constructs a new Mesh.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IMesh);
+
+ /** Tri Mesh Verts vec3 */
+ public verts: number[];
+
+ /** Tri Mesh Normals vec3 */
+ public normals: number[];
+
+ /** Tri Mesh uv Mapping vec2 */
+ public uv: number[];
+
+ /** Tri Mesh indicies (Vert Map) */
+ public indices: number[];
+
+ /**
+ * Creates a new Mesh instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Mesh instance
+ */
+ public static create(properties?: mirabuf.IMesh): mirabuf.Mesh;
+
+ /**
+ * Encodes the specified Mesh message. Does not implicitly {@link mirabuf.Mesh.verify|verify} messages.
+ * @param message Mesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Mesh message, length delimited. Does not implicitly {@link mirabuf.Mesh.verify|verify} messages.
+ * @param message Mesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Mesh message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Mesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Mesh;
+
+ /**
+ * Decodes a Mesh message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Mesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Mesh;
+
+ /**
+ * Verifies a Mesh message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Mesh message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Mesh
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Mesh;
+
+ /**
+ * Creates a plain object from a Mesh message. Also converts values to other types if specified.
+ * @param message Mesh
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Mesh, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Mesh to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Mesh
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a BinaryMesh. */
+ interface IBinaryMesh {
+
+ /** BEWARE of ENDIANESS */
+ data?: (Uint8Array|null);
+ }
+
+ /** Mesh used for more effective file transfers */
+ class BinaryMesh implements IBinaryMesh {
+
+ /**
+ * Constructs a new BinaryMesh.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IBinaryMesh);
+
+ /** BEWARE of ENDIANESS */
+ public data: Uint8Array;
+
+ /**
+ * Creates a new BinaryMesh instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns BinaryMesh instance
+ */
+ public static create(properties?: mirabuf.IBinaryMesh): mirabuf.BinaryMesh;
+
+ /**
+ * Encodes the specified BinaryMesh message. Does not implicitly {@link mirabuf.BinaryMesh.verify|verify} messages.
+ * @param message BinaryMesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IBinaryMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified BinaryMesh message, length delimited. Does not implicitly {@link mirabuf.BinaryMesh.verify|verify} messages.
+ * @param message BinaryMesh message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IBinaryMesh, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a BinaryMesh message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns BinaryMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.BinaryMesh;
+
+ /**
+ * Decodes a BinaryMesh message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns BinaryMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.BinaryMesh;
+
+ /**
+ * Verifies a BinaryMesh message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a BinaryMesh message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns BinaryMesh
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.BinaryMesh;
+
+ /**
+ * Creates a plain object from a BinaryMesh message. Also converts values to other types if specified.
+ * @param message BinaryMesh
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.BinaryMesh, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this BinaryMesh to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for BinaryMesh
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Node. */
+ interface INode {
+
+ /** the reference ID for whatever kind of graph this is */
+ value?: (string|null);
+
+ /** the children for the given leaf */
+ children?: (mirabuf.INode[]|null);
+
+ /** other associated data that can be used */
+ userData?: (mirabuf.IUserData|null);
+ }
+
+ /** Represents a Node. */
+ class Node implements INode {
+
+ /**
+ * Constructs a new Node.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.INode);
+
+ /** the reference ID for whatever kind of graph this is */
+ public value: string;
+
+ /** the children for the given leaf */
+ public children: mirabuf.INode[];
+
+ /** other associated data that can be used */
+ public userData?: (mirabuf.IUserData|null);
+
+ /**
+ * Creates a new Node instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Node instance
+ */
+ public static create(properties?: mirabuf.INode): mirabuf.Node;
+
+ /**
+ * Encodes the specified Node message. Does not implicitly {@link mirabuf.Node.verify|verify} messages.
+ * @param message Node message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.INode, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Node message, length delimited. Does not implicitly {@link mirabuf.Node.verify|verify} messages.
+ * @param message Node message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.INode, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Node message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Node
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Node;
+
+ /**
+ * Decodes a Node message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Node
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Node;
+
+ /**
+ * Verifies a Node message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Node message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Node
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Node;
+
+ /**
+ * Creates a plain object from a Node message. Also converts values to other types if specified.
+ * @param message Node
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Node, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Node to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Node
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a GraphContainer. */
+ interface IGraphContainer {
+
+ /** GraphContainer nodes */
+ nodes?: (mirabuf.INode[]|null);
+ }
+
+ /** Represents a GraphContainer. */
+ class GraphContainer implements IGraphContainer {
+
+ /**
+ * Constructs a new GraphContainer.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IGraphContainer);
+
+ /** GraphContainer nodes. */
+ public nodes: mirabuf.INode[];
+
+ /**
+ * Creates a new GraphContainer instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns GraphContainer instance
+ */
+ public static create(properties?: mirabuf.IGraphContainer): mirabuf.GraphContainer;
+
+ /**
+ * Encodes the specified GraphContainer message. Does not implicitly {@link mirabuf.GraphContainer.verify|verify} messages.
+ * @param message GraphContainer message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IGraphContainer, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified GraphContainer message, length delimited. Does not implicitly {@link mirabuf.GraphContainer.verify|verify} messages.
+ * @param message GraphContainer message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IGraphContainer, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a GraphContainer message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns GraphContainer
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.GraphContainer;
+
+ /**
+ * Decodes a GraphContainer message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns GraphContainer
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.GraphContainer;
+
+ /**
+ * Verifies a GraphContainer message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a GraphContainer message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns GraphContainer
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.GraphContainer;
+
+ /**
+ * Creates a plain object from a GraphContainer message. Also converts values to other types if specified.
+ * @param message GraphContainer
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.GraphContainer, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this GraphContainer to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for GraphContainer
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a UserData. */
+ interface IUserData {
+
+ /** e.g. data["wheel"] = "yes" */
+ data?: ({ [k: string]: string }|null);
+ }
+
+ /**
+ * UserData
+ *
+ * Arbitrary data to append to a given message in map form
+ */
+ class UserData implements IUserData {
+
+ /**
+ * Constructs a new UserData.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IUserData);
+
+ /** e.g. data["wheel"] = "yes" */
+ public data: { [k: string]: string };
+
+ /**
+ * Creates a new UserData instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns UserData instance
+ */
+ public static create(properties?: mirabuf.IUserData): mirabuf.UserData;
+
+ /**
+ * Encodes the specified UserData message. Does not implicitly {@link mirabuf.UserData.verify|verify} messages.
+ * @param message UserData message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IUserData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified UserData message, length delimited. Does not implicitly {@link mirabuf.UserData.verify|verify} messages.
+ * @param message UserData message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IUserData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a UserData message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns UserData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.UserData;
+
+ /**
+ * Decodes a UserData message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns UserData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.UserData;
+
+ /**
+ * Verifies a UserData message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a UserData message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns UserData
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.UserData;
+
+ /**
+ * Creates a plain object from a UserData message. Also converts values to other types if specified.
+ * @param message UserData
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.UserData, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this UserData to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for UserData
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Vector3. */
+ interface IVector3 {
+
+ /** Vector3 x */
+ x?: (number|null);
+
+ /** Vector3 y */
+ y?: (number|null);
+
+ /** Vector3 z */
+ z?: (number|null);
+ }
+
+ /** Represents a Vector3. */
+ class Vector3 implements IVector3 {
+
+ /**
+ * Constructs a new Vector3.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IVector3);
+
+ /** Vector3 x. */
+ public x: number;
+
+ /** Vector3 y. */
+ public y: number;
+
+ /** Vector3 z. */
+ public z: number;
+
+ /**
+ * Creates a new Vector3 instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Vector3 instance
+ */
+ public static create(properties?: mirabuf.IVector3): mirabuf.Vector3;
+
+ /**
+ * Encodes the specified Vector3 message. Does not implicitly {@link mirabuf.Vector3.verify|verify} messages.
+ * @param message Vector3 message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IVector3, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Vector3 message, length delimited. Does not implicitly {@link mirabuf.Vector3.verify|verify} messages.
+ * @param message Vector3 message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IVector3, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Vector3 message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Vector3
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Vector3;
+
+ /**
+ * Decodes a Vector3 message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Vector3
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Vector3;
+
+ /**
+ * Verifies a Vector3 message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Vector3 message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Vector3
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Vector3;
+
+ /**
+ * Creates a plain object from a Vector3 message. Also converts values to other types if specified.
+ * @param message Vector3
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Vector3, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Vector3 to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Vector3
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a PhysicalProperties. */
+ interface IPhysicalProperties {
+
+ /** kg per cubic cm kg/(cm^3) */
+ density?: (number|null);
+
+ /** kg */
+ mass?: (number|null);
+
+ /** cm^3 */
+ volume?: (number|null);
+
+ /** cm^2 */
+ area?: (number|null);
+
+ /** non-negative? Vec3 */
+ com?: (mirabuf.IVector3|null);
+ }
+
+ /** Represents a PhysicalProperties. */
+ class PhysicalProperties implements IPhysicalProperties {
+
+ /**
+ * Constructs a new PhysicalProperties.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IPhysicalProperties);
+
+ /** kg per cubic cm kg/(cm^3) */
+ public density: number;
+
+ /** kg */
+ public mass: number;
+
+ /** cm^3 */
+ public volume: number;
+
+ /** cm^2 */
+ public area: number;
+
+ /** non-negative? Vec3 */
+ public com?: (mirabuf.IVector3|null);
+
+ /**
+ * Creates a new PhysicalProperties instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns PhysicalProperties instance
+ */
+ public static create(properties?: mirabuf.IPhysicalProperties): mirabuf.PhysicalProperties;
+
+ /**
+ * Encodes the specified PhysicalProperties message. Does not implicitly {@link mirabuf.PhysicalProperties.verify|verify} messages.
+ * @param message PhysicalProperties message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IPhysicalProperties, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified PhysicalProperties message, length delimited. Does not implicitly {@link mirabuf.PhysicalProperties.verify|verify} messages.
+ * @param message PhysicalProperties message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IPhysicalProperties, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a PhysicalProperties message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns PhysicalProperties
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.PhysicalProperties;
+
+ /**
+ * Decodes a PhysicalProperties message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns PhysicalProperties
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.PhysicalProperties;
+
+ /**
+ * Verifies a PhysicalProperties message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a PhysicalProperties message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns PhysicalProperties
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.PhysicalProperties;
+
+ /**
+ * Creates a plain object from a PhysicalProperties message. Also converts values to other types if specified.
+ * @param message PhysicalProperties
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.PhysicalProperties, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this PhysicalProperties to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for PhysicalProperties
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Transform. */
+ interface ITransform {
+
+ /** Transform spatialMatrix */
+ spatialMatrix?: (number[]|null);
+ }
+
+ /**
+ * Transform
+ *
+ * Data needed to apply scale, position, and rotational changes
+ */
+ class Transform implements ITransform {
+
+ /**
+ * Constructs a new Transform.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.ITransform);
+
+ /** Transform spatialMatrix. */
+ public spatialMatrix: number[];
+
+ /**
+ * Creates a new Transform instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Transform instance
+ */
+ public static create(properties?: mirabuf.ITransform): mirabuf.Transform;
+
+ /**
+ * Encodes the specified Transform message. Does not implicitly {@link mirabuf.Transform.verify|verify} messages.
+ * @param message Transform message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.ITransform, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Transform message, length delimited. Does not implicitly {@link mirabuf.Transform.verify|verify} messages.
+ * @param message Transform message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.ITransform, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Transform message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Transform
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Transform;
+
+ /**
+ * Decodes a Transform message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Transform
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Transform;
+
+ /**
+ * Verifies a Transform message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Transform message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Transform
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Transform;
+
+ /**
+ * Creates a plain object from a Transform message. Also converts values to other types if specified.
+ * @param message Transform
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Transform, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Transform to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Transform
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Color. */
+ interface IColor {
+
+ /** Color R */
+ R?: (number|null);
+
+ /** Color G */
+ G?: (number|null);
+
+ /** Color B */
+ B?: (number|null);
+
+ /** Color A */
+ A?: (number|null);
+ }
+
+ /** Represents a Color. */
+ class Color implements IColor {
+
+ /**
+ * Constructs a new Color.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IColor);
+
+ /** Color R. */
+ public R: number;
+
+ /** Color G. */
+ public G: number;
+
+ /** Color B. */
+ public B: number;
+
+ /** Color A. */
+ public A: number;
+
+ /**
+ * Creates a new Color instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Color instance
+ */
+ public static create(properties?: mirabuf.IColor): mirabuf.Color;
+
+ /**
+ * Encodes the specified Color message. Does not implicitly {@link mirabuf.Color.verify|verify} messages.
+ * @param message Color message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IColor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Color message, length delimited. Does not implicitly {@link mirabuf.Color.verify|verify} messages.
+ * @param message Color message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IColor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Color message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Color
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Color;
+
+ /**
+ * Decodes a Color message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Color
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Color;
+
+ /**
+ * Verifies a Color message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Color message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Color
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Color;
+
+ /**
+ * Creates a plain object from a Color message. Also converts values to other types if specified.
+ * @param message Color
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Color, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Color to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Color
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Axis enum. */
+ enum Axis {
+ X = 0,
+ Y = 1,
+ Z = 2
+ }
+
+ /** Properties of an Info. */
+ interface IInfo {
+
+ /** Info GUID */
+ GUID?: (string|null);
+
+ /** Info name */
+ name?: (string|null);
+
+ /** Info version */
+ version?: (number|null);
+ }
+
+ /**
+ * Defines basic fields for almost all objects
+ * The location where you can access the GUID for a reference
+ */
+ class Info implements IInfo {
+
+ /**
+ * Constructs a new Info.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IInfo);
+
+ /** Info GUID. */
+ public GUID: string;
+
+ /** Info name. */
+ public name: string;
+
+ /** Info version. */
+ public version: number;
+
+ /**
+ * Creates a new Info instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Info instance
+ */
+ public static create(properties?: mirabuf.IInfo): mirabuf.Info;
+
+ /**
+ * Encodes the specified Info message. Does not implicitly {@link mirabuf.Info.verify|verify} messages.
+ * @param message Info message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IInfo, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Info message, length delimited. Does not implicitly {@link mirabuf.Info.verify|verify} messages.
+ * @param message Info message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IInfo, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes an Info message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Info
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Info;
+
+ /**
+ * Decodes an Info message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Info
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Info;
+
+ /**
+ * Verifies an Info message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates an Info message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Info
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Info;
+
+ /**
+ * Creates a plain object from an Info message. Also converts values to other types if specified.
+ * @param message Info
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Info, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Info to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Info
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Thumbnail. */
+ interface IThumbnail {
+
+ /** Image Width */
+ width?: (number|null);
+
+ /** Image Height */
+ height?: (number|null);
+
+ /** Image Extension - ex. (.png, .bitmap, .jpeg) */
+ extension?: (string|null);
+
+ /** Transparency - true from fusion when correctly configured */
+ transparent?: (boolean|null);
+
+ /** Data as read from the file in bytes[] form */
+ data?: (Uint8Array|null);
+ }
+
+ /**
+ * A basic Thumbnail to be encoded in the file
+ * Most of the Time Fusion can encode the file with transparency as PNG not bitmap
+ */
+ class Thumbnail implements IThumbnail {
+
+ /**
+ * Constructs a new Thumbnail.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.IThumbnail);
+
+ /** Image Width */
+ public width: number;
+
+ /** Image Height */
+ public height: number;
+
+ /** Image Extension - ex. (.png, .bitmap, .jpeg) */
+ public extension: string;
+
+ /** Transparency - true from fusion when correctly configured */
+ public transparent: boolean;
+
+ /** Data as read from the file in bytes[] form */
+ public data: Uint8Array;
+
+ /**
+ * Creates a new Thumbnail instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Thumbnail instance
+ */
+ public static create(properties?: mirabuf.IThumbnail): mirabuf.Thumbnail;
+
+ /**
+ * Encodes the specified Thumbnail message. Does not implicitly {@link mirabuf.Thumbnail.verify|verify} messages.
+ * @param message Thumbnail message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.IThumbnail, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Thumbnail message, length delimited. Does not implicitly {@link mirabuf.Thumbnail.verify|verify} messages.
+ * @param message Thumbnail message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.IThumbnail, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Thumbnail message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Thumbnail
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.Thumbnail;
+
+ /**
+ * Decodes a Thumbnail message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Thumbnail
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.Thumbnail;
+
+ /**
+ * Verifies a Thumbnail message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Thumbnail message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Thumbnail
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.Thumbnail;
+
+ /**
+ * Creates a plain object from a Thumbnail message. Also converts values to other types if specified.
+ * @param message Thumbnail
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.Thumbnail, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Thumbnail to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Thumbnail
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Namespace joint. */
+ namespace joint {
+
+ /** Properties of a Joints. */
+ interface IJoints {
+
+ /** name, version, uid */
+ info?: (mirabuf.IInfo|null);
+
+ /** Unique Joint Implementations */
+ jointDefinitions?: ({ [k: string]: mirabuf.joint.IJoint }|null);
+
+ /** Instances of the Joint Implementations */
+ jointInstances?: ({ [k: string]: mirabuf.joint.IJointInstance }|null);
+
+ /** Rigidgroups ? */
+ rigidGroups?: (mirabuf.joint.IRigidGroup[]|null);
+
+ /** Collection of all Motors exported */
+ motorDefinitions?: ({ [k: string]: mirabuf.motor.IMotor }|null);
+ }
+
+ /**
+ * Joints
+ * A way to define the motion between various group connections
+ */
+ class Joints implements IJoints {
+
+ /**
+ * Constructs a new Joints.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IJoints);
+
+ /** name, version, uid */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Unique Joint Implementations */
+ public jointDefinitions: { [k: string]: mirabuf.joint.IJoint };
+
+ /** Instances of the Joint Implementations */
+ public jointInstances: { [k: string]: mirabuf.joint.IJointInstance };
+
+ /** Rigidgroups ? */
+ public rigidGroups: mirabuf.joint.IRigidGroup[];
+
+ /** Collection of all Motors exported */
+ public motorDefinitions: { [k: string]: mirabuf.motor.IMotor };
+
+ /**
+ * Creates a new Joints instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Joints instance
+ */
+ public static create(properties?: mirabuf.joint.IJoints): mirabuf.joint.Joints;
+
+ /**
+ * Encodes the specified Joints message. Does not implicitly {@link mirabuf.joint.Joints.verify|verify} messages.
+ * @param message Joints message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IJoints, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Joints message, length delimited. Does not implicitly {@link mirabuf.joint.Joints.verify|verify} messages.
+ * @param message Joints message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IJoints, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Joints message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Joints
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.Joints;
+
+ /**
+ * Decodes a Joints message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Joints
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.Joints;
+
+ /**
+ * Verifies a Joints message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Joints message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Joints
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.Joints;
+
+ /**
+ * Creates a plain object from a Joints message. Also converts values to other types if specified.
+ * @param message Joints
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.Joints, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Joints to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Joints
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** JointMotion enum. */
+ enum JointMotion {
+ RIGID = 0,
+ REVOLUTE = 1,
+ SLIDER = 2,
+ CYLINDRICAL = 3,
+ PINSLOT = 4,
+ PLANAR = 5,
+ BALL = 6,
+ CUSTOM = 7
+ }
+
+ /** Properties of a JointInstance. */
+ interface IJointInstance {
+
+ /** JointInstance info */
+ info?: (mirabuf.IInfo|null);
+
+ /** JointInstance isEndEffector */
+ isEndEffector?: (boolean|null);
+
+ /** JointInstance parentPart */
+ parentPart?: (string|null);
+
+ /** JointInstance childPart */
+ childPart?: (string|null);
+
+ /** JointInstance jointReference */
+ jointReference?: (string|null);
+
+ /** JointInstance offset */
+ offset?: (mirabuf.IVector3|null);
+
+ /** JointInstance parts */
+ parts?: (mirabuf.IGraphContainer|null);
+
+ /** JointInstance signalReference */
+ signalReference?: (string|null);
+
+ /** JointInstance motionLink */
+ motionLink?: (mirabuf.joint.IMotionLink[]|null);
+ }
+
+ /**
+ * Instance of a Joint that has a defined motion and limits.
+ * Instancing helps with identifiy closed loop systems.
+ */
+ class JointInstance implements IJointInstance {
+
+ /**
+ * Constructs a new JointInstance.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IJointInstance);
+
+ /** JointInstance info. */
+ public info?: (mirabuf.IInfo|null);
+
+ /** JointInstance isEndEffector. */
+ public isEndEffector: boolean;
+
+ /** JointInstance parentPart. */
+ public parentPart: string;
+
+ /** JointInstance childPart. */
+ public childPart: string;
+
+ /** JointInstance jointReference. */
+ public jointReference: string;
+
+ /** JointInstance offset. */
+ public offset?: (mirabuf.IVector3|null);
+
+ /** JointInstance parts. */
+ public parts?: (mirabuf.IGraphContainer|null);
+
+ /** JointInstance signalReference. */
+ public signalReference: string;
+
+ /** JointInstance motionLink. */
+ public motionLink: mirabuf.joint.IMotionLink[];
+
+ /**
+ * Creates a new JointInstance instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns JointInstance instance
+ */
+ public static create(properties?: mirabuf.joint.IJointInstance): mirabuf.joint.JointInstance;
+
+ /**
+ * Encodes the specified JointInstance message. Does not implicitly {@link mirabuf.joint.JointInstance.verify|verify} messages.
+ * @param message JointInstance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IJointInstance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified JointInstance message, length delimited. Does not implicitly {@link mirabuf.joint.JointInstance.verify|verify} messages.
+ * @param message JointInstance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IJointInstance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a JointInstance message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns JointInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.JointInstance;
+
+ /**
+ * Decodes a JointInstance message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns JointInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.JointInstance;
+
+ /**
+ * Verifies a JointInstance message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a JointInstance message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns JointInstance
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.JointInstance;
+
+ /**
+ * Creates a plain object from a JointInstance message. Also converts values to other types if specified.
+ * @param message JointInstance
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.JointInstance, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this JointInstance to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for JointInstance
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a MotionLink. */
+ interface IMotionLink {
+
+ /** MotionLink jointInstance */
+ jointInstance?: (string|null);
+
+ /** MotionLink ratio */
+ ratio?: (number|null);
+
+ /** MotionLink reversed */
+ reversed?: (boolean|null);
+ }
+
+ /**
+ * Motion Link Feature
+ * Enables the restriction on a joint to a certain range of motion as it is relative to another joint
+ * This is useful for moving parts restricted by belts and gears
+ */
+ class MotionLink implements IMotionLink {
+
+ /**
+ * Constructs a new MotionLink.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IMotionLink);
+
+ /** MotionLink jointInstance. */
+ public jointInstance: string;
+
+ /** MotionLink ratio. */
+ public ratio: number;
+
+ /** MotionLink reversed. */
+ public reversed: boolean;
+
+ /**
+ * Creates a new MotionLink instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns MotionLink instance
+ */
+ public static create(properties?: mirabuf.joint.IMotionLink): mirabuf.joint.MotionLink;
+
+ /**
+ * Encodes the specified MotionLink message. Does not implicitly {@link mirabuf.joint.MotionLink.verify|verify} messages.
+ * @param message MotionLink message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IMotionLink, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified MotionLink message, length delimited. Does not implicitly {@link mirabuf.joint.MotionLink.verify|verify} messages.
+ * @param message MotionLink message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IMotionLink, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a MotionLink message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns MotionLink
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.MotionLink;
+
+ /**
+ * Decodes a MotionLink message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns MotionLink
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.MotionLink;
+
+ /**
+ * Verifies a MotionLink message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a MotionLink message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns MotionLink
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.MotionLink;
+
+ /**
+ * Creates a plain object from a MotionLink message. Also converts values to other types if specified.
+ * @param message MotionLink
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.MotionLink, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this MotionLink to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for MotionLink
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Joint. */
+ interface IJoint {
+
+ /** Joint name, ID, version, etc */
+ info?: (mirabuf.IInfo|null);
+
+ /** Joint origin */
+ origin?: (mirabuf.IVector3|null);
+
+ /** Joint jointMotionType */
+ jointMotionType?: (mirabuf.joint.JointMotion|null);
+
+ /** Joint breakMagnitude */
+ breakMagnitude?: (number|null);
+
+ /** ONEOF rotational joint */
+ rotational?: (mirabuf.joint.IRotationalJoint|null);
+
+ /** ONEOF prismatic joint */
+ prismatic?: (mirabuf.joint.IPrismaticJoint|null);
+
+ /** ONEOF custom joint */
+ custom?: (mirabuf.joint.ICustomJoint|null);
+
+ /** Additional information someone can query or store relative to your joint. */
+ userData?: (mirabuf.IUserData|null);
+
+ /** Motor definition reference to lookup in joints collection */
+ motorReference?: (string|null);
+ }
+
+ /**
+ * A unqiue implementation of a joint motion
+ * Contains information about motion but not assembly relation
+ * NOTE: A spring motion is a joint with no driver
+ */
+ class Joint implements IJoint {
+
+ /**
+ * Constructs a new Joint.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IJoint);
+
+ /** Joint name, ID, version, etc */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Joint origin. */
+ public origin?: (mirabuf.IVector3|null);
+
+ /** Joint jointMotionType. */
+ public jointMotionType: mirabuf.joint.JointMotion;
+
+ /** Joint breakMagnitude. */
+ public breakMagnitude: number;
+
+ /** ONEOF rotational joint */
+ public rotational?: (mirabuf.joint.IRotationalJoint|null);
+
+ /** ONEOF prismatic joint */
+ public prismatic?: (mirabuf.joint.IPrismaticJoint|null);
+
+ /** ONEOF custom joint */
+ public custom?: (mirabuf.joint.ICustomJoint|null);
+
+ /** Additional information someone can query or store relative to your joint. */
+ public userData?: (mirabuf.IUserData|null);
+
+ /** Motor definition reference to lookup in joints collection */
+ public motorReference: string;
+
+ /** Joint JointMotion. */
+ public JointMotion?: ("rotational"|"prismatic"|"custom");
+
+ /**
+ * Creates a new Joint instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Joint instance
+ */
+ public static create(properties?: mirabuf.joint.IJoint): mirabuf.joint.Joint;
+
+ /**
+ * Encodes the specified Joint message. Does not implicitly {@link mirabuf.joint.Joint.verify|verify} messages.
+ * @param message Joint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Joint message, length delimited. Does not implicitly {@link mirabuf.joint.Joint.verify|verify} messages.
+ * @param message Joint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Joint message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Joint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.Joint;
+
+ /**
+ * Decodes a Joint message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Joint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.Joint;
+
+ /**
+ * Verifies a Joint message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Joint message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Joint
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.Joint;
+
+ /**
+ * Creates a plain object from a Joint message. Also converts values to other types if specified.
+ * @param message Joint
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.Joint, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Joint to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Joint
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Dynamics. */
+ interface IDynamics {
+
+ /** Damping effect on a given joint motion */
+ damping?: (number|null);
+
+ /** Friction effect on a given joint motion */
+ friction?: (number|null);
+ }
+
+ /** Dynamics specify the mechanical effects on the motion. */
+ class Dynamics implements IDynamics {
+
+ /**
+ * Constructs a new Dynamics.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IDynamics);
+
+ /** Damping effect on a given joint motion */
+ public damping: number;
+
+ /** Friction effect on a given joint motion */
+ public friction: number;
+
+ /**
+ * Creates a new Dynamics instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Dynamics instance
+ */
+ public static create(properties?: mirabuf.joint.IDynamics): mirabuf.joint.Dynamics;
+
+ /**
+ * Encodes the specified Dynamics message. Does not implicitly {@link mirabuf.joint.Dynamics.verify|verify} messages.
+ * @param message Dynamics message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IDynamics, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Dynamics message, length delimited. Does not implicitly {@link mirabuf.joint.Dynamics.verify|verify} messages.
+ * @param message Dynamics message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IDynamics, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Dynamics message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Dynamics
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.Dynamics;
+
+ /**
+ * Decodes a Dynamics message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Dynamics
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.Dynamics;
+
+ /**
+ * Verifies a Dynamics message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Dynamics message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Dynamics
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.Dynamics;
+
+ /**
+ * Creates a plain object from a Dynamics message. Also converts values to other types if specified.
+ * @param message Dynamics
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.Dynamics, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Dynamics to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Dynamics
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Limits. */
+ interface ILimits {
+
+ /** Lower Limit corresponds to default displacement */
+ lower?: (number|null);
+
+ /** Upper Limit is the joint extent */
+ upper?: (number|null);
+
+ /** Velocity Max in m/s^2 (angular for rotational) */
+ velocity?: (number|null);
+
+ /** Effort is the absolute force a joint can apply for a given instant - ROS has a great article on it http://wiki.ros.org/pr2_controller_manager/safety_limits */
+ effort?: (number|null);
+ }
+
+ /**
+ * Limits specify the mechanical range of a given joint.
+ *
+ * TODO: Add units
+ */
+ class Limits implements ILimits {
+
+ /**
+ * Constructs a new Limits.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.ILimits);
+
+ /** Lower Limit corresponds to default displacement */
+ public lower: number;
+
+ /** Upper Limit is the joint extent */
+ public upper: number;
+
+ /** Velocity Max in m/s^2 (angular for rotational) */
+ public velocity: number;
+
+ /** Effort is the absolute force a joint can apply for a given instant - ROS has a great article on it http://wiki.ros.org/pr2_controller_manager/safety_limits */
+ public effort: number;
+
+ /**
+ * Creates a new Limits instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Limits instance
+ */
+ public static create(properties?: mirabuf.joint.ILimits): mirabuf.joint.Limits;
+
+ /**
+ * Encodes the specified Limits message. Does not implicitly {@link mirabuf.joint.Limits.verify|verify} messages.
+ * @param message Limits message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.ILimits, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Limits message, length delimited. Does not implicitly {@link mirabuf.joint.Limits.verify|verify} messages.
+ * @param message Limits message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.ILimits, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Limits message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Limits
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.Limits;
+
+ /**
+ * Decodes a Limits message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Limits
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.Limits;
+
+ /**
+ * Verifies a Limits message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Limits message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Limits
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.Limits;
+
+ /**
+ * Creates a plain object from a Limits message. Also converts values to other types if specified.
+ * @param message Limits
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.Limits, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Limits to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Limits
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Safety. */
+ interface ISafety {
+
+ /** Lower software limit */
+ lowerLimit?: (number|null);
+
+ /** Upper Software limit */
+ upperLimit?: (number|null);
+
+ /** Relation between position and velocity limit */
+ kPosition?: (number|null);
+
+ /** Relation between effort and velocity limit */
+ kVelocity?: (number|null);
+ }
+
+ /**
+ * Safety switch configuration for a given joint.
+ * Can usefully indicate a bounds issue.
+ * Inspired by the URDF implementation.
+ *
+ * This should really just be created by the controller.
+ * http://wiki.ros.org/pr2_controller_manager/safety_limits
+ */
+ class Safety implements ISafety {
+
+ /**
+ * Constructs a new Safety.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.ISafety);
+
+ /** Lower software limit */
+ public lowerLimit: number;
+
+ /** Upper Software limit */
+ public upperLimit: number;
+
+ /** Relation between position and velocity limit */
+ public kPosition: number;
+
+ /** Relation between effort and velocity limit */
+ public kVelocity: number;
+
+ /**
+ * Creates a new Safety instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Safety instance
+ */
+ public static create(properties?: mirabuf.joint.ISafety): mirabuf.joint.Safety;
+
+ /**
+ * Encodes the specified Safety message. Does not implicitly {@link mirabuf.joint.Safety.verify|verify} messages.
+ * @param message Safety message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.ISafety, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Safety message, length delimited. Does not implicitly {@link mirabuf.joint.Safety.verify|verify} messages.
+ * @param message Safety message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.ISafety, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Safety message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Safety
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.Safety;
+
+ /**
+ * Decodes a Safety message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Safety
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.Safety;
+
+ /**
+ * Verifies a Safety message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Safety message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Safety
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.Safety;
+
+ /**
+ * Creates a plain object from a Safety message. Also converts values to other types if specified.
+ * @param message Safety
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.Safety, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Safety to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Safety
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a DOF. */
+ interface IDOF {
+
+ /** In case you want to name this degree of freedom */
+ name?: (string|null);
+
+ /** Axis the degree of freedom is pivoting by */
+ axis?: (mirabuf.IVector3|null);
+
+ /** Direction the axis vector is offset from - this has an incorrect naming scheme */
+ pivotDirection?: (mirabuf.Axis|null);
+
+ /** Dynamic properties of this joint pivot */
+ dynamics?: (mirabuf.joint.IDynamics|null);
+
+ /** Limits of this freedom */
+ limits?: (mirabuf.joint.ILimits|null);
+
+ /** Current value of the DOF */
+ value?: (number|null);
+ }
+
+ /** DOF - representing the construction of a joint motion */
+ class DOF implements IDOF {
+
+ /**
+ * Constructs a new DOF.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IDOF);
+
+ /** In case you want to name this degree of freedom */
+ public name: string;
+
+ /** Axis the degree of freedom is pivoting by */
+ public axis?: (mirabuf.IVector3|null);
+
+ /** Direction the axis vector is offset from - this has an incorrect naming scheme */
+ public pivotDirection: mirabuf.Axis;
+
+ /** Dynamic properties of this joint pivot */
+ public dynamics?: (mirabuf.joint.IDynamics|null);
+
+ /** Limits of this freedom */
+ public limits?: (mirabuf.joint.ILimits|null);
+
+ /** Current value of the DOF */
+ public value: number;
+
+ /**
+ * Creates a new DOF instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns DOF instance
+ */
+ public static create(properties?: mirabuf.joint.IDOF): mirabuf.joint.DOF;
+
+ /**
+ * Encodes the specified DOF message. Does not implicitly {@link mirabuf.joint.DOF.verify|verify} messages.
+ * @param message DOF message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IDOF, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified DOF message, length delimited. Does not implicitly {@link mirabuf.joint.DOF.verify|verify} messages.
+ * @param message DOF message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IDOF, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a DOF message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns DOF
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.DOF;
+
+ /**
+ * Decodes a DOF message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns DOF
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.DOF;
+
+ /**
+ * Verifies a DOF message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a DOF message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns DOF
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.DOF;
+
+ /**
+ * Creates a plain object from a DOF message. Also converts values to other types if specified.
+ * @param message DOF
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.DOF, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this DOF to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for DOF
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a CustomJoint. */
+ interface ICustomJoint {
+
+ /** A list of degrees of freedom that the joint can contain */
+ dofs?: (mirabuf.joint.IDOF[]|null);
+ }
+
+ /**
+ * CustomJoint is a joint with N degrees of freedom specified.
+ * There should be input validation to handle max freedom case.
+ */
+ class CustomJoint implements ICustomJoint {
+
+ /**
+ * Constructs a new CustomJoint.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.ICustomJoint);
+
+ /** A list of degrees of freedom that the joint can contain */
+ public dofs: mirabuf.joint.IDOF[];
+
+ /**
+ * Creates a new CustomJoint instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns CustomJoint instance
+ */
+ public static create(properties?: mirabuf.joint.ICustomJoint): mirabuf.joint.CustomJoint;
+
+ /**
+ * Encodes the specified CustomJoint message. Does not implicitly {@link mirabuf.joint.CustomJoint.verify|verify} messages.
+ * @param message CustomJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.ICustomJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified CustomJoint message, length delimited. Does not implicitly {@link mirabuf.joint.CustomJoint.verify|verify} messages.
+ * @param message CustomJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.ICustomJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a CustomJoint message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns CustomJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.CustomJoint;
+
+ /**
+ * Decodes a CustomJoint message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns CustomJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.CustomJoint;
+
+ /**
+ * Verifies a CustomJoint message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a CustomJoint message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns CustomJoint
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.CustomJoint;
+
+ /**
+ * Creates a plain object from a CustomJoint message. Also converts values to other types if specified.
+ * @param message CustomJoint
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.CustomJoint, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this CustomJoint to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for CustomJoint
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a RotationalJoint. */
+ interface IRotationalJoint {
+
+ /** RotationalJoint rotationalFreedom */
+ rotationalFreedom?: (mirabuf.joint.IDOF|null);
+ }
+
+ /**
+ * RotationalJoint describes a joint with rotational translation.
+ * This is the exact same as prismatic for now.
+ */
+ class RotationalJoint implements IRotationalJoint {
+
+ /**
+ * Constructs a new RotationalJoint.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IRotationalJoint);
+
+ /** RotationalJoint rotationalFreedom. */
+ public rotationalFreedom?: (mirabuf.joint.IDOF|null);
+
+ /**
+ * Creates a new RotationalJoint instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns RotationalJoint instance
+ */
+ public static create(properties?: mirabuf.joint.IRotationalJoint): mirabuf.joint.RotationalJoint;
+
+ /**
+ * Encodes the specified RotationalJoint message. Does not implicitly {@link mirabuf.joint.RotationalJoint.verify|verify} messages.
+ * @param message RotationalJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IRotationalJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified RotationalJoint message, length delimited. Does not implicitly {@link mirabuf.joint.RotationalJoint.verify|verify} messages.
+ * @param message RotationalJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IRotationalJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a RotationalJoint message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns RotationalJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.RotationalJoint;
+
+ /**
+ * Decodes a RotationalJoint message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns RotationalJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.RotationalJoint;
+
+ /**
+ * Verifies a RotationalJoint message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a RotationalJoint message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns RotationalJoint
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.RotationalJoint;
+
+ /**
+ * Creates a plain object from a RotationalJoint message. Also converts values to other types if specified.
+ * @param message RotationalJoint
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.RotationalJoint, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this RotationalJoint to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for RotationalJoint
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a BallJoint. */
+ interface IBallJoint {
+
+ /** BallJoint yaw */
+ yaw?: (mirabuf.joint.IDOF|null);
+
+ /** BallJoint pitch */
+ pitch?: (mirabuf.joint.IDOF|null);
+
+ /** BallJoint rotation */
+ rotation?: (mirabuf.joint.IDOF|null);
+ }
+
+ /** Represents a BallJoint. */
+ class BallJoint implements IBallJoint {
+
+ /**
+ * Constructs a new BallJoint.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IBallJoint);
+
+ /** BallJoint yaw. */
+ public yaw?: (mirabuf.joint.IDOF|null);
+
+ /** BallJoint pitch. */
+ public pitch?: (mirabuf.joint.IDOF|null);
+
+ /** BallJoint rotation. */
+ public rotation?: (mirabuf.joint.IDOF|null);
+
+ /**
+ * Creates a new BallJoint instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns BallJoint instance
+ */
+ public static create(properties?: mirabuf.joint.IBallJoint): mirabuf.joint.BallJoint;
+
+ /**
+ * Encodes the specified BallJoint message. Does not implicitly {@link mirabuf.joint.BallJoint.verify|verify} messages.
+ * @param message BallJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IBallJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified BallJoint message, length delimited. Does not implicitly {@link mirabuf.joint.BallJoint.verify|verify} messages.
+ * @param message BallJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IBallJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a BallJoint message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns BallJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.BallJoint;
+
+ /**
+ * Decodes a BallJoint message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns BallJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.BallJoint;
+
+ /**
+ * Verifies a BallJoint message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a BallJoint message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns BallJoint
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.BallJoint;
+
+ /**
+ * Creates a plain object from a BallJoint message. Also converts values to other types if specified.
+ * @param message BallJoint
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.BallJoint, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this BallJoint to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for BallJoint
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a PrismaticJoint. */
+ interface IPrismaticJoint {
+
+ /** PrismaticJoint prismaticFreedom */
+ prismaticFreedom?: (mirabuf.joint.IDOF|null);
+ }
+
+ /** Prismatic Joint describes a motion that translates the position in a single axis */
+ class PrismaticJoint implements IPrismaticJoint {
+
+ /**
+ * Constructs a new PrismaticJoint.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IPrismaticJoint);
+
+ /** PrismaticJoint prismaticFreedom. */
+ public prismaticFreedom?: (mirabuf.joint.IDOF|null);
+
+ /**
+ * Creates a new PrismaticJoint instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns PrismaticJoint instance
+ */
+ public static create(properties?: mirabuf.joint.IPrismaticJoint): mirabuf.joint.PrismaticJoint;
+
+ /**
+ * Encodes the specified PrismaticJoint message. Does not implicitly {@link mirabuf.joint.PrismaticJoint.verify|verify} messages.
+ * @param message PrismaticJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IPrismaticJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified PrismaticJoint message, length delimited. Does not implicitly {@link mirabuf.joint.PrismaticJoint.verify|verify} messages.
+ * @param message PrismaticJoint message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IPrismaticJoint, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a PrismaticJoint message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns PrismaticJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.PrismaticJoint;
+
+ /**
+ * Decodes a PrismaticJoint message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns PrismaticJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.PrismaticJoint;
+
+ /**
+ * Verifies a PrismaticJoint message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a PrismaticJoint message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns PrismaticJoint
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.PrismaticJoint;
+
+ /**
+ * Creates a plain object from a PrismaticJoint message. Also converts values to other types if specified.
+ * @param message PrismaticJoint
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.PrismaticJoint, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this PrismaticJoint to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for PrismaticJoint
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a RigidGroup. */
+ interface IRigidGroup {
+
+ /** RigidGroup name */
+ name?: (string|null);
+
+ /** RigidGroup occurrences */
+ occurrences?: (string[]|null);
+ }
+
+ /** Represents a RigidGroup. */
+ class RigidGroup implements IRigidGroup {
+
+ /**
+ * Constructs a new RigidGroup.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.joint.IRigidGroup);
+
+ /** RigidGroup name. */
+ public name: string;
+
+ /** RigidGroup occurrences. */
+ public occurrences: string[];
+
+ /**
+ * Creates a new RigidGroup instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns RigidGroup instance
+ */
+ public static create(properties?: mirabuf.joint.IRigidGroup): mirabuf.joint.RigidGroup;
+
+ /**
+ * Encodes the specified RigidGroup message. Does not implicitly {@link mirabuf.joint.RigidGroup.verify|verify} messages.
+ * @param message RigidGroup message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.joint.IRigidGroup, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified RigidGroup message, length delimited. Does not implicitly {@link mirabuf.joint.RigidGroup.verify|verify} messages.
+ * @param message RigidGroup message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.joint.IRigidGroup, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a RigidGroup message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns RigidGroup
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.joint.RigidGroup;
+
+ /**
+ * Decodes a RigidGroup message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns RigidGroup
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.joint.RigidGroup;
+
+ /**
+ * Verifies a RigidGroup message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a RigidGroup message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns RigidGroup
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.joint.RigidGroup;
+
+ /**
+ * Creates a plain object from a RigidGroup message. Also converts values to other types if specified.
+ * @param message RigidGroup
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.joint.RigidGroup, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this RigidGroup to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for RigidGroup
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+ }
+
+ /** Namespace motor. */
+ namespace motor {
+
+ /**
+ * Duty Cycles for electric motors
+ * Affects the dynamic output of the motor
+ * https://www.news.benevelli-group.com/index.php/en/88-what-motor-duty-cycle.html
+ * These each have associated data we are not going to use right now
+ */
+ enum DutyCycles {
+ CONTINUOUS_RUNNING = 0,
+ SHORT_TIME = 1,
+ INTERMITTENT_PERIODIC = 2,
+ CONTINUOUS_PERIODIC = 3
+ }
+
+ /** Properties of a Motor. */
+ interface IMotor {
+
+ /** Motor info */
+ info?: (mirabuf.IInfo|null);
+
+ /** Motor dcMotor */
+ dcMotor?: (mirabuf.motor.IDCMotor|null);
+
+ /** Motor simpleMotor */
+ simpleMotor?: (mirabuf.motor.ISimpleMotor|null);
+ }
+
+ /**
+ * A Motor should determine the relationship between an input and joint motion
+ * Could represent something like a DC Motor relationship
+ */
+ class Motor implements IMotor {
+
+ /**
+ * Constructs a new Motor.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.motor.IMotor);
+
+ /** Motor info. */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Motor dcMotor. */
+ public dcMotor?: (mirabuf.motor.IDCMotor|null);
+
+ /** Motor simpleMotor. */
+ public simpleMotor?: (mirabuf.motor.ISimpleMotor|null);
+
+ /** Motor motorType. */
+ public motorType?: ("dcMotor"|"simpleMotor");
+
+ /**
+ * Creates a new Motor instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Motor instance
+ */
+ public static create(properties?: mirabuf.motor.IMotor): mirabuf.motor.Motor;
+
+ /**
+ * Encodes the specified Motor message. Does not implicitly {@link mirabuf.motor.Motor.verify|verify} messages.
+ * @param message Motor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.motor.IMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Motor message, length delimited. Does not implicitly {@link mirabuf.motor.Motor.verify|verify} messages.
+ * @param message Motor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.motor.IMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Motor message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Motor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.motor.Motor;
+
+ /**
+ * Decodes a Motor message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Motor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.motor.Motor;
+
+ /**
+ * Verifies a Motor message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Motor message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Motor
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.motor.Motor;
+
+ /**
+ * Creates a plain object from a Motor message. Also converts values to other types if specified.
+ * @param message Motor
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.motor.Motor, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Motor to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Motor
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a SimpleMotor. */
+ interface ISimpleMotor {
+
+ /** Torque at 0 rpm with a inverse linear relationship to max_velocity */
+ stallTorque?: (number|null);
+
+ /** The target velocity in RPM, will use stall_torque relationship to reach each step */
+ maxVelocity?: (number|null);
+
+ /** (Optional) 0 - 1, the relationship of stall_torque used to perserve the position of this motor */
+ brakingConstant?: (number|null);
+ }
+
+ /**
+ * SimpleMotor Configuration
+ * Very easy motor used to simulate joints without specifying a real motor
+ * Can set braking_constant - stall_torque - and max_velocity
+ * Assumes you are solving using a velocity constraint for a joint and not a acceleration constraint
+ */
+ class SimpleMotor implements ISimpleMotor {
+
+ /**
+ * Constructs a new SimpleMotor.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.motor.ISimpleMotor);
+
+ /** Torque at 0 rpm with a inverse linear relationship to max_velocity */
+ public stallTorque: number;
+
+ /** The target velocity in RPM, will use stall_torque relationship to reach each step */
+ public maxVelocity: number;
+
+ /** (Optional) 0 - 1, the relationship of stall_torque used to perserve the position of this motor */
+ public brakingConstant: number;
+
+ /**
+ * Creates a new SimpleMotor instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns SimpleMotor instance
+ */
+ public static create(properties?: mirabuf.motor.ISimpleMotor): mirabuf.motor.SimpleMotor;
+
+ /**
+ * Encodes the specified SimpleMotor message. Does not implicitly {@link mirabuf.motor.SimpleMotor.verify|verify} messages.
+ * @param message SimpleMotor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.motor.ISimpleMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified SimpleMotor message, length delimited. Does not implicitly {@link mirabuf.motor.SimpleMotor.verify|verify} messages.
+ * @param message SimpleMotor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.motor.ISimpleMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a SimpleMotor message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns SimpleMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.motor.SimpleMotor;
+
+ /**
+ * Decodes a SimpleMotor message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns SimpleMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.motor.SimpleMotor;
+
+ /**
+ * Verifies a SimpleMotor message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a SimpleMotor message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns SimpleMotor
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.motor.SimpleMotor;
+
+ /**
+ * Creates a plain object from a SimpleMotor message. Also converts values to other types if specified.
+ * @param message SimpleMotor
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.motor.SimpleMotor, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this SimpleMotor to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for SimpleMotor
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a DCMotor. */
+ interface IDCMotor {
+
+ /** Reference for purchase page or spec sheet */
+ referenceUrl?: (string|null);
+
+ /** m-Nm/Amp */
+ torqueConstant?: (number|null);
+
+ /** mV/rad/sec */
+ emfConstant?: (number|null);
+
+ /** Resistance of Motor - Optional if other values are known */
+ resistance?: (number|null);
+
+ /** measure in percentage of 100 - generally around 60 - measured under optimal load */
+ maximumEffeciency?: (number|null);
+
+ /** measured in Watts */
+ maximumPower?: (number|null);
+
+ /** Stated Duty Cycle of motor */
+ dutyCycle?: (mirabuf.motor.DutyCycles|null);
+
+ /** Optional data that can give a better relationship to the simulation */
+ advanced?: (mirabuf.motor.DCMotor.IAdvanced|null);
+ }
+
+ /**
+ * DCMotor Configuration
+ * Parameters to simulate a DC Electric Motor
+ * Still needs some more but overall they are most of the parameters we can use
+ */
+ class DCMotor implements IDCMotor {
+
+ /**
+ * Constructs a new DCMotor.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.motor.IDCMotor);
+
+ /** Reference for purchase page or spec sheet */
+ public referenceUrl: string;
+
+ /** m-Nm/Amp */
+ public torqueConstant: number;
+
+ /** mV/rad/sec */
+ public emfConstant: number;
+
+ /** Resistance of Motor - Optional if other values are known */
+ public resistance: number;
+
+ /** measure in percentage of 100 - generally around 60 - measured under optimal load */
+ public maximumEffeciency: number;
+
+ /** measured in Watts */
+ public maximumPower: number;
+
+ /** Stated Duty Cycle of motor */
+ public dutyCycle: mirabuf.motor.DutyCycles;
+
+ /** Optional data that can give a better relationship to the simulation */
+ public advanced?: (mirabuf.motor.DCMotor.IAdvanced|null);
+
+ /**
+ * Creates a new DCMotor instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns DCMotor instance
+ */
+ public static create(properties?: mirabuf.motor.IDCMotor): mirabuf.motor.DCMotor;
+
+ /**
+ * Encodes the specified DCMotor message. Does not implicitly {@link mirabuf.motor.DCMotor.verify|verify} messages.
+ * @param message DCMotor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.motor.IDCMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified DCMotor message, length delimited. Does not implicitly {@link mirabuf.motor.DCMotor.verify|verify} messages.
+ * @param message DCMotor message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.motor.IDCMotor, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a DCMotor message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns DCMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.motor.DCMotor;
+
+ /**
+ * Decodes a DCMotor message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns DCMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.motor.DCMotor;
+
+ /**
+ * Verifies a DCMotor message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a DCMotor message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns DCMotor
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.motor.DCMotor;
+
+ /**
+ * Creates a plain object from a DCMotor message. Also converts values to other types if specified.
+ * @param message DCMotor
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.motor.DCMotor, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this DCMotor to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for DCMotor
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ namespace DCMotor {
+
+ /** Properties of an Advanced. */
+ interface IAdvanced {
+
+ /** measured in AMPs */
+ freeCurrent?: (number|null);
+
+ /** measured in RPM */
+ freeSpeed?: (number|null);
+
+ /** measure in AMPs */
+ stallCurrent?: (number|null);
+
+ /** measured in Nm */
+ stallTorque?: (number|null);
+
+ /** measured in Volts DC */
+ inputVoltage?: (number|null);
+
+ /** between (K * (N / 4)) and (K * ((N-2) / 4)) where N is number of poles - leave at 0 if unknown */
+ resistanceVariation?: (number|null);
+ }
+
+ /** Information usually found on datasheet */
+ class Advanced implements IAdvanced {
+
+ /**
+ * Constructs a new Advanced.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.motor.DCMotor.IAdvanced);
+
+ /** measured in AMPs */
+ public freeCurrent: number;
+
+ /** measured in RPM */
+ public freeSpeed: number;
+
+ /** measure in AMPs */
+ public stallCurrent: number;
+
+ /** measured in Nm */
+ public stallTorque: number;
+
+ /** measured in Volts DC */
+ public inputVoltage: number;
+
+ /** between (K * (N / 4)) and (K * ((N-2) / 4)) where N is number of poles - leave at 0 if unknown */
+ public resistanceVariation: number;
+
+ /**
+ * Creates a new Advanced instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Advanced instance
+ */
+ public static create(properties?: mirabuf.motor.DCMotor.IAdvanced): mirabuf.motor.DCMotor.Advanced;
+
+ /**
+ * Encodes the specified Advanced message. Does not implicitly {@link mirabuf.motor.DCMotor.Advanced.verify|verify} messages.
+ * @param message Advanced message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.motor.DCMotor.IAdvanced, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Advanced message, length delimited. Does not implicitly {@link mirabuf.motor.DCMotor.Advanced.verify|verify} messages.
+ * @param message Advanced message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.motor.DCMotor.IAdvanced, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes an Advanced message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Advanced
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.motor.DCMotor.Advanced;
+
+ /**
+ * Decodes an Advanced message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Advanced
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.motor.DCMotor.Advanced;
+
+ /**
+ * Verifies an Advanced message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates an Advanced message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Advanced
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.motor.DCMotor.Advanced;
+
+ /**
+ * Creates a plain object from an Advanced message. Also converts values to other types if specified.
+ * @param message Advanced
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.motor.DCMotor.Advanced, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Advanced to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Advanced
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+ }
+ }
+
+ /** Namespace material. */
+ namespace material {
+
+ /** Properties of a Materials. */
+ interface IMaterials {
+
+ /** Identifiable information (id, name, version) */
+ info?: (mirabuf.IInfo|null);
+
+ /** Map of Physical Materials */
+ physicalMaterials?: ({ [k: string]: mirabuf.material.IPhysicalMaterial }|null);
+
+ /** Map of Appearances that are purely visual */
+ appearances?: ({ [k: string]: mirabuf.material.IAppearance }|null);
+ }
+
+ /**
+ * Represents a File or Set of Materials with Appearances and Physical Data
+ *
+ * Can be Stored in AssemblyData
+ */
+ class Materials implements IMaterials {
+
+ /**
+ * Constructs a new Materials.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.IMaterials);
+
+ /** Identifiable information (id, name, version) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Map of Physical Materials */
+ public physicalMaterials: { [k: string]: mirabuf.material.IPhysicalMaterial };
+
+ /** Map of Appearances that are purely visual */
+ public appearances: { [k: string]: mirabuf.material.IAppearance };
+
+ /**
+ * Creates a new Materials instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Materials instance
+ */
+ public static create(properties?: mirabuf.material.IMaterials): mirabuf.material.Materials;
+
+ /**
+ * Encodes the specified Materials message. Does not implicitly {@link mirabuf.material.Materials.verify|verify} messages.
+ * @param message Materials message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.IMaterials, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Materials message, length delimited. Does not implicitly {@link mirabuf.material.Materials.verify|verify} messages.
+ * @param message Materials message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.IMaterials, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Materials message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Materials
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.Materials;
+
+ /**
+ * Decodes a Materials message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Materials
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.Materials;
+
+ /**
+ * Verifies a Materials message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Materials message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Materials
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.Materials;
+
+ /**
+ * Creates a plain object from a Materials message. Also converts values to other types if specified.
+ * @param message Materials
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.Materials, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Materials to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Materials
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of an Appearance. */
+ interface IAppearance {
+
+ /** Identfiable information (id, name, version) */
+ info?: (mirabuf.IInfo|null);
+
+ /** albedo map RGBA 0-255 */
+ albedo?: (mirabuf.IColor|null);
+
+ /** roughness value 0-1 */
+ roughness?: (number|null);
+
+ /** metallic value 0-1 */
+ metallic?: (number|null);
+
+ /** specular value 0-1 */
+ specular?: (number|null);
+ }
+
+ /**
+ * Contains information on how a object looks
+ * Limited to just color for now
+ */
+ class Appearance implements IAppearance {
+
+ /**
+ * Constructs a new Appearance.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.IAppearance);
+
+ /** Identfiable information (id, name, version) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** albedo map RGBA 0-255 */
+ public albedo?: (mirabuf.IColor|null);
+
+ /** roughness value 0-1 */
+ public roughness: number;
+
+ /** metallic value 0-1 */
+ public metallic: number;
+
+ /** specular value 0-1 */
+ public specular: number;
+
+ /**
+ * Creates a new Appearance instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Appearance instance
+ */
+ public static create(properties?: mirabuf.material.IAppearance): mirabuf.material.Appearance;
+
+ /**
+ * Encodes the specified Appearance message. Does not implicitly {@link mirabuf.material.Appearance.verify|verify} messages.
+ * @param message Appearance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.IAppearance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Appearance message, length delimited. Does not implicitly {@link mirabuf.material.Appearance.verify|verify} messages.
+ * @param message Appearance message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.IAppearance, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes an Appearance message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Appearance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.Appearance;
+
+ /**
+ * Decodes an Appearance message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Appearance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.Appearance;
+
+ /**
+ * Verifies an Appearance message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates an Appearance message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Appearance
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.Appearance;
+
+ /**
+ * Creates a plain object from an Appearance message. Also converts values to other types if specified.
+ * @param message Appearance
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.Appearance, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Appearance to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Appearance
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a PhysicalMaterial. */
+ interface IPhysicalMaterial {
+
+ /** Identifiable information (id, name, version, etc) */
+ info?: (mirabuf.IInfo|null);
+
+ /** short description of physical material */
+ description?: (string|null);
+
+ /** Thermal Physical properties of the model OPTIONAL */
+ thermal?: (mirabuf.material.PhysicalMaterial.IThermal|null);
+
+ /** Mechanical properties of the model OPTIONAL */
+ mechanical?: (mirabuf.material.PhysicalMaterial.IMechanical|null);
+
+ /** Physical Strength properties of the model OPTIONAL */
+ strength?: (mirabuf.material.PhysicalMaterial.IStrength|null);
+
+ /** Frictional force for dampening - Interpolate (0-1) */
+ dynamicFriction?: (number|null);
+
+ /** Frictional force override at stop - Interpolate (0-1) */
+ staticFriction?: (number|null);
+
+ /** Restitution of the object - Interpolate (0-1) */
+ restitution?: (number|null);
+
+ /** should this object deform when encountering large forces - TODO: This needs a proper message and equation field */
+ deformable?: (boolean|null);
+
+ /** generic type to assign some default params */
+ matType?: (mirabuf.material.PhysicalMaterial.MaterialType|null);
+ }
+
+ /** Data to represent any given Physical Material */
+ class PhysicalMaterial implements IPhysicalMaterial {
+
+ /**
+ * Constructs a new PhysicalMaterial.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.IPhysicalMaterial);
+
+ /** Identifiable information (id, name, version, etc) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** short description of physical material */
+ public description: string;
+
+ /** Thermal Physical properties of the model OPTIONAL */
+ public thermal?: (mirabuf.material.PhysicalMaterial.IThermal|null);
+
+ /** Mechanical properties of the model OPTIONAL */
+ public mechanical?: (mirabuf.material.PhysicalMaterial.IMechanical|null);
+
+ /** Physical Strength properties of the model OPTIONAL */
+ public strength?: (mirabuf.material.PhysicalMaterial.IStrength|null);
+
+ /** Frictional force for dampening - Interpolate (0-1) */
+ public dynamicFriction: number;
+
+ /** Frictional force override at stop - Interpolate (0-1) */
+ public staticFriction: number;
+
+ /** Restitution of the object - Interpolate (0-1) */
+ public restitution: number;
+
+ /** should this object deform when encountering large forces - TODO: This needs a proper message and equation field */
+ public deformable: boolean;
+
+ /** generic type to assign some default params */
+ public matType: mirabuf.material.PhysicalMaterial.MaterialType;
+
+ /**
+ * Creates a new PhysicalMaterial instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns PhysicalMaterial instance
+ */
+ public static create(properties?: mirabuf.material.IPhysicalMaterial): mirabuf.material.PhysicalMaterial;
+
+ /**
+ * Encodes the specified PhysicalMaterial message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.verify|verify} messages.
+ * @param message PhysicalMaterial message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.IPhysicalMaterial, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified PhysicalMaterial message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.verify|verify} messages.
+ * @param message PhysicalMaterial message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.IPhysicalMaterial, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a PhysicalMaterial message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns PhysicalMaterial
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.PhysicalMaterial;
+
+ /**
+ * Decodes a PhysicalMaterial message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns PhysicalMaterial
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.PhysicalMaterial;
+
+ /**
+ * Verifies a PhysicalMaterial message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a PhysicalMaterial message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns PhysicalMaterial
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.PhysicalMaterial;
+
+ /**
+ * Creates a plain object from a PhysicalMaterial message. Also converts values to other types if specified.
+ * @param message PhysicalMaterial
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.PhysicalMaterial, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this PhysicalMaterial to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for PhysicalMaterial
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ namespace PhysicalMaterial {
+
+ /** MaterialType enum. */
+ enum MaterialType {
+ METAL = 0,
+ PLASTIC = 1
+ }
+
+ /** Properties of a Thermal. */
+ interface IThermal {
+
+ /** W/(m*K) */
+ thermalConductivity?: (number|null);
+
+ /** J/(g*C) */
+ specificHeat?: (number|null);
+
+ /** um/(m*C) */
+ thermalExpansionCoefficient?: (number|null);
+ }
+
+ /** Thermal Properties Set Definition for Simulation. */
+ class Thermal implements IThermal {
+
+ /**
+ * Constructs a new Thermal.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.PhysicalMaterial.IThermal);
+
+ /** W/(m*K) */
+ public thermalConductivity: number;
+
+ /** J/(g*C) */
+ public specificHeat: number;
+
+ /** um/(m*C) */
+ public thermalExpansionCoefficient: number;
+
+ /**
+ * Creates a new Thermal instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Thermal instance
+ */
+ public static create(properties?: mirabuf.material.PhysicalMaterial.IThermal): mirabuf.material.PhysicalMaterial.Thermal;
+
+ /**
+ * Encodes the specified Thermal message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Thermal.verify|verify} messages.
+ * @param message Thermal message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.PhysicalMaterial.IThermal, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Thermal message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Thermal.verify|verify} messages.
+ * @param message Thermal message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.PhysicalMaterial.IThermal, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Thermal message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Thermal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.PhysicalMaterial.Thermal;
+
+ /**
+ * Decodes a Thermal message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Thermal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.PhysicalMaterial.Thermal;
+
+ /**
+ * Verifies a Thermal message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Thermal message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Thermal
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.PhysicalMaterial.Thermal;
+
+ /**
+ * Creates a plain object from a Thermal message. Also converts values to other types if specified.
+ * @param message Thermal
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.PhysicalMaterial.Thermal, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Thermal to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Thermal
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Mechanical. */
+ interface IMechanical {
+
+ /** GPa */
+ youngMod?: (number|null);
+
+ /** ? */
+ poissonRatio?: (number|null);
+
+ /** MPa */
+ shearMod?: (number|null);
+
+ /** g/cm^3 */
+ density?: (number|null);
+
+ /** ? */
+ dampingCoefficient?: (number|null);
+ }
+
+ /** Mechanical Properties Set Definition for Simulation. */
+ class Mechanical implements IMechanical {
+
+ /**
+ * Constructs a new Mechanical.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.PhysicalMaterial.IMechanical);
+
+ /** GPa */
+ public youngMod: number;
+
+ /** ? */
+ public poissonRatio: number;
+
+ /** MPa */
+ public shearMod: number;
+
+ /** g/cm^3 */
+ public density: number;
+
+ /** ? */
+ public dampingCoefficient: number;
+
+ /**
+ * Creates a new Mechanical instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Mechanical instance
+ */
+ public static create(properties?: mirabuf.material.PhysicalMaterial.IMechanical): mirabuf.material.PhysicalMaterial.Mechanical;
+
+ /**
+ * Encodes the specified Mechanical message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Mechanical.verify|verify} messages.
+ * @param message Mechanical message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.PhysicalMaterial.IMechanical, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Mechanical message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Mechanical.verify|verify} messages.
+ * @param message Mechanical message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.PhysicalMaterial.IMechanical, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Mechanical message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Mechanical
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.PhysicalMaterial.Mechanical;
+
+ /**
+ * Decodes a Mechanical message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Mechanical
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.PhysicalMaterial.Mechanical;
+
+ /**
+ * Verifies a Mechanical message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Mechanical message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Mechanical
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.PhysicalMaterial.Mechanical;
+
+ /**
+ * Creates a plain object from a Mechanical message. Also converts values to other types if specified.
+ * @param message Mechanical
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.PhysicalMaterial.Mechanical, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Mechanical to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Mechanical
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** Properties of a Strength. */
+ interface IStrength {
+
+ /** MPa */
+ yieldStrength?: (number|null);
+
+ /** MPa */
+ tensileStrength?: (number|null);
+
+ /** yes / no */
+ thermalTreatment?: (boolean|null);
+ }
+
+ /** Strength Properties Set Definition for Simulation. */
+ class Strength implements IStrength {
+
+ /**
+ * Constructs a new Strength.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.material.PhysicalMaterial.IStrength);
+
+ /** MPa */
+ public yieldStrength: number;
+
+ /** MPa */
+ public tensileStrength: number;
+
+ /** yes / no */
+ public thermalTreatment: boolean;
+
+ /**
+ * Creates a new Strength instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Strength instance
+ */
+ public static create(properties?: mirabuf.material.PhysicalMaterial.IStrength): mirabuf.material.PhysicalMaterial.Strength;
+
+ /**
+ * Encodes the specified Strength message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Strength.verify|verify} messages.
+ * @param message Strength message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.material.PhysicalMaterial.IStrength, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Strength message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Strength.verify|verify} messages.
+ * @param message Strength message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.material.PhysicalMaterial.IStrength, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Strength message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Strength
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.material.PhysicalMaterial.Strength;
+
+ /**
+ * Decodes a Strength message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Strength
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.material.PhysicalMaterial.Strength;
+
+ /**
+ * Verifies a Strength message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Strength message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Strength
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.material.PhysicalMaterial.Strength;
+
+ /**
+ * Creates a plain object from a Strength message. Also converts values to other types if specified.
+ * @param message Strength
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.material.PhysicalMaterial.Strength, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Strength to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Strength
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+ }
+ }
+
+ /** Namespace signal. */
+ namespace signal {
+
+ /** Properties of a Signals. */
+ interface ISignals {
+
+ /** Has identifiable data (id, name, version) */
+ info?: (mirabuf.IInfo|null);
+
+ /** Contains a full collection of symbols */
+ signalMap?: ({ [k: string]: mirabuf.signal.ISignal }|null);
+ }
+
+ /** Signals is a container for all of the potential signals. */
+ class Signals implements ISignals {
+
+ /**
+ * Constructs a new Signals.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.signal.ISignals);
+
+ /** Has identifiable data (id, name, version) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Contains a full collection of symbols */
+ public signalMap: { [k: string]: mirabuf.signal.ISignal };
+
+ /**
+ * Creates a new Signals instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Signals instance
+ */
+ public static create(properties?: mirabuf.signal.ISignals): mirabuf.signal.Signals;
+
+ /**
+ * Encodes the specified Signals message. Does not implicitly {@link mirabuf.signal.Signals.verify|verify} messages.
+ * @param message Signals message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.signal.ISignals, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Signals message, length delimited. Does not implicitly {@link mirabuf.signal.Signals.verify|verify} messages.
+ * @param message Signals message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.signal.ISignals, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Signals message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Signals
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.signal.Signals;
+
+ /**
+ * Decodes a Signals message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Signals
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.signal.Signals;
+
+ /**
+ * Verifies a Signals message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Signals message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Signals
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.signal.Signals;
+
+ /**
+ * Creates a plain object from a Signals message. Also converts values to other types if specified.
+ * @param message Signals
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.signal.Signals, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Signals to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Signals
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+
+ /** IOType is a way to specify Input or Output. */
+ enum IOType {
+ INPUT = 0,
+ OUTPUT = 1
+ }
+
+ /**
+ * DeviceType needs to be a type of device that has a supported connection
+ * As well as a signal frmae but that can come later
+ */
+ enum DeviceType {
+ PWM = 0,
+ Digital = 1,
+ Analog = 2,
+ I2C = 3,
+ CANBUS = 4,
+ CUSTOM = 5
+ }
+
+ /** Properties of a Signal. */
+ interface ISignal {
+
+ /** Has identifiable data (id, name, version) */
+ info?: (mirabuf.IInfo|null);
+
+ /** Is this a Input or Output */
+ io?: (mirabuf.signal.IOType|null);
+
+ /** The name of a custom input type that is not listed as a device type */
+ customType?: (string|null);
+
+ /** ID for a given signal that exists... PWM 2, CANBUS 4 */
+ signalId?: (number|null);
+
+ /** Enum for device type that should always be set */
+ deviceType?: (mirabuf.signal.DeviceType|null);
+ }
+
+ /**
+ * Signal is a way to define a controlling signal.
+ *
+ * TODO: Add Origin
+ * TODO: Decide how this is linked to a exported object
+ */
+ class Signal implements ISignal {
+
+ /**
+ * Constructs a new Signal.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: mirabuf.signal.ISignal);
+
+ /** Has identifiable data (id, name, version) */
+ public info?: (mirabuf.IInfo|null);
+
+ /** Is this a Input or Output */
+ public io: mirabuf.signal.IOType;
+
+ /** The name of a custom input type that is not listed as a device type */
+ public customType: string;
+
+ /** ID for a given signal that exists... PWM 2, CANBUS 4 */
+ public signalId: number;
+
+ /** Enum for device type that should always be set */
+ public deviceType: mirabuf.signal.DeviceType;
+
+ /**
+ * Creates a new Signal instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns Signal instance
+ */
+ public static create(properties?: mirabuf.signal.ISignal): mirabuf.signal.Signal;
+
+ /**
+ * Encodes the specified Signal message. Does not implicitly {@link mirabuf.signal.Signal.verify|verify} messages.
+ * @param message Signal message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encode(message: mirabuf.signal.ISignal, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified Signal message, length delimited. Does not implicitly {@link mirabuf.signal.Signal.verify|verify} messages.
+ * @param message Signal message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ public static encodeDelimited(message: mirabuf.signal.ISignal, writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Decodes a Signal message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns Signal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): mirabuf.signal.Signal;
+
+ /**
+ * Decodes a Signal message from the specified reader or buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns Signal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): mirabuf.signal.Signal;
+
+ /**
+ * Verifies a Signal message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ public static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a Signal message from a plain object. Also converts values to their respective internal types.
+ * @param object Plain object
+ * @returns Signal
+ */
+ public static fromObject(object: { [k: string]: any }): mirabuf.signal.Signal;
+
+ /**
+ * Creates a plain object from a Signal message. Also converts values to other types if specified.
+ * @param message Signal
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ public static toObject(message: mirabuf.signal.Signal, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this Signal to JSON.
+ * @returns JSON object
+ */
+ public toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the default type url for Signal
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns The default type url
+ */
+ public static getTypeUrl(typeUrlPrefix?: string): string;
+ }
+ }
+}
diff --git a/fission/src/proto/mirabuf.js b/fission/src/proto/mirabuf.js
new file mode 100644
index 0000000000..d195e18832
--- /dev/null
+++ b/fission/src/proto/mirabuf.js
@@ -0,0 +1,13291 @@
+/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/
+import * as $protobuf from "protobufjs/minimal";
+
+// Common aliases
+const $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;
+
+// Exported root namespace
+const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+export const mirabuf = $root.mirabuf = (() => {
+
+ /**
+ * Namespace mirabuf.
+ * @exports mirabuf
+ * @namespace
+ */
+ const mirabuf = {};
+
+ mirabuf.Assembly = (function() {
+
+ /**
+ * Properties of an Assembly.
+ * @memberof mirabuf
+ * @interface IAssembly
+ * @property {mirabuf.IInfo|null} [info] Basic information (name, Author, etc)
+ * @property {mirabuf.IAssemblyData|null} [data] All of the data in the assembly
+ * @property {boolean|null} [dynamic] Can it be effected by the simulation dynamically
+ * @property {mirabuf.IPhysicalProperties|null} [physicalData] Overall physical data of the assembly
+ * @property {mirabuf.IGraphContainer|null} [designHierarchy] The Design hierarchy represented by Part Refs - The first object is a root container for all top level items
+ * @property {mirabuf.IGraphContainer|null} [jointHierarchy] The Joint hierarchy for compound shapes
+ * @property {mirabuf.ITransform|null} [transform] The Transform in space currently
+ * @property {mirabuf.IThumbnail|null} [thumbnail] Optional thumbnail saved from Fusion 360 or scraped from previous configuration
+ */
+
+ /**
+ * Constructs a new Assembly.
+ * @memberof mirabuf
+ * @classdesc Assembly
+ * Base Design to be interacted with
+ * THIS IS THE CURRENT FILE EXPORTED
+ * @implements IAssembly
+ * @constructor
+ * @param {mirabuf.IAssembly=} [properties] Properties to set
+ */
+ function Assembly(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Basic information (name, Author, etc)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.info = null;
+
+ /**
+ * All of the data in the assembly
+ * @member {mirabuf.IAssemblyData|null|undefined} data
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.data = null;
+
+ /**
+ * Can it be effected by the simulation dynamically
+ * @member {boolean} dynamic
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.dynamic = false;
+
+ /**
+ * Overall physical data of the assembly
+ * @member {mirabuf.IPhysicalProperties|null|undefined} physicalData
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.physicalData = null;
+
+ /**
+ * The Design hierarchy represented by Part Refs - The first object is a root container for all top level items
+ * @member {mirabuf.IGraphContainer|null|undefined} designHierarchy
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.designHierarchy = null;
+
+ /**
+ * The Joint hierarchy for compound shapes
+ * @member {mirabuf.IGraphContainer|null|undefined} jointHierarchy
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.jointHierarchy = null;
+
+ /**
+ * The Transform in space currently
+ * @member {mirabuf.ITransform|null|undefined} transform
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.transform = null;
+
+ /**
+ * Optional thumbnail saved from Fusion 360 or scraped from previous configuration
+ * @member {mirabuf.IThumbnail|null|undefined} thumbnail
+ * @memberof mirabuf.Assembly
+ * @instance
+ */
+ Assembly.prototype.thumbnail = null;
+
+ /**
+ * Creates a new Assembly instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {mirabuf.IAssembly=} [properties] Properties to set
+ * @returns {mirabuf.Assembly} Assembly instance
+ */
+ Assembly.create = function create(properties) {
+ return new Assembly(properties);
+ };
+
+ /**
+ * Encodes the specified Assembly message. Does not implicitly {@link mirabuf.Assembly.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {mirabuf.IAssembly} message Assembly message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Assembly.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+ $root.mirabuf.AssemblyData.encode(message.data, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.dynamic != null && Object.hasOwnProperty.call(message, "dynamic"))
+ writer.uint32(/* id 3, wireType 0 =*/24).bool(message.dynamic);
+ if (message.physicalData != null && Object.hasOwnProperty.call(message, "physicalData"))
+ $root.mirabuf.PhysicalProperties.encode(message.physicalData, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.designHierarchy != null && Object.hasOwnProperty.call(message, "designHierarchy"))
+ $root.mirabuf.GraphContainer.encode(message.designHierarchy, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ if (message.jointHierarchy != null && Object.hasOwnProperty.call(message, "jointHierarchy"))
+ $root.mirabuf.GraphContainer.encode(message.jointHierarchy, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
+ if (message.transform != null && Object.hasOwnProperty.call(message, "transform"))
+ $root.mirabuf.Transform.encode(message.transform, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+ if (message.thumbnail != null && Object.hasOwnProperty.call(message, "thumbnail"))
+ $root.mirabuf.Thumbnail.encode(message.thumbnail, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Assembly message, length delimited. Does not implicitly {@link mirabuf.Assembly.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {mirabuf.IAssembly} message Assembly message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Assembly.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes an Assembly message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Assembly} Assembly
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Assembly.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Assembly();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.data = $root.mirabuf.AssemblyData.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.dynamic = reader.bool();
+ break;
+ }
+ case 4: {
+ message.physicalData = $root.mirabuf.PhysicalProperties.decode(reader, reader.uint32());
+ break;
+ }
+ case 5: {
+ message.designHierarchy = $root.mirabuf.GraphContainer.decode(reader, reader.uint32());
+ break;
+ }
+ case 6: {
+ message.jointHierarchy = $root.mirabuf.GraphContainer.decode(reader, reader.uint32());
+ break;
+ }
+ case 7: {
+ message.transform = $root.mirabuf.Transform.decode(reader, reader.uint32());
+ break;
+ }
+ case 8: {
+ message.thumbnail = $root.mirabuf.Thumbnail.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes an Assembly message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Assembly} Assembly
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Assembly.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies an Assembly message.
+ * @function verify
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Assembly.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.data != null && message.hasOwnProperty("data")) {
+ let error = $root.mirabuf.AssemblyData.verify(message.data);
+ if (error)
+ return "data." + error;
+ }
+ if (message.dynamic != null && message.hasOwnProperty("dynamic"))
+ if (typeof message.dynamic !== "boolean")
+ return "dynamic: boolean expected";
+ if (message.physicalData != null && message.hasOwnProperty("physicalData")) {
+ let error = $root.mirabuf.PhysicalProperties.verify(message.physicalData);
+ if (error)
+ return "physicalData." + error;
+ }
+ if (message.designHierarchy != null && message.hasOwnProperty("designHierarchy")) {
+ let error = $root.mirabuf.GraphContainer.verify(message.designHierarchy);
+ if (error)
+ return "designHierarchy." + error;
+ }
+ if (message.jointHierarchy != null && message.hasOwnProperty("jointHierarchy")) {
+ let error = $root.mirabuf.GraphContainer.verify(message.jointHierarchy);
+ if (error)
+ return "jointHierarchy." + error;
+ }
+ if (message.transform != null && message.hasOwnProperty("transform")) {
+ let error = $root.mirabuf.Transform.verify(message.transform);
+ if (error)
+ return "transform." + error;
+ }
+ if (message.thumbnail != null && message.hasOwnProperty("thumbnail")) {
+ let error = $root.mirabuf.Thumbnail.verify(message.thumbnail);
+ if (error)
+ return "thumbnail." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates an Assembly message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Assembly} Assembly
+ */
+ Assembly.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Assembly)
+ return object;
+ let message = new $root.mirabuf.Assembly();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.Assembly.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.data != null) {
+ if (typeof object.data !== "object")
+ throw TypeError(".mirabuf.Assembly.data: object expected");
+ message.data = $root.mirabuf.AssemblyData.fromObject(object.data);
+ }
+ if (object.dynamic != null)
+ message.dynamic = Boolean(object.dynamic);
+ if (object.physicalData != null) {
+ if (typeof object.physicalData !== "object")
+ throw TypeError(".mirabuf.Assembly.physicalData: object expected");
+ message.physicalData = $root.mirabuf.PhysicalProperties.fromObject(object.physicalData);
+ }
+ if (object.designHierarchy != null) {
+ if (typeof object.designHierarchy !== "object")
+ throw TypeError(".mirabuf.Assembly.designHierarchy: object expected");
+ message.designHierarchy = $root.mirabuf.GraphContainer.fromObject(object.designHierarchy);
+ }
+ if (object.jointHierarchy != null) {
+ if (typeof object.jointHierarchy !== "object")
+ throw TypeError(".mirabuf.Assembly.jointHierarchy: object expected");
+ message.jointHierarchy = $root.mirabuf.GraphContainer.fromObject(object.jointHierarchy);
+ }
+ if (object.transform != null) {
+ if (typeof object.transform !== "object")
+ throw TypeError(".mirabuf.Assembly.transform: object expected");
+ message.transform = $root.mirabuf.Transform.fromObject(object.transform);
+ }
+ if (object.thumbnail != null) {
+ if (typeof object.thumbnail !== "object")
+ throw TypeError(".mirabuf.Assembly.thumbnail: object expected");
+ message.thumbnail = $root.mirabuf.Thumbnail.fromObject(object.thumbnail);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from an Assembly message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {mirabuf.Assembly} message Assembly
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Assembly.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.data = null;
+ object.dynamic = false;
+ object.physicalData = null;
+ object.designHierarchy = null;
+ object.jointHierarchy = null;
+ object.transform = null;
+ object.thumbnail = null;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.data != null && message.hasOwnProperty("data"))
+ object.data = $root.mirabuf.AssemblyData.toObject(message.data, options);
+ if (message.dynamic != null && message.hasOwnProperty("dynamic"))
+ object.dynamic = message.dynamic;
+ if (message.physicalData != null && message.hasOwnProperty("physicalData"))
+ object.physicalData = $root.mirabuf.PhysicalProperties.toObject(message.physicalData, options);
+ if (message.designHierarchy != null && message.hasOwnProperty("designHierarchy"))
+ object.designHierarchy = $root.mirabuf.GraphContainer.toObject(message.designHierarchy, options);
+ if (message.jointHierarchy != null && message.hasOwnProperty("jointHierarchy"))
+ object.jointHierarchy = $root.mirabuf.GraphContainer.toObject(message.jointHierarchy, options);
+ if (message.transform != null && message.hasOwnProperty("transform"))
+ object.transform = $root.mirabuf.Transform.toObject(message.transform, options);
+ if (message.thumbnail != null && message.hasOwnProperty("thumbnail"))
+ object.thumbnail = $root.mirabuf.Thumbnail.toObject(message.thumbnail, options);
+ return object;
+ };
+
+ /**
+ * Converts this Assembly to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Assembly
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Assembly.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Assembly
+ * @function getTypeUrl
+ * @memberof mirabuf.Assembly
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Assembly.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Assembly";
+ };
+
+ return Assembly;
+ })();
+
+ mirabuf.AssemblyData = (function() {
+
+ /**
+ * Properties of an AssemblyData.
+ * @memberof mirabuf
+ * @interface IAssemblyData
+ * @property {mirabuf.IParts|null} [parts] Meshes and Design Objects
+ * @property {mirabuf.joint.IJoints|null} [joints] Joint Definition Set
+ * @property {mirabuf.material.IMaterials|null} [materials] Appearance and Physical Material Set
+ * @property {mirabuf.signal.ISignals|null} [signals] AssemblyData signals
+ */
+
+ /**
+ * Constructs a new AssemblyData.
+ * @memberof mirabuf
+ * @classdesc Data used to construct the assembly
+ * @implements IAssemblyData
+ * @constructor
+ * @param {mirabuf.IAssemblyData=} [properties] Properties to set
+ */
+ function AssemblyData(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Meshes and Design Objects
+ * @member {mirabuf.IParts|null|undefined} parts
+ * @memberof mirabuf.AssemblyData
+ * @instance
+ */
+ AssemblyData.prototype.parts = null;
+
+ /**
+ * Joint Definition Set
+ * @member {mirabuf.joint.IJoints|null|undefined} joints
+ * @memberof mirabuf.AssemblyData
+ * @instance
+ */
+ AssemblyData.prototype.joints = null;
+
+ /**
+ * Appearance and Physical Material Set
+ * @member {mirabuf.material.IMaterials|null|undefined} materials
+ * @memberof mirabuf.AssemblyData
+ * @instance
+ */
+ AssemblyData.prototype.materials = null;
+
+ /**
+ * AssemblyData signals.
+ * @member {mirabuf.signal.ISignals|null|undefined} signals
+ * @memberof mirabuf.AssemblyData
+ * @instance
+ */
+ AssemblyData.prototype.signals = null;
+
+ /**
+ * Creates a new AssemblyData instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {mirabuf.IAssemblyData=} [properties] Properties to set
+ * @returns {mirabuf.AssemblyData} AssemblyData instance
+ */
+ AssemblyData.create = function create(properties) {
+ return new AssemblyData(properties);
+ };
+
+ /**
+ * Encodes the specified AssemblyData message. Does not implicitly {@link mirabuf.AssemblyData.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {mirabuf.IAssemblyData} message AssemblyData message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ AssemblyData.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.parts != null && Object.hasOwnProperty.call(message, "parts"))
+ $root.mirabuf.Parts.encode(message.parts, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.joints != null && Object.hasOwnProperty.call(message, "joints"))
+ $root.mirabuf.joint.Joints.encode(message.joints, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.materials != null && Object.hasOwnProperty.call(message, "materials"))
+ $root.mirabuf.material.Materials.encode(message.materials, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ if (message.signals != null && Object.hasOwnProperty.call(message, "signals"))
+ $root.mirabuf.signal.Signals.encode(message.signals, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified AssemblyData message, length delimited. Does not implicitly {@link mirabuf.AssemblyData.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {mirabuf.IAssemblyData} message AssemblyData message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ AssemblyData.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes an AssemblyData message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.AssemblyData} AssemblyData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ AssemblyData.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.AssemblyData();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.parts = $root.mirabuf.Parts.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.joints = $root.mirabuf.joint.Joints.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.materials = $root.mirabuf.material.Materials.decode(reader, reader.uint32());
+ break;
+ }
+ case 4: {
+ message.signals = $root.mirabuf.signal.Signals.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes an AssemblyData message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.AssemblyData} AssemblyData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ AssemblyData.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies an AssemblyData message.
+ * @function verify
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ AssemblyData.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.parts != null && message.hasOwnProperty("parts")) {
+ let error = $root.mirabuf.Parts.verify(message.parts);
+ if (error)
+ return "parts." + error;
+ }
+ if (message.joints != null && message.hasOwnProperty("joints")) {
+ let error = $root.mirabuf.joint.Joints.verify(message.joints);
+ if (error)
+ return "joints." + error;
+ }
+ if (message.materials != null && message.hasOwnProperty("materials")) {
+ let error = $root.mirabuf.material.Materials.verify(message.materials);
+ if (error)
+ return "materials." + error;
+ }
+ if (message.signals != null && message.hasOwnProperty("signals")) {
+ let error = $root.mirabuf.signal.Signals.verify(message.signals);
+ if (error)
+ return "signals." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates an AssemblyData message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.AssemblyData} AssemblyData
+ */
+ AssemblyData.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.AssemblyData)
+ return object;
+ let message = new $root.mirabuf.AssemblyData();
+ if (object.parts != null) {
+ if (typeof object.parts !== "object")
+ throw TypeError(".mirabuf.AssemblyData.parts: object expected");
+ message.parts = $root.mirabuf.Parts.fromObject(object.parts);
+ }
+ if (object.joints != null) {
+ if (typeof object.joints !== "object")
+ throw TypeError(".mirabuf.AssemblyData.joints: object expected");
+ message.joints = $root.mirabuf.joint.Joints.fromObject(object.joints);
+ }
+ if (object.materials != null) {
+ if (typeof object.materials !== "object")
+ throw TypeError(".mirabuf.AssemblyData.materials: object expected");
+ message.materials = $root.mirabuf.material.Materials.fromObject(object.materials);
+ }
+ if (object.signals != null) {
+ if (typeof object.signals !== "object")
+ throw TypeError(".mirabuf.AssemblyData.signals: object expected");
+ message.signals = $root.mirabuf.signal.Signals.fromObject(object.signals);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from an AssemblyData message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {mirabuf.AssemblyData} message AssemblyData
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ AssemblyData.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.parts = null;
+ object.joints = null;
+ object.materials = null;
+ object.signals = null;
+ }
+ if (message.parts != null && message.hasOwnProperty("parts"))
+ object.parts = $root.mirabuf.Parts.toObject(message.parts, options);
+ if (message.joints != null && message.hasOwnProperty("joints"))
+ object.joints = $root.mirabuf.joint.Joints.toObject(message.joints, options);
+ if (message.materials != null && message.hasOwnProperty("materials"))
+ object.materials = $root.mirabuf.material.Materials.toObject(message.materials, options);
+ if (message.signals != null && message.hasOwnProperty("signals"))
+ object.signals = $root.mirabuf.signal.Signals.toObject(message.signals, options);
+ return object;
+ };
+
+ /**
+ * Converts this AssemblyData to JSON.
+ * @function toJSON
+ * @memberof mirabuf.AssemblyData
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ AssemblyData.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for AssemblyData
+ * @function getTypeUrl
+ * @memberof mirabuf.AssemblyData
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ AssemblyData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.AssemblyData";
+ };
+
+ return AssemblyData;
+ })();
+
+ mirabuf.Parts = (function() {
+
+ /**
+ * Properties of a Parts.
+ * @memberof mirabuf
+ * @interface IParts
+ * @property {mirabuf.IInfo|null} [info] Part name, version, GUID
+ * @property {Object.|null} [partDefinitions] Map of the Exported Part Definitions
+ * @property {Object.|null} [partInstances] Map of the Exported Parts that make up the object
+ * @property {mirabuf.IUserData|null} [userData] other associated data that can be used
+ */
+
+ /**
+ * Constructs a new Parts.
+ * @memberof mirabuf
+ * @classdesc Represents a Parts.
+ * @implements IParts
+ * @constructor
+ * @param {mirabuf.IParts=} [properties] Properties to set
+ */
+ function Parts(properties) {
+ this.partDefinitions = {};
+ this.partInstances = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Part name, version, GUID
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.Parts
+ * @instance
+ */
+ Parts.prototype.info = null;
+
+ /**
+ * Map of the Exported Part Definitions
+ * @member {Object.} partDefinitions
+ * @memberof mirabuf.Parts
+ * @instance
+ */
+ Parts.prototype.partDefinitions = $util.emptyObject;
+
+ /**
+ * Map of the Exported Parts that make up the object
+ * @member {Object.} partInstances
+ * @memberof mirabuf.Parts
+ * @instance
+ */
+ Parts.prototype.partInstances = $util.emptyObject;
+
+ /**
+ * other associated data that can be used
+ * @member {mirabuf.IUserData|null|undefined} userData
+ * @memberof mirabuf.Parts
+ * @instance
+ */
+ Parts.prototype.userData = null;
+
+ /**
+ * Creates a new Parts instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {mirabuf.IParts=} [properties] Properties to set
+ * @returns {mirabuf.Parts} Parts instance
+ */
+ Parts.create = function create(properties) {
+ return new Parts(properties);
+ };
+
+ /**
+ * Encodes the specified Parts message. Does not implicitly {@link mirabuf.Parts.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {mirabuf.IParts} message Parts message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Parts.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.partDefinitions != null && Object.hasOwnProperty.call(message, "partDefinitions"))
+ for (let keys = Object.keys(message.partDefinitions), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.PartDefinition.encode(message.partDefinitions[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ if (message.partInstances != null && Object.hasOwnProperty.call(message, "partInstances"))
+ for (let keys = Object.keys(message.partInstances), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.PartInstance.encode(message.partInstances[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ if (message.userData != null && Object.hasOwnProperty.call(message, "userData"))
+ $root.mirabuf.UserData.encode(message.userData, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Parts message, length delimited. Does not implicitly {@link mirabuf.Parts.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {mirabuf.IParts} message Parts message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Parts.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Parts message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Parts} Parts
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Parts.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Parts(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (message.partDefinitions === $util.emptyObject)
+ message.partDefinitions = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.PartDefinition.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.partDefinitions[key] = value;
+ break;
+ }
+ case 3: {
+ if (message.partInstances === $util.emptyObject)
+ message.partInstances = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.PartInstance.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.partInstances[key] = value;
+ break;
+ }
+ case 4: {
+ message.userData = $root.mirabuf.UserData.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Parts message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Parts} Parts
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Parts.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Parts message.
+ * @function verify
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Parts.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.partDefinitions != null && message.hasOwnProperty("partDefinitions")) {
+ if (!$util.isObject(message.partDefinitions))
+ return "partDefinitions: object expected";
+ let key = Object.keys(message.partDefinitions);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.PartDefinition.verify(message.partDefinitions[key[i]]);
+ if (error)
+ return "partDefinitions." + error;
+ }
+ }
+ if (message.partInstances != null && message.hasOwnProperty("partInstances")) {
+ if (!$util.isObject(message.partInstances))
+ return "partInstances: object expected";
+ let key = Object.keys(message.partInstances);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.PartInstance.verify(message.partInstances[key[i]]);
+ if (error)
+ return "partInstances." + error;
+ }
+ }
+ if (message.userData != null && message.hasOwnProperty("userData")) {
+ let error = $root.mirabuf.UserData.verify(message.userData);
+ if (error)
+ return "userData." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Parts message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Parts} Parts
+ */
+ Parts.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Parts)
+ return object;
+ let message = new $root.mirabuf.Parts();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.Parts.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.partDefinitions) {
+ if (typeof object.partDefinitions !== "object")
+ throw TypeError(".mirabuf.Parts.partDefinitions: object expected");
+ message.partDefinitions = {};
+ for (let keys = Object.keys(object.partDefinitions), i = 0; i < keys.length; ++i) {
+ if (typeof object.partDefinitions[keys[i]] !== "object")
+ throw TypeError(".mirabuf.Parts.partDefinitions: object expected");
+ message.partDefinitions[keys[i]] = $root.mirabuf.PartDefinition.fromObject(object.partDefinitions[keys[i]]);
+ }
+ }
+ if (object.partInstances) {
+ if (typeof object.partInstances !== "object")
+ throw TypeError(".mirabuf.Parts.partInstances: object expected");
+ message.partInstances = {};
+ for (let keys = Object.keys(object.partInstances), i = 0; i < keys.length; ++i) {
+ if (typeof object.partInstances[keys[i]] !== "object")
+ throw TypeError(".mirabuf.Parts.partInstances: object expected");
+ message.partInstances[keys[i]] = $root.mirabuf.PartInstance.fromObject(object.partInstances[keys[i]]);
+ }
+ }
+ if (object.userData != null) {
+ if (typeof object.userData !== "object")
+ throw TypeError(".mirabuf.Parts.userData: object expected");
+ message.userData = $root.mirabuf.UserData.fromObject(object.userData);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Parts message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {mirabuf.Parts} message Parts
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Parts.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults) {
+ object.partDefinitions = {};
+ object.partInstances = {};
+ }
+ if (options.defaults) {
+ object.info = null;
+ object.userData = null;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ let keys2;
+ if (message.partDefinitions && (keys2 = Object.keys(message.partDefinitions)).length) {
+ object.partDefinitions = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.partDefinitions[keys2[j]] = $root.mirabuf.PartDefinition.toObject(message.partDefinitions[keys2[j]], options);
+ }
+ if (message.partInstances && (keys2 = Object.keys(message.partInstances)).length) {
+ object.partInstances = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.partInstances[keys2[j]] = $root.mirabuf.PartInstance.toObject(message.partInstances[keys2[j]], options);
+ }
+ if (message.userData != null && message.hasOwnProperty("userData"))
+ object.userData = $root.mirabuf.UserData.toObject(message.userData, options);
+ return object;
+ };
+
+ /**
+ * Converts this Parts to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Parts
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Parts.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Parts
+ * @function getTypeUrl
+ * @memberof mirabuf.Parts
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Parts.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Parts";
+ };
+
+ return Parts;
+ })();
+
+ mirabuf.PartDefinition = (function() {
+
+ /**
+ * Properties of a PartDefinition.
+ * @memberof mirabuf
+ * @interface IPartDefinition
+ * @property {mirabuf.IInfo|null} [info] Information about version - id - name
+ * @property {mirabuf.IPhysicalProperties|null} [physicalData] Physical data associated with Part
+ * @property {mirabuf.ITransform|null} [baseTransform] Base Transform applied - Most Likely Identity Matrix
+ * @property {Array.|null} [bodies] Mesh Bodies to populate part
+ * @property {boolean|null} [dynamic] Optional value to state whether an object is a dynamic object in a static assembly - all children are also considered overriden
+ * @property {number|null} [frictionOverride] Optional value for overriding the friction value 0-1
+ * @property {number|null} [massOverride] Optional value for overriding an indiviaul object's mass
+ */
+
+ /**
+ * Constructs a new PartDefinition.
+ * @memberof mirabuf
+ * @classdesc Part Definition
+ * Unique Definition of a part that can be replicated.
+ * Useful for keeping the object counter down in the scene.
+ * @implements IPartDefinition
+ * @constructor
+ * @param {mirabuf.IPartDefinition=} [properties] Properties to set
+ */
+ function PartDefinition(properties) {
+ this.bodies = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Information about version - id - name
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.info = null;
+
+ /**
+ * Physical data associated with Part
+ * @member {mirabuf.IPhysicalProperties|null|undefined} physicalData
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.physicalData = null;
+
+ /**
+ * Base Transform applied - Most Likely Identity Matrix
+ * @member {mirabuf.ITransform|null|undefined} baseTransform
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.baseTransform = null;
+
+ /**
+ * Mesh Bodies to populate part
+ * @member {Array.} bodies
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.bodies = $util.emptyArray;
+
+ /**
+ * Optional value to state whether an object is a dynamic object in a static assembly - all children are also considered overriden
+ * @member {boolean} dynamic
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.dynamic = false;
+
+ /**
+ * Optional value for overriding the friction value 0-1
+ * @member {number} frictionOverride
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.frictionOverride = 0;
+
+ /**
+ * Optional value for overriding an indiviaul object's mass
+ * @member {number} massOverride
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ */
+ PartDefinition.prototype.massOverride = 0;
+
+ /**
+ * Creates a new PartDefinition instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {mirabuf.IPartDefinition=} [properties] Properties to set
+ * @returns {mirabuf.PartDefinition} PartDefinition instance
+ */
+ PartDefinition.create = function create(properties) {
+ return new PartDefinition(properties);
+ };
+
+ /**
+ * Encodes the specified PartDefinition message. Does not implicitly {@link mirabuf.PartDefinition.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {mirabuf.IPartDefinition} message PartDefinition message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PartDefinition.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.physicalData != null && Object.hasOwnProperty.call(message, "physicalData"))
+ $root.mirabuf.PhysicalProperties.encode(message.physicalData, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.baseTransform != null && Object.hasOwnProperty.call(message, "baseTransform"))
+ $root.mirabuf.Transform.encode(message.baseTransform, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ if (message.bodies != null && message.bodies.length)
+ for (let i = 0; i < message.bodies.length; ++i)
+ $root.mirabuf.Body.encode(message.bodies[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.dynamic != null && Object.hasOwnProperty.call(message, "dynamic"))
+ writer.uint32(/* id 5, wireType 0 =*/40).bool(message.dynamic);
+ if (message.frictionOverride != null && Object.hasOwnProperty.call(message, "frictionOverride"))
+ writer.uint32(/* id 6, wireType 5 =*/53).float(message.frictionOverride);
+ if (message.massOverride != null && Object.hasOwnProperty.call(message, "massOverride"))
+ writer.uint32(/* id 7, wireType 5 =*/61).float(message.massOverride);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified PartDefinition message, length delimited. Does not implicitly {@link mirabuf.PartDefinition.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {mirabuf.IPartDefinition} message PartDefinition message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PartDefinition.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a PartDefinition message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.PartDefinition} PartDefinition
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PartDefinition.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.PartDefinition();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.physicalData = $root.mirabuf.PhysicalProperties.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.baseTransform = $root.mirabuf.Transform.decode(reader, reader.uint32());
+ break;
+ }
+ case 4: {
+ if (!(message.bodies && message.bodies.length))
+ message.bodies = [];
+ message.bodies.push($root.mirabuf.Body.decode(reader, reader.uint32()));
+ break;
+ }
+ case 5: {
+ message.dynamic = reader.bool();
+ break;
+ }
+ case 6: {
+ message.frictionOverride = reader.float();
+ break;
+ }
+ case 7: {
+ message.massOverride = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a PartDefinition message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.PartDefinition} PartDefinition
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PartDefinition.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a PartDefinition message.
+ * @function verify
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ PartDefinition.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.physicalData != null && message.hasOwnProperty("physicalData")) {
+ let error = $root.mirabuf.PhysicalProperties.verify(message.physicalData);
+ if (error)
+ return "physicalData." + error;
+ }
+ if (message.baseTransform != null && message.hasOwnProperty("baseTransform")) {
+ let error = $root.mirabuf.Transform.verify(message.baseTransform);
+ if (error)
+ return "baseTransform." + error;
+ }
+ if (message.bodies != null && message.hasOwnProperty("bodies")) {
+ if (!Array.isArray(message.bodies))
+ return "bodies: array expected";
+ for (let i = 0; i < message.bodies.length; ++i) {
+ let error = $root.mirabuf.Body.verify(message.bodies[i]);
+ if (error)
+ return "bodies." + error;
+ }
+ }
+ if (message.dynamic != null && message.hasOwnProperty("dynamic"))
+ if (typeof message.dynamic !== "boolean")
+ return "dynamic: boolean expected";
+ if (message.frictionOverride != null && message.hasOwnProperty("frictionOverride"))
+ if (typeof message.frictionOverride !== "number")
+ return "frictionOverride: number expected";
+ if (message.massOverride != null && message.hasOwnProperty("massOverride"))
+ if (typeof message.massOverride !== "number")
+ return "massOverride: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a PartDefinition message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.PartDefinition} PartDefinition
+ */
+ PartDefinition.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.PartDefinition)
+ return object;
+ let message = new $root.mirabuf.PartDefinition();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.PartDefinition.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.physicalData != null) {
+ if (typeof object.physicalData !== "object")
+ throw TypeError(".mirabuf.PartDefinition.physicalData: object expected");
+ message.physicalData = $root.mirabuf.PhysicalProperties.fromObject(object.physicalData);
+ }
+ if (object.baseTransform != null) {
+ if (typeof object.baseTransform !== "object")
+ throw TypeError(".mirabuf.PartDefinition.baseTransform: object expected");
+ message.baseTransform = $root.mirabuf.Transform.fromObject(object.baseTransform);
+ }
+ if (object.bodies) {
+ if (!Array.isArray(object.bodies))
+ throw TypeError(".mirabuf.PartDefinition.bodies: array expected");
+ message.bodies = [];
+ for (let i = 0; i < object.bodies.length; ++i) {
+ if (typeof object.bodies[i] !== "object")
+ throw TypeError(".mirabuf.PartDefinition.bodies: object expected");
+ message.bodies[i] = $root.mirabuf.Body.fromObject(object.bodies[i]);
+ }
+ }
+ if (object.dynamic != null)
+ message.dynamic = Boolean(object.dynamic);
+ if (object.frictionOverride != null)
+ message.frictionOverride = Number(object.frictionOverride);
+ if (object.massOverride != null)
+ message.massOverride = Number(object.massOverride);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a PartDefinition message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {mirabuf.PartDefinition} message PartDefinition
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ PartDefinition.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.bodies = [];
+ if (options.defaults) {
+ object.info = null;
+ object.physicalData = null;
+ object.baseTransform = null;
+ object.dynamic = false;
+ object.frictionOverride = 0;
+ object.massOverride = 0;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.physicalData != null && message.hasOwnProperty("physicalData"))
+ object.physicalData = $root.mirabuf.PhysicalProperties.toObject(message.physicalData, options);
+ if (message.baseTransform != null && message.hasOwnProperty("baseTransform"))
+ object.baseTransform = $root.mirabuf.Transform.toObject(message.baseTransform, options);
+ if (message.bodies && message.bodies.length) {
+ object.bodies = [];
+ for (let j = 0; j < message.bodies.length; ++j)
+ object.bodies[j] = $root.mirabuf.Body.toObject(message.bodies[j], options);
+ }
+ if (message.dynamic != null && message.hasOwnProperty("dynamic"))
+ object.dynamic = message.dynamic;
+ if (message.frictionOverride != null && message.hasOwnProperty("frictionOverride"))
+ object.frictionOverride = options.json && !isFinite(message.frictionOverride) ? String(message.frictionOverride) : message.frictionOverride;
+ if (message.massOverride != null && message.hasOwnProperty("massOverride"))
+ object.massOverride = options.json && !isFinite(message.massOverride) ? String(message.massOverride) : message.massOverride;
+ return object;
+ };
+
+ /**
+ * Converts this PartDefinition to JSON.
+ * @function toJSON
+ * @memberof mirabuf.PartDefinition
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ PartDefinition.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for PartDefinition
+ * @function getTypeUrl
+ * @memberof mirabuf.PartDefinition
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ PartDefinition.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.PartDefinition";
+ };
+
+ return PartDefinition;
+ })();
+
+ mirabuf.PartInstance = (function() {
+
+ /**
+ * Properties of a PartInstance.
+ * @memberof mirabuf
+ * @interface IPartInstance
+ * @property {mirabuf.IInfo|null} [info] PartInstance info
+ * @property {string|null} [partDefinitionReference] Reference to the Part Definition defined in Assembly Data
+ * @property {mirabuf.ITransform|null} [transform] Overriding the object transform (moves the part from the def) - in design hierarchy context
+ * @property {mirabuf.ITransform|null} [globalTransform] Position transform from a global scope
+ * @property {Array.|null} [joints] Joints that interact with this element
+ * @property {string|null} [appearance] PartInstance appearance
+ * @property {string|null} [physicalMaterial] Physical Material Reference to link to `Materials->PhysicalMaterial->Info->id`
+ * @property {boolean|null} [skipCollider] Flag that if enabled indicates we should skip generating a collider, defaults to FALSE or undefined
+ */
+
+ /**
+ * Constructs a new PartInstance.
+ * @memberof mirabuf
+ * @classdesc Represents a PartInstance.
+ * @implements IPartInstance
+ * @constructor
+ * @param {mirabuf.IPartInstance=} [properties] Properties to set
+ */
+ function PartInstance(properties) {
+ this.joints = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * PartInstance info.
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.info = null;
+
+ /**
+ * Reference to the Part Definition defined in Assembly Data
+ * @member {string} partDefinitionReference
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.partDefinitionReference = "";
+
+ /**
+ * Overriding the object transform (moves the part from the def) - in design hierarchy context
+ * @member {mirabuf.ITransform|null|undefined} transform
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.transform = null;
+
+ /**
+ * Position transform from a global scope
+ * @member {mirabuf.ITransform|null|undefined} globalTransform
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.globalTransform = null;
+
+ /**
+ * Joints that interact with this element
+ * @member {Array.} joints
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.joints = $util.emptyArray;
+
+ /**
+ * PartInstance appearance.
+ * @member {string} appearance
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.appearance = "";
+
+ /**
+ * Physical Material Reference to link to `Materials->PhysicalMaterial->Info->id`
+ * @member {string} physicalMaterial
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.physicalMaterial = "";
+
+ /**
+ * Flag that if enabled indicates we should skip generating a collider, defaults to FALSE or undefined
+ * @member {boolean} skipCollider
+ * @memberof mirabuf.PartInstance
+ * @instance
+ */
+ PartInstance.prototype.skipCollider = false;
+
+ /**
+ * Creates a new PartInstance instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {mirabuf.IPartInstance=} [properties] Properties to set
+ * @returns {mirabuf.PartInstance} PartInstance instance
+ */
+ PartInstance.create = function create(properties) {
+ return new PartInstance(properties);
+ };
+
+ /**
+ * Encodes the specified PartInstance message. Does not implicitly {@link mirabuf.PartInstance.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {mirabuf.IPartInstance} message PartInstance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PartInstance.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.partDefinitionReference != null && Object.hasOwnProperty.call(message, "partDefinitionReference"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.partDefinitionReference);
+ if (message.transform != null && Object.hasOwnProperty.call(message, "transform"))
+ $root.mirabuf.Transform.encode(message.transform, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ if (message.globalTransform != null && Object.hasOwnProperty.call(message, "globalTransform"))
+ $root.mirabuf.Transform.encode(message.globalTransform, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.joints != null && message.joints.length)
+ for (let i = 0; i < message.joints.length; ++i)
+ writer.uint32(/* id 5, wireType 2 =*/42).string(message.joints[i]);
+ if (message.appearance != null && Object.hasOwnProperty.call(message, "appearance"))
+ writer.uint32(/* id 6, wireType 2 =*/50).string(message.appearance);
+ if (message.physicalMaterial != null && Object.hasOwnProperty.call(message, "physicalMaterial"))
+ writer.uint32(/* id 7, wireType 2 =*/58).string(message.physicalMaterial);
+ if (message.skipCollider != null && Object.hasOwnProperty.call(message, "skipCollider"))
+ writer.uint32(/* id 8, wireType 0 =*/64).bool(message.skipCollider);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified PartInstance message, length delimited. Does not implicitly {@link mirabuf.PartInstance.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {mirabuf.IPartInstance} message PartInstance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PartInstance.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a PartInstance message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.PartInstance} PartInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PartInstance.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.PartInstance();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.partDefinitionReference = reader.string();
+ break;
+ }
+ case 3: {
+ message.transform = $root.mirabuf.Transform.decode(reader, reader.uint32());
+ break;
+ }
+ case 4: {
+ message.globalTransform = $root.mirabuf.Transform.decode(reader, reader.uint32());
+ break;
+ }
+ case 5: {
+ if (!(message.joints && message.joints.length))
+ message.joints = [];
+ message.joints.push(reader.string());
+ break;
+ }
+ case 6: {
+ message.appearance = reader.string();
+ break;
+ }
+ case 7: {
+ message.physicalMaterial = reader.string();
+ break;
+ }
+ case 8: {
+ message.skipCollider = reader.bool();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a PartInstance message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.PartInstance} PartInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PartInstance.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a PartInstance message.
+ * @function verify
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ PartInstance.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.partDefinitionReference != null && message.hasOwnProperty("partDefinitionReference"))
+ if (!$util.isString(message.partDefinitionReference))
+ return "partDefinitionReference: string expected";
+ if (message.transform != null && message.hasOwnProperty("transform")) {
+ let error = $root.mirabuf.Transform.verify(message.transform);
+ if (error)
+ return "transform." + error;
+ }
+ if (message.globalTransform != null && message.hasOwnProperty("globalTransform")) {
+ let error = $root.mirabuf.Transform.verify(message.globalTransform);
+ if (error)
+ return "globalTransform." + error;
+ }
+ if (message.joints != null && message.hasOwnProperty("joints")) {
+ if (!Array.isArray(message.joints))
+ return "joints: array expected";
+ for (let i = 0; i < message.joints.length; ++i)
+ if (!$util.isString(message.joints[i]))
+ return "joints: string[] expected";
+ }
+ if (message.appearance != null && message.hasOwnProperty("appearance"))
+ if (!$util.isString(message.appearance))
+ return "appearance: string expected";
+ if (message.physicalMaterial != null && message.hasOwnProperty("physicalMaterial"))
+ if (!$util.isString(message.physicalMaterial))
+ return "physicalMaterial: string expected";
+ if (message.skipCollider != null && message.hasOwnProperty("skipCollider"))
+ if (typeof message.skipCollider !== "boolean")
+ return "skipCollider: boolean expected";
+ return null;
+ };
+
+ /**
+ * Creates a PartInstance message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.PartInstance} PartInstance
+ */
+ PartInstance.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.PartInstance)
+ return object;
+ let message = new $root.mirabuf.PartInstance();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.PartInstance.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.partDefinitionReference != null)
+ message.partDefinitionReference = String(object.partDefinitionReference);
+ if (object.transform != null) {
+ if (typeof object.transform !== "object")
+ throw TypeError(".mirabuf.PartInstance.transform: object expected");
+ message.transform = $root.mirabuf.Transform.fromObject(object.transform);
+ }
+ if (object.globalTransform != null) {
+ if (typeof object.globalTransform !== "object")
+ throw TypeError(".mirabuf.PartInstance.globalTransform: object expected");
+ message.globalTransform = $root.mirabuf.Transform.fromObject(object.globalTransform);
+ }
+ if (object.joints) {
+ if (!Array.isArray(object.joints))
+ throw TypeError(".mirabuf.PartInstance.joints: array expected");
+ message.joints = [];
+ for (let i = 0; i < object.joints.length; ++i)
+ message.joints[i] = String(object.joints[i]);
+ }
+ if (object.appearance != null)
+ message.appearance = String(object.appearance);
+ if (object.physicalMaterial != null)
+ message.physicalMaterial = String(object.physicalMaterial);
+ if (object.skipCollider != null)
+ message.skipCollider = Boolean(object.skipCollider);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a PartInstance message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {mirabuf.PartInstance} message PartInstance
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ PartInstance.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.joints = [];
+ if (options.defaults) {
+ object.info = null;
+ object.partDefinitionReference = "";
+ object.transform = null;
+ object.globalTransform = null;
+ object.appearance = "";
+ object.physicalMaterial = "";
+ object.skipCollider = false;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.partDefinitionReference != null && message.hasOwnProperty("partDefinitionReference"))
+ object.partDefinitionReference = message.partDefinitionReference;
+ if (message.transform != null && message.hasOwnProperty("transform"))
+ object.transform = $root.mirabuf.Transform.toObject(message.transform, options);
+ if (message.globalTransform != null && message.hasOwnProperty("globalTransform"))
+ object.globalTransform = $root.mirabuf.Transform.toObject(message.globalTransform, options);
+ if (message.joints && message.joints.length) {
+ object.joints = [];
+ for (let j = 0; j < message.joints.length; ++j)
+ object.joints[j] = message.joints[j];
+ }
+ if (message.appearance != null && message.hasOwnProperty("appearance"))
+ object.appearance = message.appearance;
+ if (message.physicalMaterial != null && message.hasOwnProperty("physicalMaterial"))
+ object.physicalMaterial = message.physicalMaterial;
+ if (message.skipCollider != null && message.hasOwnProperty("skipCollider"))
+ object.skipCollider = message.skipCollider;
+ return object;
+ };
+
+ /**
+ * Converts this PartInstance to JSON.
+ * @function toJSON
+ * @memberof mirabuf.PartInstance
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ PartInstance.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for PartInstance
+ * @function getTypeUrl
+ * @memberof mirabuf.PartInstance
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ PartInstance.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.PartInstance";
+ };
+
+ return PartInstance;
+ })();
+
+ mirabuf.Body = (function() {
+
+ /**
+ * Properties of a Body.
+ * @memberof mirabuf
+ * @interface IBody
+ * @property {mirabuf.IInfo|null} [info] Body info
+ * @property {string|null} [part] Reference to Part Definition
+ * @property {mirabuf.ITriangleMesh|null} [triangleMesh] Triangle Mesh for rendering
+ * @property {string|null} [appearanceOverride] Override Visual Appearance for the body
+ */
+
+ /**
+ * Constructs a new Body.
+ * @memberof mirabuf
+ * @classdesc Represents a Body.
+ * @implements IBody
+ * @constructor
+ * @param {mirabuf.IBody=} [properties] Properties to set
+ */
+ function Body(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Body info.
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.Body
+ * @instance
+ */
+ Body.prototype.info = null;
+
+ /**
+ * Reference to Part Definition
+ * @member {string} part
+ * @memberof mirabuf.Body
+ * @instance
+ */
+ Body.prototype.part = "";
+
+ /**
+ * Triangle Mesh for rendering
+ * @member {mirabuf.ITriangleMesh|null|undefined} triangleMesh
+ * @memberof mirabuf.Body
+ * @instance
+ */
+ Body.prototype.triangleMesh = null;
+
+ /**
+ * Override Visual Appearance for the body
+ * @member {string} appearanceOverride
+ * @memberof mirabuf.Body
+ * @instance
+ */
+ Body.prototype.appearanceOverride = "";
+
+ /**
+ * Creates a new Body instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Body
+ * @static
+ * @param {mirabuf.IBody=} [properties] Properties to set
+ * @returns {mirabuf.Body} Body instance
+ */
+ Body.create = function create(properties) {
+ return new Body(properties);
+ };
+
+ /**
+ * Encodes the specified Body message. Does not implicitly {@link mirabuf.Body.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Body
+ * @static
+ * @param {mirabuf.IBody} message Body message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Body.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.part != null && Object.hasOwnProperty.call(message, "part"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.part);
+ if (message.triangleMesh != null && Object.hasOwnProperty.call(message, "triangleMesh"))
+ $root.mirabuf.TriangleMesh.encode(message.triangleMesh, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ if (message.appearanceOverride != null && Object.hasOwnProperty.call(message, "appearanceOverride"))
+ writer.uint32(/* id 4, wireType 2 =*/34).string(message.appearanceOverride);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Body message, length delimited. Does not implicitly {@link mirabuf.Body.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Body
+ * @static
+ * @param {mirabuf.IBody} message Body message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Body.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Body message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Body
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Body} Body
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Body.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Body();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.part = reader.string();
+ break;
+ }
+ case 3: {
+ message.triangleMesh = $root.mirabuf.TriangleMesh.decode(reader, reader.uint32());
+ break;
+ }
+ case 4: {
+ message.appearanceOverride = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Body message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Body
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Body} Body
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Body.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Body message.
+ * @function verify
+ * @memberof mirabuf.Body
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Body.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.part != null && message.hasOwnProperty("part"))
+ if (!$util.isString(message.part))
+ return "part: string expected";
+ if (message.triangleMesh != null && message.hasOwnProperty("triangleMesh")) {
+ let error = $root.mirabuf.TriangleMesh.verify(message.triangleMesh);
+ if (error)
+ return "triangleMesh." + error;
+ }
+ if (message.appearanceOverride != null && message.hasOwnProperty("appearanceOverride"))
+ if (!$util.isString(message.appearanceOverride))
+ return "appearanceOverride: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a Body message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Body
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Body} Body
+ */
+ Body.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Body)
+ return object;
+ let message = new $root.mirabuf.Body();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.Body.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.part != null)
+ message.part = String(object.part);
+ if (object.triangleMesh != null) {
+ if (typeof object.triangleMesh !== "object")
+ throw TypeError(".mirabuf.Body.triangleMesh: object expected");
+ message.triangleMesh = $root.mirabuf.TriangleMesh.fromObject(object.triangleMesh);
+ }
+ if (object.appearanceOverride != null)
+ message.appearanceOverride = String(object.appearanceOverride);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Body message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Body
+ * @static
+ * @param {mirabuf.Body} message Body
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Body.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.part = "";
+ object.triangleMesh = null;
+ object.appearanceOverride = "";
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.part != null && message.hasOwnProperty("part"))
+ object.part = message.part;
+ if (message.triangleMesh != null && message.hasOwnProperty("triangleMesh"))
+ object.triangleMesh = $root.mirabuf.TriangleMesh.toObject(message.triangleMesh, options);
+ if (message.appearanceOverride != null && message.hasOwnProperty("appearanceOverride"))
+ object.appearanceOverride = message.appearanceOverride;
+ return object;
+ };
+
+ /**
+ * Converts this Body to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Body
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Body.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Body
+ * @function getTypeUrl
+ * @memberof mirabuf.Body
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Body";
+ };
+
+ return Body;
+ })();
+
+ mirabuf.TriangleMesh = (function() {
+
+ /**
+ * Properties of a TriangleMesh.
+ * @memberof mirabuf
+ * @interface ITriangleMesh
+ * @property {mirabuf.IInfo|null} [info] TriangleMesh info
+ * @property {boolean|null} [hasVolume] Is this object a Plane ? (Does it have volume)
+ * @property {string|null} [materialReference] Rendered Appearance properties referenced from Assembly Data
+ * @property {mirabuf.IMesh|null} [mesh] Stored as true types, inidicies, verts, uv
+ * @property {mirabuf.IBinaryMesh|null} [bmesh] Stored as binary data in bytes
+ */
+
+ /**
+ * Constructs a new TriangleMesh.
+ * @memberof mirabuf
+ * @classdesc Traingle Mesh for Storing Display Mesh data
+ * @implements ITriangleMesh
+ * @constructor
+ * @param {mirabuf.ITriangleMesh=} [properties] Properties to set
+ */
+ function TriangleMesh(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * TriangleMesh info.
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ TriangleMesh.prototype.info = null;
+
+ /**
+ * Is this object a Plane ? (Does it have volume)
+ * @member {boolean} hasVolume
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ TriangleMesh.prototype.hasVolume = false;
+
+ /**
+ * Rendered Appearance properties referenced from Assembly Data
+ * @member {string} materialReference
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ TriangleMesh.prototype.materialReference = "";
+
+ /**
+ * Stored as true types, inidicies, verts, uv
+ * @member {mirabuf.IMesh|null|undefined} mesh
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ TriangleMesh.prototype.mesh = null;
+
+ /**
+ * Stored as binary data in bytes
+ * @member {mirabuf.IBinaryMesh|null|undefined} bmesh
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ TriangleMesh.prototype.bmesh = null;
+
+ // OneOf field names bound to virtual getters and setters
+ let $oneOfFields;
+
+ /**
+ * What kind of Mesh Data exists in this Triangle Mesh
+ * @member {"mesh"|"bmesh"|undefined} meshType
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ */
+ Object.defineProperty(TriangleMesh.prototype, "meshType", {
+ get: $util.oneOfGetter($oneOfFields = ["mesh", "bmesh"]),
+ set: $util.oneOfSetter($oneOfFields)
+ });
+
+ /**
+ * Creates a new TriangleMesh instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {mirabuf.ITriangleMesh=} [properties] Properties to set
+ * @returns {mirabuf.TriangleMesh} TriangleMesh instance
+ */
+ TriangleMesh.create = function create(properties) {
+ return new TriangleMesh(properties);
+ };
+
+ /**
+ * Encodes the specified TriangleMesh message. Does not implicitly {@link mirabuf.TriangleMesh.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {mirabuf.ITriangleMesh} message TriangleMesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ TriangleMesh.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.hasVolume != null && Object.hasOwnProperty.call(message, "hasVolume"))
+ writer.uint32(/* id 2, wireType 0 =*/16).bool(message.hasVolume);
+ if (message.materialReference != null && Object.hasOwnProperty.call(message, "materialReference"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.materialReference);
+ if (message.mesh != null && Object.hasOwnProperty.call(message, "mesh"))
+ $root.mirabuf.Mesh.encode(message.mesh, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.bmesh != null && Object.hasOwnProperty.call(message, "bmesh"))
+ $root.mirabuf.BinaryMesh.encode(message.bmesh, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified TriangleMesh message, length delimited. Does not implicitly {@link mirabuf.TriangleMesh.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {mirabuf.ITriangleMesh} message TriangleMesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ TriangleMesh.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a TriangleMesh message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.TriangleMesh} TriangleMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ TriangleMesh.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.TriangleMesh();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.hasVolume = reader.bool();
+ break;
+ }
+ case 3: {
+ message.materialReference = reader.string();
+ break;
+ }
+ case 4: {
+ message.mesh = $root.mirabuf.Mesh.decode(reader, reader.uint32());
+ break;
+ }
+ case 5: {
+ message.bmesh = $root.mirabuf.BinaryMesh.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a TriangleMesh message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.TriangleMesh} TriangleMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ TriangleMesh.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a TriangleMesh message.
+ * @function verify
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ TriangleMesh.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ let properties = {};
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.hasVolume != null && message.hasOwnProperty("hasVolume"))
+ if (typeof message.hasVolume !== "boolean")
+ return "hasVolume: boolean expected";
+ if (message.materialReference != null && message.hasOwnProperty("materialReference"))
+ if (!$util.isString(message.materialReference))
+ return "materialReference: string expected";
+ if (message.mesh != null && message.hasOwnProperty("mesh")) {
+ properties.meshType = 1;
+ {
+ let error = $root.mirabuf.Mesh.verify(message.mesh);
+ if (error)
+ return "mesh." + error;
+ }
+ }
+ if (message.bmesh != null && message.hasOwnProperty("bmesh")) {
+ if (properties.meshType === 1)
+ return "meshType: multiple values";
+ properties.meshType = 1;
+ {
+ let error = $root.mirabuf.BinaryMesh.verify(message.bmesh);
+ if (error)
+ return "bmesh." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a TriangleMesh message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.TriangleMesh} TriangleMesh
+ */
+ TriangleMesh.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.TriangleMesh)
+ return object;
+ let message = new $root.mirabuf.TriangleMesh();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.TriangleMesh.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.hasVolume != null)
+ message.hasVolume = Boolean(object.hasVolume);
+ if (object.materialReference != null)
+ message.materialReference = String(object.materialReference);
+ if (object.mesh != null) {
+ if (typeof object.mesh !== "object")
+ throw TypeError(".mirabuf.TriangleMesh.mesh: object expected");
+ message.mesh = $root.mirabuf.Mesh.fromObject(object.mesh);
+ }
+ if (object.bmesh != null) {
+ if (typeof object.bmesh !== "object")
+ throw TypeError(".mirabuf.TriangleMesh.bmesh: object expected");
+ message.bmesh = $root.mirabuf.BinaryMesh.fromObject(object.bmesh);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a TriangleMesh message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {mirabuf.TriangleMesh} message TriangleMesh
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ TriangleMesh.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.hasVolume = false;
+ object.materialReference = "";
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.hasVolume != null && message.hasOwnProperty("hasVolume"))
+ object.hasVolume = message.hasVolume;
+ if (message.materialReference != null && message.hasOwnProperty("materialReference"))
+ object.materialReference = message.materialReference;
+ if (message.mesh != null && message.hasOwnProperty("mesh")) {
+ object.mesh = $root.mirabuf.Mesh.toObject(message.mesh, options);
+ if (options.oneofs)
+ object.meshType = "mesh";
+ }
+ if (message.bmesh != null && message.hasOwnProperty("bmesh")) {
+ object.bmesh = $root.mirabuf.BinaryMesh.toObject(message.bmesh, options);
+ if (options.oneofs)
+ object.meshType = "bmesh";
+ }
+ return object;
+ };
+
+ /**
+ * Converts this TriangleMesh to JSON.
+ * @function toJSON
+ * @memberof mirabuf.TriangleMesh
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ TriangleMesh.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for TriangleMesh
+ * @function getTypeUrl
+ * @memberof mirabuf.TriangleMesh
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ TriangleMesh.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.TriangleMesh";
+ };
+
+ return TriangleMesh;
+ })();
+
+ mirabuf.Mesh = (function() {
+
+ /**
+ * Properties of a Mesh.
+ * @memberof mirabuf
+ * @interface IMesh
+ * @property {Array.|null} [verts] Tri Mesh Verts vec3
+ * @property {Array.|null} [normals] Tri Mesh Normals vec3
+ * @property {Array.|null} [uv] Tri Mesh uv Mapping vec2
+ * @property {Array.|null} [indices] Tri Mesh indicies (Vert Map)
+ */
+
+ /**
+ * Constructs a new Mesh.
+ * @memberof mirabuf
+ * @classdesc Mesh Data stored as generic Data Structure
+ * @implements IMesh
+ * @constructor
+ * @param {mirabuf.IMesh=} [properties] Properties to set
+ */
+ function Mesh(properties) {
+ this.verts = [];
+ this.normals = [];
+ this.uv = [];
+ this.indices = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Tri Mesh Verts vec3
+ * @member {Array.} verts
+ * @memberof mirabuf.Mesh
+ * @instance
+ */
+ Mesh.prototype.verts = $util.emptyArray;
+
+ /**
+ * Tri Mesh Normals vec3
+ * @member {Array.} normals
+ * @memberof mirabuf.Mesh
+ * @instance
+ */
+ Mesh.prototype.normals = $util.emptyArray;
+
+ /**
+ * Tri Mesh uv Mapping vec2
+ * @member {Array.} uv
+ * @memberof mirabuf.Mesh
+ * @instance
+ */
+ Mesh.prototype.uv = $util.emptyArray;
+
+ /**
+ * Tri Mesh indicies (Vert Map)
+ * @member {Array.} indices
+ * @memberof mirabuf.Mesh
+ * @instance
+ */
+ Mesh.prototype.indices = $util.emptyArray;
+
+ /**
+ * Creates a new Mesh instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {mirabuf.IMesh=} [properties] Properties to set
+ * @returns {mirabuf.Mesh} Mesh instance
+ */
+ Mesh.create = function create(properties) {
+ return new Mesh(properties);
+ };
+
+ /**
+ * Encodes the specified Mesh message. Does not implicitly {@link mirabuf.Mesh.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {mirabuf.IMesh} message Mesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Mesh.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.verts != null && message.verts.length) {
+ writer.uint32(/* id 1, wireType 2 =*/10).fork();
+ for (let i = 0; i < message.verts.length; ++i)
+ writer.float(message.verts[i]);
+ writer.ldelim();
+ }
+ if (message.normals != null && message.normals.length) {
+ writer.uint32(/* id 2, wireType 2 =*/18).fork();
+ for (let i = 0; i < message.normals.length; ++i)
+ writer.float(message.normals[i]);
+ writer.ldelim();
+ }
+ if (message.uv != null && message.uv.length) {
+ writer.uint32(/* id 3, wireType 2 =*/26).fork();
+ for (let i = 0; i < message.uv.length; ++i)
+ writer.float(message.uv[i]);
+ writer.ldelim();
+ }
+ if (message.indices != null && message.indices.length) {
+ writer.uint32(/* id 4, wireType 2 =*/34).fork();
+ for (let i = 0; i < message.indices.length; ++i)
+ writer.int32(message.indices[i]);
+ writer.ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Mesh message, length delimited. Does not implicitly {@link mirabuf.Mesh.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {mirabuf.IMesh} message Mesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Mesh.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Mesh message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Mesh} Mesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Mesh.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Mesh();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (!(message.verts && message.verts.length))
+ message.verts = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.verts.push(reader.float());
+ } else
+ message.verts.push(reader.float());
+ break;
+ }
+ case 2: {
+ if (!(message.normals && message.normals.length))
+ message.normals = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.normals.push(reader.float());
+ } else
+ message.normals.push(reader.float());
+ break;
+ }
+ case 3: {
+ if (!(message.uv && message.uv.length))
+ message.uv = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.uv.push(reader.float());
+ } else
+ message.uv.push(reader.float());
+ break;
+ }
+ case 4: {
+ if (!(message.indices && message.indices.length))
+ message.indices = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.indices.push(reader.int32());
+ } else
+ message.indices.push(reader.int32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Mesh message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Mesh} Mesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Mesh.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Mesh message.
+ * @function verify
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Mesh.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.verts != null && message.hasOwnProperty("verts")) {
+ if (!Array.isArray(message.verts))
+ return "verts: array expected";
+ for (let i = 0; i < message.verts.length; ++i)
+ if (typeof message.verts[i] !== "number")
+ return "verts: number[] expected";
+ }
+ if (message.normals != null && message.hasOwnProperty("normals")) {
+ if (!Array.isArray(message.normals))
+ return "normals: array expected";
+ for (let i = 0; i < message.normals.length; ++i)
+ if (typeof message.normals[i] !== "number")
+ return "normals: number[] expected";
+ }
+ if (message.uv != null && message.hasOwnProperty("uv")) {
+ if (!Array.isArray(message.uv))
+ return "uv: array expected";
+ for (let i = 0; i < message.uv.length; ++i)
+ if (typeof message.uv[i] !== "number")
+ return "uv: number[] expected";
+ }
+ if (message.indices != null && message.hasOwnProperty("indices")) {
+ if (!Array.isArray(message.indices))
+ return "indices: array expected";
+ for (let i = 0; i < message.indices.length; ++i)
+ if (!$util.isInteger(message.indices[i]))
+ return "indices: integer[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Mesh message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Mesh} Mesh
+ */
+ Mesh.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Mesh)
+ return object;
+ let message = new $root.mirabuf.Mesh();
+ if (object.verts) {
+ if (!Array.isArray(object.verts))
+ throw TypeError(".mirabuf.Mesh.verts: array expected");
+ message.verts = [];
+ for (let i = 0; i < object.verts.length; ++i)
+ message.verts[i] = Number(object.verts[i]);
+ }
+ if (object.normals) {
+ if (!Array.isArray(object.normals))
+ throw TypeError(".mirabuf.Mesh.normals: array expected");
+ message.normals = [];
+ for (let i = 0; i < object.normals.length; ++i)
+ message.normals[i] = Number(object.normals[i]);
+ }
+ if (object.uv) {
+ if (!Array.isArray(object.uv))
+ throw TypeError(".mirabuf.Mesh.uv: array expected");
+ message.uv = [];
+ for (let i = 0; i < object.uv.length; ++i)
+ message.uv[i] = Number(object.uv[i]);
+ }
+ if (object.indices) {
+ if (!Array.isArray(object.indices))
+ throw TypeError(".mirabuf.Mesh.indices: array expected");
+ message.indices = [];
+ for (let i = 0; i < object.indices.length; ++i)
+ message.indices[i] = object.indices[i] | 0;
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Mesh message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {mirabuf.Mesh} message Mesh
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Mesh.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults) {
+ object.verts = [];
+ object.normals = [];
+ object.uv = [];
+ object.indices = [];
+ }
+ if (message.verts && message.verts.length) {
+ object.verts = [];
+ for (let j = 0; j < message.verts.length; ++j)
+ object.verts[j] = options.json && !isFinite(message.verts[j]) ? String(message.verts[j]) : message.verts[j];
+ }
+ if (message.normals && message.normals.length) {
+ object.normals = [];
+ for (let j = 0; j < message.normals.length; ++j)
+ object.normals[j] = options.json && !isFinite(message.normals[j]) ? String(message.normals[j]) : message.normals[j];
+ }
+ if (message.uv && message.uv.length) {
+ object.uv = [];
+ for (let j = 0; j < message.uv.length; ++j)
+ object.uv[j] = options.json && !isFinite(message.uv[j]) ? String(message.uv[j]) : message.uv[j];
+ }
+ if (message.indices && message.indices.length) {
+ object.indices = [];
+ for (let j = 0; j < message.indices.length; ++j)
+ object.indices[j] = message.indices[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Mesh to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Mesh
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Mesh.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Mesh
+ * @function getTypeUrl
+ * @memberof mirabuf.Mesh
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Mesh.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Mesh";
+ };
+
+ return Mesh;
+ })();
+
+ mirabuf.BinaryMesh = (function() {
+
+ /**
+ * Properties of a BinaryMesh.
+ * @memberof mirabuf
+ * @interface IBinaryMesh
+ * @property {Uint8Array|null} [data] BEWARE of ENDIANESS
+ */
+
+ /**
+ * Constructs a new BinaryMesh.
+ * @memberof mirabuf
+ * @classdesc Mesh used for more effective file transfers
+ * @implements IBinaryMesh
+ * @constructor
+ * @param {mirabuf.IBinaryMesh=} [properties] Properties to set
+ */
+ function BinaryMesh(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * BEWARE of ENDIANESS
+ * @member {Uint8Array} data
+ * @memberof mirabuf.BinaryMesh
+ * @instance
+ */
+ BinaryMesh.prototype.data = $util.newBuffer([]);
+
+ /**
+ * Creates a new BinaryMesh instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {mirabuf.IBinaryMesh=} [properties] Properties to set
+ * @returns {mirabuf.BinaryMesh} BinaryMesh instance
+ */
+ BinaryMesh.create = function create(properties) {
+ return new BinaryMesh(properties);
+ };
+
+ /**
+ * Encodes the specified BinaryMesh message. Does not implicitly {@link mirabuf.BinaryMesh.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {mirabuf.IBinaryMesh} message BinaryMesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ BinaryMesh.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+ writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.data);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified BinaryMesh message, length delimited. Does not implicitly {@link mirabuf.BinaryMesh.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {mirabuf.IBinaryMesh} message BinaryMesh message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ BinaryMesh.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a BinaryMesh message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.BinaryMesh} BinaryMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ BinaryMesh.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.BinaryMesh();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.data = reader.bytes();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a BinaryMesh message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.BinaryMesh} BinaryMesh
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ BinaryMesh.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a BinaryMesh message.
+ * @function verify
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ BinaryMesh.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.data != null && message.hasOwnProperty("data"))
+ if (!(message.data && typeof message.data.length === "number" || $util.isString(message.data)))
+ return "data: buffer expected";
+ return null;
+ };
+
+ /**
+ * Creates a BinaryMesh message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.BinaryMesh} BinaryMesh
+ */
+ BinaryMesh.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.BinaryMesh)
+ return object;
+ let message = new $root.mirabuf.BinaryMesh();
+ if (object.data != null)
+ if (typeof object.data === "string")
+ $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);
+ else if (object.data.length >= 0)
+ message.data = object.data;
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a BinaryMesh message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {mirabuf.BinaryMesh} message BinaryMesh
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ BinaryMesh.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ if (options.bytes === String)
+ object.data = "";
+ else {
+ object.data = [];
+ if (options.bytes !== Array)
+ object.data = $util.newBuffer(object.data);
+ }
+ if (message.data != null && message.hasOwnProperty("data"))
+ object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;
+ return object;
+ };
+
+ /**
+ * Converts this BinaryMesh to JSON.
+ * @function toJSON
+ * @memberof mirabuf.BinaryMesh
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ BinaryMesh.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for BinaryMesh
+ * @function getTypeUrl
+ * @memberof mirabuf.BinaryMesh
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ BinaryMesh.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.BinaryMesh";
+ };
+
+ return BinaryMesh;
+ })();
+
+ mirabuf.Node = (function() {
+
+ /**
+ * Properties of a Node.
+ * @memberof mirabuf
+ * @interface INode
+ * @property {string|null} [value] the reference ID for whatever kind of graph this is
+ * @property {Array.|null} [children] the children for the given leaf
+ * @property {mirabuf.IUserData|null} [userData] other associated data that can be used
+ */
+
+ /**
+ * Constructs a new Node.
+ * @memberof mirabuf
+ * @classdesc Represents a Node.
+ * @implements INode
+ * @constructor
+ * @param {mirabuf.INode=} [properties] Properties to set
+ */
+ function Node(properties) {
+ this.children = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * the reference ID for whatever kind of graph this is
+ * @member {string} value
+ * @memberof mirabuf.Node
+ * @instance
+ */
+ Node.prototype.value = "";
+
+ /**
+ * the children for the given leaf
+ * @member {Array.} children
+ * @memberof mirabuf.Node
+ * @instance
+ */
+ Node.prototype.children = $util.emptyArray;
+
+ /**
+ * other associated data that can be used
+ * @member {mirabuf.IUserData|null|undefined} userData
+ * @memberof mirabuf.Node
+ * @instance
+ */
+ Node.prototype.userData = null;
+
+ /**
+ * Creates a new Node instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Node
+ * @static
+ * @param {mirabuf.INode=} [properties] Properties to set
+ * @returns {mirabuf.Node} Node instance
+ */
+ Node.create = function create(properties) {
+ return new Node(properties);
+ };
+
+ /**
+ * Encodes the specified Node message. Does not implicitly {@link mirabuf.Node.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Node
+ * @static
+ * @param {mirabuf.INode} message Node message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Node.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.value);
+ if (message.children != null && message.children.length)
+ for (let i = 0; i < message.children.length; ++i)
+ $root.mirabuf.Node.encode(message.children[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.userData != null && Object.hasOwnProperty.call(message, "userData"))
+ $root.mirabuf.UserData.encode(message.userData, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Node message, length delimited. Does not implicitly {@link mirabuf.Node.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Node
+ * @static
+ * @param {mirabuf.INode} message Node message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Node.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Node message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Node
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Node} Node
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Node.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Node();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.value = reader.string();
+ break;
+ }
+ case 2: {
+ if (!(message.children && message.children.length))
+ message.children = [];
+ message.children.push($root.mirabuf.Node.decode(reader, reader.uint32()));
+ break;
+ }
+ case 3: {
+ message.userData = $root.mirabuf.UserData.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Node message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Node
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Node} Node
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Node.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Node message.
+ * @function verify
+ * @memberof mirabuf.Node
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Node.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.value != null && message.hasOwnProperty("value"))
+ if (!$util.isString(message.value))
+ return "value: string expected";
+ if (message.children != null && message.hasOwnProperty("children")) {
+ if (!Array.isArray(message.children))
+ return "children: array expected";
+ for (let i = 0; i < message.children.length; ++i) {
+ let error = $root.mirabuf.Node.verify(message.children[i]);
+ if (error)
+ return "children." + error;
+ }
+ }
+ if (message.userData != null && message.hasOwnProperty("userData")) {
+ let error = $root.mirabuf.UserData.verify(message.userData);
+ if (error)
+ return "userData." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Node message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Node
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Node} Node
+ */
+ Node.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Node)
+ return object;
+ let message = new $root.mirabuf.Node();
+ if (object.value != null)
+ message.value = String(object.value);
+ if (object.children) {
+ if (!Array.isArray(object.children))
+ throw TypeError(".mirabuf.Node.children: array expected");
+ message.children = [];
+ for (let i = 0; i < object.children.length; ++i) {
+ if (typeof object.children[i] !== "object")
+ throw TypeError(".mirabuf.Node.children: object expected");
+ message.children[i] = $root.mirabuf.Node.fromObject(object.children[i]);
+ }
+ }
+ if (object.userData != null) {
+ if (typeof object.userData !== "object")
+ throw TypeError(".mirabuf.Node.userData: object expected");
+ message.userData = $root.mirabuf.UserData.fromObject(object.userData);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Node message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Node
+ * @static
+ * @param {mirabuf.Node} message Node
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Node.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.children = [];
+ if (options.defaults) {
+ object.value = "";
+ object.userData = null;
+ }
+ if (message.value != null && message.hasOwnProperty("value"))
+ object.value = message.value;
+ if (message.children && message.children.length) {
+ object.children = [];
+ for (let j = 0; j < message.children.length; ++j)
+ object.children[j] = $root.mirabuf.Node.toObject(message.children[j], options);
+ }
+ if (message.userData != null && message.hasOwnProperty("userData"))
+ object.userData = $root.mirabuf.UserData.toObject(message.userData, options);
+ return object;
+ };
+
+ /**
+ * Converts this Node to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Node
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Node.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Node
+ * @function getTypeUrl
+ * @memberof mirabuf.Node
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Node.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Node";
+ };
+
+ return Node;
+ })();
+
+ mirabuf.GraphContainer = (function() {
+
+ /**
+ * Properties of a GraphContainer.
+ * @memberof mirabuf
+ * @interface IGraphContainer
+ * @property {Array.|null} [nodes] GraphContainer nodes
+ */
+
+ /**
+ * Constructs a new GraphContainer.
+ * @memberof mirabuf
+ * @classdesc Represents a GraphContainer.
+ * @implements IGraphContainer
+ * @constructor
+ * @param {mirabuf.IGraphContainer=} [properties] Properties to set
+ */
+ function GraphContainer(properties) {
+ this.nodes = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GraphContainer nodes.
+ * @member {Array.} nodes
+ * @memberof mirabuf.GraphContainer
+ * @instance
+ */
+ GraphContainer.prototype.nodes = $util.emptyArray;
+
+ /**
+ * Creates a new GraphContainer instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {mirabuf.IGraphContainer=} [properties] Properties to set
+ * @returns {mirabuf.GraphContainer} GraphContainer instance
+ */
+ GraphContainer.create = function create(properties) {
+ return new GraphContainer(properties);
+ };
+
+ /**
+ * Encodes the specified GraphContainer message. Does not implicitly {@link mirabuf.GraphContainer.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {mirabuf.IGraphContainer} message GraphContainer message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GraphContainer.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.nodes != null && message.nodes.length)
+ for (let i = 0; i < message.nodes.length; ++i)
+ $root.mirabuf.Node.encode(message.nodes[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified GraphContainer message, length delimited. Does not implicitly {@link mirabuf.GraphContainer.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {mirabuf.IGraphContainer} message GraphContainer message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ GraphContainer.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a GraphContainer message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.GraphContainer} GraphContainer
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GraphContainer.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.GraphContainer();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (!(message.nodes && message.nodes.length))
+ message.nodes = [];
+ message.nodes.push($root.mirabuf.Node.decode(reader, reader.uint32()));
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a GraphContainer message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.GraphContainer} GraphContainer
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ GraphContainer.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a GraphContainer message.
+ * @function verify
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ GraphContainer.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.nodes != null && message.hasOwnProperty("nodes")) {
+ if (!Array.isArray(message.nodes))
+ return "nodes: array expected";
+ for (let i = 0; i < message.nodes.length; ++i) {
+ let error = $root.mirabuf.Node.verify(message.nodes[i]);
+ if (error)
+ return "nodes." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a GraphContainer message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.GraphContainer} GraphContainer
+ */
+ GraphContainer.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.GraphContainer)
+ return object;
+ let message = new $root.mirabuf.GraphContainer();
+ if (object.nodes) {
+ if (!Array.isArray(object.nodes))
+ throw TypeError(".mirabuf.GraphContainer.nodes: array expected");
+ message.nodes = [];
+ for (let i = 0; i < object.nodes.length; ++i) {
+ if (typeof object.nodes[i] !== "object")
+ throw TypeError(".mirabuf.GraphContainer.nodes: object expected");
+ message.nodes[i] = $root.mirabuf.Node.fromObject(object.nodes[i]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a GraphContainer message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {mirabuf.GraphContainer} message GraphContainer
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ GraphContainer.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.nodes = [];
+ if (message.nodes && message.nodes.length) {
+ object.nodes = [];
+ for (let j = 0; j < message.nodes.length; ++j)
+ object.nodes[j] = $root.mirabuf.Node.toObject(message.nodes[j], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this GraphContainer to JSON.
+ * @function toJSON
+ * @memberof mirabuf.GraphContainer
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ GraphContainer.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for GraphContainer
+ * @function getTypeUrl
+ * @memberof mirabuf.GraphContainer
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ GraphContainer.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.GraphContainer";
+ };
+
+ return GraphContainer;
+ })();
+
+ mirabuf.UserData = (function() {
+
+ /**
+ * Properties of a UserData.
+ * @memberof mirabuf
+ * @interface IUserData
+ * @property {Object.|null} [data] e.g. data["wheel"] = "yes"
+ */
+
+ /**
+ * Constructs a new UserData.
+ * @memberof mirabuf
+ * @classdesc UserData
+ *
+ * Arbitrary data to append to a given message in map form
+ * @implements IUserData
+ * @constructor
+ * @param {mirabuf.IUserData=} [properties] Properties to set
+ */
+ function UserData(properties) {
+ this.data = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * e.g. data["wheel"] = "yes"
+ * @member {Object.} data
+ * @memberof mirabuf.UserData
+ * @instance
+ */
+ UserData.prototype.data = $util.emptyObject;
+
+ /**
+ * Creates a new UserData instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {mirabuf.IUserData=} [properties] Properties to set
+ * @returns {mirabuf.UserData} UserData instance
+ */
+ UserData.create = function create(properties) {
+ return new UserData(properties);
+ };
+
+ /**
+ * Encodes the specified UserData message. Does not implicitly {@link mirabuf.UserData.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {mirabuf.IUserData} message UserData message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ UserData.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+ for (let keys = Object.keys(message.data), i = 0; i < keys.length; ++i)
+ writer.uint32(/* id 1, wireType 2 =*/10).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.data[keys[i]]).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified UserData message, length delimited. Does not implicitly {@link mirabuf.UserData.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {mirabuf.IUserData} message UserData message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ UserData.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a UserData message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.UserData} UserData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ UserData.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.UserData(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (message.data === $util.emptyObject)
+ message.data = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = "";
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = reader.string();
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.data[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a UserData message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.UserData} UserData
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ UserData.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a UserData message.
+ * @function verify
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ UserData.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.data != null && message.hasOwnProperty("data")) {
+ if (!$util.isObject(message.data))
+ return "data: object expected";
+ let key = Object.keys(message.data);
+ for (let i = 0; i < key.length; ++i)
+ if (!$util.isString(message.data[key[i]]))
+ return "data: string{k:string} expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a UserData message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.UserData} UserData
+ */
+ UserData.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.UserData)
+ return object;
+ let message = new $root.mirabuf.UserData();
+ if (object.data) {
+ if (typeof object.data !== "object")
+ throw TypeError(".mirabuf.UserData.data: object expected");
+ message.data = {};
+ for (let keys = Object.keys(object.data), i = 0; i < keys.length; ++i)
+ message.data[keys[i]] = String(object.data[keys[i]]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a UserData message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {mirabuf.UserData} message UserData
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ UserData.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.data = {};
+ let keys2;
+ if (message.data && (keys2 = Object.keys(message.data)).length) {
+ object.data = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.data[keys2[j]] = message.data[keys2[j]];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this UserData to JSON.
+ * @function toJSON
+ * @memberof mirabuf.UserData
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ UserData.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for UserData
+ * @function getTypeUrl
+ * @memberof mirabuf.UserData
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ UserData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.UserData";
+ };
+
+ return UserData;
+ })();
+
+ mirabuf.Vector3 = (function() {
+
+ /**
+ * Properties of a Vector3.
+ * @memberof mirabuf
+ * @interface IVector3
+ * @property {number|null} [x] Vector3 x
+ * @property {number|null} [y] Vector3 y
+ * @property {number|null} [z] Vector3 z
+ */
+
+ /**
+ * Constructs a new Vector3.
+ * @memberof mirabuf
+ * @classdesc Represents a Vector3.
+ * @implements IVector3
+ * @constructor
+ * @param {mirabuf.IVector3=} [properties] Properties to set
+ */
+ function Vector3(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Vector3 x.
+ * @member {number} x
+ * @memberof mirabuf.Vector3
+ * @instance
+ */
+ Vector3.prototype.x = 0;
+
+ /**
+ * Vector3 y.
+ * @member {number} y
+ * @memberof mirabuf.Vector3
+ * @instance
+ */
+ Vector3.prototype.y = 0;
+
+ /**
+ * Vector3 z.
+ * @member {number} z
+ * @memberof mirabuf.Vector3
+ * @instance
+ */
+ Vector3.prototype.z = 0;
+
+ /**
+ * Creates a new Vector3 instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {mirabuf.IVector3=} [properties] Properties to set
+ * @returns {mirabuf.Vector3} Vector3 instance
+ */
+ Vector3.create = function create(properties) {
+ return new Vector3(properties);
+ };
+
+ /**
+ * Encodes the specified Vector3 message. Does not implicitly {@link mirabuf.Vector3.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {mirabuf.IVector3} message Vector3 message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Vector3.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.x != null && Object.hasOwnProperty.call(message, "x"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.x);
+ if (message.y != null && Object.hasOwnProperty.call(message, "y"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.y);
+ if (message.z != null && Object.hasOwnProperty.call(message, "z"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.z);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Vector3 message, length delimited. Does not implicitly {@link mirabuf.Vector3.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {mirabuf.IVector3} message Vector3 message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Vector3.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Vector3 message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Vector3} Vector3
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Vector3.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Vector3();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.x = reader.float();
+ break;
+ }
+ case 2: {
+ message.y = reader.float();
+ break;
+ }
+ case 3: {
+ message.z = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Vector3 message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Vector3} Vector3
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Vector3.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Vector3 message.
+ * @function verify
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Vector3.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.x != null && message.hasOwnProperty("x"))
+ if (typeof message.x !== "number")
+ return "x: number expected";
+ if (message.y != null && message.hasOwnProperty("y"))
+ if (typeof message.y !== "number")
+ return "y: number expected";
+ if (message.z != null && message.hasOwnProperty("z"))
+ if (typeof message.z !== "number")
+ return "z: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Vector3 message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Vector3} Vector3
+ */
+ Vector3.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Vector3)
+ return object;
+ let message = new $root.mirabuf.Vector3();
+ if (object.x != null)
+ message.x = Number(object.x);
+ if (object.y != null)
+ message.y = Number(object.y);
+ if (object.z != null)
+ message.z = Number(object.z);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Vector3 message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {mirabuf.Vector3} message Vector3
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Vector3.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.x = 0;
+ object.y = 0;
+ object.z = 0;
+ }
+ if (message.x != null && message.hasOwnProperty("x"))
+ object.x = options.json && !isFinite(message.x) ? String(message.x) : message.x;
+ if (message.y != null && message.hasOwnProperty("y"))
+ object.y = options.json && !isFinite(message.y) ? String(message.y) : message.y;
+ if (message.z != null && message.hasOwnProperty("z"))
+ object.z = options.json && !isFinite(message.z) ? String(message.z) : message.z;
+ return object;
+ };
+
+ /**
+ * Converts this Vector3 to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Vector3
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Vector3.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Vector3
+ * @function getTypeUrl
+ * @memberof mirabuf.Vector3
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Vector3.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Vector3";
+ };
+
+ return Vector3;
+ })();
+
+ mirabuf.PhysicalProperties = (function() {
+
+ /**
+ * Properties of a PhysicalProperties.
+ * @memberof mirabuf
+ * @interface IPhysicalProperties
+ * @property {number|null} [density] kg per cubic cm kg/(cm^3)
+ * @property {number|null} [mass] kg
+ * @property {number|null} [volume] cm^3
+ * @property {number|null} [area] cm^2
+ * @property {mirabuf.IVector3|null} [com] non-negative? Vec3
+ */
+
+ /**
+ * Constructs a new PhysicalProperties.
+ * @memberof mirabuf
+ * @classdesc Represents a PhysicalProperties.
+ * @implements IPhysicalProperties
+ * @constructor
+ * @param {mirabuf.IPhysicalProperties=} [properties] Properties to set
+ */
+ function PhysicalProperties(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * kg per cubic cm kg/(cm^3)
+ * @member {number} density
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ */
+ PhysicalProperties.prototype.density = 0;
+
+ /**
+ * kg
+ * @member {number} mass
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ */
+ PhysicalProperties.prototype.mass = 0;
+
+ /**
+ * cm^3
+ * @member {number} volume
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ */
+ PhysicalProperties.prototype.volume = 0;
+
+ /**
+ * cm^2
+ * @member {number} area
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ */
+ PhysicalProperties.prototype.area = 0;
+
+ /**
+ * non-negative? Vec3
+ * @member {mirabuf.IVector3|null|undefined} com
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ */
+ PhysicalProperties.prototype.com = null;
+
+ /**
+ * Creates a new PhysicalProperties instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {mirabuf.IPhysicalProperties=} [properties] Properties to set
+ * @returns {mirabuf.PhysicalProperties} PhysicalProperties instance
+ */
+ PhysicalProperties.create = function create(properties) {
+ return new PhysicalProperties(properties);
+ };
+
+ /**
+ * Encodes the specified PhysicalProperties message. Does not implicitly {@link mirabuf.PhysicalProperties.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {mirabuf.IPhysicalProperties} message PhysicalProperties message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PhysicalProperties.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.density != null && Object.hasOwnProperty.call(message, "density"))
+ writer.uint32(/* id 1, wireType 1 =*/9).double(message.density);
+ if (message.mass != null && Object.hasOwnProperty.call(message, "mass"))
+ writer.uint32(/* id 2, wireType 1 =*/17).double(message.mass);
+ if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
+ writer.uint32(/* id 3, wireType 1 =*/25).double(message.volume);
+ if (message.area != null && Object.hasOwnProperty.call(message, "area"))
+ writer.uint32(/* id 4, wireType 1 =*/33).double(message.area);
+ if (message.com != null && Object.hasOwnProperty.call(message, "com"))
+ $root.mirabuf.Vector3.encode(message.com, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified PhysicalProperties message, length delimited. Does not implicitly {@link mirabuf.PhysicalProperties.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {mirabuf.IPhysicalProperties} message PhysicalProperties message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PhysicalProperties.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a PhysicalProperties message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.PhysicalProperties} PhysicalProperties
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PhysicalProperties.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.PhysicalProperties();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.density = reader.double();
+ break;
+ }
+ case 2: {
+ message.mass = reader.double();
+ break;
+ }
+ case 3: {
+ message.volume = reader.double();
+ break;
+ }
+ case 4: {
+ message.area = reader.double();
+ break;
+ }
+ case 5: {
+ message.com = $root.mirabuf.Vector3.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a PhysicalProperties message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.PhysicalProperties} PhysicalProperties
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PhysicalProperties.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a PhysicalProperties message.
+ * @function verify
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ PhysicalProperties.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.density != null && message.hasOwnProperty("density"))
+ if (typeof message.density !== "number")
+ return "density: number expected";
+ if (message.mass != null && message.hasOwnProperty("mass"))
+ if (typeof message.mass !== "number")
+ return "mass: number expected";
+ if (message.volume != null && message.hasOwnProperty("volume"))
+ if (typeof message.volume !== "number")
+ return "volume: number expected";
+ if (message.area != null && message.hasOwnProperty("area"))
+ if (typeof message.area !== "number")
+ return "area: number expected";
+ if (message.com != null && message.hasOwnProperty("com")) {
+ let error = $root.mirabuf.Vector3.verify(message.com);
+ if (error)
+ return "com." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a PhysicalProperties message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.PhysicalProperties} PhysicalProperties
+ */
+ PhysicalProperties.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.PhysicalProperties)
+ return object;
+ let message = new $root.mirabuf.PhysicalProperties();
+ if (object.density != null)
+ message.density = Number(object.density);
+ if (object.mass != null)
+ message.mass = Number(object.mass);
+ if (object.volume != null)
+ message.volume = Number(object.volume);
+ if (object.area != null)
+ message.area = Number(object.area);
+ if (object.com != null) {
+ if (typeof object.com !== "object")
+ throw TypeError(".mirabuf.PhysicalProperties.com: object expected");
+ message.com = $root.mirabuf.Vector3.fromObject(object.com);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a PhysicalProperties message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {mirabuf.PhysicalProperties} message PhysicalProperties
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ PhysicalProperties.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.density = 0;
+ object.mass = 0;
+ object.volume = 0;
+ object.area = 0;
+ object.com = null;
+ }
+ if (message.density != null && message.hasOwnProperty("density"))
+ object.density = options.json && !isFinite(message.density) ? String(message.density) : message.density;
+ if (message.mass != null && message.hasOwnProperty("mass"))
+ object.mass = options.json && !isFinite(message.mass) ? String(message.mass) : message.mass;
+ if (message.volume != null && message.hasOwnProperty("volume"))
+ object.volume = options.json && !isFinite(message.volume) ? String(message.volume) : message.volume;
+ if (message.area != null && message.hasOwnProperty("area"))
+ object.area = options.json && !isFinite(message.area) ? String(message.area) : message.area;
+ if (message.com != null && message.hasOwnProperty("com"))
+ object.com = $root.mirabuf.Vector3.toObject(message.com, options);
+ return object;
+ };
+
+ /**
+ * Converts this PhysicalProperties to JSON.
+ * @function toJSON
+ * @memberof mirabuf.PhysicalProperties
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ PhysicalProperties.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for PhysicalProperties
+ * @function getTypeUrl
+ * @memberof mirabuf.PhysicalProperties
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ PhysicalProperties.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.PhysicalProperties";
+ };
+
+ return PhysicalProperties;
+ })();
+
+ mirabuf.Transform = (function() {
+
+ /**
+ * Properties of a Transform.
+ * @memberof mirabuf
+ * @interface ITransform
+ * @property {Array.|null} [spatialMatrix] Transform spatialMatrix
+ */
+
+ /**
+ * Constructs a new Transform.
+ * @memberof mirabuf
+ * @classdesc Transform
+ *
+ * Data needed to apply scale, position, and rotational changes
+ * @implements ITransform
+ * @constructor
+ * @param {mirabuf.ITransform=} [properties] Properties to set
+ */
+ function Transform(properties) {
+ this.spatialMatrix = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Transform spatialMatrix.
+ * @member {Array.} spatialMatrix
+ * @memberof mirabuf.Transform
+ * @instance
+ */
+ Transform.prototype.spatialMatrix = $util.emptyArray;
+
+ /**
+ * Creates a new Transform instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {mirabuf.ITransform=} [properties] Properties to set
+ * @returns {mirabuf.Transform} Transform instance
+ */
+ Transform.create = function create(properties) {
+ return new Transform(properties);
+ };
+
+ /**
+ * Encodes the specified Transform message. Does not implicitly {@link mirabuf.Transform.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {mirabuf.ITransform} message Transform message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Transform.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.spatialMatrix != null && message.spatialMatrix.length) {
+ writer.uint32(/* id 1, wireType 2 =*/10).fork();
+ for (let i = 0; i < message.spatialMatrix.length; ++i)
+ writer.float(message.spatialMatrix[i]);
+ writer.ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Transform message, length delimited. Does not implicitly {@link mirabuf.Transform.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {mirabuf.ITransform} message Transform message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Transform.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Transform message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Transform} Transform
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Transform.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Transform();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (!(message.spatialMatrix && message.spatialMatrix.length))
+ message.spatialMatrix = [];
+ if ((tag & 7) === 2) {
+ let end2 = reader.uint32() + reader.pos;
+ while (reader.pos < end2)
+ message.spatialMatrix.push(reader.float());
+ } else
+ message.spatialMatrix.push(reader.float());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Transform message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Transform} Transform
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Transform.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Transform message.
+ * @function verify
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Transform.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.spatialMatrix != null && message.hasOwnProperty("spatialMatrix")) {
+ if (!Array.isArray(message.spatialMatrix))
+ return "spatialMatrix: array expected";
+ for (let i = 0; i < message.spatialMatrix.length; ++i)
+ if (typeof message.spatialMatrix[i] !== "number")
+ return "spatialMatrix: number[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Transform message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Transform} Transform
+ */
+ Transform.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Transform)
+ return object;
+ let message = new $root.mirabuf.Transform();
+ if (object.spatialMatrix) {
+ if (!Array.isArray(object.spatialMatrix))
+ throw TypeError(".mirabuf.Transform.spatialMatrix: array expected");
+ message.spatialMatrix = [];
+ for (let i = 0; i < object.spatialMatrix.length; ++i)
+ message.spatialMatrix[i] = Number(object.spatialMatrix[i]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Transform message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {mirabuf.Transform} message Transform
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Transform.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.spatialMatrix = [];
+ if (message.spatialMatrix && message.spatialMatrix.length) {
+ object.spatialMatrix = [];
+ for (let j = 0; j < message.spatialMatrix.length; ++j)
+ object.spatialMatrix[j] = options.json && !isFinite(message.spatialMatrix[j]) ? String(message.spatialMatrix[j]) : message.spatialMatrix[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Transform to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Transform
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Transform.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Transform
+ * @function getTypeUrl
+ * @memberof mirabuf.Transform
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Transform.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Transform";
+ };
+
+ return Transform;
+ })();
+
+ mirabuf.Color = (function() {
+
+ /**
+ * Properties of a Color.
+ * @memberof mirabuf
+ * @interface IColor
+ * @property {number|null} [R] Color R
+ * @property {number|null} [G] Color G
+ * @property {number|null} [B] Color B
+ * @property {number|null} [A] Color A
+ */
+
+ /**
+ * Constructs a new Color.
+ * @memberof mirabuf
+ * @classdesc Represents a Color.
+ * @implements IColor
+ * @constructor
+ * @param {mirabuf.IColor=} [properties] Properties to set
+ */
+ function Color(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Color R.
+ * @member {number} R
+ * @memberof mirabuf.Color
+ * @instance
+ */
+ Color.prototype.R = 0;
+
+ /**
+ * Color G.
+ * @member {number} G
+ * @memberof mirabuf.Color
+ * @instance
+ */
+ Color.prototype.G = 0;
+
+ /**
+ * Color B.
+ * @member {number} B
+ * @memberof mirabuf.Color
+ * @instance
+ */
+ Color.prototype.B = 0;
+
+ /**
+ * Color A.
+ * @member {number} A
+ * @memberof mirabuf.Color
+ * @instance
+ */
+ Color.prototype.A = 0;
+
+ /**
+ * Creates a new Color instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Color
+ * @static
+ * @param {mirabuf.IColor=} [properties] Properties to set
+ * @returns {mirabuf.Color} Color instance
+ */
+ Color.create = function create(properties) {
+ return new Color(properties);
+ };
+
+ /**
+ * Encodes the specified Color message. Does not implicitly {@link mirabuf.Color.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Color
+ * @static
+ * @param {mirabuf.IColor} message Color message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Color.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.R != null && Object.hasOwnProperty.call(message, "R"))
+ writer.uint32(/* id 1, wireType 0 =*/8).int32(message.R);
+ if (message.G != null && Object.hasOwnProperty.call(message, "G"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int32(message.G);
+ if (message.B != null && Object.hasOwnProperty.call(message, "B"))
+ writer.uint32(/* id 3, wireType 0 =*/24).int32(message.B);
+ if (message.A != null && Object.hasOwnProperty.call(message, "A"))
+ writer.uint32(/* id 4, wireType 0 =*/32).int32(message.A);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Color message, length delimited. Does not implicitly {@link mirabuf.Color.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Color
+ * @static
+ * @param {mirabuf.IColor} message Color message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Color.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Color message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Color
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Color} Color
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Color.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Color();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.R = reader.int32();
+ break;
+ }
+ case 2: {
+ message.G = reader.int32();
+ break;
+ }
+ case 3: {
+ message.B = reader.int32();
+ break;
+ }
+ case 4: {
+ message.A = reader.int32();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Color message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Color
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Color} Color
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Color.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Color message.
+ * @function verify
+ * @memberof mirabuf.Color
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Color.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.R != null && message.hasOwnProperty("R"))
+ if (!$util.isInteger(message.R))
+ return "R: integer expected";
+ if (message.G != null && message.hasOwnProperty("G"))
+ if (!$util.isInteger(message.G))
+ return "G: integer expected";
+ if (message.B != null && message.hasOwnProperty("B"))
+ if (!$util.isInteger(message.B))
+ return "B: integer expected";
+ if (message.A != null && message.hasOwnProperty("A"))
+ if (!$util.isInteger(message.A))
+ return "A: integer expected";
+ return null;
+ };
+
+ /**
+ * Creates a Color message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Color
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Color} Color
+ */
+ Color.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Color)
+ return object;
+ let message = new $root.mirabuf.Color();
+ if (object.R != null)
+ message.R = object.R | 0;
+ if (object.G != null)
+ message.G = object.G | 0;
+ if (object.B != null)
+ message.B = object.B | 0;
+ if (object.A != null)
+ message.A = object.A | 0;
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Color message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Color
+ * @static
+ * @param {mirabuf.Color} message Color
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Color.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.R = 0;
+ object.G = 0;
+ object.B = 0;
+ object.A = 0;
+ }
+ if (message.R != null && message.hasOwnProperty("R"))
+ object.R = message.R;
+ if (message.G != null && message.hasOwnProperty("G"))
+ object.G = message.G;
+ if (message.B != null && message.hasOwnProperty("B"))
+ object.B = message.B;
+ if (message.A != null && message.hasOwnProperty("A"))
+ object.A = message.A;
+ return object;
+ };
+
+ /**
+ * Converts this Color to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Color
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Color.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Color
+ * @function getTypeUrl
+ * @memberof mirabuf.Color
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Color.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Color";
+ };
+
+ return Color;
+ })();
+
+ /**
+ * Axis enum.
+ * @name mirabuf.Axis
+ * @enum {number}
+ * @property {number} X=0 X value
+ * @property {number} Y=1 Y value
+ * @property {number} Z=2 Z value
+ */
+ mirabuf.Axis = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "X"] = 0;
+ values[valuesById[1] = "Y"] = 1;
+ values[valuesById[2] = "Z"] = 2;
+ return values;
+ })();
+
+ mirabuf.Info = (function() {
+
+ /**
+ * Properties of an Info.
+ * @memberof mirabuf
+ * @interface IInfo
+ * @property {string|null} [GUID] Info GUID
+ * @property {string|null} [name] Info name
+ * @property {number|null} [version] Info version
+ */
+
+ /**
+ * Constructs a new Info.
+ * @memberof mirabuf
+ * @classdesc Defines basic fields for almost all objects
+ * The location where you can access the GUID for a reference
+ * @implements IInfo
+ * @constructor
+ * @param {mirabuf.IInfo=} [properties] Properties to set
+ */
+ function Info(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Info GUID.
+ * @member {string} GUID
+ * @memberof mirabuf.Info
+ * @instance
+ */
+ Info.prototype.GUID = "";
+
+ /**
+ * Info name.
+ * @member {string} name
+ * @memberof mirabuf.Info
+ * @instance
+ */
+ Info.prototype.name = "";
+
+ /**
+ * Info version.
+ * @member {number} version
+ * @memberof mirabuf.Info
+ * @instance
+ */
+ Info.prototype.version = 0;
+
+ /**
+ * Creates a new Info instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Info
+ * @static
+ * @param {mirabuf.IInfo=} [properties] Properties to set
+ * @returns {mirabuf.Info} Info instance
+ */
+ Info.create = function create(properties) {
+ return new Info(properties);
+ };
+
+ /**
+ * Encodes the specified Info message. Does not implicitly {@link mirabuf.Info.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Info
+ * @static
+ * @param {mirabuf.IInfo} message Info message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Info.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.GUID != null && Object.hasOwnProperty.call(message, "GUID"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.GUID);
+ if (message.name != null && Object.hasOwnProperty.call(message, "name"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);
+ if (message.version != null && Object.hasOwnProperty.call(message, "version"))
+ writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.version);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Info message, length delimited. Does not implicitly {@link mirabuf.Info.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Info
+ * @static
+ * @param {mirabuf.IInfo} message Info message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Info.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes an Info message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Info
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Info} Info
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Info.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Info();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.GUID = reader.string();
+ break;
+ }
+ case 2: {
+ message.name = reader.string();
+ break;
+ }
+ case 3: {
+ message.version = reader.uint32();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes an Info message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Info
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Info} Info
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Info.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies an Info message.
+ * @function verify
+ * @memberof mirabuf.Info
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Info.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.GUID != null && message.hasOwnProperty("GUID"))
+ if (!$util.isString(message.GUID))
+ return "GUID: string expected";
+ if (message.name != null && message.hasOwnProperty("name"))
+ if (!$util.isString(message.name))
+ return "name: string expected";
+ if (message.version != null && message.hasOwnProperty("version"))
+ if (!$util.isInteger(message.version))
+ return "version: integer expected";
+ return null;
+ };
+
+ /**
+ * Creates an Info message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Info
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Info} Info
+ */
+ Info.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Info)
+ return object;
+ let message = new $root.mirabuf.Info();
+ if (object.GUID != null)
+ message.GUID = String(object.GUID);
+ if (object.name != null)
+ message.name = String(object.name);
+ if (object.version != null)
+ message.version = object.version >>> 0;
+ return message;
+ };
+
+ /**
+ * Creates a plain object from an Info message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Info
+ * @static
+ * @param {mirabuf.Info} message Info
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Info.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.GUID = "";
+ object.name = "";
+ object.version = 0;
+ }
+ if (message.GUID != null && message.hasOwnProperty("GUID"))
+ object.GUID = message.GUID;
+ if (message.name != null && message.hasOwnProperty("name"))
+ object.name = message.name;
+ if (message.version != null && message.hasOwnProperty("version"))
+ object.version = message.version;
+ return object;
+ };
+
+ /**
+ * Converts this Info to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Info
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Info.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Info
+ * @function getTypeUrl
+ * @memberof mirabuf.Info
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Info.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Info";
+ };
+
+ return Info;
+ })();
+
+ mirabuf.Thumbnail = (function() {
+
+ /**
+ * Properties of a Thumbnail.
+ * @memberof mirabuf
+ * @interface IThumbnail
+ * @property {number|null} [width] Image Width
+ * @property {number|null} [height] Image Height
+ * @property {string|null} [extension] Image Extension - ex. (.png, .bitmap, .jpeg)
+ * @property {boolean|null} [transparent] Transparency - true from fusion when correctly configured
+ * @property {Uint8Array|null} [data] Data as read from the file in bytes[] form
+ */
+
+ /**
+ * Constructs a new Thumbnail.
+ * @memberof mirabuf
+ * @classdesc A basic Thumbnail to be encoded in the file
+ * Most of the Time Fusion can encode the file with transparency as PNG not bitmap
+ * @implements IThumbnail
+ * @constructor
+ * @param {mirabuf.IThumbnail=} [properties] Properties to set
+ */
+ function Thumbnail(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Image Width
+ * @member {number} width
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ */
+ Thumbnail.prototype.width = 0;
+
+ /**
+ * Image Height
+ * @member {number} height
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ */
+ Thumbnail.prototype.height = 0;
+
+ /**
+ * Image Extension - ex. (.png, .bitmap, .jpeg)
+ * @member {string} extension
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ */
+ Thumbnail.prototype.extension = "";
+
+ /**
+ * Transparency - true from fusion when correctly configured
+ * @member {boolean} transparent
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ */
+ Thumbnail.prototype.transparent = false;
+
+ /**
+ * Data as read from the file in bytes[] form
+ * @member {Uint8Array} data
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ */
+ Thumbnail.prototype.data = $util.newBuffer([]);
+
+ /**
+ * Creates a new Thumbnail instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {mirabuf.IThumbnail=} [properties] Properties to set
+ * @returns {mirabuf.Thumbnail} Thumbnail instance
+ */
+ Thumbnail.create = function create(properties) {
+ return new Thumbnail(properties);
+ };
+
+ /**
+ * Encodes the specified Thumbnail message. Does not implicitly {@link mirabuf.Thumbnail.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {mirabuf.IThumbnail} message Thumbnail message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Thumbnail.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.width != null && Object.hasOwnProperty.call(message, "width"))
+ writer.uint32(/* id 1, wireType 0 =*/8).int32(message.width);
+ if (message.height != null && Object.hasOwnProperty.call(message, "height"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int32(message.height);
+ if (message.extension != null && Object.hasOwnProperty.call(message, "extension"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.extension);
+ if (message.transparent != null && Object.hasOwnProperty.call(message, "transparent"))
+ writer.uint32(/* id 4, wireType 0 =*/32).bool(message.transparent);
+ if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+ writer.uint32(/* id 5, wireType 2 =*/42).bytes(message.data);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Thumbnail message, length delimited. Does not implicitly {@link mirabuf.Thumbnail.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {mirabuf.IThumbnail} message Thumbnail message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Thumbnail.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Thumbnail message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.Thumbnail} Thumbnail
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Thumbnail.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.Thumbnail();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.width = reader.int32();
+ break;
+ }
+ case 2: {
+ message.height = reader.int32();
+ break;
+ }
+ case 3: {
+ message.extension = reader.string();
+ break;
+ }
+ case 4: {
+ message.transparent = reader.bool();
+ break;
+ }
+ case 5: {
+ message.data = reader.bytes();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Thumbnail message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.Thumbnail} Thumbnail
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Thumbnail.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Thumbnail message.
+ * @function verify
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Thumbnail.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.width != null && message.hasOwnProperty("width"))
+ if (!$util.isInteger(message.width))
+ return "width: integer expected";
+ if (message.height != null && message.hasOwnProperty("height"))
+ if (!$util.isInteger(message.height))
+ return "height: integer expected";
+ if (message.extension != null && message.hasOwnProperty("extension"))
+ if (!$util.isString(message.extension))
+ return "extension: string expected";
+ if (message.transparent != null && message.hasOwnProperty("transparent"))
+ if (typeof message.transparent !== "boolean")
+ return "transparent: boolean expected";
+ if (message.data != null && message.hasOwnProperty("data"))
+ if (!(message.data && typeof message.data.length === "number" || $util.isString(message.data)))
+ return "data: buffer expected";
+ return null;
+ };
+
+ /**
+ * Creates a Thumbnail message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.Thumbnail} Thumbnail
+ */
+ Thumbnail.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.Thumbnail)
+ return object;
+ let message = new $root.mirabuf.Thumbnail();
+ if (object.width != null)
+ message.width = object.width | 0;
+ if (object.height != null)
+ message.height = object.height | 0;
+ if (object.extension != null)
+ message.extension = String(object.extension);
+ if (object.transparent != null)
+ message.transparent = Boolean(object.transparent);
+ if (object.data != null)
+ if (typeof object.data === "string")
+ $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);
+ else if (object.data.length >= 0)
+ message.data = object.data;
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Thumbnail message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {mirabuf.Thumbnail} message Thumbnail
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Thumbnail.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.width = 0;
+ object.height = 0;
+ object.extension = "";
+ object.transparent = false;
+ if (options.bytes === String)
+ object.data = "";
+ else {
+ object.data = [];
+ if (options.bytes !== Array)
+ object.data = $util.newBuffer(object.data);
+ }
+ }
+ if (message.width != null && message.hasOwnProperty("width"))
+ object.width = message.width;
+ if (message.height != null && message.hasOwnProperty("height"))
+ object.height = message.height;
+ if (message.extension != null && message.hasOwnProperty("extension"))
+ object.extension = message.extension;
+ if (message.transparent != null && message.hasOwnProperty("transparent"))
+ object.transparent = message.transparent;
+ if (message.data != null && message.hasOwnProperty("data"))
+ object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;
+ return object;
+ };
+
+ /**
+ * Converts this Thumbnail to JSON.
+ * @function toJSON
+ * @memberof mirabuf.Thumbnail
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Thumbnail.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Thumbnail
+ * @function getTypeUrl
+ * @memberof mirabuf.Thumbnail
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Thumbnail.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.Thumbnail";
+ };
+
+ return Thumbnail;
+ })();
+
+ mirabuf.joint = (function() {
+
+ /**
+ * Namespace joint.
+ * @memberof mirabuf
+ * @namespace
+ */
+ const joint = {};
+
+ joint.Joints = (function() {
+
+ /**
+ * Properties of a Joints.
+ * @memberof mirabuf.joint
+ * @interface IJoints
+ * @property {mirabuf.IInfo|null} [info] name, version, uid
+ * @property {Object.|null} [jointDefinitions] Unique Joint Implementations
+ * @property {Object.|null} [jointInstances] Instances of the Joint Implementations
+ * @property {Array.|null} [rigidGroups] Rigidgroups ?
+ * @property {Object.|null} [motorDefinitions] Collection of all Motors exported
+ */
+
+ /**
+ * Constructs a new Joints.
+ * @memberof mirabuf.joint
+ * @classdesc Joints
+ * A way to define the motion between various group connections
+ * @implements IJoints
+ * @constructor
+ * @param {mirabuf.joint.IJoints=} [properties] Properties to set
+ */
+ function Joints(properties) {
+ this.jointDefinitions = {};
+ this.jointInstances = {};
+ this.rigidGroups = [];
+ this.motorDefinitions = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * name, version, uid
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ */
+ Joints.prototype.info = null;
+
+ /**
+ * Unique Joint Implementations
+ * @member {Object.} jointDefinitions
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ */
+ Joints.prototype.jointDefinitions = $util.emptyObject;
+
+ /**
+ * Instances of the Joint Implementations
+ * @member {Object.} jointInstances
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ */
+ Joints.prototype.jointInstances = $util.emptyObject;
+
+ /**
+ * Rigidgroups ?
+ * @member {Array.} rigidGroups
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ */
+ Joints.prototype.rigidGroups = $util.emptyArray;
+
+ /**
+ * Collection of all Motors exported
+ * @member {Object.} motorDefinitions
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ */
+ Joints.prototype.motorDefinitions = $util.emptyObject;
+
+ /**
+ * Creates a new Joints instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {mirabuf.joint.IJoints=} [properties] Properties to set
+ * @returns {mirabuf.joint.Joints} Joints instance
+ */
+ Joints.create = function create(properties) {
+ return new Joints(properties);
+ };
+
+ /**
+ * Encodes the specified Joints message. Does not implicitly {@link mirabuf.joint.Joints.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {mirabuf.joint.IJoints} message Joints message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Joints.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.jointDefinitions != null && Object.hasOwnProperty.call(message, "jointDefinitions"))
+ for (let keys = Object.keys(message.jointDefinitions), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.joint.Joint.encode(message.jointDefinitions[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ if (message.jointInstances != null && Object.hasOwnProperty.call(message, "jointInstances"))
+ for (let keys = Object.keys(message.jointInstances), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.joint.JointInstance.encode(message.jointInstances[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ if (message.rigidGroups != null && message.rigidGroups.length)
+ for (let i = 0; i < message.rigidGroups.length; ++i)
+ $root.mirabuf.joint.RigidGroup.encode(message.rigidGroups[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.motorDefinitions != null && Object.hasOwnProperty.call(message, "motorDefinitions"))
+ for (let keys = Object.keys(message.motorDefinitions), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 5, wireType 2 =*/42).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.motor.Motor.encode(message.motorDefinitions[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Joints message, length delimited. Does not implicitly {@link mirabuf.joint.Joints.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {mirabuf.joint.IJoints} message Joints message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Joints.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Joints message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.Joints} Joints
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Joints.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.Joints(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (message.jointDefinitions === $util.emptyObject)
+ message.jointDefinitions = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.joint.Joint.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.jointDefinitions[key] = value;
+ break;
+ }
+ case 3: {
+ if (message.jointInstances === $util.emptyObject)
+ message.jointInstances = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.joint.JointInstance.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.jointInstances[key] = value;
+ break;
+ }
+ case 4: {
+ if (!(message.rigidGroups && message.rigidGroups.length))
+ message.rigidGroups = [];
+ message.rigidGroups.push($root.mirabuf.joint.RigidGroup.decode(reader, reader.uint32()));
+ break;
+ }
+ case 5: {
+ if (message.motorDefinitions === $util.emptyObject)
+ message.motorDefinitions = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.motor.Motor.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.motorDefinitions[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Joints message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.Joints} Joints
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Joints.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Joints message.
+ * @function verify
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Joints.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.jointDefinitions != null && message.hasOwnProperty("jointDefinitions")) {
+ if (!$util.isObject(message.jointDefinitions))
+ return "jointDefinitions: object expected";
+ let key = Object.keys(message.jointDefinitions);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.joint.Joint.verify(message.jointDefinitions[key[i]]);
+ if (error)
+ return "jointDefinitions." + error;
+ }
+ }
+ if (message.jointInstances != null && message.hasOwnProperty("jointInstances")) {
+ if (!$util.isObject(message.jointInstances))
+ return "jointInstances: object expected";
+ let key = Object.keys(message.jointInstances);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.joint.JointInstance.verify(message.jointInstances[key[i]]);
+ if (error)
+ return "jointInstances." + error;
+ }
+ }
+ if (message.rigidGroups != null && message.hasOwnProperty("rigidGroups")) {
+ if (!Array.isArray(message.rigidGroups))
+ return "rigidGroups: array expected";
+ for (let i = 0; i < message.rigidGroups.length; ++i) {
+ let error = $root.mirabuf.joint.RigidGroup.verify(message.rigidGroups[i]);
+ if (error)
+ return "rigidGroups." + error;
+ }
+ }
+ if (message.motorDefinitions != null && message.hasOwnProperty("motorDefinitions")) {
+ if (!$util.isObject(message.motorDefinitions))
+ return "motorDefinitions: object expected";
+ let key = Object.keys(message.motorDefinitions);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.motor.Motor.verify(message.motorDefinitions[key[i]]);
+ if (error)
+ return "motorDefinitions." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Joints message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.Joints} Joints
+ */
+ Joints.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.Joints)
+ return object;
+ let message = new $root.mirabuf.joint.Joints();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.joint.Joints.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.jointDefinitions) {
+ if (typeof object.jointDefinitions !== "object")
+ throw TypeError(".mirabuf.joint.Joints.jointDefinitions: object expected");
+ message.jointDefinitions = {};
+ for (let keys = Object.keys(object.jointDefinitions), i = 0; i < keys.length; ++i) {
+ if (typeof object.jointDefinitions[keys[i]] !== "object")
+ throw TypeError(".mirabuf.joint.Joints.jointDefinitions: object expected");
+ message.jointDefinitions[keys[i]] = $root.mirabuf.joint.Joint.fromObject(object.jointDefinitions[keys[i]]);
+ }
+ }
+ if (object.jointInstances) {
+ if (typeof object.jointInstances !== "object")
+ throw TypeError(".mirabuf.joint.Joints.jointInstances: object expected");
+ message.jointInstances = {};
+ for (let keys = Object.keys(object.jointInstances), i = 0; i < keys.length; ++i) {
+ if (typeof object.jointInstances[keys[i]] !== "object")
+ throw TypeError(".mirabuf.joint.Joints.jointInstances: object expected");
+ message.jointInstances[keys[i]] = $root.mirabuf.joint.JointInstance.fromObject(object.jointInstances[keys[i]]);
+ }
+ }
+ if (object.rigidGroups) {
+ if (!Array.isArray(object.rigidGroups))
+ throw TypeError(".mirabuf.joint.Joints.rigidGroups: array expected");
+ message.rigidGroups = [];
+ for (let i = 0; i < object.rigidGroups.length; ++i) {
+ if (typeof object.rigidGroups[i] !== "object")
+ throw TypeError(".mirabuf.joint.Joints.rigidGroups: object expected");
+ message.rigidGroups[i] = $root.mirabuf.joint.RigidGroup.fromObject(object.rigidGroups[i]);
+ }
+ }
+ if (object.motorDefinitions) {
+ if (typeof object.motorDefinitions !== "object")
+ throw TypeError(".mirabuf.joint.Joints.motorDefinitions: object expected");
+ message.motorDefinitions = {};
+ for (let keys = Object.keys(object.motorDefinitions), i = 0; i < keys.length; ++i) {
+ if (typeof object.motorDefinitions[keys[i]] !== "object")
+ throw TypeError(".mirabuf.joint.Joints.motorDefinitions: object expected");
+ message.motorDefinitions[keys[i]] = $root.mirabuf.motor.Motor.fromObject(object.motorDefinitions[keys[i]]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Joints message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {mirabuf.joint.Joints} message Joints
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Joints.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.rigidGroups = [];
+ if (options.objects || options.defaults) {
+ object.jointDefinitions = {};
+ object.jointInstances = {};
+ object.motorDefinitions = {};
+ }
+ if (options.defaults)
+ object.info = null;
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ let keys2;
+ if (message.jointDefinitions && (keys2 = Object.keys(message.jointDefinitions)).length) {
+ object.jointDefinitions = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.jointDefinitions[keys2[j]] = $root.mirabuf.joint.Joint.toObject(message.jointDefinitions[keys2[j]], options);
+ }
+ if (message.jointInstances && (keys2 = Object.keys(message.jointInstances)).length) {
+ object.jointInstances = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.jointInstances[keys2[j]] = $root.mirabuf.joint.JointInstance.toObject(message.jointInstances[keys2[j]], options);
+ }
+ if (message.rigidGroups && message.rigidGroups.length) {
+ object.rigidGroups = [];
+ for (let j = 0; j < message.rigidGroups.length; ++j)
+ object.rigidGroups[j] = $root.mirabuf.joint.RigidGroup.toObject(message.rigidGroups[j], options);
+ }
+ if (message.motorDefinitions && (keys2 = Object.keys(message.motorDefinitions)).length) {
+ object.motorDefinitions = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.motorDefinitions[keys2[j]] = $root.mirabuf.motor.Motor.toObject(message.motorDefinitions[keys2[j]], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Joints to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.Joints
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Joints.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Joints
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.Joints
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Joints.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.Joints";
+ };
+
+ return Joints;
+ })();
+
+ /**
+ * JointMotion enum.
+ * @name mirabuf.joint.JointMotion
+ * @enum {number}
+ * @property {number} RIGID=0 RIGID value
+ * @property {number} REVOLUTE=1 REVOLUTE value
+ * @property {number} SLIDER=2 SLIDER value
+ * @property {number} CYLINDRICAL=3 CYLINDRICAL value
+ * @property {number} PINSLOT=4 PINSLOT value
+ * @property {number} PLANAR=5 PLANAR value
+ * @property {number} BALL=6 BALL value
+ * @property {number} CUSTOM=7 CUSTOM value
+ */
+ joint.JointMotion = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "RIGID"] = 0;
+ values[valuesById[1] = "REVOLUTE"] = 1;
+ values[valuesById[2] = "SLIDER"] = 2;
+ values[valuesById[3] = "CYLINDRICAL"] = 3;
+ values[valuesById[4] = "PINSLOT"] = 4;
+ values[valuesById[5] = "PLANAR"] = 5;
+ values[valuesById[6] = "BALL"] = 6;
+ values[valuesById[7] = "CUSTOM"] = 7;
+ return values;
+ })();
+
+ joint.JointInstance = (function() {
+
+ /**
+ * Properties of a JointInstance.
+ * @memberof mirabuf.joint
+ * @interface IJointInstance
+ * @property {mirabuf.IInfo|null} [info] JointInstance info
+ * @property {boolean|null} [isEndEffector] JointInstance isEndEffector
+ * @property {string|null} [parentPart] JointInstance parentPart
+ * @property {string|null} [childPart] JointInstance childPart
+ * @property {string|null} [jointReference] JointInstance jointReference
+ * @property {mirabuf.IVector3|null} [offset] JointInstance offset
+ * @property {mirabuf.IGraphContainer|null} [parts] JointInstance parts
+ * @property {string|null} [signalReference] JointInstance signalReference
+ * @property {Array.|null} [motionLink] JointInstance motionLink
+ */
+
+ /**
+ * Constructs a new JointInstance.
+ * @memberof mirabuf.joint
+ * @classdesc Instance of a Joint that has a defined motion and limits.
+ * Instancing helps with identifiy closed loop systems.
+ * @implements IJointInstance
+ * @constructor
+ * @param {mirabuf.joint.IJointInstance=} [properties] Properties to set
+ */
+ function JointInstance(properties) {
+ this.motionLink = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * JointInstance info.
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.info = null;
+
+ /**
+ * JointInstance isEndEffector.
+ * @member {boolean} isEndEffector
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.isEndEffector = false;
+
+ /**
+ * JointInstance parentPart.
+ * @member {string} parentPart
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.parentPart = "";
+
+ /**
+ * JointInstance childPart.
+ * @member {string} childPart
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.childPart = "";
+
+ /**
+ * JointInstance jointReference.
+ * @member {string} jointReference
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.jointReference = "";
+
+ /**
+ * JointInstance offset.
+ * @member {mirabuf.IVector3|null|undefined} offset
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.offset = null;
+
+ /**
+ * JointInstance parts.
+ * @member {mirabuf.IGraphContainer|null|undefined} parts
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.parts = null;
+
+ /**
+ * JointInstance signalReference.
+ * @member {string} signalReference
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.signalReference = "";
+
+ /**
+ * JointInstance motionLink.
+ * @member {Array.} motionLink
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ */
+ JointInstance.prototype.motionLink = $util.emptyArray;
+
+ /**
+ * Creates a new JointInstance instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {mirabuf.joint.IJointInstance=} [properties] Properties to set
+ * @returns {mirabuf.joint.JointInstance} JointInstance instance
+ */
+ JointInstance.create = function create(properties) {
+ return new JointInstance(properties);
+ };
+
+ /**
+ * Encodes the specified JointInstance message. Does not implicitly {@link mirabuf.joint.JointInstance.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {mirabuf.joint.IJointInstance} message JointInstance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ JointInstance.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.isEndEffector != null && Object.hasOwnProperty.call(message, "isEndEffector"))
+ writer.uint32(/* id 2, wireType 0 =*/16).bool(message.isEndEffector);
+ if (message.parentPart != null && Object.hasOwnProperty.call(message, "parentPart"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.parentPart);
+ if (message.childPart != null && Object.hasOwnProperty.call(message, "childPart"))
+ writer.uint32(/* id 4, wireType 2 =*/34).string(message.childPart);
+ if (message.jointReference != null && Object.hasOwnProperty.call(message, "jointReference"))
+ writer.uint32(/* id 5, wireType 2 =*/42).string(message.jointReference);
+ if (message.offset != null && Object.hasOwnProperty.call(message, "offset"))
+ $root.mirabuf.Vector3.encode(message.offset, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
+ if (message.parts != null && Object.hasOwnProperty.call(message, "parts"))
+ $root.mirabuf.GraphContainer.encode(message.parts, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+ if (message.signalReference != null && Object.hasOwnProperty.call(message, "signalReference"))
+ writer.uint32(/* id 8, wireType 2 =*/66).string(message.signalReference);
+ if (message.motionLink != null && message.motionLink.length)
+ for (let i = 0; i < message.motionLink.length; ++i)
+ $root.mirabuf.joint.MotionLink.encode(message.motionLink[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified JointInstance message, length delimited. Does not implicitly {@link mirabuf.joint.JointInstance.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {mirabuf.joint.IJointInstance} message JointInstance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ JointInstance.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a JointInstance message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.JointInstance} JointInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ JointInstance.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.JointInstance();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.isEndEffector = reader.bool();
+ break;
+ }
+ case 3: {
+ message.parentPart = reader.string();
+ break;
+ }
+ case 4: {
+ message.childPart = reader.string();
+ break;
+ }
+ case 5: {
+ message.jointReference = reader.string();
+ break;
+ }
+ case 6: {
+ message.offset = $root.mirabuf.Vector3.decode(reader, reader.uint32());
+ break;
+ }
+ case 7: {
+ message.parts = $root.mirabuf.GraphContainer.decode(reader, reader.uint32());
+ break;
+ }
+ case 8: {
+ message.signalReference = reader.string();
+ break;
+ }
+ case 9: {
+ if (!(message.motionLink && message.motionLink.length))
+ message.motionLink = [];
+ message.motionLink.push($root.mirabuf.joint.MotionLink.decode(reader, reader.uint32()));
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a JointInstance message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.JointInstance} JointInstance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ JointInstance.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a JointInstance message.
+ * @function verify
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ JointInstance.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.isEndEffector != null && message.hasOwnProperty("isEndEffector"))
+ if (typeof message.isEndEffector !== "boolean")
+ return "isEndEffector: boolean expected";
+ if (message.parentPart != null && message.hasOwnProperty("parentPart"))
+ if (!$util.isString(message.parentPart))
+ return "parentPart: string expected";
+ if (message.childPart != null && message.hasOwnProperty("childPart"))
+ if (!$util.isString(message.childPart))
+ return "childPart: string expected";
+ if (message.jointReference != null && message.hasOwnProperty("jointReference"))
+ if (!$util.isString(message.jointReference))
+ return "jointReference: string expected";
+ if (message.offset != null && message.hasOwnProperty("offset")) {
+ let error = $root.mirabuf.Vector3.verify(message.offset);
+ if (error)
+ return "offset." + error;
+ }
+ if (message.parts != null && message.hasOwnProperty("parts")) {
+ let error = $root.mirabuf.GraphContainer.verify(message.parts);
+ if (error)
+ return "parts." + error;
+ }
+ if (message.signalReference != null && message.hasOwnProperty("signalReference"))
+ if (!$util.isString(message.signalReference))
+ return "signalReference: string expected";
+ if (message.motionLink != null && message.hasOwnProperty("motionLink")) {
+ if (!Array.isArray(message.motionLink))
+ return "motionLink: array expected";
+ for (let i = 0; i < message.motionLink.length; ++i) {
+ let error = $root.mirabuf.joint.MotionLink.verify(message.motionLink[i]);
+ if (error)
+ return "motionLink." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a JointInstance message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.JointInstance} JointInstance
+ */
+ JointInstance.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.JointInstance)
+ return object;
+ let message = new $root.mirabuf.joint.JointInstance();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.joint.JointInstance.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.isEndEffector != null)
+ message.isEndEffector = Boolean(object.isEndEffector);
+ if (object.parentPart != null)
+ message.parentPart = String(object.parentPart);
+ if (object.childPart != null)
+ message.childPart = String(object.childPart);
+ if (object.jointReference != null)
+ message.jointReference = String(object.jointReference);
+ if (object.offset != null) {
+ if (typeof object.offset !== "object")
+ throw TypeError(".mirabuf.joint.JointInstance.offset: object expected");
+ message.offset = $root.mirabuf.Vector3.fromObject(object.offset);
+ }
+ if (object.parts != null) {
+ if (typeof object.parts !== "object")
+ throw TypeError(".mirabuf.joint.JointInstance.parts: object expected");
+ message.parts = $root.mirabuf.GraphContainer.fromObject(object.parts);
+ }
+ if (object.signalReference != null)
+ message.signalReference = String(object.signalReference);
+ if (object.motionLink) {
+ if (!Array.isArray(object.motionLink))
+ throw TypeError(".mirabuf.joint.JointInstance.motionLink: array expected");
+ message.motionLink = [];
+ for (let i = 0; i < object.motionLink.length; ++i) {
+ if (typeof object.motionLink[i] !== "object")
+ throw TypeError(".mirabuf.joint.JointInstance.motionLink: object expected");
+ message.motionLink[i] = $root.mirabuf.joint.MotionLink.fromObject(object.motionLink[i]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a JointInstance message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {mirabuf.joint.JointInstance} message JointInstance
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ JointInstance.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.motionLink = [];
+ if (options.defaults) {
+ object.info = null;
+ object.isEndEffector = false;
+ object.parentPart = "";
+ object.childPart = "";
+ object.jointReference = "";
+ object.offset = null;
+ object.parts = null;
+ object.signalReference = "";
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.isEndEffector != null && message.hasOwnProperty("isEndEffector"))
+ object.isEndEffector = message.isEndEffector;
+ if (message.parentPart != null && message.hasOwnProperty("parentPart"))
+ object.parentPart = message.parentPart;
+ if (message.childPart != null && message.hasOwnProperty("childPart"))
+ object.childPart = message.childPart;
+ if (message.jointReference != null && message.hasOwnProperty("jointReference"))
+ object.jointReference = message.jointReference;
+ if (message.offset != null && message.hasOwnProperty("offset"))
+ object.offset = $root.mirabuf.Vector3.toObject(message.offset, options);
+ if (message.parts != null && message.hasOwnProperty("parts"))
+ object.parts = $root.mirabuf.GraphContainer.toObject(message.parts, options);
+ if (message.signalReference != null && message.hasOwnProperty("signalReference"))
+ object.signalReference = message.signalReference;
+ if (message.motionLink && message.motionLink.length) {
+ object.motionLink = [];
+ for (let j = 0; j < message.motionLink.length; ++j)
+ object.motionLink[j] = $root.mirabuf.joint.MotionLink.toObject(message.motionLink[j], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this JointInstance to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.JointInstance
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ JointInstance.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for JointInstance
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.JointInstance
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ JointInstance.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.JointInstance";
+ };
+
+ return JointInstance;
+ })();
+
+ joint.MotionLink = (function() {
+
+ /**
+ * Properties of a MotionLink.
+ * @memberof mirabuf.joint
+ * @interface IMotionLink
+ * @property {string|null} [jointInstance] MotionLink jointInstance
+ * @property {number|null} [ratio] MotionLink ratio
+ * @property {boolean|null} [reversed] MotionLink reversed
+ */
+
+ /**
+ * Constructs a new MotionLink.
+ * @memberof mirabuf.joint
+ * @classdesc Motion Link Feature
+ * Enables the restriction on a joint to a certain range of motion as it is relative to another joint
+ * This is useful for moving parts restricted by belts and gears
+ * @implements IMotionLink
+ * @constructor
+ * @param {mirabuf.joint.IMotionLink=} [properties] Properties to set
+ */
+ function MotionLink(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * MotionLink jointInstance.
+ * @member {string} jointInstance
+ * @memberof mirabuf.joint.MotionLink
+ * @instance
+ */
+ MotionLink.prototype.jointInstance = "";
+
+ /**
+ * MotionLink ratio.
+ * @member {number} ratio
+ * @memberof mirabuf.joint.MotionLink
+ * @instance
+ */
+ MotionLink.prototype.ratio = 0;
+
+ /**
+ * MotionLink reversed.
+ * @member {boolean} reversed
+ * @memberof mirabuf.joint.MotionLink
+ * @instance
+ */
+ MotionLink.prototype.reversed = false;
+
+ /**
+ * Creates a new MotionLink instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {mirabuf.joint.IMotionLink=} [properties] Properties to set
+ * @returns {mirabuf.joint.MotionLink} MotionLink instance
+ */
+ MotionLink.create = function create(properties) {
+ return new MotionLink(properties);
+ };
+
+ /**
+ * Encodes the specified MotionLink message. Does not implicitly {@link mirabuf.joint.MotionLink.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {mirabuf.joint.IMotionLink} message MotionLink message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MotionLink.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.jointInstance != null && Object.hasOwnProperty.call(message, "jointInstance"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.jointInstance);
+ if (message.ratio != null && Object.hasOwnProperty.call(message, "ratio"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.ratio);
+ if (message.reversed != null && Object.hasOwnProperty.call(message, "reversed"))
+ writer.uint32(/* id 3, wireType 0 =*/24).bool(message.reversed);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified MotionLink message, length delimited. Does not implicitly {@link mirabuf.joint.MotionLink.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {mirabuf.joint.IMotionLink} message MotionLink message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ MotionLink.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a MotionLink message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.MotionLink} MotionLink
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MotionLink.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.MotionLink();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.jointInstance = reader.string();
+ break;
+ }
+ case 2: {
+ message.ratio = reader.float();
+ break;
+ }
+ case 3: {
+ message.reversed = reader.bool();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a MotionLink message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.MotionLink} MotionLink
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ MotionLink.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a MotionLink message.
+ * @function verify
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ MotionLink.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.jointInstance != null && message.hasOwnProperty("jointInstance"))
+ if (!$util.isString(message.jointInstance))
+ return "jointInstance: string expected";
+ if (message.ratio != null && message.hasOwnProperty("ratio"))
+ if (typeof message.ratio !== "number")
+ return "ratio: number expected";
+ if (message.reversed != null && message.hasOwnProperty("reversed"))
+ if (typeof message.reversed !== "boolean")
+ return "reversed: boolean expected";
+ return null;
+ };
+
+ /**
+ * Creates a MotionLink message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.MotionLink} MotionLink
+ */
+ MotionLink.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.MotionLink)
+ return object;
+ let message = new $root.mirabuf.joint.MotionLink();
+ if (object.jointInstance != null)
+ message.jointInstance = String(object.jointInstance);
+ if (object.ratio != null)
+ message.ratio = Number(object.ratio);
+ if (object.reversed != null)
+ message.reversed = Boolean(object.reversed);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a MotionLink message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {mirabuf.joint.MotionLink} message MotionLink
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ MotionLink.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.jointInstance = "";
+ object.ratio = 0;
+ object.reversed = false;
+ }
+ if (message.jointInstance != null && message.hasOwnProperty("jointInstance"))
+ object.jointInstance = message.jointInstance;
+ if (message.ratio != null && message.hasOwnProperty("ratio"))
+ object.ratio = options.json && !isFinite(message.ratio) ? String(message.ratio) : message.ratio;
+ if (message.reversed != null && message.hasOwnProperty("reversed"))
+ object.reversed = message.reversed;
+ return object;
+ };
+
+ /**
+ * Converts this MotionLink to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.MotionLink
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ MotionLink.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for MotionLink
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.MotionLink
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ MotionLink.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.MotionLink";
+ };
+
+ return MotionLink;
+ })();
+
+ joint.Joint = (function() {
+
+ /**
+ * Properties of a Joint.
+ * @memberof mirabuf.joint
+ * @interface IJoint
+ * @property {mirabuf.IInfo|null} [info] Joint name, ID, version, etc
+ * @property {mirabuf.IVector3|null} [origin] Joint origin
+ * @property {mirabuf.joint.JointMotion|null} [jointMotionType] Joint jointMotionType
+ * @property {number|null} [breakMagnitude] Joint breakMagnitude
+ * @property {mirabuf.joint.IRotationalJoint|null} [rotational] ONEOF rotational joint
+ * @property {mirabuf.joint.IPrismaticJoint|null} [prismatic] ONEOF prismatic joint
+ * @property {mirabuf.joint.ICustomJoint|null} [custom] ONEOF custom joint
+ * @property {mirabuf.IUserData|null} [userData] Additional information someone can query or store relative to your joint.
+ * @property {string|null} [motorReference] Motor definition reference to lookup in joints collection
+ */
+
+ /**
+ * Constructs a new Joint.
+ * @memberof mirabuf.joint
+ * @classdesc A unqiue implementation of a joint motion
+ * Contains information about motion but not assembly relation
+ * NOTE: A spring motion is a joint with no driver
+ * @implements IJoint
+ * @constructor
+ * @param {mirabuf.joint.IJoint=} [properties] Properties to set
+ */
+ function Joint(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Joint name, ID, version, etc
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.info = null;
+
+ /**
+ * Joint origin.
+ * @member {mirabuf.IVector3|null|undefined} origin
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.origin = null;
+
+ /**
+ * Joint jointMotionType.
+ * @member {mirabuf.joint.JointMotion} jointMotionType
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.jointMotionType = 0;
+
+ /**
+ * Joint breakMagnitude.
+ * @member {number} breakMagnitude
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.breakMagnitude = 0;
+
+ /**
+ * ONEOF rotational joint
+ * @member {mirabuf.joint.IRotationalJoint|null|undefined} rotational
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.rotational = null;
+
+ /**
+ * ONEOF prismatic joint
+ * @member {mirabuf.joint.IPrismaticJoint|null|undefined} prismatic
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.prismatic = null;
+
+ /**
+ * ONEOF custom joint
+ * @member {mirabuf.joint.ICustomJoint|null|undefined} custom
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.custom = null;
+
+ /**
+ * Additional information someone can query or store relative to your joint.
+ * @member {mirabuf.IUserData|null|undefined} userData
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.userData = null;
+
+ /**
+ * Motor definition reference to lookup in joints collection
+ * @member {string} motorReference
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Joint.prototype.motorReference = "";
+
+ // OneOf field names bound to virtual getters and setters
+ let $oneOfFields;
+
+ /**
+ * Joint JointMotion.
+ * @member {"rotational"|"prismatic"|"custom"|undefined} JointMotion
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ */
+ Object.defineProperty(Joint.prototype, "JointMotion", {
+ get: $util.oneOfGetter($oneOfFields = ["rotational", "prismatic", "custom"]),
+ set: $util.oneOfSetter($oneOfFields)
+ });
+
+ /**
+ * Creates a new Joint instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {mirabuf.joint.IJoint=} [properties] Properties to set
+ * @returns {mirabuf.joint.Joint} Joint instance
+ */
+ Joint.create = function create(properties) {
+ return new Joint(properties);
+ };
+
+ /**
+ * Encodes the specified Joint message. Does not implicitly {@link mirabuf.joint.Joint.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {mirabuf.joint.IJoint} message Joint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Joint.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.origin != null && Object.hasOwnProperty.call(message, "origin"))
+ $root.mirabuf.Vector3.encode(message.origin, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.jointMotionType != null && Object.hasOwnProperty.call(message, "jointMotionType"))
+ writer.uint32(/* id 3, wireType 0 =*/24).int32(message.jointMotionType);
+ if (message.breakMagnitude != null && Object.hasOwnProperty.call(message, "breakMagnitude"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.breakMagnitude);
+ if (message.rotational != null && Object.hasOwnProperty.call(message, "rotational"))
+ $root.mirabuf.joint.RotationalJoint.encode(message.rotational, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ if (message.prismatic != null && Object.hasOwnProperty.call(message, "prismatic"))
+ $root.mirabuf.joint.PrismaticJoint.encode(message.prismatic, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
+ if (message.custom != null && Object.hasOwnProperty.call(message, "custom"))
+ $root.mirabuf.joint.CustomJoint.encode(message.custom, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+ if (message.userData != null && Object.hasOwnProperty.call(message, "userData"))
+ $root.mirabuf.UserData.encode(message.userData, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
+ if (message.motorReference != null && Object.hasOwnProperty.call(message, "motorReference"))
+ writer.uint32(/* id 9, wireType 2 =*/74).string(message.motorReference);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Joint message, length delimited. Does not implicitly {@link mirabuf.joint.Joint.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {mirabuf.joint.IJoint} message Joint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Joint.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Joint message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.Joint} Joint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Joint.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.Joint();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.origin = $root.mirabuf.Vector3.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.jointMotionType = reader.int32();
+ break;
+ }
+ case 4: {
+ message.breakMagnitude = reader.float();
+ break;
+ }
+ case 5: {
+ message.rotational = $root.mirabuf.joint.RotationalJoint.decode(reader, reader.uint32());
+ break;
+ }
+ case 6: {
+ message.prismatic = $root.mirabuf.joint.PrismaticJoint.decode(reader, reader.uint32());
+ break;
+ }
+ case 7: {
+ message.custom = $root.mirabuf.joint.CustomJoint.decode(reader, reader.uint32());
+ break;
+ }
+ case 8: {
+ message.userData = $root.mirabuf.UserData.decode(reader, reader.uint32());
+ break;
+ }
+ case 9: {
+ message.motorReference = reader.string();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Joint message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.Joint} Joint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Joint.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Joint message.
+ * @function verify
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Joint.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ let properties = {};
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.origin != null && message.hasOwnProperty("origin")) {
+ let error = $root.mirabuf.Vector3.verify(message.origin);
+ if (error)
+ return "origin." + error;
+ }
+ if (message.jointMotionType != null && message.hasOwnProperty("jointMotionType"))
+ switch (message.jointMotionType) {
+ default:
+ return "jointMotionType: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ break;
+ }
+ if (message.breakMagnitude != null && message.hasOwnProperty("breakMagnitude"))
+ if (typeof message.breakMagnitude !== "number")
+ return "breakMagnitude: number expected";
+ if (message.rotational != null && message.hasOwnProperty("rotational")) {
+ properties.JointMotion = 1;
+ {
+ let error = $root.mirabuf.joint.RotationalJoint.verify(message.rotational);
+ if (error)
+ return "rotational." + error;
+ }
+ }
+ if (message.prismatic != null && message.hasOwnProperty("prismatic")) {
+ if (properties.JointMotion === 1)
+ return "JointMotion: multiple values";
+ properties.JointMotion = 1;
+ {
+ let error = $root.mirabuf.joint.PrismaticJoint.verify(message.prismatic);
+ if (error)
+ return "prismatic." + error;
+ }
+ }
+ if (message.custom != null && message.hasOwnProperty("custom")) {
+ if (properties.JointMotion === 1)
+ return "JointMotion: multiple values";
+ properties.JointMotion = 1;
+ {
+ let error = $root.mirabuf.joint.CustomJoint.verify(message.custom);
+ if (error)
+ return "custom." + error;
+ }
+ }
+ if (message.userData != null && message.hasOwnProperty("userData")) {
+ let error = $root.mirabuf.UserData.verify(message.userData);
+ if (error)
+ return "userData." + error;
+ }
+ if (message.motorReference != null && message.hasOwnProperty("motorReference"))
+ if (!$util.isString(message.motorReference))
+ return "motorReference: string expected";
+ return null;
+ };
+
+ /**
+ * Creates a Joint message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.Joint} Joint
+ */
+ Joint.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.Joint)
+ return object;
+ let message = new $root.mirabuf.joint.Joint();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.joint.Joint.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.origin != null) {
+ if (typeof object.origin !== "object")
+ throw TypeError(".mirabuf.joint.Joint.origin: object expected");
+ message.origin = $root.mirabuf.Vector3.fromObject(object.origin);
+ }
+ switch (object.jointMotionType) {
+ default:
+ if (typeof object.jointMotionType === "number") {
+ message.jointMotionType = object.jointMotionType;
+ break;
+ }
+ break;
+ case "RIGID":
+ case 0:
+ message.jointMotionType = 0;
+ break;
+ case "REVOLUTE":
+ case 1:
+ message.jointMotionType = 1;
+ break;
+ case "SLIDER":
+ case 2:
+ message.jointMotionType = 2;
+ break;
+ case "CYLINDRICAL":
+ case 3:
+ message.jointMotionType = 3;
+ break;
+ case "PINSLOT":
+ case 4:
+ message.jointMotionType = 4;
+ break;
+ case "PLANAR":
+ case 5:
+ message.jointMotionType = 5;
+ break;
+ case "BALL":
+ case 6:
+ message.jointMotionType = 6;
+ break;
+ case "CUSTOM":
+ case 7:
+ message.jointMotionType = 7;
+ break;
+ }
+ if (object.breakMagnitude != null)
+ message.breakMagnitude = Number(object.breakMagnitude);
+ if (object.rotational != null) {
+ if (typeof object.rotational !== "object")
+ throw TypeError(".mirabuf.joint.Joint.rotational: object expected");
+ message.rotational = $root.mirabuf.joint.RotationalJoint.fromObject(object.rotational);
+ }
+ if (object.prismatic != null) {
+ if (typeof object.prismatic !== "object")
+ throw TypeError(".mirabuf.joint.Joint.prismatic: object expected");
+ message.prismatic = $root.mirabuf.joint.PrismaticJoint.fromObject(object.prismatic);
+ }
+ if (object.custom != null) {
+ if (typeof object.custom !== "object")
+ throw TypeError(".mirabuf.joint.Joint.custom: object expected");
+ message.custom = $root.mirabuf.joint.CustomJoint.fromObject(object.custom);
+ }
+ if (object.userData != null) {
+ if (typeof object.userData !== "object")
+ throw TypeError(".mirabuf.joint.Joint.userData: object expected");
+ message.userData = $root.mirabuf.UserData.fromObject(object.userData);
+ }
+ if (object.motorReference != null)
+ message.motorReference = String(object.motorReference);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Joint message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {mirabuf.joint.Joint} message Joint
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Joint.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.origin = null;
+ object.jointMotionType = options.enums === String ? "RIGID" : 0;
+ object.breakMagnitude = 0;
+ object.userData = null;
+ object.motorReference = "";
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.origin != null && message.hasOwnProperty("origin"))
+ object.origin = $root.mirabuf.Vector3.toObject(message.origin, options);
+ if (message.jointMotionType != null && message.hasOwnProperty("jointMotionType"))
+ object.jointMotionType = options.enums === String ? $root.mirabuf.joint.JointMotion[message.jointMotionType] === undefined ? message.jointMotionType : $root.mirabuf.joint.JointMotion[message.jointMotionType] : message.jointMotionType;
+ if (message.breakMagnitude != null && message.hasOwnProperty("breakMagnitude"))
+ object.breakMagnitude = options.json && !isFinite(message.breakMagnitude) ? String(message.breakMagnitude) : message.breakMagnitude;
+ if (message.rotational != null && message.hasOwnProperty("rotational")) {
+ object.rotational = $root.mirabuf.joint.RotationalJoint.toObject(message.rotational, options);
+ if (options.oneofs)
+ object.JointMotion = "rotational";
+ }
+ if (message.prismatic != null && message.hasOwnProperty("prismatic")) {
+ object.prismatic = $root.mirabuf.joint.PrismaticJoint.toObject(message.prismatic, options);
+ if (options.oneofs)
+ object.JointMotion = "prismatic";
+ }
+ if (message.custom != null && message.hasOwnProperty("custom")) {
+ object.custom = $root.mirabuf.joint.CustomJoint.toObject(message.custom, options);
+ if (options.oneofs)
+ object.JointMotion = "custom";
+ }
+ if (message.userData != null && message.hasOwnProperty("userData"))
+ object.userData = $root.mirabuf.UserData.toObject(message.userData, options);
+ if (message.motorReference != null && message.hasOwnProperty("motorReference"))
+ object.motorReference = message.motorReference;
+ return object;
+ };
+
+ /**
+ * Converts this Joint to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.Joint
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Joint.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Joint
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.Joint
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Joint.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.Joint";
+ };
+
+ return Joint;
+ })();
+
+ joint.Dynamics = (function() {
+
+ /**
+ * Properties of a Dynamics.
+ * @memberof mirabuf.joint
+ * @interface IDynamics
+ * @property {number|null} [damping] Damping effect on a given joint motion
+ * @property {number|null} [friction] Friction effect on a given joint motion
+ */
+
+ /**
+ * Constructs a new Dynamics.
+ * @memberof mirabuf.joint
+ * @classdesc Dynamics specify the mechanical effects on the motion.
+ * @implements IDynamics
+ * @constructor
+ * @param {mirabuf.joint.IDynamics=} [properties] Properties to set
+ */
+ function Dynamics(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Damping effect on a given joint motion
+ * @member {number} damping
+ * @memberof mirabuf.joint.Dynamics
+ * @instance
+ */
+ Dynamics.prototype.damping = 0;
+
+ /**
+ * Friction effect on a given joint motion
+ * @member {number} friction
+ * @memberof mirabuf.joint.Dynamics
+ * @instance
+ */
+ Dynamics.prototype.friction = 0;
+
+ /**
+ * Creates a new Dynamics instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {mirabuf.joint.IDynamics=} [properties] Properties to set
+ * @returns {mirabuf.joint.Dynamics} Dynamics instance
+ */
+ Dynamics.create = function create(properties) {
+ return new Dynamics(properties);
+ };
+
+ /**
+ * Encodes the specified Dynamics message. Does not implicitly {@link mirabuf.joint.Dynamics.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {mirabuf.joint.IDynamics} message Dynamics message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Dynamics.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.damping != null && Object.hasOwnProperty.call(message, "damping"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.damping);
+ if (message.friction != null && Object.hasOwnProperty.call(message, "friction"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.friction);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Dynamics message, length delimited. Does not implicitly {@link mirabuf.joint.Dynamics.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {mirabuf.joint.IDynamics} message Dynamics message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Dynamics.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Dynamics message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.Dynamics} Dynamics
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Dynamics.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.Dynamics();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.damping = reader.float();
+ break;
+ }
+ case 2: {
+ message.friction = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Dynamics message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.Dynamics} Dynamics
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Dynamics.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Dynamics message.
+ * @function verify
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Dynamics.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.damping != null && message.hasOwnProperty("damping"))
+ if (typeof message.damping !== "number")
+ return "damping: number expected";
+ if (message.friction != null && message.hasOwnProperty("friction"))
+ if (typeof message.friction !== "number")
+ return "friction: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Dynamics message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.Dynamics} Dynamics
+ */
+ Dynamics.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.Dynamics)
+ return object;
+ let message = new $root.mirabuf.joint.Dynamics();
+ if (object.damping != null)
+ message.damping = Number(object.damping);
+ if (object.friction != null)
+ message.friction = Number(object.friction);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Dynamics message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {mirabuf.joint.Dynamics} message Dynamics
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Dynamics.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.damping = 0;
+ object.friction = 0;
+ }
+ if (message.damping != null && message.hasOwnProperty("damping"))
+ object.damping = options.json && !isFinite(message.damping) ? String(message.damping) : message.damping;
+ if (message.friction != null && message.hasOwnProperty("friction"))
+ object.friction = options.json && !isFinite(message.friction) ? String(message.friction) : message.friction;
+ return object;
+ };
+
+ /**
+ * Converts this Dynamics to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.Dynamics
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Dynamics.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Dynamics
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.Dynamics
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Dynamics.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.Dynamics";
+ };
+
+ return Dynamics;
+ })();
+
+ joint.Limits = (function() {
+
+ /**
+ * Properties of a Limits.
+ * @memberof mirabuf.joint
+ * @interface ILimits
+ * @property {number|null} [lower] Lower Limit corresponds to default displacement
+ * @property {number|null} [upper] Upper Limit is the joint extent
+ * @property {number|null} [velocity] Velocity Max in m/s^2 (angular for rotational)
+ * @property {number|null} [effort] Effort is the absolute force a joint can apply for a given instant - ROS has a great article on it http://wiki.ros.org/pr2_controller_manager/safety_limits
+ */
+
+ /**
+ * Constructs a new Limits.
+ * @memberof mirabuf.joint
+ * @classdesc Limits specify the mechanical range of a given joint.
+ *
+ * TODO: Add units
+ * @implements ILimits
+ * @constructor
+ * @param {mirabuf.joint.ILimits=} [properties] Properties to set
+ */
+ function Limits(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Lower Limit corresponds to default displacement
+ * @member {number} lower
+ * @memberof mirabuf.joint.Limits
+ * @instance
+ */
+ Limits.prototype.lower = 0;
+
+ /**
+ * Upper Limit is the joint extent
+ * @member {number} upper
+ * @memberof mirabuf.joint.Limits
+ * @instance
+ */
+ Limits.prototype.upper = 0;
+
+ /**
+ * Velocity Max in m/s^2 (angular for rotational)
+ * @member {number} velocity
+ * @memberof mirabuf.joint.Limits
+ * @instance
+ */
+ Limits.prototype.velocity = 0;
+
+ /**
+ * Effort is the absolute force a joint can apply for a given instant - ROS has a great article on it http://wiki.ros.org/pr2_controller_manager/safety_limits
+ * @member {number} effort
+ * @memberof mirabuf.joint.Limits
+ * @instance
+ */
+ Limits.prototype.effort = 0;
+
+ /**
+ * Creates a new Limits instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {mirabuf.joint.ILimits=} [properties] Properties to set
+ * @returns {mirabuf.joint.Limits} Limits instance
+ */
+ Limits.create = function create(properties) {
+ return new Limits(properties);
+ };
+
+ /**
+ * Encodes the specified Limits message. Does not implicitly {@link mirabuf.joint.Limits.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {mirabuf.joint.ILimits} message Limits message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Limits.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.lower != null && Object.hasOwnProperty.call(message, "lower"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.lower);
+ if (message.upper != null && Object.hasOwnProperty.call(message, "upper"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.upper);
+ if (message.velocity != null && Object.hasOwnProperty.call(message, "velocity"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.velocity);
+ if (message.effort != null && Object.hasOwnProperty.call(message, "effort"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.effort);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Limits message, length delimited. Does not implicitly {@link mirabuf.joint.Limits.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {mirabuf.joint.ILimits} message Limits message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Limits.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Limits message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.Limits} Limits
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Limits.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.Limits();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.lower = reader.float();
+ break;
+ }
+ case 2: {
+ message.upper = reader.float();
+ break;
+ }
+ case 3: {
+ message.velocity = reader.float();
+ break;
+ }
+ case 4: {
+ message.effort = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Limits message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.Limits} Limits
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Limits.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Limits message.
+ * @function verify
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Limits.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.lower != null && message.hasOwnProperty("lower"))
+ if (typeof message.lower !== "number")
+ return "lower: number expected";
+ if (message.upper != null && message.hasOwnProperty("upper"))
+ if (typeof message.upper !== "number")
+ return "upper: number expected";
+ if (message.velocity != null && message.hasOwnProperty("velocity"))
+ if (typeof message.velocity !== "number")
+ return "velocity: number expected";
+ if (message.effort != null && message.hasOwnProperty("effort"))
+ if (typeof message.effort !== "number")
+ return "effort: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Limits message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.Limits} Limits
+ */
+ Limits.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.Limits)
+ return object;
+ let message = new $root.mirabuf.joint.Limits();
+ if (object.lower != null)
+ message.lower = Number(object.lower);
+ if (object.upper != null)
+ message.upper = Number(object.upper);
+ if (object.velocity != null)
+ message.velocity = Number(object.velocity);
+ if (object.effort != null)
+ message.effort = Number(object.effort);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Limits message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {mirabuf.joint.Limits} message Limits
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Limits.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.lower = 0;
+ object.upper = 0;
+ object.velocity = 0;
+ object.effort = 0;
+ }
+ if (message.lower != null && message.hasOwnProperty("lower"))
+ object.lower = options.json && !isFinite(message.lower) ? String(message.lower) : message.lower;
+ if (message.upper != null && message.hasOwnProperty("upper"))
+ object.upper = options.json && !isFinite(message.upper) ? String(message.upper) : message.upper;
+ if (message.velocity != null && message.hasOwnProperty("velocity"))
+ object.velocity = options.json && !isFinite(message.velocity) ? String(message.velocity) : message.velocity;
+ if (message.effort != null && message.hasOwnProperty("effort"))
+ object.effort = options.json && !isFinite(message.effort) ? String(message.effort) : message.effort;
+ return object;
+ };
+
+ /**
+ * Converts this Limits to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.Limits
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Limits.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Limits
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.Limits
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Limits.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.Limits";
+ };
+
+ return Limits;
+ })();
+
+ joint.Safety = (function() {
+
+ /**
+ * Properties of a Safety.
+ * @memberof mirabuf.joint
+ * @interface ISafety
+ * @property {number|null} [lowerLimit] Lower software limit
+ * @property {number|null} [upperLimit] Upper Software limit
+ * @property {number|null} [kPosition] Relation between position and velocity limit
+ * @property {number|null} [kVelocity] Relation between effort and velocity limit
+ */
+
+ /**
+ * Constructs a new Safety.
+ * @memberof mirabuf.joint
+ * @classdesc Safety switch configuration for a given joint.
+ * Can usefully indicate a bounds issue.
+ * Inspired by the URDF implementation.
+ *
+ * This should really just be created by the controller.
+ * http://wiki.ros.org/pr2_controller_manager/safety_limits
+ * @implements ISafety
+ * @constructor
+ * @param {mirabuf.joint.ISafety=} [properties] Properties to set
+ */
+ function Safety(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Lower software limit
+ * @member {number} lowerLimit
+ * @memberof mirabuf.joint.Safety
+ * @instance
+ */
+ Safety.prototype.lowerLimit = 0;
+
+ /**
+ * Upper Software limit
+ * @member {number} upperLimit
+ * @memberof mirabuf.joint.Safety
+ * @instance
+ */
+ Safety.prototype.upperLimit = 0;
+
+ /**
+ * Relation between position and velocity limit
+ * @member {number} kPosition
+ * @memberof mirabuf.joint.Safety
+ * @instance
+ */
+ Safety.prototype.kPosition = 0;
+
+ /**
+ * Relation between effort and velocity limit
+ * @member {number} kVelocity
+ * @memberof mirabuf.joint.Safety
+ * @instance
+ */
+ Safety.prototype.kVelocity = 0;
+
+ /**
+ * Creates a new Safety instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {mirabuf.joint.ISafety=} [properties] Properties to set
+ * @returns {mirabuf.joint.Safety} Safety instance
+ */
+ Safety.create = function create(properties) {
+ return new Safety(properties);
+ };
+
+ /**
+ * Encodes the specified Safety message. Does not implicitly {@link mirabuf.joint.Safety.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {mirabuf.joint.ISafety} message Safety message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Safety.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.lowerLimit != null && Object.hasOwnProperty.call(message, "lowerLimit"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.lowerLimit);
+ if (message.upperLimit != null && Object.hasOwnProperty.call(message, "upperLimit"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.upperLimit);
+ if (message.kPosition != null && Object.hasOwnProperty.call(message, "kPosition"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.kPosition);
+ if (message.kVelocity != null && Object.hasOwnProperty.call(message, "kVelocity"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.kVelocity);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Safety message, length delimited. Does not implicitly {@link mirabuf.joint.Safety.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {mirabuf.joint.ISafety} message Safety message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Safety.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Safety message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.Safety} Safety
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Safety.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.Safety();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.lowerLimit = reader.float();
+ break;
+ }
+ case 2: {
+ message.upperLimit = reader.float();
+ break;
+ }
+ case 3: {
+ message.kPosition = reader.float();
+ break;
+ }
+ case 4: {
+ message.kVelocity = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Safety message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.Safety} Safety
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Safety.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Safety message.
+ * @function verify
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Safety.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.lowerLimit != null && message.hasOwnProperty("lowerLimit"))
+ if (typeof message.lowerLimit !== "number")
+ return "lowerLimit: number expected";
+ if (message.upperLimit != null && message.hasOwnProperty("upperLimit"))
+ if (typeof message.upperLimit !== "number")
+ return "upperLimit: number expected";
+ if (message.kPosition != null && message.hasOwnProperty("kPosition"))
+ if (typeof message.kPosition !== "number")
+ return "kPosition: number expected";
+ if (message.kVelocity != null && message.hasOwnProperty("kVelocity"))
+ if (typeof message.kVelocity !== "number")
+ return "kVelocity: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Safety message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.Safety} Safety
+ */
+ Safety.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.Safety)
+ return object;
+ let message = new $root.mirabuf.joint.Safety();
+ if (object.lowerLimit != null)
+ message.lowerLimit = Number(object.lowerLimit);
+ if (object.upperLimit != null)
+ message.upperLimit = Number(object.upperLimit);
+ if (object.kPosition != null)
+ message.kPosition = Number(object.kPosition);
+ if (object.kVelocity != null)
+ message.kVelocity = Number(object.kVelocity);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Safety message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {mirabuf.joint.Safety} message Safety
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Safety.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.lowerLimit = 0;
+ object.upperLimit = 0;
+ object.kPosition = 0;
+ object.kVelocity = 0;
+ }
+ if (message.lowerLimit != null && message.hasOwnProperty("lowerLimit"))
+ object.lowerLimit = options.json && !isFinite(message.lowerLimit) ? String(message.lowerLimit) : message.lowerLimit;
+ if (message.upperLimit != null && message.hasOwnProperty("upperLimit"))
+ object.upperLimit = options.json && !isFinite(message.upperLimit) ? String(message.upperLimit) : message.upperLimit;
+ if (message.kPosition != null && message.hasOwnProperty("kPosition"))
+ object.kPosition = options.json && !isFinite(message.kPosition) ? String(message.kPosition) : message.kPosition;
+ if (message.kVelocity != null && message.hasOwnProperty("kVelocity"))
+ object.kVelocity = options.json && !isFinite(message.kVelocity) ? String(message.kVelocity) : message.kVelocity;
+ return object;
+ };
+
+ /**
+ * Converts this Safety to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.Safety
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Safety.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Safety
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.Safety
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Safety.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.Safety";
+ };
+
+ return Safety;
+ })();
+
+ joint.DOF = (function() {
+
+ /**
+ * Properties of a DOF.
+ * @memberof mirabuf.joint
+ * @interface IDOF
+ * @property {string|null} [name] In case you want to name this degree of freedom
+ * @property {mirabuf.IVector3|null} [axis] Axis the degree of freedom is pivoting by
+ * @property {mirabuf.Axis|null} [pivotDirection] Direction the axis vector is offset from - this has an incorrect naming scheme
+ * @property {mirabuf.joint.IDynamics|null} [dynamics] Dynamic properties of this joint pivot
+ * @property {mirabuf.joint.ILimits|null} [limits] Limits of this freedom
+ * @property {number|null} [value] Current value of the DOF
+ */
+
+ /**
+ * Constructs a new DOF.
+ * @memberof mirabuf.joint
+ * @classdesc DOF - representing the construction of a joint motion
+ * @implements IDOF
+ * @constructor
+ * @param {mirabuf.joint.IDOF=} [properties] Properties to set
+ */
+ function DOF(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * In case you want to name this degree of freedom
+ * @member {string} name
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.name = "";
+
+ /**
+ * Axis the degree of freedom is pivoting by
+ * @member {mirabuf.IVector3|null|undefined} axis
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.axis = null;
+
+ /**
+ * Direction the axis vector is offset from - this has an incorrect naming scheme
+ * @member {mirabuf.Axis} pivotDirection
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.pivotDirection = 0;
+
+ /**
+ * Dynamic properties of this joint pivot
+ * @member {mirabuf.joint.IDynamics|null|undefined} dynamics
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.dynamics = null;
+
+ /**
+ * Limits of this freedom
+ * @member {mirabuf.joint.ILimits|null|undefined} limits
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.limits = null;
+
+ /**
+ * Current value of the DOF
+ * @member {number} value
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ */
+ DOF.prototype.value = 0;
+
+ /**
+ * Creates a new DOF instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {mirabuf.joint.IDOF=} [properties] Properties to set
+ * @returns {mirabuf.joint.DOF} DOF instance
+ */
+ DOF.create = function create(properties) {
+ return new DOF(properties);
+ };
+
+ /**
+ * Encodes the specified DOF message. Does not implicitly {@link mirabuf.joint.DOF.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {mirabuf.joint.IDOF} message DOF message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DOF.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.name != null && Object.hasOwnProperty.call(message, "name"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
+ if (message.axis != null && Object.hasOwnProperty.call(message, "axis"))
+ $root.mirabuf.Vector3.encode(message.axis, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.pivotDirection != null && Object.hasOwnProperty.call(message, "pivotDirection"))
+ writer.uint32(/* id 3, wireType 0 =*/24).int32(message.pivotDirection);
+ if (message.dynamics != null && Object.hasOwnProperty.call(message, "dynamics"))
+ $root.mirabuf.joint.Dynamics.encode(message.dynamics, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.limits != null && Object.hasOwnProperty.call(message, "limits"))
+ $root.mirabuf.joint.Limits.encode(message.limits, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+ writer.uint32(/* id 6, wireType 5 =*/53).float(message.value);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified DOF message, length delimited. Does not implicitly {@link mirabuf.joint.DOF.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {mirabuf.joint.IDOF} message DOF message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DOF.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a DOF message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.DOF} DOF
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DOF.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.DOF();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.name = reader.string();
+ break;
+ }
+ case 2: {
+ message.axis = $root.mirabuf.Vector3.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.pivotDirection = reader.int32();
+ break;
+ }
+ case 4: {
+ message.dynamics = $root.mirabuf.joint.Dynamics.decode(reader, reader.uint32());
+ break;
+ }
+ case 5: {
+ message.limits = $root.mirabuf.joint.Limits.decode(reader, reader.uint32());
+ break;
+ }
+ case 6: {
+ message.value = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a DOF message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.DOF} DOF
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DOF.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a DOF message.
+ * @function verify
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ DOF.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.name != null && message.hasOwnProperty("name"))
+ if (!$util.isString(message.name))
+ return "name: string expected";
+ if (message.axis != null && message.hasOwnProperty("axis")) {
+ let error = $root.mirabuf.Vector3.verify(message.axis);
+ if (error)
+ return "axis." + error;
+ }
+ if (message.pivotDirection != null && message.hasOwnProperty("pivotDirection"))
+ switch (message.pivotDirection) {
+ default:
+ return "pivotDirection: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ break;
+ }
+ if (message.dynamics != null && message.hasOwnProperty("dynamics")) {
+ let error = $root.mirabuf.joint.Dynamics.verify(message.dynamics);
+ if (error)
+ return "dynamics." + error;
+ }
+ if (message.limits != null && message.hasOwnProperty("limits")) {
+ let error = $root.mirabuf.joint.Limits.verify(message.limits);
+ if (error)
+ return "limits." + error;
+ }
+ if (message.value != null && message.hasOwnProperty("value"))
+ if (typeof message.value !== "number")
+ return "value: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a DOF message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.DOF} DOF
+ */
+ DOF.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.DOF)
+ return object;
+ let message = new $root.mirabuf.joint.DOF();
+ if (object.name != null)
+ message.name = String(object.name);
+ if (object.axis != null) {
+ if (typeof object.axis !== "object")
+ throw TypeError(".mirabuf.joint.DOF.axis: object expected");
+ message.axis = $root.mirabuf.Vector3.fromObject(object.axis);
+ }
+ switch (object.pivotDirection) {
+ default:
+ if (typeof object.pivotDirection === "number") {
+ message.pivotDirection = object.pivotDirection;
+ break;
+ }
+ break;
+ case "X":
+ case 0:
+ message.pivotDirection = 0;
+ break;
+ case "Y":
+ case 1:
+ message.pivotDirection = 1;
+ break;
+ case "Z":
+ case 2:
+ message.pivotDirection = 2;
+ break;
+ }
+ if (object.dynamics != null) {
+ if (typeof object.dynamics !== "object")
+ throw TypeError(".mirabuf.joint.DOF.dynamics: object expected");
+ message.dynamics = $root.mirabuf.joint.Dynamics.fromObject(object.dynamics);
+ }
+ if (object.limits != null) {
+ if (typeof object.limits !== "object")
+ throw TypeError(".mirabuf.joint.DOF.limits: object expected");
+ message.limits = $root.mirabuf.joint.Limits.fromObject(object.limits);
+ }
+ if (object.value != null)
+ message.value = Number(object.value);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a DOF message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {mirabuf.joint.DOF} message DOF
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ DOF.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.name = "";
+ object.axis = null;
+ object.pivotDirection = options.enums === String ? "X" : 0;
+ object.dynamics = null;
+ object.limits = null;
+ object.value = 0;
+ }
+ if (message.name != null && message.hasOwnProperty("name"))
+ object.name = message.name;
+ if (message.axis != null && message.hasOwnProperty("axis"))
+ object.axis = $root.mirabuf.Vector3.toObject(message.axis, options);
+ if (message.pivotDirection != null && message.hasOwnProperty("pivotDirection"))
+ object.pivotDirection = options.enums === String ? $root.mirabuf.Axis[message.pivotDirection] === undefined ? message.pivotDirection : $root.mirabuf.Axis[message.pivotDirection] : message.pivotDirection;
+ if (message.dynamics != null && message.hasOwnProperty("dynamics"))
+ object.dynamics = $root.mirabuf.joint.Dynamics.toObject(message.dynamics, options);
+ if (message.limits != null && message.hasOwnProperty("limits"))
+ object.limits = $root.mirabuf.joint.Limits.toObject(message.limits, options);
+ if (message.value != null && message.hasOwnProperty("value"))
+ object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value;
+ return object;
+ };
+
+ /**
+ * Converts this DOF to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.DOF
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ DOF.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for DOF
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.DOF
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ DOF.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.DOF";
+ };
+
+ return DOF;
+ })();
+
+ joint.CustomJoint = (function() {
+
+ /**
+ * Properties of a CustomJoint.
+ * @memberof mirabuf.joint
+ * @interface ICustomJoint
+ * @property {Array.|null} [dofs] A list of degrees of freedom that the joint can contain
+ */
+
+ /**
+ * Constructs a new CustomJoint.
+ * @memberof mirabuf.joint
+ * @classdesc CustomJoint is a joint with N degrees of freedom specified.
+ * There should be input validation to handle max freedom case.
+ * @implements ICustomJoint
+ * @constructor
+ * @param {mirabuf.joint.ICustomJoint=} [properties] Properties to set
+ */
+ function CustomJoint(properties) {
+ this.dofs = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * A list of degrees of freedom that the joint can contain
+ * @member {Array.} dofs
+ * @memberof mirabuf.joint.CustomJoint
+ * @instance
+ */
+ CustomJoint.prototype.dofs = $util.emptyArray;
+
+ /**
+ * Creates a new CustomJoint instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {mirabuf.joint.ICustomJoint=} [properties] Properties to set
+ * @returns {mirabuf.joint.CustomJoint} CustomJoint instance
+ */
+ CustomJoint.create = function create(properties) {
+ return new CustomJoint(properties);
+ };
+
+ /**
+ * Encodes the specified CustomJoint message. Does not implicitly {@link mirabuf.joint.CustomJoint.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {mirabuf.joint.ICustomJoint} message CustomJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ CustomJoint.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.dofs != null && message.dofs.length)
+ for (let i = 0; i < message.dofs.length; ++i)
+ $root.mirabuf.joint.DOF.encode(message.dofs[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified CustomJoint message, length delimited. Does not implicitly {@link mirabuf.joint.CustomJoint.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {mirabuf.joint.ICustomJoint} message CustomJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ CustomJoint.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a CustomJoint message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.CustomJoint} CustomJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ CustomJoint.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.CustomJoint();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (!(message.dofs && message.dofs.length))
+ message.dofs = [];
+ message.dofs.push($root.mirabuf.joint.DOF.decode(reader, reader.uint32()));
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a CustomJoint message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.CustomJoint} CustomJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ CustomJoint.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a CustomJoint message.
+ * @function verify
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ CustomJoint.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.dofs != null && message.hasOwnProperty("dofs")) {
+ if (!Array.isArray(message.dofs))
+ return "dofs: array expected";
+ for (let i = 0; i < message.dofs.length; ++i) {
+ let error = $root.mirabuf.joint.DOF.verify(message.dofs[i]);
+ if (error)
+ return "dofs." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a CustomJoint message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.CustomJoint} CustomJoint
+ */
+ CustomJoint.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.CustomJoint)
+ return object;
+ let message = new $root.mirabuf.joint.CustomJoint();
+ if (object.dofs) {
+ if (!Array.isArray(object.dofs))
+ throw TypeError(".mirabuf.joint.CustomJoint.dofs: array expected");
+ message.dofs = [];
+ for (let i = 0; i < object.dofs.length; ++i) {
+ if (typeof object.dofs[i] !== "object")
+ throw TypeError(".mirabuf.joint.CustomJoint.dofs: object expected");
+ message.dofs[i] = $root.mirabuf.joint.DOF.fromObject(object.dofs[i]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a CustomJoint message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {mirabuf.joint.CustomJoint} message CustomJoint
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ CustomJoint.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.dofs = [];
+ if (message.dofs && message.dofs.length) {
+ object.dofs = [];
+ for (let j = 0; j < message.dofs.length; ++j)
+ object.dofs[j] = $root.mirabuf.joint.DOF.toObject(message.dofs[j], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this CustomJoint to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.CustomJoint
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ CustomJoint.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for CustomJoint
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.CustomJoint
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ CustomJoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.CustomJoint";
+ };
+
+ return CustomJoint;
+ })();
+
+ joint.RotationalJoint = (function() {
+
+ /**
+ * Properties of a RotationalJoint.
+ * @memberof mirabuf.joint
+ * @interface IRotationalJoint
+ * @property {mirabuf.joint.IDOF|null} [rotationalFreedom] RotationalJoint rotationalFreedom
+ */
+
+ /**
+ * Constructs a new RotationalJoint.
+ * @memberof mirabuf.joint
+ * @classdesc RotationalJoint describes a joint with rotational translation.
+ * This is the exact same as prismatic for now.
+ * @implements IRotationalJoint
+ * @constructor
+ * @param {mirabuf.joint.IRotationalJoint=} [properties] Properties to set
+ */
+ function RotationalJoint(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * RotationalJoint rotationalFreedom.
+ * @member {mirabuf.joint.IDOF|null|undefined} rotationalFreedom
+ * @memberof mirabuf.joint.RotationalJoint
+ * @instance
+ */
+ RotationalJoint.prototype.rotationalFreedom = null;
+
+ /**
+ * Creates a new RotationalJoint instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {mirabuf.joint.IRotationalJoint=} [properties] Properties to set
+ * @returns {mirabuf.joint.RotationalJoint} RotationalJoint instance
+ */
+ RotationalJoint.create = function create(properties) {
+ return new RotationalJoint(properties);
+ };
+
+ /**
+ * Encodes the specified RotationalJoint message. Does not implicitly {@link mirabuf.joint.RotationalJoint.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {mirabuf.joint.IRotationalJoint} message RotationalJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ RotationalJoint.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.rotationalFreedom != null && Object.hasOwnProperty.call(message, "rotationalFreedom"))
+ $root.mirabuf.joint.DOF.encode(message.rotationalFreedom, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified RotationalJoint message, length delimited. Does not implicitly {@link mirabuf.joint.RotationalJoint.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {mirabuf.joint.IRotationalJoint} message RotationalJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ RotationalJoint.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a RotationalJoint message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.RotationalJoint} RotationalJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ RotationalJoint.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.RotationalJoint();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.rotationalFreedom = $root.mirabuf.joint.DOF.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a RotationalJoint message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.RotationalJoint} RotationalJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ RotationalJoint.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a RotationalJoint message.
+ * @function verify
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ RotationalJoint.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.rotationalFreedom != null && message.hasOwnProperty("rotationalFreedom")) {
+ let error = $root.mirabuf.joint.DOF.verify(message.rotationalFreedom);
+ if (error)
+ return "rotationalFreedom." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a RotationalJoint message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.RotationalJoint} RotationalJoint
+ */
+ RotationalJoint.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.RotationalJoint)
+ return object;
+ let message = new $root.mirabuf.joint.RotationalJoint();
+ if (object.rotationalFreedom != null) {
+ if (typeof object.rotationalFreedom !== "object")
+ throw TypeError(".mirabuf.joint.RotationalJoint.rotationalFreedom: object expected");
+ message.rotationalFreedom = $root.mirabuf.joint.DOF.fromObject(object.rotationalFreedom);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a RotationalJoint message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {mirabuf.joint.RotationalJoint} message RotationalJoint
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ RotationalJoint.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.rotationalFreedom = null;
+ if (message.rotationalFreedom != null && message.hasOwnProperty("rotationalFreedom"))
+ object.rotationalFreedom = $root.mirabuf.joint.DOF.toObject(message.rotationalFreedom, options);
+ return object;
+ };
+
+ /**
+ * Converts this RotationalJoint to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.RotationalJoint
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ RotationalJoint.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for RotationalJoint
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.RotationalJoint
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ RotationalJoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.RotationalJoint";
+ };
+
+ return RotationalJoint;
+ })();
+
+ joint.BallJoint = (function() {
+
+ /**
+ * Properties of a BallJoint.
+ * @memberof mirabuf.joint
+ * @interface IBallJoint
+ * @property {mirabuf.joint.IDOF|null} [yaw] BallJoint yaw
+ * @property {mirabuf.joint.IDOF|null} [pitch] BallJoint pitch
+ * @property {mirabuf.joint.IDOF|null} [rotation] BallJoint rotation
+ */
+
+ /**
+ * Constructs a new BallJoint.
+ * @memberof mirabuf.joint
+ * @classdesc Represents a BallJoint.
+ * @implements IBallJoint
+ * @constructor
+ * @param {mirabuf.joint.IBallJoint=} [properties] Properties to set
+ */
+ function BallJoint(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * BallJoint yaw.
+ * @member {mirabuf.joint.IDOF|null|undefined} yaw
+ * @memberof mirabuf.joint.BallJoint
+ * @instance
+ */
+ BallJoint.prototype.yaw = null;
+
+ /**
+ * BallJoint pitch.
+ * @member {mirabuf.joint.IDOF|null|undefined} pitch
+ * @memberof mirabuf.joint.BallJoint
+ * @instance
+ */
+ BallJoint.prototype.pitch = null;
+
+ /**
+ * BallJoint rotation.
+ * @member {mirabuf.joint.IDOF|null|undefined} rotation
+ * @memberof mirabuf.joint.BallJoint
+ * @instance
+ */
+ BallJoint.prototype.rotation = null;
+
+ /**
+ * Creates a new BallJoint instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {mirabuf.joint.IBallJoint=} [properties] Properties to set
+ * @returns {mirabuf.joint.BallJoint} BallJoint instance
+ */
+ BallJoint.create = function create(properties) {
+ return new BallJoint(properties);
+ };
+
+ /**
+ * Encodes the specified BallJoint message. Does not implicitly {@link mirabuf.joint.BallJoint.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {mirabuf.joint.IBallJoint} message BallJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ BallJoint.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.yaw != null && Object.hasOwnProperty.call(message, "yaw"))
+ $root.mirabuf.joint.DOF.encode(message.yaw, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.pitch != null && Object.hasOwnProperty.call(message, "pitch"))
+ $root.mirabuf.joint.DOF.encode(message.pitch, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.rotation != null && Object.hasOwnProperty.call(message, "rotation"))
+ $root.mirabuf.joint.DOF.encode(message.rotation, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified BallJoint message, length delimited. Does not implicitly {@link mirabuf.joint.BallJoint.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {mirabuf.joint.IBallJoint} message BallJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ BallJoint.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a BallJoint message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.BallJoint} BallJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ BallJoint.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.BallJoint();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.yaw = $root.mirabuf.joint.DOF.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.pitch = $root.mirabuf.joint.DOF.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.rotation = $root.mirabuf.joint.DOF.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a BallJoint message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.BallJoint} BallJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ BallJoint.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a BallJoint message.
+ * @function verify
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ BallJoint.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.yaw != null && message.hasOwnProperty("yaw")) {
+ let error = $root.mirabuf.joint.DOF.verify(message.yaw);
+ if (error)
+ return "yaw." + error;
+ }
+ if (message.pitch != null && message.hasOwnProperty("pitch")) {
+ let error = $root.mirabuf.joint.DOF.verify(message.pitch);
+ if (error)
+ return "pitch." + error;
+ }
+ if (message.rotation != null && message.hasOwnProperty("rotation")) {
+ let error = $root.mirabuf.joint.DOF.verify(message.rotation);
+ if (error)
+ return "rotation." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a BallJoint message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.BallJoint} BallJoint
+ */
+ BallJoint.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.BallJoint)
+ return object;
+ let message = new $root.mirabuf.joint.BallJoint();
+ if (object.yaw != null) {
+ if (typeof object.yaw !== "object")
+ throw TypeError(".mirabuf.joint.BallJoint.yaw: object expected");
+ message.yaw = $root.mirabuf.joint.DOF.fromObject(object.yaw);
+ }
+ if (object.pitch != null) {
+ if (typeof object.pitch !== "object")
+ throw TypeError(".mirabuf.joint.BallJoint.pitch: object expected");
+ message.pitch = $root.mirabuf.joint.DOF.fromObject(object.pitch);
+ }
+ if (object.rotation != null) {
+ if (typeof object.rotation !== "object")
+ throw TypeError(".mirabuf.joint.BallJoint.rotation: object expected");
+ message.rotation = $root.mirabuf.joint.DOF.fromObject(object.rotation);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a BallJoint message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {mirabuf.joint.BallJoint} message BallJoint
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ BallJoint.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.yaw = null;
+ object.pitch = null;
+ object.rotation = null;
+ }
+ if (message.yaw != null && message.hasOwnProperty("yaw"))
+ object.yaw = $root.mirabuf.joint.DOF.toObject(message.yaw, options);
+ if (message.pitch != null && message.hasOwnProperty("pitch"))
+ object.pitch = $root.mirabuf.joint.DOF.toObject(message.pitch, options);
+ if (message.rotation != null && message.hasOwnProperty("rotation"))
+ object.rotation = $root.mirabuf.joint.DOF.toObject(message.rotation, options);
+ return object;
+ };
+
+ /**
+ * Converts this BallJoint to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.BallJoint
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ BallJoint.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for BallJoint
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.BallJoint
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ BallJoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.BallJoint";
+ };
+
+ return BallJoint;
+ })();
+
+ joint.PrismaticJoint = (function() {
+
+ /**
+ * Properties of a PrismaticJoint.
+ * @memberof mirabuf.joint
+ * @interface IPrismaticJoint
+ * @property {mirabuf.joint.IDOF|null} [prismaticFreedom] PrismaticJoint prismaticFreedom
+ */
+
+ /**
+ * Constructs a new PrismaticJoint.
+ * @memberof mirabuf.joint
+ * @classdesc Prismatic Joint describes a motion that translates the position in a single axis
+ * @implements IPrismaticJoint
+ * @constructor
+ * @param {mirabuf.joint.IPrismaticJoint=} [properties] Properties to set
+ */
+ function PrismaticJoint(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * PrismaticJoint prismaticFreedom.
+ * @member {mirabuf.joint.IDOF|null|undefined} prismaticFreedom
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @instance
+ */
+ PrismaticJoint.prototype.prismaticFreedom = null;
+
+ /**
+ * Creates a new PrismaticJoint instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {mirabuf.joint.IPrismaticJoint=} [properties] Properties to set
+ * @returns {mirabuf.joint.PrismaticJoint} PrismaticJoint instance
+ */
+ PrismaticJoint.create = function create(properties) {
+ return new PrismaticJoint(properties);
+ };
+
+ /**
+ * Encodes the specified PrismaticJoint message. Does not implicitly {@link mirabuf.joint.PrismaticJoint.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {mirabuf.joint.IPrismaticJoint} message PrismaticJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PrismaticJoint.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.prismaticFreedom != null && Object.hasOwnProperty.call(message, "prismaticFreedom"))
+ $root.mirabuf.joint.DOF.encode(message.prismaticFreedom, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified PrismaticJoint message, length delimited. Does not implicitly {@link mirabuf.joint.PrismaticJoint.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {mirabuf.joint.IPrismaticJoint} message PrismaticJoint message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PrismaticJoint.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a PrismaticJoint message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.PrismaticJoint} PrismaticJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PrismaticJoint.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.PrismaticJoint();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.prismaticFreedom = $root.mirabuf.joint.DOF.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a PrismaticJoint message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.PrismaticJoint} PrismaticJoint
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PrismaticJoint.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a PrismaticJoint message.
+ * @function verify
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ PrismaticJoint.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.prismaticFreedom != null && message.hasOwnProperty("prismaticFreedom")) {
+ let error = $root.mirabuf.joint.DOF.verify(message.prismaticFreedom);
+ if (error)
+ return "prismaticFreedom." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a PrismaticJoint message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.PrismaticJoint} PrismaticJoint
+ */
+ PrismaticJoint.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.PrismaticJoint)
+ return object;
+ let message = new $root.mirabuf.joint.PrismaticJoint();
+ if (object.prismaticFreedom != null) {
+ if (typeof object.prismaticFreedom !== "object")
+ throw TypeError(".mirabuf.joint.PrismaticJoint.prismaticFreedom: object expected");
+ message.prismaticFreedom = $root.mirabuf.joint.DOF.fromObject(object.prismaticFreedom);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a PrismaticJoint message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {mirabuf.joint.PrismaticJoint} message PrismaticJoint
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ PrismaticJoint.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.prismaticFreedom = null;
+ if (message.prismaticFreedom != null && message.hasOwnProperty("prismaticFreedom"))
+ object.prismaticFreedom = $root.mirabuf.joint.DOF.toObject(message.prismaticFreedom, options);
+ return object;
+ };
+
+ /**
+ * Converts this PrismaticJoint to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ PrismaticJoint.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for PrismaticJoint
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.PrismaticJoint
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ PrismaticJoint.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.PrismaticJoint";
+ };
+
+ return PrismaticJoint;
+ })();
+
+ joint.RigidGroup = (function() {
+
+ /**
+ * Properties of a RigidGroup.
+ * @memberof mirabuf.joint
+ * @interface IRigidGroup
+ * @property {string|null} [name] RigidGroup name
+ * @property {Array.|null} [occurrences] RigidGroup occurrences
+ */
+
+ /**
+ * Constructs a new RigidGroup.
+ * @memberof mirabuf.joint
+ * @classdesc Represents a RigidGroup.
+ * @implements IRigidGroup
+ * @constructor
+ * @param {mirabuf.joint.IRigidGroup=} [properties] Properties to set
+ */
+ function RigidGroup(properties) {
+ this.occurrences = [];
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * RigidGroup name.
+ * @member {string} name
+ * @memberof mirabuf.joint.RigidGroup
+ * @instance
+ */
+ RigidGroup.prototype.name = "";
+
+ /**
+ * RigidGroup occurrences.
+ * @member {Array.} occurrences
+ * @memberof mirabuf.joint.RigidGroup
+ * @instance
+ */
+ RigidGroup.prototype.occurrences = $util.emptyArray;
+
+ /**
+ * Creates a new RigidGroup instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {mirabuf.joint.IRigidGroup=} [properties] Properties to set
+ * @returns {mirabuf.joint.RigidGroup} RigidGroup instance
+ */
+ RigidGroup.create = function create(properties) {
+ return new RigidGroup(properties);
+ };
+
+ /**
+ * Encodes the specified RigidGroup message. Does not implicitly {@link mirabuf.joint.RigidGroup.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {mirabuf.joint.IRigidGroup} message RigidGroup message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ RigidGroup.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.name != null && Object.hasOwnProperty.call(message, "name"))
+ writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
+ if (message.occurrences != null && message.occurrences.length)
+ for (let i = 0; i < message.occurrences.length; ++i)
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.occurrences[i]);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified RigidGroup message, length delimited. Does not implicitly {@link mirabuf.joint.RigidGroup.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {mirabuf.joint.IRigidGroup} message RigidGroup message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ RigidGroup.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a RigidGroup message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.joint.RigidGroup} RigidGroup
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ RigidGroup.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.joint.RigidGroup();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.name = reader.string();
+ break;
+ }
+ case 2: {
+ if (!(message.occurrences && message.occurrences.length))
+ message.occurrences = [];
+ message.occurrences.push(reader.string());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a RigidGroup message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.joint.RigidGroup} RigidGroup
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ RigidGroup.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a RigidGroup message.
+ * @function verify
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ RigidGroup.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.name != null && message.hasOwnProperty("name"))
+ if (!$util.isString(message.name))
+ return "name: string expected";
+ if (message.occurrences != null && message.hasOwnProperty("occurrences")) {
+ if (!Array.isArray(message.occurrences))
+ return "occurrences: array expected";
+ for (let i = 0; i < message.occurrences.length; ++i)
+ if (!$util.isString(message.occurrences[i]))
+ return "occurrences: string[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a RigidGroup message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.joint.RigidGroup} RigidGroup
+ */
+ RigidGroup.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.joint.RigidGroup)
+ return object;
+ let message = new $root.mirabuf.joint.RigidGroup();
+ if (object.name != null)
+ message.name = String(object.name);
+ if (object.occurrences) {
+ if (!Array.isArray(object.occurrences))
+ throw TypeError(".mirabuf.joint.RigidGroup.occurrences: array expected");
+ message.occurrences = [];
+ for (let i = 0; i < object.occurrences.length; ++i)
+ message.occurrences[i] = String(object.occurrences[i]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a RigidGroup message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {mirabuf.joint.RigidGroup} message RigidGroup
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ RigidGroup.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.arrays || options.defaults)
+ object.occurrences = [];
+ if (options.defaults)
+ object.name = "";
+ if (message.name != null && message.hasOwnProperty("name"))
+ object.name = message.name;
+ if (message.occurrences && message.occurrences.length) {
+ object.occurrences = [];
+ for (let j = 0; j < message.occurrences.length; ++j)
+ object.occurrences[j] = message.occurrences[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this RigidGroup to JSON.
+ * @function toJSON
+ * @memberof mirabuf.joint.RigidGroup
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ RigidGroup.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for RigidGroup
+ * @function getTypeUrl
+ * @memberof mirabuf.joint.RigidGroup
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ RigidGroup.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.joint.RigidGroup";
+ };
+
+ return RigidGroup;
+ })();
+
+ return joint;
+ })();
+
+ mirabuf.motor = (function() {
+
+ /**
+ * Namespace motor.
+ * @memberof mirabuf
+ * @namespace
+ */
+ const motor = {};
+
+ /**
+ * Duty Cycles for electric motors
+ * Affects the dynamic output of the motor
+ * https://www.news.benevelli-group.com/index.php/en/88-what-motor-duty-cycle.html
+ * These each have associated data we are not going to use right now
+ * @name mirabuf.motor.DutyCycles
+ * @enum {number}
+ * @property {number} CONTINUOUS_RUNNING=0 S1
+ * @property {number} SHORT_TIME=1 S2
+ * @property {number} INTERMITTENT_PERIODIC=2 S3
+ * @property {number} CONTINUOUS_PERIODIC=3 S6 Continuous Operation with Periodic Duty
+ */
+ motor.DutyCycles = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "CONTINUOUS_RUNNING"] = 0;
+ values[valuesById[1] = "SHORT_TIME"] = 1;
+ values[valuesById[2] = "INTERMITTENT_PERIODIC"] = 2;
+ values[valuesById[3] = "CONTINUOUS_PERIODIC"] = 3;
+ return values;
+ })();
+
+ motor.Motor = (function() {
+
+ /**
+ * Properties of a Motor.
+ * @memberof mirabuf.motor
+ * @interface IMotor
+ * @property {mirabuf.IInfo|null} [info] Motor info
+ * @property {mirabuf.motor.IDCMotor|null} [dcMotor] Motor dcMotor
+ * @property {mirabuf.motor.ISimpleMotor|null} [simpleMotor] Motor simpleMotor
+ */
+
+ /**
+ * Constructs a new Motor.
+ * @memberof mirabuf.motor
+ * @classdesc A Motor should determine the relationship between an input and joint motion
+ * Could represent something like a DC Motor relationship
+ * @implements IMotor
+ * @constructor
+ * @param {mirabuf.motor.IMotor=} [properties] Properties to set
+ */
+ function Motor(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Motor info.
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.motor.Motor
+ * @instance
+ */
+ Motor.prototype.info = null;
+
+ /**
+ * Motor dcMotor.
+ * @member {mirabuf.motor.IDCMotor|null|undefined} dcMotor
+ * @memberof mirabuf.motor.Motor
+ * @instance
+ */
+ Motor.prototype.dcMotor = null;
+
+ /**
+ * Motor simpleMotor.
+ * @member {mirabuf.motor.ISimpleMotor|null|undefined} simpleMotor
+ * @memberof mirabuf.motor.Motor
+ * @instance
+ */
+ Motor.prototype.simpleMotor = null;
+
+ // OneOf field names bound to virtual getters and setters
+ let $oneOfFields;
+
+ /**
+ * Motor motorType.
+ * @member {"dcMotor"|"simpleMotor"|undefined} motorType
+ * @memberof mirabuf.motor.Motor
+ * @instance
+ */
+ Object.defineProperty(Motor.prototype, "motorType", {
+ get: $util.oneOfGetter($oneOfFields = ["dcMotor", "simpleMotor"]),
+ set: $util.oneOfSetter($oneOfFields)
+ });
+
+ /**
+ * Creates a new Motor instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {mirabuf.motor.IMotor=} [properties] Properties to set
+ * @returns {mirabuf.motor.Motor} Motor instance
+ */
+ Motor.create = function create(properties) {
+ return new Motor(properties);
+ };
+
+ /**
+ * Encodes the specified Motor message. Does not implicitly {@link mirabuf.motor.Motor.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {mirabuf.motor.IMotor} message Motor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Motor.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.dcMotor != null && Object.hasOwnProperty.call(message, "dcMotor"))
+ $root.mirabuf.motor.DCMotor.encode(message.dcMotor, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.simpleMotor != null && Object.hasOwnProperty.call(message, "simpleMotor"))
+ $root.mirabuf.motor.SimpleMotor.encode(message.simpleMotor, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Motor message, length delimited. Does not implicitly {@link mirabuf.motor.Motor.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {mirabuf.motor.IMotor} message Motor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Motor.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Motor message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.motor.Motor} Motor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Motor.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.motor.Motor();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.dcMotor = $root.mirabuf.motor.DCMotor.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.simpleMotor = $root.mirabuf.motor.SimpleMotor.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Motor message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.motor.Motor} Motor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Motor.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Motor message.
+ * @function verify
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Motor.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ let properties = {};
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.dcMotor != null && message.hasOwnProperty("dcMotor")) {
+ properties.motorType = 1;
+ {
+ let error = $root.mirabuf.motor.DCMotor.verify(message.dcMotor);
+ if (error)
+ return "dcMotor." + error;
+ }
+ }
+ if (message.simpleMotor != null && message.hasOwnProperty("simpleMotor")) {
+ if (properties.motorType === 1)
+ return "motorType: multiple values";
+ properties.motorType = 1;
+ {
+ let error = $root.mirabuf.motor.SimpleMotor.verify(message.simpleMotor);
+ if (error)
+ return "simpleMotor." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Motor message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.motor.Motor} Motor
+ */
+ Motor.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.motor.Motor)
+ return object;
+ let message = new $root.mirabuf.motor.Motor();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.motor.Motor.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.dcMotor != null) {
+ if (typeof object.dcMotor !== "object")
+ throw TypeError(".mirabuf.motor.Motor.dcMotor: object expected");
+ message.dcMotor = $root.mirabuf.motor.DCMotor.fromObject(object.dcMotor);
+ }
+ if (object.simpleMotor != null) {
+ if (typeof object.simpleMotor !== "object")
+ throw TypeError(".mirabuf.motor.Motor.simpleMotor: object expected");
+ message.simpleMotor = $root.mirabuf.motor.SimpleMotor.fromObject(object.simpleMotor);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Motor message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {mirabuf.motor.Motor} message Motor
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Motor.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults)
+ object.info = null;
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.dcMotor != null && message.hasOwnProperty("dcMotor")) {
+ object.dcMotor = $root.mirabuf.motor.DCMotor.toObject(message.dcMotor, options);
+ if (options.oneofs)
+ object.motorType = "dcMotor";
+ }
+ if (message.simpleMotor != null && message.hasOwnProperty("simpleMotor")) {
+ object.simpleMotor = $root.mirabuf.motor.SimpleMotor.toObject(message.simpleMotor, options);
+ if (options.oneofs)
+ object.motorType = "simpleMotor";
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Motor to JSON.
+ * @function toJSON
+ * @memberof mirabuf.motor.Motor
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Motor.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Motor
+ * @function getTypeUrl
+ * @memberof mirabuf.motor.Motor
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Motor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.motor.Motor";
+ };
+
+ return Motor;
+ })();
+
+ motor.SimpleMotor = (function() {
+
+ /**
+ * Properties of a SimpleMotor.
+ * @memberof mirabuf.motor
+ * @interface ISimpleMotor
+ * @property {number|null} [stallTorque] Torque at 0 rpm with a inverse linear relationship to max_velocity
+ * @property {number|null} [maxVelocity] The target velocity in RPM, will use stall_torque relationship to reach each step
+ * @property {number|null} [brakingConstant] (Optional) 0 - 1, the relationship of stall_torque used to perserve the position of this motor
+ */
+
+ /**
+ * Constructs a new SimpleMotor.
+ * @memberof mirabuf.motor
+ * @classdesc SimpleMotor Configuration
+ * Very easy motor used to simulate joints without specifying a real motor
+ * Can set braking_constant - stall_torque - and max_velocity
+ * Assumes you are solving using a velocity constraint for a joint and not a acceleration constraint
+ * @implements ISimpleMotor
+ * @constructor
+ * @param {mirabuf.motor.ISimpleMotor=} [properties] Properties to set
+ */
+ function SimpleMotor(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Torque at 0 rpm with a inverse linear relationship to max_velocity
+ * @member {number} stallTorque
+ * @memberof mirabuf.motor.SimpleMotor
+ * @instance
+ */
+ SimpleMotor.prototype.stallTorque = 0;
+
+ /**
+ * The target velocity in RPM, will use stall_torque relationship to reach each step
+ * @member {number} maxVelocity
+ * @memberof mirabuf.motor.SimpleMotor
+ * @instance
+ */
+ SimpleMotor.prototype.maxVelocity = 0;
+
+ /**
+ * (Optional) 0 - 1, the relationship of stall_torque used to perserve the position of this motor
+ * @member {number} brakingConstant
+ * @memberof mirabuf.motor.SimpleMotor
+ * @instance
+ */
+ SimpleMotor.prototype.brakingConstant = 0;
+
+ /**
+ * Creates a new SimpleMotor instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {mirabuf.motor.ISimpleMotor=} [properties] Properties to set
+ * @returns {mirabuf.motor.SimpleMotor} SimpleMotor instance
+ */
+ SimpleMotor.create = function create(properties) {
+ return new SimpleMotor(properties);
+ };
+
+ /**
+ * Encodes the specified SimpleMotor message. Does not implicitly {@link mirabuf.motor.SimpleMotor.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {mirabuf.motor.ISimpleMotor} message SimpleMotor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ SimpleMotor.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.stallTorque != null && Object.hasOwnProperty.call(message, "stallTorque"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.stallTorque);
+ if (message.maxVelocity != null && Object.hasOwnProperty.call(message, "maxVelocity"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.maxVelocity);
+ if (message.brakingConstant != null && Object.hasOwnProperty.call(message, "brakingConstant"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.brakingConstant);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified SimpleMotor message, length delimited. Does not implicitly {@link mirabuf.motor.SimpleMotor.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {mirabuf.motor.ISimpleMotor} message SimpleMotor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ SimpleMotor.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a SimpleMotor message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.motor.SimpleMotor} SimpleMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ SimpleMotor.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.motor.SimpleMotor();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.stallTorque = reader.float();
+ break;
+ }
+ case 2: {
+ message.maxVelocity = reader.float();
+ break;
+ }
+ case 3: {
+ message.brakingConstant = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a SimpleMotor message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.motor.SimpleMotor} SimpleMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ SimpleMotor.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a SimpleMotor message.
+ * @function verify
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ SimpleMotor.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.stallTorque != null && message.hasOwnProperty("stallTorque"))
+ if (typeof message.stallTorque !== "number")
+ return "stallTorque: number expected";
+ if (message.maxVelocity != null && message.hasOwnProperty("maxVelocity"))
+ if (typeof message.maxVelocity !== "number")
+ return "maxVelocity: number expected";
+ if (message.brakingConstant != null && message.hasOwnProperty("brakingConstant"))
+ if (typeof message.brakingConstant !== "number")
+ return "brakingConstant: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a SimpleMotor message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.motor.SimpleMotor} SimpleMotor
+ */
+ SimpleMotor.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.motor.SimpleMotor)
+ return object;
+ let message = new $root.mirabuf.motor.SimpleMotor();
+ if (object.stallTorque != null)
+ message.stallTorque = Number(object.stallTorque);
+ if (object.maxVelocity != null)
+ message.maxVelocity = Number(object.maxVelocity);
+ if (object.brakingConstant != null)
+ message.brakingConstant = Number(object.brakingConstant);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a SimpleMotor message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {mirabuf.motor.SimpleMotor} message SimpleMotor
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ SimpleMotor.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.stallTorque = 0;
+ object.maxVelocity = 0;
+ object.brakingConstant = 0;
+ }
+ if (message.stallTorque != null && message.hasOwnProperty("stallTorque"))
+ object.stallTorque = options.json && !isFinite(message.stallTorque) ? String(message.stallTorque) : message.stallTorque;
+ if (message.maxVelocity != null && message.hasOwnProperty("maxVelocity"))
+ object.maxVelocity = options.json && !isFinite(message.maxVelocity) ? String(message.maxVelocity) : message.maxVelocity;
+ if (message.brakingConstant != null && message.hasOwnProperty("brakingConstant"))
+ object.brakingConstant = options.json && !isFinite(message.brakingConstant) ? String(message.brakingConstant) : message.brakingConstant;
+ return object;
+ };
+
+ /**
+ * Converts this SimpleMotor to JSON.
+ * @function toJSON
+ * @memberof mirabuf.motor.SimpleMotor
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ SimpleMotor.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for SimpleMotor
+ * @function getTypeUrl
+ * @memberof mirabuf.motor.SimpleMotor
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ SimpleMotor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.motor.SimpleMotor";
+ };
+
+ return SimpleMotor;
+ })();
+
+ motor.DCMotor = (function() {
+
+ /**
+ * Properties of a DCMotor.
+ * @memberof mirabuf.motor
+ * @interface IDCMotor
+ * @property {string|null} [referenceUrl] Reference for purchase page or spec sheet
+ * @property {number|null} [torqueConstant] m-Nm/Amp
+ * @property {number|null} [emfConstant] mV/rad/sec
+ * @property {number|null} [resistance] Resistance of Motor - Optional if other values are known
+ * @property {number|null} [maximumEffeciency] measure in percentage of 100 - generally around 60 - measured under optimal load
+ * @property {number|null} [maximumPower] measured in Watts
+ * @property {mirabuf.motor.DutyCycles|null} [dutyCycle] Stated Duty Cycle of motor
+ * @property {mirabuf.motor.DCMotor.IAdvanced|null} [advanced] Optional data that can give a better relationship to the simulation
+ */
+
+ /**
+ * Constructs a new DCMotor.
+ * @memberof mirabuf.motor
+ * @classdesc DCMotor Configuration
+ * Parameters to simulate a DC Electric Motor
+ * Still needs some more but overall they are most of the parameters we can use
+ * @implements IDCMotor
+ * @constructor
+ * @param {mirabuf.motor.IDCMotor=} [properties] Properties to set
+ */
+ function DCMotor(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Reference for purchase page or spec sheet
+ * @member {string} referenceUrl
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.referenceUrl = "";
+
+ /**
+ * m-Nm/Amp
+ * @member {number} torqueConstant
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.torqueConstant = 0;
+
+ /**
+ * mV/rad/sec
+ * @member {number} emfConstant
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.emfConstant = 0;
+
+ /**
+ * Resistance of Motor - Optional if other values are known
+ * @member {number} resistance
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.resistance = 0;
+
+ /**
+ * measure in percentage of 100 - generally around 60 - measured under optimal load
+ * @member {number} maximumEffeciency
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.maximumEffeciency = 0;
+
+ /**
+ * measured in Watts
+ * @member {number} maximumPower
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.maximumPower = 0;
+
+ /**
+ * Stated Duty Cycle of motor
+ * @member {mirabuf.motor.DutyCycles} dutyCycle
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.dutyCycle = 0;
+
+ /**
+ * Optional data that can give a better relationship to the simulation
+ * @member {mirabuf.motor.DCMotor.IAdvanced|null|undefined} advanced
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ */
+ DCMotor.prototype.advanced = null;
+
+ /**
+ * Creates a new DCMotor instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {mirabuf.motor.IDCMotor=} [properties] Properties to set
+ * @returns {mirabuf.motor.DCMotor} DCMotor instance
+ */
+ DCMotor.create = function create(properties) {
+ return new DCMotor(properties);
+ };
+
+ /**
+ * Encodes the specified DCMotor message. Does not implicitly {@link mirabuf.motor.DCMotor.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {mirabuf.motor.IDCMotor} message DCMotor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DCMotor.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.referenceUrl != null && Object.hasOwnProperty.call(message, "referenceUrl"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.referenceUrl);
+ if (message.torqueConstant != null && Object.hasOwnProperty.call(message, "torqueConstant"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.torqueConstant);
+ if (message.emfConstant != null && Object.hasOwnProperty.call(message, "emfConstant"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.emfConstant);
+ if (message.resistance != null && Object.hasOwnProperty.call(message, "resistance"))
+ writer.uint32(/* id 5, wireType 5 =*/45).float(message.resistance);
+ if (message.maximumEffeciency != null && Object.hasOwnProperty.call(message, "maximumEffeciency"))
+ writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.maximumEffeciency);
+ if (message.maximumPower != null && Object.hasOwnProperty.call(message, "maximumPower"))
+ writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.maximumPower);
+ if (message.dutyCycle != null && Object.hasOwnProperty.call(message, "dutyCycle"))
+ writer.uint32(/* id 8, wireType 0 =*/64).int32(message.dutyCycle);
+ if (message.advanced != null && Object.hasOwnProperty.call(message, "advanced"))
+ $root.mirabuf.motor.DCMotor.Advanced.encode(message.advanced, writer.uint32(/* id 16, wireType 2 =*/130).fork()).ldelim();
+ return writer;
+ };
+
+ /**
+ * Encodes the specified DCMotor message, length delimited. Does not implicitly {@link mirabuf.motor.DCMotor.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {mirabuf.motor.IDCMotor} message DCMotor message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ DCMotor.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a DCMotor message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.motor.DCMotor} DCMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DCMotor.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.motor.DCMotor();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 2: {
+ message.referenceUrl = reader.string();
+ break;
+ }
+ case 3: {
+ message.torqueConstant = reader.float();
+ break;
+ }
+ case 4: {
+ message.emfConstant = reader.float();
+ break;
+ }
+ case 5: {
+ message.resistance = reader.float();
+ break;
+ }
+ case 6: {
+ message.maximumEffeciency = reader.uint32();
+ break;
+ }
+ case 7: {
+ message.maximumPower = reader.uint32();
+ break;
+ }
+ case 8: {
+ message.dutyCycle = reader.int32();
+ break;
+ }
+ case 16: {
+ message.advanced = $root.mirabuf.motor.DCMotor.Advanced.decode(reader, reader.uint32());
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a DCMotor message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.motor.DCMotor} DCMotor
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ DCMotor.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a DCMotor message.
+ * @function verify
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ DCMotor.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.referenceUrl != null && message.hasOwnProperty("referenceUrl"))
+ if (!$util.isString(message.referenceUrl))
+ return "referenceUrl: string expected";
+ if (message.torqueConstant != null && message.hasOwnProperty("torqueConstant"))
+ if (typeof message.torqueConstant !== "number")
+ return "torqueConstant: number expected";
+ if (message.emfConstant != null && message.hasOwnProperty("emfConstant"))
+ if (typeof message.emfConstant !== "number")
+ return "emfConstant: number expected";
+ if (message.resistance != null && message.hasOwnProperty("resistance"))
+ if (typeof message.resistance !== "number")
+ return "resistance: number expected";
+ if (message.maximumEffeciency != null && message.hasOwnProperty("maximumEffeciency"))
+ if (!$util.isInteger(message.maximumEffeciency))
+ return "maximumEffeciency: integer expected";
+ if (message.maximumPower != null && message.hasOwnProperty("maximumPower"))
+ if (!$util.isInteger(message.maximumPower))
+ return "maximumPower: integer expected";
+ if (message.dutyCycle != null && message.hasOwnProperty("dutyCycle"))
+ switch (message.dutyCycle) {
+ default:
+ return "dutyCycle: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ break;
+ }
+ if (message.advanced != null && message.hasOwnProperty("advanced")) {
+ let error = $root.mirabuf.motor.DCMotor.Advanced.verify(message.advanced);
+ if (error)
+ return "advanced." + error;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a DCMotor message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.motor.DCMotor} DCMotor
+ */
+ DCMotor.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.motor.DCMotor)
+ return object;
+ let message = new $root.mirabuf.motor.DCMotor();
+ if (object.referenceUrl != null)
+ message.referenceUrl = String(object.referenceUrl);
+ if (object.torqueConstant != null)
+ message.torqueConstant = Number(object.torqueConstant);
+ if (object.emfConstant != null)
+ message.emfConstant = Number(object.emfConstant);
+ if (object.resistance != null)
+ message.resistance = Number(object.resistance);
+ if (object.maximumEffeciency != null)
+ message.maximumEffeciency = object.maximumEffeciency >>> 0;
+ if (object.maximumPower != null)
+ message.maximumPower = object.maximumPower >>> 0;
+ switch (object.dutyCycle) {
+ default:
+ if (typeof object.dutyCycle === "number") {
+ message.dutyCycle = object.dutyCycle;
+ break;
+ }
+ break;
+ case "CONTINUOUS_RUNNING":
+ case 0:
+ message.dutyCycle = 0;
+ break;
+ case "SHORT_TIME":
+ case 1:
+ message.dutyCycle = 1;
+ break;
+ case "INTERMITTENT_PERIODIC":
+ case 2:
+ message.dutyCycle = 2;
+ break;
+ case "CONTINUOUS_PERIODIC":
+ case 3:
+ message.dutyCycle = 3;
+ break;
+ }
+ if (object.advanced != null) {
+ if (typeof object.advanced !== "object")
+ throw TypeError(".mirabuf.motor.DCMotor.advanced: object expected");
+ message.advanced = $root.mirabuf.motor.DCMotor.Advanced.fromObject(object.advanced);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a DCMotor message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {mirabuf.motor.DCMotor} message DCMotor
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ DCMotor.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.referenceUrl = "";
+ object.torqueConstant = 0;
+ object.emfConstant = 0;
+ object.resistance = 0;
+ object.maximumEffeciency = 0;
+ object.maximumPower = 0;
+ object.dutyCycle = options.enums === String ? "CONTINUOUS_RUNNING" : 0;
+ object.advanced = null;
+ }
+ if (message.referenceUrl != null && message.hasOwnProperty("referenceUrl"))
+ object.referenceUrl = message.referenceUrl;
+ if (message.torqueConstant != null && message.hasOwnProperty("torqueConstant"))
+ object.torqueConstant = options.json && !isFinite(message.torqueConstant) ? String(message.torqueConstant) : message.torqueConstant;
+ if (message.emfConstant != null && message.hasOwnProperty("emfConstant"))
+ object.emfConstant = options.json && !isFinite(message.emfConstant) ? String(message.emfConstant) : message.emfConstant;
+ if (message.resistance != null && message.hasOwnProperty("resistance"))
+ object.resistance = options.json && !isFinite(message.resistance) ? String(message.resistance) : message.resistance;
+ if (message.maximumEffeciency != null && message.hasOwnProperty("maximumEffeciency"))
+ object.maximumEffeciency = message.maximumEffeciency;
+ if (message.maximumPower != null && message.hasOwnProperty("maximumPower"))
+ object.maximumPower = message.maximumPower;
+ if (message.dutyCycle != null && message.hasOwnProperty("dutyCycle"))
+ object.dutyCycle = options.enums === String ? $root.mirabuf.motor.DutyCycles[message.dutyCycle] === undefined ? message.dutyCycle : $root.mirabuf.motor.DutyCycles[message.dutyCycle] : message.dutyCycle;
+ if (message.advanced != null && message.hasOwnProperty("advanced"))
+ object.advanced = $root.mirabuf.motor.DCMotor.Advanced.toObject(message.advanced, options);
+ return object;
+ };
+
+ /**
+ * Converts this DCMotor to JSON.
+ * @function toJSON
+ * @memberof mirabuf.motor.DCMotor
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ DCMotor.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for DCMotor
+ * @function getTypeUrl
+ * @memberof mirabuf.motor.DCMotor
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ DCMotor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.motor.DCMotor";
+ };
+
+ DCMotor.Advanced = (function() {
+
+ /**
+ * Properties of an Advanced.
+ * @memberof mirabuf.motor.DCMotor
+ * @interface IAdvanced
+ * @property {number|null} [freeCurrent] measured in AMPs
+ * @property {number|null} [freeSpeed] measured in RPM
+ * @property {number|null} [stallCurrent] measure in AMPs
+ * @property {number|null} [stallTorque] measured in Nm
+ * @property {number|null} [inputVoltage] measured in Volts DC
+ * @property {number|null} [resistanceVariation] between (K * (N / 4)) and (K * ((N-2) / 4)) where N is number of poles - leave at 0 if unknown
+ */
+
+ /**
+ * Constructs a new Advanced.
+ * @memberof mirabuf.motor.DCMotor
+ * @classdesc Information usually found on datasheet
+ * @implements IAdvanced
+ * @constructor
+ * @param {mirabuf.motor.DCMotor.IAdvanced=} [properties] Properties to set
+ */
+ function Advanced(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * measured in AMPs
+ * @member {number} freeCurrent
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.freeCurrent = 0;
+
+ /**
+ * measured in RPM
+ * @member {number} freeSpeed
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.freeSpeed = 0;
+
+ /**
+ * measure in AMPs
+ * @member {number} stallCurrent
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.stallCurrent = 0;
+
+ /**
+ * measured in Nm
+ * @member {number} stallTorque
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.stallTorque = 0;
+
+ /**
+ * measured in Volts DC
+ * @member {number} inputVoltage
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.inputVoltage = 0;
+
+ /**
+ * between (K * (N / 4)) and (K * ((N-2) / 4)) where N is number of poles - leave at 0 if unknown
+ * @member {number} resistanceVariation
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ */
+ Advanced.prototype.resistanceVariation = 0;
+
+ /**
+ * Creates a new Advanced instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {mirabuf.motor.DCMotor.IAdvanced=} [properties] Properties to set
+ * @returns {mirabuf.motor.DCMotor.Advanced} Advanced instance
+ */
+ Advanced.create = function create(properties) {
+ return new Advanced(properties);
+ };
+
+ /**
+ * Encodes the specified Advanced message. Does not implicitly {@link mirabuf.motor.DCMotor.Advanced.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {mirabuf.motor.DCMotor.IAdvanced} message Advanced message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Advanced.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.freeCurrent != null && Object.hasOwnProperty.call(message, "freeCurrent"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.freeCurrent);
+ if (message.freeSpeed != null && Object.hasOwnProperty.call(message, "freeSpeed"))
+ writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.freeSpeed);
+ if (message.stallCurrent != null && Object.hasOwnProperty.call(message, "stallCurrent"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.stallCurrent);
+ if (message.stallTorque != null && Object.hasOwnProperty.call(message, "stallTorque"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.stallTorque);
+ if (message.inputVoltage != null && Object.hasOwnProperty.call(message, "inputVoltage"))
+ writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.inputVoltage);
+ if (message.resistanceVariation != null && Object.hasOwnProperty.call(message, "resistanceVariation"))
+ writer.uint32(/* id 7, wireType 5 =*/61).float(message.resistanceVariation);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Advanced message, length delimited. Does not implicitly {@link mirabuf.motor.DCMotor.Advanced.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {mirabuf.motor.DCMotor.IAdvanced} message Advanced message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Advanced.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes an Advanced message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.motor.DCMotor.Advanced} Advanced
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Advanced.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.motor.DCMotor.Advanced();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.freeCurrent = reader.float();
+ break;
+ }
+ case 2: {
+ message.freeSpeed = reader.uint32();
+ break;
+ }
+ case 3: {
+ message.stallCurrent = reader.float();
+ break;
+ }
+ case 4: {
+ message.stallTorque = reader.float();
+ break;
+ }
+ case 5: {
+ message.inputVoltage = reader.uint32();
+ break;
+ }
+ case 7: {
+ message.resistanceVariation = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes an Advanced message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.motor.DCMotor.Advanced} Advanced
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Advanced.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies an Advanced message.
+ * @function verify
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Advanced.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.freeCurrent != null && message.hasOwnProperty("freeCurrent"))
+ if (typeof message.freeCurrent !== "number")
+ return "freeCurrent: number expected";
+ if (message.freeSpeed != null && message.hasOwnProperty("freeSpeed"))
+ if (!$util.isInteger(message.freeSpeed))
+ return "freeSpeed: integer expected";
+ if (message.stallCurrent != null && message.hasOwnProperty("stallCurrent"))
+ if (typeof message.stallCurrent !== "number")
+ return "stallCurrent: number expected";
+ if (message.stallTorque != null && message.hasOwnProperty("stallTorque"))
+ if (typeof message.stallTorque !== "number")
+ return "stallTorque: number expected";
+ if (message.inputVoltage != null && message.hasOwnProperty("inputVoltage"))
+ if (!$util.isInteger(message.inputVoltage))
+ return "inputVoltage: integer expected";
+ if (message.resistanceVariation != null && message.hasOwnProperty("resistanceVariation"))
+ if (typeof message.resistanceVariation !== "number")
+ return "resistanceVariation: number expected";
+ return null;
+ };
+
+ /**
+ * Creates an Advanced message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.motor.DCMotor.Advanced} Advanced
+ */
+ Advanced.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.motor.DCMotor.Advanced)
+ return object;
+ let message = new $root.mirabuf.motor.DCMotor.Advanced();
+ if (object.freeCurrent != null)
+ message.freeCurrent = Number(object.freeCurrent);
+ if (object.freeSpeed != null)
+ message.freeSpeed = object.freeSpeed >>> 0;
+ if (object.stallCurrent != null)
+ message.stallCurrent = Number(object.stallCurrent);
+ if (object.stallTorque != null)
+ message.stallTorque = Number(object.stallTorque);
+ if (object.inputVoltage != null)
+ message.inputVoltage = object.inputVoltage >>> 0;
+ if (object.resistanceVariation != null)
+ message.resistanceVariation = Number(object.resistanceVariation);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from an Advanced message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {mirabuf.motor.DCMotor.Advanced} message Advanced
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Advanced.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.freeCurrent = 0;
+ object.freeSpeed = 0;
+ object.stallCurrent = 0;
+ object.stallTorque = 0;
+ object.inputVoltage = 0;
+ object.resistanceVariation = 0;
+ }
+ if (message.freeCurrent != null && message.hasOwnProperty("freeCurrent"))
+ object.freeCurrent = options.json && !isFinite(message.freeCurrent) ? String(message.freeCurrent) : message.freeCurrent;
+ if (message.freeSpeed != null && message.hasOwnProperty("freeSpeed"))
+ object.freeSpeed = message.freeSpeed;
+ if (message.stallCurrent != null && message.hasOwnProperty("stallCurrent"))
+ object.stallCurrent = options.json && !isFinite(message.stallCurrent) ? String(message.stallCurrent) : message.stallCurrent;
+ if (message.stallTorque != null && message.hasOwnProperty("stallTorque"))
+ object.stallTorque = options.json && !isFinite(message.stallTorque) ? String(message.stallTorque) : message.stallTorque;
+ if (message.inputVoltage != null && message.hasOwnProperty("inputVoltage"))
+ object.inputVoltage = message.inputVoltage;
+ if (message.resistanceVariation != null && message.hasOwnProperty("resistanceVariation"))
+ object.resistanceVariation = options.json && !isFinite(message.resistanceVariation) ? String(message.resistanceVariation) : message.resistanceVariation;
+ return object;
+ };
+
+ /**
+ * Converts this Advanced to JSON.
+ * @function toJSON
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Advanced.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Advanced
+ * @function getTypeUrl
+ * @memberof mirabuf.motor.DCMotor.Advanced
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Advanced.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.motor.DCMotor.Advanced";
+ };
+
+ return Advanced;
+ })();
+
+ return DCMotor;
+ })();
+
+ return motor;
+ })();
+
+ mirabuf.material = (function() {
+
+ /**
+ * Namespace material.
+ * @memberof mirabuf
+ * @namespace
+ */
+ const material = {};
+
+ material.Materials = (function() {
+
+ /**
+ * Properties of a Materials.
+ * @memberof mirabuf.material
+ * @interface IMaterials
+ * @property {mirabuf.IInfo|null} [info] Identifiable information (id, name, version)
+ * @property {Object.|null} [physicalMaterials] Map of Physical Materials
+ * @property {Object.|null} [appearances] Map of Appearances that are purely visual
+ */
+
+ /**
+ * Constructs a new Materials.
+ * @memberof mirabuf.material
+ * @classdesc Represents a File or Set of Materials with Appearances and Physical Data
+ *
+ * Can be Stored in AssemblyData
+ * @implements IMaterials
+ * @constructor
+ * @param {mirabuf.material.IMaterials=} [properties] Properties to set
+ */
+ function Materials(properties) {
+ this.physicalMaterials = {};
+ this.appearances = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Identifiable information (id, name, version)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.material.Materials
+ * @instance
+ */
+ Materials.prototype.info = null;
+
+ /**
+ * Map of Physical Materials
+ * @member {Object.} physicalMaterials
+ * @memberof mirabuf.material.Materials
+ * @instance
+ */
+ Materials.prototype.physicalMaterials = $util.emptyObject;
+
+ /**
+ * Map of Appearances that are purely visual
+ * @member {Object.} appearances
+ * @memberof mirabuf.material.Materials
+ * @instance
+ */
+ Materials.prototype.appearances = $util.emptyObject;
+
+ /**
+ * Creates a new Materials instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {mirabuf.material.IMaterials=} [properties] Properties to set
+ * @returns {mirabuf.material.Materials} Materials instance
+ */
+ Materials.create = function create(properties) {
+ return new Materials(properties);
+ };
+
+ /**
+ * Encodes the specified Materials message. Does not implicitly {@link mirabuf.material.Materials.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {mirabuf.material.IMaterials} message Materials message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Materials.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.physicalMaterials != null && Object.hasOwnProperty.call(message, "physicalMaterials"))
+ for (let keys = Object.keys(message.physicalMaterials), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.material.PhysicalMaterial.encode(message.physicalMaterials[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ if (message.appearances != null && Object.hasOwnProperty.call(message, "appearances"))
+ for (let keys = Object.keys(message.appearances), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.material.Appearance.encode(message.appearances[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Materials message, length delimited. Does not implicitly {@link mirabuf.material.Materials.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {mirabuf.material.IMaterials} message Materials message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Materials.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Materials message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.Materials} Materials
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Materials.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.Materials(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (message.physicalMaterials === $util.emptyObject)
+ message.physicalMaterials = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.material.PhysicalMaterial.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.physicalMaterials[key] = value;
+ break;
+ }
+ case 3: {
+ if (message.appearances === $util.emptyObject)
+ message.appearances = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.material.Appearance.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.appearances[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Materials message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.Materials} Materials
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Materials.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Materials message.
+ * @function verify
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Materials.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.physicalMaterials != null && message.hasOwnProperty("physicalMaterials")) {
+ if (!$util.isObject(message.physicalMaterials))
+ return "physicalMaterials: object expected";
+ let key = Object.keys(message.physicalMaterials);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.material.PhysicalMaterial.verify(message.physicalMaterials[key[i]]);
+ if (error)
+ return "physicalMaterials." + error;
+ }
+ }
+ if (message.appearances != null && message.hasOwnProperty("appearances")) {
+ if (!$util.isObject(message.appearances))
+ return "appearances: object expected";
+ let key = Object.keys(message.appearances);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.material.Appearance.verify(message.appearances[key[i]]);
+ if (error)
+ return "appearances." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Materials message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.Materials} Materials
+ */
+ Materials.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.Materials)
+ return object;
+ let message = new $root.mirabuf.material.Materials();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.material.Materials.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.physicalMaterials) {
+ if (typeof object.physicalMaterials !== "object")
+ throw TypeError(".mirabuf.material.Materials.physicalMaterials: object expected");
+ message.physicalMaterials = {};
+ for (let keys = Object.keys(object.physicalMaterials), i = 0; i < keys.length; ++i) {
+ if (typeof object.physicalMaterials[keys[i]] !== "object")
+ throw TypeError(".mirabuf.material.Materials.physicalMaterials: object expected");
+ message.physicalMaterials[keys[i]] = $root.mirabuf.material.PhysicalMaterial.fromObject(object.physicalMaterials[keys[i]]);
+ }
+ }
+ if (object.appearances) {
+ if (typeof object.appearances !== "object")
+ throw TypeError(".mirabuf.material.Materials.appearances: object expected");
+ message.appearances = {};
+ for (let keys = Object.keys(object.appearances), i = 0; i < keys.length; ++i) {
+ if (typeof object.appearances[keys[i]] !== "object")
+ throw TypeError(".mirabuf.material.Materials.appearances: object expected");
+ message.appearances[keys[i]] = $root.mirabuf.material.Appearance.fromObject(object.appearances[keys[i]]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Materials message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {mirabuf.material.Materials} message Materials
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Materials.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults) {
+ object.physicalMaterials = {};
+ object.appearances = {};
+ }
+ if (options.defaults)
+ object.info = null;
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ let keys2;
+ if (message.physicalMaterials && (keys2 = Object.keys(message.physicalMaterials)).length) {
+ object.physicalMaterials = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.physicalMaterials[keys2[j]] = $root.mirabuf.material.PhysicalMaterial.toObject(message.physicalMaterials[keys2[j]], options);
+ }
+ if (message.appearances && (keys2 = Object.keys(message.appearances)).length) {
+ object.appearances = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.appearances[keys2[j]] = $root.mirabuf.material.Appearance.toObject(message.appearances[keys2[j]], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Materials to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.Materials
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Materials.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Materials
+ * @function getTypeUrl
+ * @memberof mirabuf.material.Materials
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Materials.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.Materials";
+ };
+
+ return Materials;
+ })();
+
+ material.Appearance = (function() {
+
+ /**
+ * Properties of an Appearance.
+ * @memberof mirabuf.material
+ * @interface IAppearance
+ * @property {mirabuf.IInfo|null} [info] Identfiable information (id, name, version)
+ * @property {mirabuf.IColor|null} [albedo] albedo map RGBA 0-255
+ * @property {number|null} [roughness] roughness value 0-1
+ * @property {number|null} [metallic] metallic value 0-1
+ * @property {number|null} [specular] specular value 0-1
+ */
+
+ /**
+ * Constructs a new Appearance.
+ * @memberof mirabuf.material
+ * @classdesc Contains information on how a object looks
+ * Limited to just color for now
+ * @implements IAppearance
+ * @constructor
+ * @param {mirabuf.material.IAppearance=} [properties] Properties to set
+ */
+ function Appearance(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Identfiable information (id, name, version)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ */
+ Appearance.prototype.info = null;
+
+ /**
+ * albedo map RGBA 0-255
+ * @member {mirabuf.IColor|null|undefined} albedo
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ */
+ Appearance.prototype.albedo = null;
+
+ /**
+ * roughness value 0-1
+ * @member {number} roughness
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ */
+ Appearance.prototype.roughness = 0;
+
+ /**
+ * metallic value 0-1
+ * @member {number} metallic
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ */
+ Appearance.prototype.metallic = 0;
+
+ /**
+ * specular value 0-1
+ * @member {number} specular
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ */
+ Appearance.prototype.specular = 0;
+
+ /**
+ * Creates a new Appearance instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {mirabuf.material.IAppearance=} [properties] Properties to set
+ * @returns {mirabuf.material.Appearance} Appearance instance
+ */
+ Appearance.create = function create(properties) {
+ return new Appearance(properties);
+ };
+
+ /**
+ * Encodes the specified Appearance message. Does not implicitly {@link mirabuf.material.Appearance.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {mirabuf.material.IAppearance} message Appearance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Appearance.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.albedo != null && Object.hasOwnProperty.call(message, "albedo"))
+ $root.mirabuf.Color.encode(message.albedo, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+ if (message.roughness != null && Object.hasOwnProperty.call(message, "roughness"))
+ writer.uint32(/* id 3, wireType 1 =*/25).double(message.roughness);
+ if (message.metallic != null && Object.hasOwnProperty.call(message, "metallic"))
+ writer.uint32(/* id 4, wireType 1 =*/33).double(message.metallic);
+ if (message.specular != null && Object.hasOwnProperty.call(message, "specular"))
+ writer.uint32(/* id 5, wireType 1 =*/41).double(message.specular);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Appearance message, length delimited. Does not implicitly {@link mirabuf.material.Appearance.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {mirabuf.material.IAppearance} message Appearance message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Appearance.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes an Appearance message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.Appearance} Appearance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Appearance.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.Appearance();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.albedo = $root.mirabuf.Color.decode(reader, reader.uint32());
+ break;
+ }
+ case 3: {
+ message.roughness = reader.double();
+ break;
+ }
+ case 4: {
+ message.metallic = reader.double();
+ break;
+ }
+ case 5: {
+ message.specular = reader.double();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes an Appearance message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.Appearance} Appearance
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Appearance.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies an Appearance message.
+ * @function verify
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Appearance.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.albedo != null && message.hasOwnProperty("albedo")) {
+ let error = $root.mirabuf.Color.verify(message.albedo);
+ if (error)
+ return "albedo." + error;
+ }
+ if (message.roughness != null && message.hasOwnProperty("roughness"))
+ if (typeof message.roughness !== "number")
+ return "roughness: number expected";
+ if (message.metallic != null && message.hasOwnProperty("metallic"))
+ if (typeof message.metallic !== "number")
+ return "metallic: number expected";
+ if (message.specular != null && message.hasOwnProperty("specular"))
+ if (typeof message.specular !== "number")
+ return "specular: number expected";
+ return null;
+ };
+
+ /**
+ * Creates an Appearance message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.Appearance} Appearance
+ */
+ Appearance.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.Appearance)
+ return object;
+ let message = new $root.mirabuf.material.Appearance();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.material.Appearance.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.albedo != null) {
+ if (typeof object.albedo !== "object")
+ throw TypeError(".mirabuf.material.Appearance.albedo: object expected");
+ message.albedo = $root.mirabuf.Color.fromObject(object.albedo);
+ }
+ if (object.roughness != null)
+ message.roughness = Number(object.roughness);
+ if (object.metallic != null)
+ message.metallic = Number(object.metallic);
+ if (object.specular != null)
+ message.specular = Number(object.specular);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from an Appearance message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {mirabuf.material.Appearance} message Appearance
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Appearance.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.albedo = null;
+ object.roughness = 0;
+ object.metallic = 0;
+ object.specular = 0;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.albedo != null && message.hasOwnProperty("albedo"))
+ object.albedo = $root.mirabuf.Color.toObject(message.albedo, options);
+ if (message.roughness != null && message.hasOwnProperty("roughness"))
+ object.roughness = options.json && !isFinite(message.roughness) ? String(message.roughness) : message.roughness;
+ if (message.metallic != null && message.hasOwnProperty("metallic"))
+ object.metallic = options.json && !isFinite(message.metallic) ? String(message.metallic) : message.metallic;
+ if (message.specular != null && message.hasOwnProperty("specular"))
+ object.specular = options.json && !isFinite(message.specular) ? String(message.specular) : message.specular;
+ return object;
+ };
+
+ /**
+ * Converts this Appearance to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.Appearance
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Appearance.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Appearance
+ * @function getTypeUrl
+ * @memberof mirabuf.material.Appearance
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Appearance.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.Appearance";
+ };
+
+ return Appearance;
+ })();
+
+ material.PhysicalMaterial = (function() {
+
+ /**
+ * Properties of a PhysicalMaterial.
+ * @memberof mirabuf.material
+ * @interface IPhysicalMaterial
+ * @property {mirabuf.IInfo|null} [info] Identifiable information (id, name, version, etc)
+ * @property {string|null} [description] short description of physical material
+ * @property {mirabuf.material.PhysicalMaterial.IThermal|null} [thermal] Thermal Physical properties of the model OPTIONAL
+ * @property {mirabuf.material.PhysicalMaterial.IMechanical|null} [mechanical] Mechanical properties of the model OPTIONAL
+ * @property {mirabuf.material.PhysicalMaterial.IStrength|null} [strength] Physical Strength properties of the model OPTIONAL
+ * @property {number|null} [dynamicFriction] Frictional force for dampening - Interpolate (0-1)
+ * @property {number|null} [staticFriction] Frictional force override at stop - Interpolate (0-1)
+ * @property {number|null} [restitution] Restitution of the object - Interpolate (0-1)
+ * @property {boolean|null} [deformable] should this object deform when encountering large forces - TODO: This needs a proper message and equation field
+ * @property {mirabuf.material.PhysicalMaterial.MaterialType|null} [matType] generic type to assign some default params
+ */
+
+ /**
+ * Constructs a new PhysicalMaterial.
+ * @memberof mirabuf.material
+ * @classdesc Data to represent any given Physical Material
+ * @implements IPhysicalMaterial
+ * @constructor
+ * @param {mirabuf.material.IPhysicalMaterial=} [properties] Properties to set
+ */
+ function PhysicalMaterial(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Identifiable information (id, name, version, etc)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.info = null;
+
+ /**
+ * short description of physical material
+ * @member {string} description
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.description = "";
+
+ /**
+ * Thermal Physical properties of the model OPTIONAL
+ * @member {mirabuf.material.PhysicalMaterial.IThermal|null|undefined} thermal
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.thermal = null;
+
+ /**
+ * Mechanical properties of the model OPTIONAL
+ * @member {mirabuf.material.PhysicalMaterial.IMechanical|null|undefined} mechanical
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.mechanical = null;
+
+ /**
+ * Physical Strength properties of the model OPTIONAL
+ * @member {mirabuf.material.PhysicalMaterial.IStrength|null|undefined} strength
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.strength = null;
+
+ /**
+ * Frictional force for dampening - Interpolate (0-1)
+ * @member {number} dynamicFriction
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.dynamicFriction = 0;
+
+ /**
+ * Frictional force override at stop - Interpolate (0-1)
+ * @member {number} staticFriction
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.staticFriction = 0;
+
+ /**
+ * Restitution of the object - Interpolate (0-1)
+ * @member {number} restitution
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.restitution = 0;
+
+ /**
+ * should this object deform when encountering large forces - TODO: This needs a proper message and equation field
+ * @member {boolean} deformable
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.deformable = false;
+
+ /**
+ * generic type to assign some default params
+ * @member {mirabuf.material.PhysicalMaterial.MaterialType} matType
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ */
+ PhysicalMaterial.prototype.matType = 0;
+
+ /**
+ * Creates a new PhysicalMaterial instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {mirabuf.material.IPhysicalMaterial=} [properties] Properties to set
+ * @returns {mirabuf.material.PhysicalMaterial} PhysicalMaterial instance
+ */
+ PhysicalMaterial.create = function create(properties) {
+ return new PhysicalMaterial(properties);
+ };
+
+ /**
+ * Encodes the specified PhysicalMaterial message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {mirabuf.material.IPhysicalMaterial} message PhysicalMaterial message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PhysicalMaterial.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.description != null && Object.hasOwnProperty.call(message, "description"))
+ writer.uint32(/* id 2, wireType 2 =*/18).string(message.description);
+ if (message.thermal != null && Object.hasOwnProperty.call(message, "thermal"))
+ $root.mirabuf.material.PhysicalMaterial.Thermal.encode(message.thermal, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
+ if (message.mechanical != null && Object.hasOwnProperty.call(message, "mechanical"))
+ $root.mirabuf.material.PhysicalMaterial.Mechanical.encode(message.mechanical, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
+ if (message.strength != null && Object.hasOwnProperty.call(message, "strength"))
+ $root.mirabuf.material.PhysicalMaterial.Strength.encode(message.strength, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
+ if (message.dynamicFriction != null && Object.hasOwnProperty.call(message, "dynamicFriction"))
+ writer.uint32(/* id 6, wireType 5 =*/53).float(message.dynamicFriction);
+ if (message.staticFriction != null && Object.hasOwnProperty.call(message, "staticFriction"))
+ writer.uint32(/* id 7, wireType 5 =*/61).float(message.staticFriction);
+ if (message.restitution != null && Object.hasOwnProperty.call(message, "restitution"))
+ writer.uint32(/* id 8, wireType 5 =*/69).float(message.restitution);
+ if (message.deformable != null && Object.hasOwnProperty.call(message, "deformable"))
+ writer.uint32(/* id 9, wireType 0 =*/72).bool(message.deformable);
+ if (message.matType != null && Object.hasOwnProperty.call(message, "matType"))
+ writer.uint32(/* id 10, wireType 0 =*/80).int32(message.matType);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified PhysicalMaterial message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {mirabuf.material.IPhysicalMaterial} message PhysicalMaterial message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ PhysicalMaterial.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a PhysicalMaterial message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.PhysicalMaterial} PhysicalMaterial
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PhysicalMaterial.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.PhysicalMaterial();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.description = reader.string();
+ break;
+ }
+ case 3: {
+ message.thermal = $root.mirabuf.material.PhysicalMaterial.Thermal.decode(reader, reader.uint32());
+ break;
+ }
+ case 4: {
+ message.mechanical = $root.mirabuf.material.PhysicalMaterial.Mechanical.decode(reader, reader.uint32());
+ break;
+ }
+ case 5: {
+ message.strength = $root.mirabuf.material.PhysicalMaterial.Strength.decode(reader, reader.uint32());
+ break;
+ }
+ case 6: {
+ message.dynamicFriction = reader.float();
+ break;
+ }
+ case 7: {
+ message.staticFriction = reader.float();
+ break;
+ }
+ case 8: {
+ message.restitution = reader.float();
+ break;
+ }
+ case 9: {
+ message.deformable = reader.bool();
+ break;
+ }
+ case 10: {
+ message.matType = reader.int32();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a PhysicalMaterial message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.PhysicalMaterial} PhysicalMaterial
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ PhysicalMaterial.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a PhysicalMaterial message.
+ * @function verify
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ PhysicalMaterial.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.description != null && message.hasOwnProperty("description"))
+ if (!$util.isString(message.description))
+ return "description: string expected";
+ if (message.thermal != null && message.hasOwnProperty("thermal")) {
+ let error = $root.mirabuf.material.PhysicalMaterial.Thermal.verify(message.thermal);
+ if (error)
+ return "thermal." + error;
+ }
+ if (message.mechanical != null && message.hasOwnProperty("mechanical")) {
+ let error = $root.mirabuf.material.PhysicalMaterial.Mechanical.verify(message.mechanical);
+ if (error)
+ return "mechanical." + error;
+ }
+ if (message.strength != null && message.hasOwnProperty("strength")) {
+ let error = $root.mirabuf.material.PhysicalMaterial.Strength.verify(message.strength);
+ if (error)
+ return "strength." + error;
+ }
+ if (message.dynamicFriction != null && message.hasOwnProperty("dynamicFriction"))
+ if (typeof message.dynamicFriction !== "number")
+ return "dynamicFriction: number expected";
+ if (message.staticFriction != null && message.hasOwnProperty("staticFriction"))
+ if (typeof message.staticFriction !== "number")
+ return "staticFriction: number expected";
+ if (message.restitution != null && message.hasOwnProperty("restitution"))
+ if (typeof message.restitution !== "number")
+ return "restitution: number expected";
+ if (message.deformable != null && message.hasOwnProperty("deformable"))
+ if (typeof message.deformable !== "boolean")
+ return "deformable: boolean expected";
+ if (message.matType != null && message.hasOwnProperty("matType"))
+ switch (message.matType) {
+ default:
+ return "matType: enum value expected";
+ case 0:
+ case 1:
+ break;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a PhysicalMaterial message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.PhysicalMaterial} PhysicalMaterial
+ */
+ PhysicalMaterial.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.PhysicalMaterial)
+ return object;
+ let message = new $root.mirabuf.material.PhysicalMaterial();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.material.PhysicalMaterial.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.description != null)
+ message.description = String(object.description);
+ if (object.thermal != null) {
+ if (typeof object.thermal !== "object")
+ throw TypeError(".mirabuf.material.PhysicalMaterial.thermal: object expected");
+ message.thermal = $root.mirabuf.material.PhysicalMaterial.Thermal.fromObject(object.thermal);
+ }
+ if (object.mechanical != null) {
+ if (typeof object.mechanical !== "object")
+ throw TypeError(".mirabuf.material.PhysicalMaterial.mechanical: object expected");
+ message.mechanical = $root.mirabuf.material.PhysicalMaterial.Mechanical.fromObject(object.mechanical);
+ }
+ if (object.strength != null) {
+ if (typeof object.strength !== "object")
+ throw TypeError(".mirabuf.material.PhysicalMaterial.strength: object expected");
+ message.strength = $root.mirabuf.material.PhysicalMaterial.Strength.fromObject(object.strength);
+ }
+ if (object.dynamicFriction != null)
+ message.dynamicFriction = Number(object.dynamicFriction);
+ if (object.staticFriction != null)
+ message.staticFriction = Number(object.staticFriction);
+ if (object.restitution != null)
+ message.restitution = Number(object.restitution);
+ if (object.deformable != null)
+ message.deformable = Boolean(object.deformable);
+ switch (object.matType) {
+ default:
+ if (typeof object.matType === "number") {
+ message.matType = object.matType;
+ break;
+ }
+ break;
+ case "METAL":
+ case 0:
+ message.matType = 0;
+ break;
+ case "PLASTIC":
+ case 1:
+ message.matType = 1;
+ break;
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a PhysicalMaterial message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial} message PhysicalMaterial
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ PhysicalMaterial.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.description = "";
+ object.thermal = null;
+ object.mechanical = null;
+ object.strength = null;
+ object.dynamicFriction = 0;
+ object.staticFriction = 0;
+ object.restitution = 0;
+ object.deformable = false;
+ object.matType = options.enums === String ? "METAL" : 0;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.description != null && message.hasOwnProperty("description"))
+ object.description = message.description;
+ if (message.thermal != null && message.hasOwnProperty("thermal"))
+ object.thermal = $root.mirabuf.material.PhysicalMaterial.Thermal.toObject(message.thermal, options);
+ if (message.mechanical != null && message.hasOwnProperty("mechanical"))
+ object.mechanical = $root.mirabuf.material.PhysicalMaterial.Mechanical.toObject(message.mechanical, options);
+ if (message.strength != null && message.hasOwnProperty("strength"))
+ object.strength = $root.mirabuf.material.PhysicalMaterial.Strength.toObject(message.strength, options);
+ if (message.dynamicFriction != null && message.hasOwnProperty("dynamicFriction"))
+ object.dynamicFriction = options.json && !isFinite(message.dynamicFriction) ? String(message.dynamicFriction) : message.dynamicFriction;
+ if (message.staticFriction != null && message.hasOwnProperty("staticFriction"))
+ object.staticFriction = options.json && !isFinite(message.staticFriction) ? String(message.staticFriction) : message.staticFriction;
+ if (message.restitution != null && message.hasOwnProperty("restitution"))
+ object.restitution = options.json && !isFinite(message.restitution) ? String(message.restitution) : message.restitution;
+ if (message.deformable != null && message.hasOwnProperty("deformable"))
+ object.deformable = message.deformable;
+ if (message.matType != null && message.hasOwnProperty("matType"))
+ object.matType = options.enums === String ? $root.mirabuf.material.PhysicalMaterial.MaterialType[message.matType] === undefined ? message.matType : $root.mirabuf.material.PhysicalMaterial.MaterialType[message.matType] : message.matType;
+ return object;
+ };
+
+ /**
+ * Converts this PhysicalMaterial to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ PhysicalMaterial.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for PhysicalMaterial
+ * @function getTypeUrl
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ PhysicalMaterial.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.PhysicalMaterial";
+ };
+
+ /**
+ * MaterialType enum.
+ * @name mirabuf.material.PhysicalMaterial.MaterialType
+ * @enum {number}
+ * @property {number} METAL=0 METAL value
+ * @property {number} PLASTIC=1 PLASTIC value
+ */
+ PhysicalMaterial.MaterialType = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "METAL"] = 0;
+ values[valuesById[1] = "PLASTIC"] = 1;
+ return values;
+ })();
+
+ PhysicalMaterial.Thermal = (function() {
+
+ /**
+ * Properties of a Thermal.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @interface IThermal
+ * @property {number|null} [thermalConductivity] W/(m*K)
+ * @property {number|null} [specificHeat] J/(g*C)
+ * @property {number|null} [thermalExpansionCoefficient] um/(m*C)
+ */
+
+ /**
+ * Constructs a new Thermal.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @classdesc Thermal Properties Set Definition for Simulation.
+ * @implements IThermal
+ * @constructor
+ * @param {mirabuf.material.PhysicalMaterial.IThermal=} [properties] Properties to set
+ */
+ function Thermal(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * W/(m*K)
+ * @member {number} thermalConductivity
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @instance
+ */
+ Thermal.prototype.thermalConductivity = 0;
+
+ /**
+ * J/(g*C)
+ * @member {number} specificHeat
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @instance
+ */
+ Thermal.prototype.specificHeat = 0;
+
+ /**
+ * um/(m*C)
+ * @member {number} thermalExpansionCoefficient
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @instance
+ */
+ Thermal.prototype.thermalExpansionCoefficient = 0;
+
+ /**
+ * Creates a new Thermal instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IThermal=} [properties] Properties to set
+ * @returns {mirabuf.material.PhysicalMaterial.Thermal} Thermal instance
+ */
+ Thermal.create = function create(properties) {
+ return new Thermal(properties);
+ };
+
+ /**
+ * Encodes the specified Thermal message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Thermal.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IThermal} message Thermal message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Thermal.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.thermalConductivity != null && Object.hasOwnProperty.call(message, "thermalConductivity"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.thermalConductivity);
+ if (message.specificHeat != null && Object.hasOwnProperty.call(message, "specificHeat"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.specificHeat);
+ if (message.thermalExpansionCoefficient != null && Object.hasOwnProperty.call(message, "thermalExpansionCoefficient"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.thermalExpansionCoefficient);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Thermal message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Thermal.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IThermal} message Thermal message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Thermal.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Thermal message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.PhysicalMaterial.Thermal} Thermal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Thermal.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.PhysicalMaterial.Thermal();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.thermalConductivity = reader.float();
+ break;
+ }
+ case 2: {
+ message.specificHeat = reader.float();
+ break;
+ }
+ case 3: {
+ message.thermalExpansionCoefficient = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Thermal message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.PhysicalMaterial.Thermal} Thermal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Thermal.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Thermal message.
+ * @function verify
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Thermal.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.thermalConductivity != null && message.hasOwnProperty("thermalConductivity"))
+ if (typeof message.thermalConductivity !== "number")
+ return "thermalConductivity: number expected";
+ if (message.specificHeat != null && message.hasOwnProperty("specificHeat"))
+ if (typeof message.specificHeat !== "number")
+ return "specificHeat: number expected";
+ if (message.thermalExpansionCoefficient != null && message.hasOwnProperty("thermalExpansionCoefficient"))
+ if (typeof message.thermalExpansionCoefficient !== "number")
+ return "thermalExpansionCoefficient: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Thermal message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.PhysicalMaterial.Thermal} Thermal
+ */
+ Thermal.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.PhysicalMaterial.Thermal)
+ return object;
+ let message = new $root.mirabuf.material.PhysicalMaterial.Thermal();
+ if (object.thermalConductivity != null)
+ message.thermalConductivity = Number(object.thermalConductivity);
+ if (object.specificHeat != null)
+ message.specificHeat = Number(object.specificHeat);
+ if (object.thermalExpansionCoefficient != null)
+ message.thermalExpansionCoefficient = Number(object.thermalExpansionCoefficient);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Thermal message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.Thermal} message Thermal
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Thermal.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.thermalConductivity = 0;
+ object.specificHeat = 0;
+ object.thermalExpansionCoefficient = 0;
+ }
+ if (message.thermalConductivity != null && message.hasOwnProperty("thermalConductivity"))
+ object.thermalConductivity = options.json && !isFinite(message.thermalConductivity) ? String(message.thermalConductivity) : message.thermalConductivity;
+ if (message.specificHeat != null && message.hasOwnProperty("specificHeat"))
+ object.specificHeat = options.json && !isFinite(message.specificHeat) ? String(message.specificHeat) : message.specificHeat;
+ if (message.thermalExpansionCoefficient != null && message.hasOwnProperty("thermalExpansionCoefficient"))
+ object.thermalExpansionCoefficient = options.json && !isFinite(message.thermalExpansionCoefficient) ? String(message.thermalExpansionCoefficient) : message.thermalExpansionCoefficient;
+ return object;
+ };
+
+ /**
+ * Converts this Thermal to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Thermal.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Thermal
+ * @function getTypeUrl
+ * @memberof mirabuf.material.PhysicalMaterial.Thermal
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Thermal.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.PhysicalMaterial.Thermal";
+ };
+
+ return Thermal;
+ })();
+
+ PhysicalMaterial.Mechanical = (function() {
+
+ /**
+ * Properties of a Mechanical.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @interface IMechanical
+ * @property {number|null} [youngMod] GPa
+ * @property {number|null} [poissonRatio] ?
+ * @property {number|null} [shearMod] MPa
+ * @property {number|null} [density] g/cm^3
+ * @property {number|null} [dampingCoefficient] ?
+ */
+
+ /**
+ * Constructs a new Mechanical.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @classdesc Mechanical Properties Set Definition for Simulation.
+ * @implements IMechanical
+ * @constructor
+ * @param {mirabuf.material.PhysicalMaterial.IMechanical=} [properties] Properties to set
+ */
+ function Mechanical(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * GPa
+ * @member {number} youngMod
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ */
+ Mechanical.prototype.youngMod = 0;
+
+ /**
+ * ?
+ * @member {number} poissonRatio
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ */
+ Mechanical.prototype.poissonRatio = 0;
+
+ /**
+ * MPa
+ * @member {number} shearMod
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ */
+ Mechanical.prototype.shearMod = 0;
+
+ /**
+ * g/cm^3
+ * @member {number} density
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ */
+ Mechanical.prototype.density = 0;
+
+ /**
+ * ?
+ * @member {number} dampingCoefficient
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ */
+ Mechanical.prototype.dampingCoefficient = 0;
+
+ /**
+ * Creates a new Mechanical instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IMechanical=} [properties] Properties to set
+ * @returns {mirabuf.material.PhysicalMaterial.Mechanical} Mechanical instance
+ */
+ Mechanical.create = function create(properties) {
+ return new Mechanical(properties);
+ };
+
+ /**
+ * Encodes the specified Mechanical message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Mechanical.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IMechanical} message Mechanical message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Mechanical.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.youngMod != null && Object.hasOwnProperty.call(message, "youngMod"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.youngMod);
+ if (message.poissonRatio != null && Object.hasOwnProperty.call(message, "poissonRatio"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.poissonRatio);
+ if (message.shearMod != null && Object.hasOwnProperty.call(message, "shearMod"))
+ writer.uint32(/* id 3, wireType 5 =*/29).float(message.shearMod);
+ if (message.density != null && Object.hasOwnProperty.call(message, "density"))
+ writer.uint32(/* id 4, wireType 5 =*/37).float(message.density);
+ if (message.dampingCoefficient != null && Object.hasOwnProperty.call(message, "dampingCoefficient"))
+ writer.uint32(/* id 5, wireType 5 =*/45).float(message.dampingCoefficient);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Mechanical message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Mechanical.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IMechanical} message Mechanical message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Mechanical.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Mechanical message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.PhysicalMaterial.Mechanical} Mechanical
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Mechanical.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.PhysicalMaterial.Mechanical();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.youngMod = reader.float();
+ break;
+ }
+ case 2: {
+ message.poissonRatio = reader.float();
+ break;
+ }
+ case 3: {
+ message.shearMod = reader.float();
+ break;
+ }
+ case 4: {
+ message.density = reader.float();
+ break;
+ }
+ case 5: {
+ message.dampingCoefficient = reader.float();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Mechanical message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.PhysicalMaterial.Mechanical} Mechanical
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Mechanical.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Mechanical message.
+ * @function verify
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Mechanical.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.youngMod != null && message.hasOwnProperty("youngMod"))
+ if (typeof message.youngMod !== "number")
+ return "youngMod: number expected";
+ if (message.poissonRatio != null && message.hasOwnProperty("poissonRatio"))
+ if (typeof message.poissonRatio !== "number")
+ return "poissonRatio: number expected";
+ if (message.shearMod != null && message.hasOwnProperty("shearMod"))
+ if (typeof message.shearMod !== "number")
+ return "shearMod: number expected";
+ if (message.density != null && message.hasOwnProperty("density"))
+ if (typeof message.density !== "number")
+ return "density: number expected";
+ if (message.dampingCoefficient != null && message.hasOwnProperty("dampingCoefficient"))
+ if (typeof message.dampingCoefficient !== "number")
+ return "dampingCoefficient: number expected";
+ return null;
+ };
+
+ /**
+ * Creates a Mechanical message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.PhysicalMaterial.Mechanical} Mechanical
+ */
+ Mechanical.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.PhysicalMaterial.Mechanical)
+ return object;
+ let message = new $root.mirabuf.material.PhysicalMaterial.Mechanical();
+ if (object.youngMod != null)
+ message.youngMod = Number(object.youngMod);
+ if (object.poissonRatio != null)
+ message.poissonRatio = Number(object.poissonRatio);
+ if (object.shearMod != null)
+ message.shearMod = Number(object.shearMod);
+ if (object.density != null)
+ message.density = Number(object.density);
+ if (object.dampingCoefficient != null)
+ message.dampingCoefficient = Number(object.dampingCoefficient);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Mechanical message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.Mechanical} message Mechanical
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Mechanical.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.youngMod = 0;
+ object.poissonRatio = 0;
+ object.shearMod = 0;
+ object.density = 0;
+ object.dampingCoefficient = 0;
+ }
+ if (message.youngMod != null && message.hasOwnProperty("youngMod"))
+ object.youngMod = options.json && !isFinite(message.youngMod) ? String(message.youngMod) : message.youngMod;
+ if (message.poissonRatio != null && message.hasOwnProperty("poissonRatio"))
+ object.poissonRatio = options.json && !isFinite(message.poissonRatio) ? String(message.poissonRatio) : message.poissonRatio;
+ if (message.shearMod != null && message.hasOwnProperty("shearMod"))
+ object.shearMod = options.json && !isFinite(message.shearMod) ? String(message.shearMod) : message.shearMod;
+ if (message.density != null && message.hasOwnProperty("density"))
+ object.density = options.json && !isFinite(message.density) ? String(message.density) : message.density;
+ if (message.dampingCoefficient != null && message.hasOwnProperty("dampingCoefficient"))
+ object.dampingCoefficient = options.json && !isFinite(message.dampingCoefficient) ? String(message.dampingCoefficient) : message.dampingCoefficient;
+ return object;
+ };
+
+ /**
+ * Converts this Mechanical to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Mechanical.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Mechanical
+ * @function getTypeUrl
+ * @memberof mirabuf.material.PhysicalMaterial.Mechanical
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Mechanical.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.PhysicalMaterial.Mechanical";
+ };
+
+ return Mechanical;
+ })();
+
+ PhysicalMaterial.Strength = (function() {
+
+ /**
+ * Properties of a Strength.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @interface IStrength
+ * @property {number|null} [yieldStrength] MPa
+ * @property {number|null} [tensileStrength] MPa
+ * @property {boolean|null} [thermalTreatment] yes / no
+ */
+
+ /**
+ * Constructs a new Strength.
+ * @memberof mirabuf.material.PhysicalMaterial
+ * @classdesc Strength Properties Set Definition for Simulation.
+ * @implements IStrength
+ * @constructor
+ * @param {mirabuf.material.PhysicalMaterial.IStrength=} [properties] Properties to set
+ */
+ function Strength(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * MPa
+ * @member {number} yieldStrength
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @instance
+ */
+ Strength.prototype.yieldStrength = 0;
+
+ /**
+ * MPa
+ * @member {number} tensileStrength
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @instance
+ */
+ Strength.prototype.tensileStrength = 0;
+
+ /**
+ * yes / no
+ * @member {boolean} thermalTreatment
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @instance
+ */
+ Strength.prototype.thermalTreatment = false;
+
+ /**
+ * Creates a new Strength instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IStrength=} [properties] Properties to set
+ * @returns {mirabuf.material.PhysicalMaterial.Strength} Strength instance
+ */
+ Strength.create = function create(properties) {
+ return new Strength(properties);
+ };
+
+ /**
+ * Encodes the specified Strength message. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Strength.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IStrength} message Strength message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Strength.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.yieldStrength != null && Object.hasOwnProperty.call(message, "yieldStrength"))
+ writer.uint32(/* id 1, wireType 5 =*/13).float(message.yieldStrength);
+ if (message.tensileStrength != null && Object.hasOwnProperty.call(message, "tensileStrength"))
+ writer.uint32(/* id 2, wireType 5 =*/21).float(message.tensileStrength);
+ if (message.thermalTreatment != null && Object.hasOwnProperty.call(message, "thermalTreatment"))
+ writer.uint32(/* id 3, wireType 0 =*/24).bool(message.thermalTreatment);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Strength message, length delimited. Does not implicitly {@link mirabuf.material.PhysicalMaterial.Strength.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.IStrength} message Strength message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Strength.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Strength message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.material.PhysicalMaterial.Strength} Strength
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Strength.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.material.PhysicalMaterial.Strength();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.yieldStrength = reader.float();
+ break;
+ }
+ case 2: {
+ message.tensileStrength = reader.float();
+ break;
+ }
+ case 3: {
+ message.thermalTreatment = reader.bool();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Strength message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.material.PhysicalMaterial.Strength} Strength
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Strength.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Strength message.
+ * @function verify
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Strength.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.yieldStrength != null && message.hasOwnProperty("yieldStrength"))
+ if (typeof message.yieldStrength !== "number")
+ return "yieldStrength: number expected";
+ if (message.tensileStrength != null && message.hasOwnProperty("tensileStrength"))
+ if (typeof message.tensileStrength !== "number")
+ return "tensileStrength: number expected";
+ if (message.thermalTreatment != null && message.hasOwnProperty("thermalTreatment"))
+ if (typeof message.thermalTreatment !== "boolean")
+ return "thermalTreatment: boolean expected";
+ return null;
+ };
+
+ /**
+ * Creates a Strength message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.material.PhysicalMaterial.Strength} Strength
+ */
+ Strength.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.material.PhysicalMaterial.Strength)
+ return object;
+ let message = new $root.mirabuf.material.PhysicalMaterial.Strength();
+ if (object.yieldStrength != null)
+ message.yieldStrength = Number(object.yieldStrength);
+ if (object.tensileStrength != null)
+ message.tensileStrength = Number(object.tensileStrength);
+ if (object.thermalTreatment != null)
+ message.thermalTreatment = Boolean(object.thermalTreatment);
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Strength message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {mirabuf.material.PhysicalMaterial.Strength} message Strength
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Strength.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.yieldStrength = 0;
+ object.tensileStrength = 0;
+ object.thermalTreatment = false;
+ }
+ if (message.yieldStrength != null && message.hasOwnProperty("yieldStrength"))
+ object.yieldStrength = options.json && !isFinite(message.yieldStrength) ? String(message.yieldStrength) : message.yieldStrength;
+ if (message.tensileStrength != null && message.hasOwnProperty("tensileStrength"))
+ object.tensileStrength = options.json && !isFinite(message.tensileStrength) ? String(message.tensileStrength) : message.tensileStrength;
+ if (message.thermalTreatment != null && message.hasOwnProperty("thermalTreatment"))
+ object.thermalTreatment = message.thermalTreatment;
+ return object;
+ };
+
+ /**
+ * Converts this Strength to JSON.
+ * @function toJSON
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Strength.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Strength
+ * @function getTypeUrl
+ * @memberof mirabuf.material.PhysicalMaterial.Strength
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Strength.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.material.PhysicalMaterial.Strength";
+ };
+
+ return Strength;
+ })();
+
+ return PhysicalMaterial;
+ })();
+
+ return material;
+ })();
+
+ mirabuf.signal = (function() {
+
+ /**
+ * Namespace signal.
+ * @memberof mirabuf
+ * @namespace
+ */
+ const signal = {};
+
+ signal.Signals = (function() {
+
+ /**
+ * Properties of a Signals.
+ * @memberof mirabuf.signal
+ * @interface ISignals
+ * @property {mirabuf.IInfo|null} [info] Has identifiable data (id, name, version)
+ * @property {Object.|null} [signalMap] Contains a full collection of symbols
+ */
+
+ /**
+ * Constructs a new Signals.
+ * @memberof mirabuf.signal
+ * @classdesc Signals is a container for all of the potential signals.
+ * @implements ISignals
+ * @constructor
+ * @param {mirabuf.signal.ISignals=} [properties] Properties to set
+ */
+ function Signals(properties) {
+ this.signalMap = {};
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Has identifiable data (id, name, version)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.signal.Signals
+ * @instance
+ */
+ Signals.prototype.info = null;
+
+ /**
+ * Contains a full collection of symbols
+ * @member {Object.} signalMap
+ * @memberof mirabuf.signal.Signals
+ * @instance
+ */
+ Signals.prototype.signalMap = $util.emptyObject;
+
+ /**
+ * Creates a new Signals instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {mirabuf.signal.ISignals=} [properties] Properties to set
+ * @returns {mirabuf.signal.Signals} Signals instance
+ */
+ Signals.create = function create(properties) {
+ return new Signals(properties);
+ };
+
+ /**
+ * Encodes the specified Signals message. Does not implicitly {@link mirabuf.signal.Signals.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {mirabuf.signal.ISignals} message Signals message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Signals.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.signalMap != null && Object.hasOwnProperty.call(message, "signalMap"))
+ for (let keys = Object.keys(message.signalMap), i = 0; i < keys.length; ++i) {
+ writer.uint32(/* id 2, wireType 2 =*/18).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
+ $root.mirabuf.signal.Signal.encode(message.signalMap[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
+ }
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Signals message, length delimited. Does not implicitly {@link mirabuf.signal.Signals.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {mirabuf.signal.ISignals} message Signals message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Signals.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Signals message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.signal.Signals} Signals
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Signals.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.signal.Signals(), key, value;
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ if (message.signalMap === $util.emptyObject)
+ message.signalMap = {};
+ let end2 = reader.uint32() + reader.pos;
+ key = "";
+ value = null;
+ while (reader.pos < end2) {
+ let tag2 = reader.uint32();
+ switch (tag2 >>> 3) {
+ case 1:
+ key = reader.string();
+ break;
+ case 2:
+ value = $root.mirabuf.signal.Signal.decode(reader, reader.uint32());
+ break;
+ default:
+ reader.skipType(tag2 & 7);
+ break;
+ }
+ }
+ message.signalMap[key] = value;
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Signals message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.signal.Signals} Signals
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Signals.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Signals message.
+ * @function verify
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Signals.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.signalMap != null && message.hasOwnProperty("signalMap")) {
+ if (!$util.isObject(message.signalMap))
+ return "signalMap: object expected";
+ let key = Object.keys(message.signalMap);
+ for (let i = 0; i < key.length; ++i) {
+ let error = $root.mirabuf.signal.Signal.verify(message.signalMap[key[i]]);
+ if (error)
+ return "signalMap." + error;
+ }
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Signals message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.signal.Signals} Signals
+ */
+ Signals.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.signal.Signals)
+ return object;
+ let message = new $root.mirabuf.signal.Signals();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.signal.Signals.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ if (object.signalMap) {
+ if (typeof object.signalMap !== "object")
+ throw TypeError(".mirabuf.signal.Signals.signalMap: object expected");
+ message.signalMap = {};
+ for (let keys = Object.keys(object.signalMap), i = 0; i < keys.length; ++i) {
+ if (typeof object.signalMap[keys[i]] !== "object")
+ throw TypeError(".mirabuf.signal.Signals.signalMap: object expected");
+ message.signalMap[keys[i]] = $root.mirabuf.signal.Signal.fromObject(object.signalMap[keys[i]]);
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Signals message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {mirabuf.signal.Signals} message Signals
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Signals.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.objects || options.defaults)
+ object.signalMap = {};
+ if (options.defaults)
+ object.info = null;
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ let keys2;
+ if (message.signalMap && (keys2 = Object.keys(message.signalMap)).length) {
+ object.signalMap = {};
+ for (let j = 0; j < keys2.length; ++j)
+ object.signalMap[keys2[j]] = $root.mirabuf.signal.Signal.toObject(message.signalMap[keys2[j]], options);
+ }
+ return object;
+ };
+
+ /**
+ * Converts this Signals to JSON.
+ * @function toJSON
+ * @memberof mirabuf.signal.Signals
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Signals.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Signals
+ * @function getTypeUrl
+ * @memberof mirabuf.signal.Signals
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Signals.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.signal.Signals";
+ };
+
+ return Signals;
+ })();
+
+ /**
+ * IOType is a way to specify Input or Output.
+ * @name mirabuf.signal.IOType
+ * @enum {number}
+ * @property {number} INPUT=0 Input Signal
+ * @property {number} OUTPUT=1 Output Signal
+ */
+ signal.IOType = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "INPUT"] = 0;
+ values[valuesById[1] = "OUTPUT"] = 1;
+ return values;
+ })();
+
+ /**
+ * DeviceType needs to be a type of device that has a supported connection
+ * As well as a signal frmae but that can come later
+ * @name mirabuf.signal.DeviceType
+ * @enum {number}
+ * @property {number} PWM=0 PWM value
+ * @property {number} Digital=1 Digital value
+ * @property {number} Analog=2 Analog value
+ * @property {number} I2C=3 I2C value
+ * @property {number} CANBUS=4 CANBUS value
+ * @property {number} CUSTOM=5 CUSTOM value
+ */
+ signal.DeviceType = (function() {
+ const valuesById = {}, values = Object.create(valuesById);
+ values[valuesById[0] = "PWM"] = 0;
+ values[valuesById[1] = "Digital"] = 1;
+ values[valuesById[2] = "Analog"] = 2;
+ values[valuesById[3] = "I2C"] = 3;
+ values[valuesById[4] = "CANBUS"] = 4;
+ values[valuesById[5] = "CUSTOM"] = 5;
+ return values;
+ })();
+
+ signal.Signal = (function() {
+
+ /**
+ * Properties of a Signal.
+ * @memberof mirabuf.signal
+ * @interface ISignal
+ * @property {mirabuf.IInfo|null} [info] Has identifiable data (id, name, version)
+ * @property {mirabuf.signal.IOType|null} [io] Is this a Input or Output
+ * @property {string|null} [customType] The name of a custom input type that is not listed as a device type
+ * @property {number|null} [signalId] ID for a given signal that exists... PWM 2, CANBUS 4
+ * @property {mirabuf.signal.DeviceType|null} [deviceType] Enum for device type that should always be set
+ */
+
+ /**
+ * Constructs a new Signal.
+ * @memberof mirabuf.signal
+ * @classdesc Signal is a way to define a controlling signal.
+ *
+ * TODO: Add Origin
+ * TODO: Decide how this is linked to a exported object
+ * @implements ISignal
+ * @constructor
+ * @param {mirabuf.signal.ISignal=} [properties] Properties to set
+ */
+ function Signal(properties) {
+ if (properties)
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+ if (properties[keys[i]] != null)
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * Has identifiable data (id, name, version)
+ * @member {mirabuf.IInfo|null|undefined} info
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ */
+ Signal.prototype.info = null;
+
+ /**
+ * Is this a Input or Output
+ * @member {mirabuf.signal.IOType} io
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ */
+ Signal.prototype.io = 0;
+
+ /**
+ * The name of a custom input type that is not listed as a device type
+ * @member {string} customType
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ */
+ Signal.prototype.customType = "";
+
+ /**
+ * ID for a given signal that exists... PWM 2, CANBUS 4
+ * @member {number} signalId
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ */
+ Signal.prototype.signalId = 0;
+
+ /**
+ * Enum for device type that should always be set
+ * @member {mirabuf.signal.DeviceType} deviceType
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ */
+ Signal.prototype.deviceType = 0;
+
+ /**
+ * Creates a new Signal instance using the specified properties.
+ * @function create
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {mirabuf.signal.ISignal=} [properties] Properties to set
+ * @returns {mirabuf.signal.Signal} Signal instance
+ */
+ Signal.create = function create(properties) {
+ return new Signal(properties);
+ };
+
+ /**
+ * Encodes the specified Signal message. Does not implicitly {@link mirabuf.signal.Signal.verify|verify} messages.
+ * @function encode
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {mirabuf.signal.ISignal} message Signal message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Signal.encode = function encode(message, writer) {
+ if (!writer)
+ writer = $Writer.create();
+ if (message.info != null && Object.hasOwnProperty.call(message, "info"))
+ $root.mirabuf.Info.encode(message.info, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+ if (message.io != null && Object.hasOwnProperty.call(message, "io"))
+ writer.uint32(/* id 2, wireType 0 =*/16).int32(message.io);
+ if (message.customType != null && Object.hasOwnProperty.call(message, "customType"))
+ writer.uint32(/* id 3, wireType 2 =*/26).string(message.customType);
+ if (message.signalId != null && Object.hasOwnProperty.call(message, "signalId"))
+ writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.signalId);
+ if (message.deviceType != null && Object.hasOwnProperty.call(message, "deviceType"))
+ writer.uint32(/* id 5, wireType 0 =*/40).int32(message.deviceType);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified Signal message, length delimited. Does not implicitly {@link mirabuf.signal.Signal.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {mirabuf.signal.ISignal} message Signal message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ Signal.encodeDelimited = function encodeDelimited(message, writer) {
+ return this.encode(message, writer).ldelim();
+ };
+
+ /**
+ * Decodes a Signal message from the specified reader or buffer.
+ * @function decode
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {mirabuf.signal.Signal} Signal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Signal.decode = function decode(reader, length) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.mirabuf.signal.Signal();
+ while (reader.pos < end) {
+ let tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ message.info = $root.mirabuf.Info.decode(reader, reader.uint32());
+ break;
+ }
+ case 2: {
+ message.io = reader.int32();
+ break;
+ }
+ case 3: {
+ message.customType = reader.string();
+ break;
+ }
+ case 4: {
+ message.signalId = reader.uint32();
+ break;
+ }
+ case 5: {
+ message.deviceType = reader.int32();
+ break;
+ }
+ default:
+ reader.skipType(tag & 7);
+ break;
+ }
+ }
+ return message;
+ };
+
+ /**
+ * Decodes a Signal message from the specified reader or buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+ * @returns {mirabuf.signal.Signal} Signal
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
+ */
+ Signal.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a Signal message.
+ * @function verify
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {Object.} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
+ */
+ Signal.verify = function verify(message) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (message.info != null && message.hasOwnProperty("info")) {
+ let error = $root.mirabuf.Info.verify(message.info);
+ if (error)
+ return "info." + error;
+ }
+ if (message.io != null && message.hasOwnProperty("io"))
+ switch (message.io) {
+ default:
+ return "io: enum value expected";
+ case 0:
+ case 1:
+ break;
+ }
+ if (message.customType != null && message.hasOwnProperty("customType"))
+ if (!$util.isString(message.customType))
+ return "customType: string expected";
+ if (message.signalId != null && message.hasOwnProperty("signalId"))
+ if (!$util.isInteger(message.signalId))
+ return "signalId: integer expected";
+ if (message.deviceType != null && message.hasOwnProperty("deviceType"))
+ switch (message.deviceType) {
+ default:
+ return "deviceType: enum value expected";
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ break;
+ }
+ return null;
+ };
+
+ /**
+ * Creates a Signal message from a plain object. Also converts values to their respective internal types.
+ * @function fromObject
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {Object.} object Plain object
+ * @returns {mirabuf.signal.Signal} Signal
+ */
+ Signal.fromObject = function fromObject(object) {
+ if (object instanceof $root.mirabuf.signal.Signal)
+ return object;
+ let message = new $root.mirabuf.signal.Signal();
+ if (object.info != null) {
+ if (typeof object.info !== "object")
+ throw TypeError(".mirabuf.signal.Signal.info: object expected");
+ message.info = $root.mirabuf.Info.fromObject(object.info);
+ }
+ switch (object.io) {
+ default:
+ if (typeof object.io === "number") {
+ message.io = object.io;
+ break;
+ }
+ break;
+ case "INPUT":
+ case 0:
+ message.io = 0;
+ break;
+ case "OUTPUT":
+ case 1:
+ message.io = 1;
+ break;
+ }
+ if (object.customType != null)
+ message.customType = String(object.customType);
+ if (object.signalId != null)
+ message.signalId = object.signalId >>> 0;
+ switch (object.deviceType) {
+ default:
+ if (typeof object.deviceType === "number") {
+ message.deviceType = object.deviceType;
+ break;
+ }
+ break;
+ case "PWM":
+ case 0:
+ message.deviceType = 0;
+ break;
+ case "Digital":
+ case 1:
+ message.deviceType = 1;
+ break;
+ case "Analog":
+ case 2:
+ message.deviceType = 2;
+ break;
+ case "I2C":
+ case 3:
+ message.deviceType = 3;
+ break;
+ case "CANBUS":
+ case 4:
+ message.deviceType = 4;
+ break;
+ case "CUSTOM":
+ case 5:
+ message.deviceType = 5;
+ break;
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a Signal message. Also converts values to other types if specified.
+ * @function toObject
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {mirabuf.signal.Signal} message Signal
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
+ * @returns {Object.} Plain object
+ */
+ Signal.toObject = function toObject(message, options) {
+ if (!options)
+ options = {};
+ let object = {};
+ if (options.defaults) {
+ object.info = null;
+ object.io = options.enums === String ? "INPUT" : 0;
+ object.customType = "";
+ object.signalId = 0;
+ object.deviceType = options.enums === String ? "PWM" : 0;
+ }
+ if (message.info != null && message.hasOwnProperty("info"))
+ object.info = $root.mirabuf.Info.toObject(message.info, options);
+ if (message.io != null && message.hasOwnProperty("io"))
+ object.io = options.enums === String ? $root.mirabuf.signal.IOType[message.io] === undefined ? message.io : $root.mirabuf.signal.IOType[message.io] : message.io;
+ if (message.customType != null && message.hasOwnProperty("customType"))
+ object.customType = message.customType;
+ if (message.signalId != null && message.hasOwnProperty("signalId"))
+ object.signalId = message.signalId;
+ if (message.deviceType != null && message.hasOwnProperty("deviceType"))
+ object.deviceType = options.enums === String ? $root.mirabuf.signal.DeviceType[message.deviceType] === undefined ? message.deviceType : $root.mirabuf.signal.DeviceType[message.deviceType] : message.deviceType;
+ return object;
+ };
+
+ /**
+ * Converts this Signal to JSON.
+ * @function toJSON
+ * @memberof mirabuf.signal.Signal
+ * @instance
+ * @returns {Object.} JSON object
+ */
+ Signal.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the default type url for Signal
+ * @function getTypeUrl
+ * @memberof mirabuf.signal.Signal
+ * @static
+ * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+ * @returns {string} The default type url
+ */
+ Signal.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+ if (typeUrlPrefix === undefined) {
+ typeUrlPrefix = "type.googleapis.com";
+ }
+ return typeUrlPrefix + "/mirabuf.signal.Signal";
+ };
+
+ return Signal;
+ })();
+
+ return signal;
+ })();
+
+ return mirabuf;
+})();
+
+export { $root as default };
diff --git a/fission/src/systems/Systems.ts b/fission/src/systems/Systems.ts
new file mode 100644
index 0000000000..6832d624f7
--- /dev/null
+++ b/fission/src/systems/Systems.ts
@@ -0,0 +1,2 @@
+export * from "./physics/PhysicsSystem";
+export * from "./rendering/RenderSystem";
\ No newline at end of file
diff --git a/fission/src/systems/input/InputSystem.ts b/fission/src/systems/input/InputSystem.ts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/fission/src/systems/physics/PhysicsSystem.ts b/fission/src/systems/physics/PhysicsSystem.ts
new file mode 100644
index 0000000000..214f2d8f0d
--- /dev/null
+++ b/fission/src/systems/physics/PhysicsSystem.ts
@@ -0,0 +1,155 @@
+import { ThreeVector3_JoltVec3, _JoltQuat } from "../../util/TypeConversions";
+import JOLT from "../../util/loading/JoltSyncLoader";
+import Jolt from "@barclah/jolt-physics";
+import * as THREE from 'three';
+
+const LAYER_NOT_MOVING = 0;
+const LAYER_MOVING = 1;
+const COUNT_OBJECT_LAYERS = 2;
+
+const STANDARD_TIME_STEP = 1.0 / 60.0;
+const STANDARD_SUB_STEPS = 1;
+
+/**
+ * The PhysicsSystem handles all Jolt Phyiscs interactions within Synthesis.
+ * This system can create physical representations of objects such as Robots,
+ * Fields, and Game pieces, and simulate them.
+ */
+export class PhysicsSystem {
+
+ private _joltInterface: Jolt.JoltInterface;
+ private _joltPhysSystem: Jolt.PhysicsSystem;
+ private _joltBodyInterface: Jolt.BodyInterface;
+ private _bodies: Array;
+
+ /**
+ * Creates a PhysicsSystem object.
+ */
+ constructor() {
+ this._bodies = [];
+
+ const joltSettings = new JOLT.JoltSettings();
+ SetupCollisionFiltering(joltSettings);
+
+ this._joltInterface = new JOLT.JoltInterface(joltSettings);
+ JOLT.destroy(joltSettings);
+
+ this._joltPhysSystem = this._joltInterface.GetPhysicsSystem();
+ this._joltBodyInterface = this._joltPhysSystem.GetBodyInterface();
+ }
+
+ /**
+ * TEMPORARY
+ * Create a box.
+ *
+ * @param halfExtents The half extents of the Box.
+ * @param mass Mass of the Box. Leave undefined to make Box static.
+ * @param position Posiition of the Box (default: 0, 0, 0)
+ * @param rotation Rotation of the Box (default 0, 0, 0, 1)
+ * @returns Reference to Jolt Body
+ */
+ public CreateBox(
+ halfExtents: THREE.Vector3,
+ mass: number | undefined,
+ position: THREE.Vector3 | undefined,
+ rotation: THREE.Euler | THREE.Quaternion | undefined) {
+ const size = ThreeVector3_JoltVec3(halfExtents);
+ const shape = new JOLT.BoxShape(size, 0.1);
+ JOLT.destroy(size);
+
+ const pos = position ? ThreeVector3_JoltVec3(position) : new JOLT.Vec3(0.0, 0.0, 0.0);
+ const rot = _JoltQuat(rotation);
+ const creationSettings = new JOLT.BodyCreationSettings(
+ shape,
+ pos,
+ rot,
+ mass ? JOLT.EMotionType_Dynamic : JOLT.EMotionType_Static,
+ LAYER_NOT_MOVING
+ );
+ if (mass) {
+ creationSettings.mMassPropertiesOverride.mMass = mass;
+ }
+ const body = this._joltBodyInterface.CreateBody(creationSettings);
+ JOLT.destroy(pos);
+ JOLT.destroy(rot);
+ JOLT.destroy(creationSettings);
+
+ this._bodies.push(body);
+ return body;
+ }
+
+ public CreateBody(
+ shape: Jolt.Shape,
+ mass: number | undefined,
+ position: THREE.Vector3 | undefined,
+ rotation: THREE.Euler | THREE.Quaternion | undefined) {
+ const pos = position ? ThreeVector3_JoltVec3(position) : new JOLT.Vec3(0.0, 0.0, 0.0);
+ const rot = _JoltQuat(rotation);
+ const creationSettings = new JOLT.BodyCreationSettings(
+ shape,
+ pos,
+ rot,
+ mass ? JOLT.EMotionType_Dynamic : JOLT.EMotionType_Static,
+ LAYER_NOT_MOVING
+ );
+ if (mass) {
+ creationSettings.mMassPropertiesOverride.mMass = mass;
+ }
+ const body = this._joltBodyInterface.CreateBody(creationSettings);
+ JOLT.destroy(pos);
+ JOLT.destroy(rot);
+ JOLT.destroy(creationSettings);
+
+ this._bodies.push(body);
+ return body;
+ }
+
+ public CreateConvexHull(points: Float32Array, density: number = 1.0) {
+ if (points.length % 3) {
+ throw new Error(`Invalid size of points: ${points.length}`);
+ }
+ const settings = new JOLT.ConvexHullShapeSettings();
+ settings.mPoints.clear();
+ settings.mPoints.reserve(points.length / 3.0);
+ for (let i = 0; i < points.length; i += 3) {
+ settings.mPoints.push_back(new JOLT.Vec3(points[i], points[i + 1], points[i + 2]));
+ }
+ settings.mDensity = density;
+ return settings.Create();
+ }
+
+ public Step() {
+ this._joltInterface.Step(STANDARD_TIME_STEP, STANDARD_SUB_STEPS);
+ }
+
+ public Destroy() {
+ // Destroy Jolt Bodies.
+ this._bodies.forEach(x => JOLT.destroy(x));
+ this._bodies = [];
+
+ JOLT.destroy(this._joltInterface);
+ }
+}
+
+function SetupCollisionFiltering(settings: Jolt.JoltSettings) {
+ const objectFilter = new JOLT.ObjectLayerPairFilterTable(COUNT_OBJECT_LAYERS);
+ objectFilter.EnableCollision(LAYER_NOT_MOVING, LAYER_MOVING);
+ objectFilter.EnableCollision(LAYER_MOVING, LAYER_MOVING);
+
+ const BP_LAYER_NOT_MOVING = new JOLT.BroadPhaseLayer(LAYER_NOT_MOVING);
+ const BP_LAYER_MOVING = new JOLT.BroadPhaseLayer(LAYER_MOVING);
+ const COUNT_BROAD_PHASE_LAYERS = 2;
+
+ const bpInterface = new JOLT.BroadPhaseLayerInterfaceTable(COUNT_OBJECT_LAYERS, COUNT_BROAD_PHASE_LAYERS);
+ bpInterface.MapObjectToBroadPhaseLayer(LAYER_NOT_MOVING, BP_LAYER_NOT_MOVING);
+ bpInterface.MapObjectToBroadPhaseLayer(LAYER_MOVING, BP_LAYER_MOVING);
+
+ settings.mObjectLayerPairFilter = objectFilter;
+ settings.mBroadPhaseLayerInterface = bpInterface;
+ settings.mObjectVsBroadPhaseLayerFilter = new JOLT.ObjectVsBroadPhaseLayerFilterTable(
+ settings.mBroadPhaseLayerInterface,
+ COUNT_BROAD_PHASE_LAYERS,
+ settings.mObjectLayerPairFilter,
+ COUNT_OBJECT_LAYERS
+ );
+}
\ No newline at end of file
diff --git a/fission/src/systems/rendering/RenderSystem.ts b/fission/src/systems/rendering/RenderSystem.ts
new file mode 100644
index 0000000000..f9e40935fc
--- /dev/null
+++ b/fission/src/systems/rendering/RenderSystem.ts
@@ -0,0 +1,3 @@
+export class RenderSystem {
+
+}
\ No newline at end of file
diff --git a/fission/src/systems/world/WorldSystem.ts b/fission/src/systems/world/WorldSystem.ts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/fission/src/test/PhysicsSystem.test.ts b/fission/src/test/PhysicsSystem.test.ts
new file mode 100644
index 0000000000..4c1d9e60b2
--- /dev/null
+++ b/fission/src/test/PhysicsSystem.test.ts
@@ -0,0 +1,64 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+import { test, expect, describe, assert } from 'vitest';
+import { PhysicsSystem } from '../systems/Systems';
+
+describe('Physics System Tests', () => {
+ test('Convex Hull Shape (Cube)', () => {
+ const points: Float32Array = new Float32Array(
+ [
+ 0.5, -0.5, 0.5,
+ -0.5, -0.5, 0.5,
+ -0.5, -0.5, -0.5,
+ 0.5, -0.5, -0.5,
+ 0.5, 0.5, 0.5,
+ -0.5, 0.5, 0.5,
+ -0.5, 0.5, -0.5,
+ 0.5, 0.5, -0.5,
+ ]
+ );
+
+ const system = new PhysicsSystem();
+ const shapeResult = system.CreateConvexHull(points);
+
+ assert(shapeResult.HasError() == false, shapeResult.GetError().c_str());
+ expect(shapeResult.IsValid()).toBe(true);
+
+ const shape = shapeResult.Get();
+
+ expect(shape.GetVolume() - 1.0).toBeLessThan(0.001);
+ expect(shape.GetCenterOfMass().Length()).toBe(0.0);
+
+ shape.Release();
+ system.Destroy();
+
+ });
+ test('Convex Hull Shape (Tetrahedron)', () => {
+ const points: Float32Array = new Float32Array(
+ [
+ 0.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0
+ ]
+ );
+
+ const system = new PhysicsSystem();
+ const shapeResult = system.CreateConvexHull(points);
+
+ assert(shapeResult.HasError() == false, shapeResult.GetError().c_str());
+ expect(shapeResult.IsValid()).toBe(true);
+
+ const shape = shapeResult.Get();
+ const bounds = shape.GetLocalBounds();
+ const boxSize = bounds.mMax.Sub(bounds.mMin);
+
+ expect(boxSize.GetX() - 1.0).toBeLessThan(0.001);
+ expect(boxSize.GetY() - 1.0).toBeLessThan(0.001);
+ expect(boxSize.GetZ() - 1.0).toBeLessThan(0.001);
+ expect(shape.GetVolume() - (1.0 / 6.0)).toBeLessThan(0.001);
+ expect(shape.GetMassProperties().mMass - 6.0).toBeLessThan(0.001);
+
+ shape.Release();
+ system.Destroy();
+ });
+});
\ No newline at end of file
diff --git a/fission/src/test/util/Queue.test.ts b/fission/src/test/util/Queue.test.ts
new file mode 100644
index 0000000000..4a55d56422
--- /dev/null
+++ b/fission/src/test/util/Queue.test.ts
@@ -0,0 +1,62 @@
+import { test, expect, describe } from 'vitest';
+
+import Queue from '../../util/Queue';
+
+describe('Queue Tests', () => {
+ test('Create Empty', () => {
+ const q = new Queue();
+ expect(q.Dequeue()).toBeUndefined();
+ expect(q.size).toBe(0);
+ });
+
+ test('Single Element', () => {
+ const q = new Queue();
+ const element = 5;
+ q.Enqueue(element);
+
+ expect(q.size).toBe(1);
+ expect(q.Dequeue()).toBe(element);
+ expect(q.size).toBe(0);
+ });
+
+ test('Five Elements', () => {
+ const q = new Queue();
+ const elements = [ 1, 4, 5, 2, 6 ];
+ q.Enqueue(...elements);
+
+ let expectedSize = elements.length;
+ for (const element of elements) {
+ expect(q.size).toBe(expectedSize);
+ expect(q.Dequeue()).toBe(element);
+ expectedSize--;
+ }
+ expect(q.size).toBe(0);
+ expect(q.Dequeue()).toBeUndefined();
+ });
+
+ test('Add 5, Remove 3, Add 8, Remove All', () => {
+ const q = new Queue();
+ const elementsA = [ 1, 4, 5, 2, 6 ];
+ const elementsB = [ 1, 4, 5, 2, 6, 9, 10, 54 ];
+
+ q.Enqueue(...elementsA);
+ expect(q.size).toBe(5);
+ for (let i = 0; i < 3; i++) {
+ expect(q.Dequeue()).toBe(elementsA[i]);
+ expect(q.size).toBe(elementsA.length - (i + 1));
+ }
+
+ q.Enqueue(...elementsB);
+ expect(q.size).toBe(10);
+ for (let i = 0; i < 2; i++) {
+ expect(q.Dequeue()).toBe(elementsA[i + 3]);
+ expect(q.size).toBe(9 - i);
+ }
+ for (let i = 0; i < 8; i++) {
+ expect(q.Dequeue()).toBe(elementsB[i]);
+ expect(q.size).toBe(7 - i);
+ }
+ expect(q.size).toBe(0);
+ expect(q.Dequeue()).toBeUndefined();
+ });
+});
\ No newline at end of file
diff --git a/fission/src/test/util/Random.test.ts b/fission/src/test/util/Random.test.ts
new file mode 100644
index 0000000000..c19ab10d68
--- /dev/null
+++ b/fission/src/test/util/Random.test.ts
@@ -0,0 +1,13 @@
+import { test, expect, describe } from 'vitest';
+import * as Random from '../../util/Random';
+
+describe('Random Number Generator Tests', () => {
+ test('Range Compliance', () => {
+ Random.SeedRandomGen(67542431);
+ for (let i = 0; i < 99; i++) {
+ const a = Random.Random();
+ expect(a).toBeLessThan(1.0);
+ expect(a).toBeGreaterThanOrEqual(0.0);
+ }
+ });
+});
\ No newline at end of file
diff --git a/fission/src/test/util/TypeConversions.test.ts b/fission/src/test/util/TypeConversions.test.ts
new file mode 100644
index 0000000000..9e800d33b2
--- /dev/null
+++ b/fission/src/test/util/TypeConversions.test.ts
@@ -0,0 +1,65 @@
+import { test, expect, describe } from 'vitest';
+import * as THREE from 'three';
+import { ThreeEuler_JoltQuat, ThreeQuaternion_JoltQuat, ThreeVector3_JoltVec3, _JoltQuat } from '../../util/TypeConversions';
+
+describe('ThreeJS to Jolt Conversions', async () => {
+ test('THREE.Vector3 -> JOLT.Vec3', () => {
+ const a = new THREE.Vector3(2, 4, 1);
+ const joltVec = ThreeVector3_JoltVec3(a);
+
+ expect(joltVec.GetX()).toBe(a.x);
+ expect(joltVec.GetY()).toBe(a.y);
+ expect(joltVec.GetZ()).toBe(a.z);
+ expect(joltVec.Length() - a.length()).toBeLessThan(0.0001);
+ });
+ test('THREE.Euler -> JOLT.Quat', () => {
+ const a = new THREE.Euler(30, 60, 15);
+ const joltQuat = ThreeEuler_JoltQuat(a);
+ const threeQuat = new THREE.Quaternion();
+ threeQuat.setFromEuler(a);
+
+ expect(joltQuat.GetX() - threeQuat.x).toBeLessThan(0.0001);
+ expect(joltQuat.GetY() - threeQuat.y).toBeLessThan(0.0001);
+ expect(joltQuat.GetZ() - threeQuat.z).toBeLessThan(0.0001);
+ expect(joltQuat.GetW() - threeQuat.w).toBeLessThan(0.0001);
+ });
+ test('THREE.Quaternion -> JOLT.Quat', () => {
+ const a = new THREE.Quaternion(0.285, 0.450, 0.237, 0.812);
+ a.normalize();
+ const joltQuat = ThreeQuaternion_JoltQuat(a);
+
+ expect(joltQuat.GetX() - a.x).toBeLessThan(0.0001);
+ expect(joltQuat.GetY() - a.y).toBeLessThan(0.0001);
+ expect(joltQuat.GetZ() - a.z).toBeLessThan(0.0001);
+ expect(joltQuat.GetW() - a.w).toBeLessThan(0.0001);
+ });
+ test('THREE.Quaterion -> JOLT.Quat (General Func)', () => {
+ const a = new THREE.Quaternion(0.285, 0.450, 0.237, 0.812);
+ a.normalize();
+ const joltQuat = _JoltQuat(a);
+
+ expect(joltQuat.GetX() - a.x).toBeLessThan(0.0001);
+ expect(joltQuat.GetY() - a.y).toBeLessThan(0.0001);
+ expect(joltQuat.GetZ() - a.z).toBeLessThan(0.0001);
+ expect(joltQuat.GetW() - a.w).toBeLessThan(0.0001);
+ });
+ test('THREE.Euler -> JOLT.Quat (General Func)', () => {
+ const a = new THREE.Euler(30, 60, 15);
+ const joltQuat = _JoltQuat(a);
+ const threeQuat = new THREE.Quaternion();
+ threeQuat.setFromEuler(a);
+
+ expect(joltQuat.GetX() - threeQuat.x).toBeLessThan(0.0001);
+ expect(joltQuat.GetY() - threeQuat.y).toBeLessThan(0.0001);
+ expect(joltQuat.GetZ() - threeQuat.z).toBeLessThan(0.0001);
+ expect(joltQuat.GetW() - threeQuat.w).toBeLessThan(0.0001);
+ });
+ test('undefined -> JOLT.Quat (General Func)', () => {
+ const joltQuat = _JoltQuat(undefined);
+
+ expect(joltQuat.GetX()).toBe(0.0);
+ expect(joltQuat.GetY()).toBe(0.0);
+ expect(joltQuat.GetZ()).toBe(0.0);
+ expect(joltQuat.GetW()).toBe(1.0);
+ });
+});
\ No newline at end of file
diff --git a/fission/src/util/Queue.ts b/fission/src/util/Queue.ts
new file mode 100644
index 0000000000..398f7b8eb5
--- /dev/null
+++ b/fission/src/util/Queue.ts
@@ -0,0 +1,47 @@
+class Queue {
+
+ private _head?: LinkedNode;
+ private _tail?: LinkedNode;
+ private _size: number = 0;
+
+ public get size() { return this._size; }
+
+ constructor() { }
+
+ public Enqueue(...items: T[]) {
+ for (const item of items) {
+ const node = new LinkedNode(item);
+ if (this._head) {
+ this._tail!.next = node;
+ } else {
+ this._head = node;
+ }
+ this._tail = node;
+
+ this._size++;
+ }
+ }
+
+ public Dequeue(): T | undefined {
+ let retVal: T | undefined;
+ if (this._head) {
+ retVal = this._head.value;
+ this._head = this._head.next;
+ !this._head && (this._tail = undefined);
+ this._size--;
+ }
+ return retVal;
+ }
+}
+
+class LinkedNode {
+ public value: T;
+ public next?: LinkedNode;
+
+ constructor(value: T, next?: LinkedNode) {
+ this.value = value;
+ this.next = next;
+ }
+}
+
+export default Queue;
\ No newline at end of file
diff --git a/fission/src/util/Random.ts b/fission/src/util/Random.ts
new file mode 100644
index 0000000000..15ad2d9003
--- /dev/null
+++ b/fission/src/util/Random.ts
@@ -0,0 +1,23 @@
+let seed = Date.now();
+
+/**
+ * Set the seed used when randomly generating a number.
+ * Default is Date.now() when this module is created.
+ *
+ * @param newSeed New seed to use when generating random numbers.
+ * Must be greater than or equal to 1.0
+ */
+export function SeedRandomGen(newSeed: number) {
+ seed = newSeed >= 1.0 ? newSeed : 1.0;
+}
+
+/**
+ * Generate a random number.
+ *
+ * @returns Gives a random number x where, 0.0 <= x < 1.0
+ */
+export function Random() {
+ seed++;
+ const x = Math.abs(Math.sin(seed + 997) * 1425);
+ return x - Math.floor(x);
+}
\ No newline at end of file
diff --git a/fission/src/util/TypeConversions.ts b/fission/src/util/TypeConversions.ts
new file mode 100644
index 0000000000..9cf3daa6c3
--- /dev/null
+++ b/fission/src/util/TypeConversions.ts
@@ -0,0 +1,26 @@
+import * as THREE from 'three';
+import JOLT from './loading/JoltSyncLoader';
+
+export function _JoltQuat(a: THREE.Euler | THREE.Quaternion | undefined) {
+ if (a instanceof THREE.Euler) {
+ return ThreeEuler_JoltQuat(a as THREE.Euler);
+ } else if (a instanceof THREE.Quaternion) {
+ return ThreeQuaternion_JoltQuat(a as THREE.Quaternion);
+ } else {
+ return new JOLT.Quat(0, 0, 0, 1);
+ }
+}
+
+export function ThreeEuler_JoltQuat(euler: THREE.Euler) {
+ const quat = new THREE.Quaternion();
+ quat.setFromEuler(euler);
+ return ThreeQuaternion_JoltQuat(quat);
+}
+
+export function ThreeQuaternion_JoltQuat(quat: THREE.Quaternion) {
+ return new JOLT.Quat(quat.x, quat.y, quat.z, quat.w);
+}
+
+export function ThreeVector3_JoltVec3(vec: THREE.Vector3) {
+ return new JOLT.Vec3(vec.x, vec.y, vec.z);
+}
\ No newline at end of file
diff --git a/fission/src/util/loading/FileLoading.mjs b/fission/src/util/loading/FileLoading.mjs
new file mode 100644
index 0000000000..423af99d44
--- /dev/null
+++ b/fission/src/util/loading/FileLoading.mjs
@@ -0,0 +1,13 @@
+export async function getBinaryFile(src) {
+ const get_file_array = (file) => {
+ return new Promise((acc, _) => {
+ const reader = new FileReader();
+ reader.onload = (event) => { acc(event.target.result) };
+ reader.onerror = (err) => { err(err) };
+ reader.readAsArrayBuffer(file);
+ });
+ }
+ const miraFile = await fetch(src, {cache: "no-store"}).then((x) => x.blob());
+ const temp = await get_file_array(miraFile);
+ return new Uint8Array(temp);
+}
diff --git a/fission/src/util/loading/JoltAsyncLoader.ts b/fission/src/util/loading/JoltAsyncLoader.ts
new file mode 100644
index 0000000000..473c0e5bb4
--- /dev/null
+++ b/fission/src/util/loading/JoltAsyncLoader.ts
@@ -0,0 +1,6 @@
+import * as j from '@barclah/jolt-physics/wasm-compat';
+
+let JOLT: typeof j.default | undefined = undefined;
+export const JOLT_TYPES = j.default;
+export const joltInit = j.default().then(jolt => JOLT = jolt);
+export default JOLT;
\ No newline at end of file
diff --git a/fission/src/util/loading/JoltSyncLoader.ts b/fission/src/util/loading/JoltSyncLoader.ts
new file mode 100644
index 0000000000..b428e7858b
--- /dev/null
+++ b/fission/src/util/loading/JoltSyncLoader.ts
@@ -0,0 +1,9 @@
+/**
+ * This loader still exists within Synthesis instead of the npm re-export because we want to have
+ * customizable control over when it is initialized.
+ */
+
+import * as j from '@barclah/jolt-physics/wasm-compat';
+
+const JOLT = await j.default();
+export default JOLT;
\ No newline at end of file
diff --git a/fission/src/vite-env.d.ts b/fission/src/vite-env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/fission/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/fission/tsconfig.json b/fission/tsconfig.json
new file mode 100644
index 0000000000..a7fc6fbf23
--- /dev/null
+++ b/fission/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/fission/tsconfig.node.json b/fission/tsconfig.node.json
new file mode 100644
index 0000000000..97ede7ee6f
--- /dev/null
+++ b/fission/tsconfig.node.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true,
+ "strict": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/fission/vite.config.ts b/fission/vite.config.ts
new file mode 100644
index 0000000000..409fa5890c
--- /dev/null
+++ b/fission/vite.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react-swc'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+ server: {
+ // this ensures that the browser opens upon server start
+ open: true,
+ // this sets a default port to 3000
+ port: 3000,
+ }
+})