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, + } +})