From d601058b3f3696c5cb1528445c6d9ca779c66ac4 Mon Sep 17 00:00:00 2001 From: CODEX Date: Wed, 24 Jun 2026 21:56:32 +0300 Subject: [PATCH] Add local Draco optimization for GLB uploads --- converter/Dockerfile | 6 +- converter/package-lock.json | 3803 +++++++++++++++++++ converter/package.json | 12 + converter/worker.py | 242 +- docker-compose.beam.yml | 2 + frontend/dcViewer.js | 2 +- frontend/index.html | 2 +- frontend/lib/dc-camera-context.es.js | 7 +- frontend/lib/draco/LICENSE.loaders-gl-draco | 41 + frontend/lib/draco/THIRD_PARTY.txt | 7 + frontend/lib/draco/draco_decoder.js | 117 + frontend/lib/draco/draco_decoder.wasm | Bin 0 -> 283091 bytes frontend/lib/draco/draco_wasm_wrapper.js | 117 + server/index.js | 24 +- 14 files changed, 4368 insertions(+), 14 deletions(-) create mode 100644 converter/package-lock.json create mode 100644 converter/package.json create mode 100644 frontend/lib/draco/LICENSE.loaders-gl-draco create mode 100644 frontend/lib/draco/THIRD_PARTY.txt create mode 100644 frontend/lib/draco/draco_decoder.js create mode 100644 frontend/lib/draco/draco_decoder.wasm create mode 100644 frontend/lib/draco/draco_wasm_wrapper.js diff --git a/converter/Dockerfile b/converter/Dockerfile index 18a9645..f5d5445 100644 --- a/converter/Dockerfile +++ b/converter/Dockerfile @@ -20,9 +20,13 @@ WORKDIR /app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt -RUN npm install -g @xeokit/xeokit-convert@1.3.2 \ + +COPY package.json package-lock.json ./ +RUN npm ci --omit=dev \ && npm cache clean --force +ENV PATH="/app/node_modules/.bin:${PATH}" + COPY . ./ CMD ["python", "worker.py"] diff --git a/converter/package-lock.json b/converter/package-lock.json new file mode 100644 index 0000000..9e8b552 --- /dev/null +++ b/converter/package-lock.json @@ -0,0 +1,3803 @@ +{ + "name": "nodedc-bim-converter-runtime", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nodedc-bim-converter-runtime", + "version": "0.1.0", + "dependencies": { + "@gltf-transform/cli": "4.4.0", + "@xeokit/xeokit-convert": "1.3.2", + "draco3d": "1.5.7" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "license": "MIT", + "dependencies": { + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@donmccurdy/caporal": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@donmccurdy/caporal/-/caporal-0.0.10.tgz", + "integrity": "sha512-VdaJjOqYFYcDTM5We2x8cL+B+U9UFQvq0iW2ypqEGX31SDf2oYFjEg7INEJorBwJJnFNXV8jXoYGzJyLeYl1EQ==", + "license": "MIT", + "dependencies": { + "@types/glob": "^8.1.0", + "@types/lodash": "^4.14.197", + "@types/node": "20.5.6", + "@types/table": "5.0.0", + "@types/wrap-ansi": "^8.0.1", + "chalk": "3.0.0", + "glob": "^10.3.3", + "lodash": "^4.17.21", + "table": "5.4.6", + "winston": "3.10.0", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@gltf-transform/cli": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@gltf-transform/cli/-/cli-4.4.0.tgz", + "integrity": "sha512-BPcdZT693PeO3lwoiDF6Sfk+fBmJCOThtRnX7gT14Wmr9AVbRngRmqUk9vfrVRgICyD8dPz80YIXEi2xrzXZyg==", + "license": "MIT", + "dependencies": { + "@donmccurdy/caporal": "~0.0.10", + "@gltf-transform/core": "^4.4.0", + "@gltf-transform/extensions": "^4.4.0", + "@gltf-transform/functions": "^4.4.0", + "@types/language-tags": "~1.0.4", + "@types/micromatch": "~4.0.10", + "@types/node-fetch": "~2.6.13", + "@types/prompts": "^2.4.9", + "@types/tmp": "~0.2.6", + "cli-table3": "~0.6.5", + "csv-stringify": "~6.6.0", + "draco3dgltf": "~1.5.7", + "gltf-validator": "~2.0.0-dev.3.10", + "keyframe-resample": "~0.1.0", + "ktx-parse": "^1.1.0", + "language-tags": "^2.1.0", + "listr2": "~8.3.3", + "meshoptimizer": "~1.0.1", + "micromatch": "~4.0.8", + "mikktspace": "~1.1.1", + "node-fetch": "~3.3.2", + "prompts": "^2.4.2", + "sharp": "~0.34.5", + "tmp": "~0.2.5", + "watlas": "^1.0.1" + }, + "bin": { + "gltf-transform": "bin/cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/donmccurdy" + } + }, + "node_modules/@gltf-transform/core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@gltf-transform/core/-/core-4.4.0.tgz", + "integrity": "sha512-cOPxOhHFFz5hwmix+li1+Nnq5qMV/QD3fTCsVlApxxFACtFdjkt2R/juseD4gvZ7D2c/yl6OilKH0pvI735YyQ==", + "license": "MIT", + "dependencies": { + "property-graph": "^4.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/donmccurdy" + } + }, + "node_modules/@gltf-transform/extensions": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@gltf-transform/extensions/-/extensions-4.4.0.tgz", + "integrity": "sha512-ZwEgFkkqnUR7d4m6roK9BycxxdoqJNtVyo7w5ShJ9syKBoQiXw2QrTSLwXaUAImSrEIl9Jh/wZTtvSVyviQuXg==", + "license": "MIT", + "dependencies": { + "@gltf-transform/core": "^4.4.0", + "ktx-parse": "^1.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/donmccurdy" + } + }, + "node_modules/@gltf-transform/functions": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@gltf-transform/functions/-/functions-4.4.0.tgz", + "integrity": "sha512-CaSTAVAd2NXNWsxdgvq090rKHqy7AQlcNWV4ec7xtQyS8WEv3S3gVN27ikWmdB8nWEsXUbOIDhtPMLbXI6xDJg==", + "license": "MIT", + "dependencies": { + "@gltf-transform/core": "^4.4.0", + "@gltf-transform/extensions": "^4.4.0", + "ktx-parse": "^1.1.0", + "ndarray": "^1.0.19", + "ndarray-lanczos": "^0.3.0", + "ndarray-pixels": "^5.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/donmccurdy" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@loaders.gl/core": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.3.4.tgz", + "integrity": "sha512-cG0C5fMZ1jyW6WCsf4LoHGvaIAJCEVA/ioqKoYRwoSfXkOf+17KupK1OUQyUCw5XoRn+oWA1FulJQOYlXnb9Gw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@probe.gl/log": "^4.0.2" + } + }, + "node_modules/@loaders.gl/crypto": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/crypto/-/crypto-4.3.4.tgz", + "integrity": "sha512-3VS5FgB44nLOlAB9Q82VOQnT1IltwfRa1miE0mpHCe1prYu1M/dMnEyynusbrsp+eDs3EKbxpguIS9HUsFu5dQ==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@types/crypto-js": "^4.0.2" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/draco": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-4.3.4.tgz", + "integrity": "sha512-4Lx0rKmYENGspvcgV5XDpFD9o+NamXoazSSl9Oa3pjVVjo+HJuzCgrxTQYD/3JvRrolW/QRehZeWD/L/cEC6mw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "draco3d": "1.5.7" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/gis": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-4.3.4.tgz", + "integrity": "sha512-8xub38lSWW7+ZXWuUcggk7agRHJUy6RdipLNKZ90eE0ZzLNGDstGD1qiBwkvqH0AkG+uz4B7Kkiptyl7w2Oa6g==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^4.1.0", + "pbf": "^3.2.1" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/gltf": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-4.3.4.tgz", + "integrity": "sha512-EiUTiLGMfukLd9W98wMpKmw+hVRhQ0dJ37wdlXK98XPeGGB+zTQxCcQY+/BaMhsSpYt/OOJleHhTfwNr8RgzRg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/draco": "4.3.4", + "@loaders.gl/images": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/textures": "4.3.4", + "@math.gl/core": "^4.1.0" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/images": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.3.4.tgz", + "integrity": "sha512-qgc33BaNsqN9cWa/xvcGvQ50wGDONgQQdzHCKDDKhV2w/uptZoR5iofJfuG8UUV2vUMMd82Uk9zbopRx2rS4Ag==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/json": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/json/-/json-4.3.4.tgz", + "integrity": "sha512-PNTSGGQdJ1O87s8reOzWxwQUy/W2k2yeDAONdZlnyqETMNc/z/1mE5+tCUI+K0kWdF1tgJ2obfMFS1pLihuiFg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/gis": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/las": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/las/-/las-4.3.4.tgz", + "integrity": "sha512-KGyVuSQwpnVO/RCHYF8ITkDd7DpXnhAPDpgGMCBrpWvBubAbIY38oP0uGecNO/HVfRVAovDEobZICN3uQx2Weg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "laz-perf": "^0.0.6" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/loader-utils": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-4.3.4.tgz", + "integrity": "sha512-tjMZvlKQSaMl2qmYTAxg+ySR6zd6hQn5n3XaU8+Ehp90TD3WzxvDKOMNDqOa72fFmIV+KgPhcmIJTpq4lAdC4Q==", + "license": "MIT", + "dependencies": { + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@probe.gl/log": "^4.0.2", + "@probe.gl/stats": "^4.0.2" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/obj": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/obj/-/obj-4.3.4.tgz", + "integrity": "sha512-Rdn+NHjLI0jKYrKNicJuQJohnHh7QAv4szCji8eafYYMrVtSIonNozBXUfe/c4V7HL/FVvvHCkfC66rvLvayaQ==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/ply": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/ply/-/ply-4.3.4.tgz", + "integrity": "sha512-9/ijcIK2xP0cgSM3BmoS5JXfRXe6PKuIGHNteqJHhrQ5nwx1UrupmsYPXj58FykYVZx6PTBshMs9OmIXvPHduw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/polyfills": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/polyfills/-/polyfills-4.3.4.tgz", + "integrity": "sha512-rL7mtzyY1YLFRbDw7NAjXJD/zQuT6BMhIGQI/UnOcj/w9I/dDKq+lk9/LsyRSNdUq68gAPtH/PTVplPJAaW85A==", + "license": "MIT", + "dependencies": { + "@loaders.gl/crypto": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "buffer": "^6.0.3", + "get-pixels": "^3.3.3", + "ndarray": "^1.0.19", + "save-pixels": "^2.3.6", + "stream-to-async-iterator": "^1.0.0", + "through": "^2.3.8", + "web-streams-polyfill": "^4.0.0" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/schema": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-4.3.4.tgz", + "integrity": "sha512-1YTYoatgzr/6JTxqBLwDiD3AVGwQZheYiQwAimWdRBVB0JAzych7s1yBuE0CVEzj4JDPKOzVAz8KnU1TiBvJGw==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.7" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/textures": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-4.3.4.tgz", + "integrity": "sha512-arWIDjlE7JaDS6v9by7juLfxPGGnjT9JjleaXx3wq/PTp+psLOpGUywHXm38BNECos3MFEQK3/GFShWI+/dWPw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/images": "4.3.4", + "@loaders.gl/loader-utils": "4.3.4", + "@loaders.gl/schema": "4.3.4", + "@loaders.gl/worker-utils": "4.3.4", + "@math.gl/types": "^4.1.0", + "ktx-parse": "^0.7.0", + "texture-compressor": "^1.0.2" + }, + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@loaders.gl/textures/node_modules/ktx-parse": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.7.1.tgz", + "integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==", + "license": "MIT" + }, + "node_modules/@loaders.gl/worker-utils": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-4.3.4.tgz", + "integrity": "sha512-EbsszrASgT85GH3B7jkx7YXfQyIYo/rlobwMx6V3ewETapPUwdSAInv+89flnk5n2eu2Lpdeh+2zS6PvqbL2RA==", + "license": "MIT", + "peerDependencies": { + "@loaders.gl/core": "^4.3.0" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@math.gl/core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.1.0.tgz", + "integrity": "sha512-FrdHBCVG3QdrworwrUSzXIaK+/9OCRLscxI2OUy6sLOHyHgBMyfnEGs99/m3KNvs+95BsnQLWklVfpKfQzfwKA==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "4.1.0" + } + }, + "node_modules/@math.gl/polygon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-4.1.0.tgz", + "integrity": "sha512-YA/9PzaCRHbIP5/0E9uTYrqe+jsYTQoqoDWhf6/b0Ixz8bPZBaGDEafLg3z7ffBomZLacUty9U3TlPjqMtzPjA==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "4.1.0" + } + }, + "node_modules/@math.gl/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-4.1.0.tgz", + "integrity": "sha512-clYZdHcmRvMzVK5fjeDkQlHUzXQSNdZ7s4xOqC3nJPgz4C/TZkUecTo9YS4PruZqtDda/ag4erndP0MIn40dGA==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@probe.gl/env": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.1.1.tgz", + "integrity": "sha512-+68seNDMVsEegRB47pFA/Ws1Fjy8agcFYXxzorKToyPcD6zd+gZ5uhwoLd7TzsSw6Ydns//2KEszWn+EnNHTbA==", + "license": "MIT" + }, + "node_modules/@probe.gl/log": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.1.1.tgz", + "integrity": "sha512-kcZs9BT44pL7hS1OkRGKYRXI/SN9KejUlPD+BY40DguRLzdC5tLG/28WGMyfKdn/51GT4a0p+0P8xvDn1Ez+Kg==", + "license": "MIT", + "dependencies": { + "@probe.gl/env": "4.1.1" + } + }, + "node_modules/@probe.gl/stats": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.1.1.tgz", + "integrity": "sha512-4VpAyMHOqydSvPlEyHwXaE+AkIdR03nX+Qhlxsk2D/IW4OVmDZgIsvJB1cDzyEEtcfKcnaEbfXeiPgejBceT6g==", + "license": "MIT" + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@types/braces": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz", + "integrity": "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==", + "license": "MIT" + }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "license": "MIT", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/language-tags": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/language-tags/-/language-tags-1.0.4.tgz", + "integrity": "sha512-20PQbifv3v/djCT+KlXybv0KqO5ofoR1qD1wkinN59kfggTPVTWGmPFgL/1yWuDyRcsQP/POvkqK+fnl5nOwTg==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/micromatch": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.10.tgz", + "integrity": "sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==", + "license": "MIT", + "dependencies": { + "@types/braces": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "license": "MIT" + }, + "node_modules/@types/ndarray": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@types/ndarray/-/ndarray-1.0.14.tgz", + "integrity": "sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.5.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz", + "integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ==", + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/prompts": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/@types/prompts/-/prompts-2.4.9.tgz", + "integrity": "sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "kleur": "^3.0.3" + } + }, + "node_modules/@types/table": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/table/-/table-5.0.0.tgz", + "integrity": "sha512-fQLtGLZXor264zUPWI95WNDsZ3QV43/c0lJpR/h1hhLJumXRmHNsrvBfEzW2YMhb0EWCsn4U6h82IgwsajAuTA==", + "license": "MIT" + }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/wrap-ansi": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-8.0.2.tgz", + "integrity": "sha512-mdaFibQzYYqJF8Sc9By84eBLtDQD9Hnko0yXuezHBU5f5KdtQk+j5hPRQc1j4ayzdqGddKON6PjeuzxD5U1hPg==", + "license": "MIT" + }, + "node_modules/@xeokit/xeokit-convert": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@xeokit/xeokit-convert/-/xeokit-convert-1.3.2.tgz", + "integrity": "sha512-MgE8eDTfoK2dEgJsYkEXi1Wzw2FBiE3QphW6kb2szuAHwmDJkbt6IBS5BT+I/KbCAMGWzWbHNW942DAiy/Ryew==", + "license": "LICENSE", + "dependencies": { + "@loaders.gl/core": "4.3.4", + "@loaders.gl/gltf": "4.3.4", + "@loaders.gl/images": "4.3.4", + "@loaders.gl/json": "4.3.4", + "@loaders.gl/las": "4.3.4", + "@loaders.gl/obj": "4.3.4", + "@loaders.gl/ply": "4.3.4", + "@loaders.gl/polyfills": "4.3.4", + "@loaders.gl/textures": "4.3.4", + "commander": "11.1.0", + "pako": "2.1.0", + "web-ifc": "0.0.70" + }, + "bin": { + "xeokit-convert": "convert2xkt.js" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "license": "MIT", + "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-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.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" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "license": "MIT", + "dependencies": { + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/contentstream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/contentstream/-/contentstream-1.0.0.tgz", + "integrity": "sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.33-1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csv-stringify": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.6.0.tgz", + "integrity": "sha512-YW32lKOmIBgbxtu3g5SaiqWNwa/9ISQt2EcgOq0+RAIFufFp9is6tqNnKahqE5kuKvrnYAzs28r+s6pXJR8Vcw==", + "license": "MIT" + }, + "node_modules/cwise-compiler": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz", + "integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==", + "license": "MIT", + "dependencies": { + "uniq": "^1.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz", + "integrity": "sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw==", + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/draco3d": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz", + "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", + "license": "Apache-2.0" + }, + "node_modules/draco3dgltf": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/draco3dgltf/-/draco3dgltf-1.5.7.tgz", + "integrity": "sha512-LeqcpmoHIyYUi0z70/H3tMkGj8QhqVxq6FJGPjlzR24BNkQ6jyMheMvFKJBI0dzGZrEOUyQEmZ8axM1xRrbRiw==", + "license": "Apache-2.0" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fetch-blob/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-pixels": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/get-pixels/-/get-pixels-3.3.3.tgz", + "integrity": "sha512-5kyGBn90i9tSMUVHTqkgCHsoWoR+/lGbl4yC83Gefyr0HLIhgSWEx/2F/3YgsZ7UpYNuM6pDhDK7zebrUJ5nXg==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "0.0.3", + "jpeg-js": "^0.4.1", + "mime-types": "^2.0.1", + "ndarray": "^1.0.13", + "ndarray-pack": "^1.1.1", + "node-bitmap": "0.0.1", + "omggif": "^1.0.5", + "parse-data-uri": "^0.2.0", + "pngjs": "^3.3.3", + "request": "^2.44.0", + "through": "^2.3.4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gif-encoder": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.4.3.tgz", + "integrity": "sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==", + "dependencies": { + "readable-stream": "~1.1.9" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/gif-encoder/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gltf-validator": { + "version": "2.0.0-dev.3.10", + "resolved": "https://registry.npmjs.org/gltf-validator/-/gltf-validator-2.0.0-dev.3.10.tgz", + "integrity": "sha512-odJ4k0tRkGXiDGn78yDBg+fBbAIvBnXxh3RwAta0emSxGtyagFE8B4xELB1oYe3S5RD8Ci3uZAsZaascH2LAEQ==", + "license": "Apache-2.0" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/iota-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz", + "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==", + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "license": "BSD-3-Clause" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keyframe-resample": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keyframe-resample/-/keyframe-resample-0.1.0.tgz", + "integrity": "sha512-z1au6Q6qCWP734q44t/5SyGwNydC7MvOWo2ZETAz7ZqAgtcyb5EGO7jwgk3DEH7CaDtb0DkGec9iwVpeDWX5dA==", + "license": "BlueOak-1.0.0" + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ktx-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-1.1.0.tgz", + "integrity": "sha512-mKp3y+FaYgR7mXWAbyyzpa/r1zDWeaunH+INJO4fou3hb45XuNSwar+7llrRyvpMWafxSIi99RNFJ05MHedaJQ==", + "license": "MIT" + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-2.1.0.tgz", + "integrity": "sha512-D4CgpyCt+61f6z2jHjJS1OmZPviAWM57iJ9OKdFFWSNgS7Udj9QVWqyGs/cveVNF57XpZmhSvMdVIV5mjLA7Vg==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/laz-perf": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/laz-perf/-/laz-perf-0.0.6.tgz", + "integrity": "sha512-ZBqC+BBlofznDIY3SfjXDBVdIhYfz7bq8HAHztlw4XOnu++nHiWtCGPgzpdeAhPkByc68DaKNy3E3rY4XrdRtQ==", + "license": "Apache-2.0" + }, + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/meshoptimizer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.0.1.tgz", + "integrity": "sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mikktspace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mikktspace/-/mikktspace-1.1.1.tgz", + "integrity": "sha512-w+n5O2YLFsv/aRi3QUF0jxR+mEsl2J08ZkRItJHE08MWqiDIy8amyZN9vetBfbLhlWGMb8G3mzSPwtKHvBF7hQ==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/ndarray": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz", + "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==", + "license": "MIT", + "dependencies": { + "iota-array": "^1.0.0", + "is-buffer": "^1.0.2" + } + }, + "node_modules/ndarray-lanczos": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ndarray-lanczos/-/ndarray-lanczos-0.3.0.tgz", + "integrity": "sha512-5kBmmG3Zvyj77qxIAC4QFLKuYdDIBJwCG+DukT6jQHNa1Ft74/hPH1z5mbQXeHBt8yvGPBGVrr3wEOdJPYYZYg==", + "license": "MIT", + "dependencies": { + "@types/ndarray": "^1.0.11", + "ndarray": "^1.0.19" + } + }, + "node_modules/ndarray-ops": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz", + "integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==", + "license": "MIT", + "dependencies": { + "cwise-compiler": "^1.0.0" + } + }, + "node_modules/ndarray-pack": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz", + "integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==", + "license": "MIT", + "dependencies": { + "cwise-compiler": "^1.1.2", + "ndarray": "^1.0.13" + } + }, + "node_modules/ndarray-pixels": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ndarray-pixels/-/ndarray-pixels-5.0.1.tgz", + "integrity": "sha512-IBtrpefpqlI8SPDCGjXk4v5NV5z7r3JSuCbfuEEXaM0vrOJtNGgYUa4C3Lt5H+qWdYF4BCPVFsnXhNC7QvZwkw==", + "license": "MIT", + "dependencies": { + "@types/ndarray": "^1.0.14", + "ndarray": "^1.0.19", + "ndarray-ops": "^1.2.2", + "sharp": "^0.34.0" + } + }, + "node_modules/node-bitmap": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz", + "integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==", + "engines": { + "node": ">=v0.6.5" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-fetch/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", + "license": "MIT" + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-data-uri": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz", + "integrity": "sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==", + "license": "ISC", + "dependencies": { + "data-uri-to-buffer": "0.0.3" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pngjs-nozlib": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz", + "integrity": "sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/property-graph": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/property-graph/-/property-graph-4.1.0.tgz", + "integrity": "sha512-AvPcP7XECNWy4LGmFQ77k7un4lSKM4eS29PTvW4ck95uYeLxXPWJM7hLuBqK91FaHqCcgJvIUCuNJjjxKE7VKQ==", + "license": "MIT" + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz", + "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/save-pixels": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/save-pixels/-/save-pixels-2.3.6.tgz", + "integrity": "sha512-/ayfEWBxt0tFpf5lxSU1S0+/TBn7EiaTZD+6GL+mwizHm3BKCBysnzT6Js7BusDUVcNVLkeJJKLZcBgdpM2leQ==", + "license": "MIT", + "dependencies": { + "contentstream": "^1.0.0", + "gif-encoder": "~0.4.1", + "jpeg-js": "^0.4.3", + "ndarray": "^1.0.18", + "ndarray-ops": "^1.2.2", + "pngjs-nozlib": "^1.0.0", + "through": "^2.3.4" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stream-to-async-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-to-async-iterator/-/stream-to-async-iterator-1.0.0.tgz", + "integrity": "sha512-y7IQUStB2pOmq36KaOnLhaxIXjEYkKqzIxRW7grC3ByVKW7yDf88vXw9kS1wxdX5BrJvw/uh5N52NZ8COFy8tA==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/table/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/table/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==", + "license": "MIT" + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "license": "MIT" + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/texture-compressor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", + "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.10", + "image-size": "^0.7.4" + }, + "bin": { + "texture-compressor": "bin/texture-compressor.js" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/watlas": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/watlas/-/watlas-1.0.1.tgz", + "integrity": "sha512-TmB++BFqEQY19cPNby5iszACZd8t6uauB7YdObkqhWarhed79OMPS8wufoDSo0p85A/8QW/aqZwEJf+nD4emSw==", + "license": "MIT" + }, + "node_modules/web-ifc": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/web-ifc/-/web-ifc-0.0.70.tgz", + "integrity": "sha512-uAeq7x0w7Nv0x2WUaUJrWosju/AfHkLXUhmWO9T/0QbXEHsi3K7yl/gBsJM3PM9APl1YPa2nxKYNBc1b8rRWNg==", + "license": "MPL-2.0" + }, + "node_modules/web-streams-polyfill": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.3.0.tgz", + "integrity": "sha512-/Gnggvj9oSrEvJbDyyPtAnxBt5fGQM2iWOKQNu7ie1OxDgK40iZpyV3TKaRiEzVj1oA1UxKnEy9XPXh6PW3eVw==", + "license": "MIT", + "workspaces": [ + "test/benchmark-test", + "test/rollup-test", + "test/webpack-test" + ], + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/winston": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", + "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston-transport/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/converter/package.json b/converter/package.json new file mode 100644 index 0000000..95b4916 --- /dev/null +++ b/converter/package.json @@ -0,0 +1,12 @@ +{ + "name": "nodedc-bim-converter-runtime", + "version": "0.1.0", + "private": true, + "description": "Pinned Node.js runtime tools for NODE.DC BIM converter", + "type": "module", + "dependencies": { + "@gltf-transform/cli": "4.4.0", + "@xeokit/xeokit-convert": "1.3.2", + "draco3d": "1.5.7" + } +} diff --git a/converter/worker.py b/converter/worker.py index ab1488f..6b08fe0 100644 --- a/converter/worker.py +++ b/converter/worker.py @@ -25,7 +25,7 @@ from OCP.XCAFDoc import XCAFDoc_DocumentTool, XCAFDoc_ShapeTool CONVERTER_NAME = "NodeDcBimConverter" -CONVERTER_VERSION = "0.4.6" +CONVERTER_VERSION = "0.4.7" UPLOADS_DIR = Path(os.environ.get("NODEDC_BIM_CONVERTER_UPLOADS_DIR", "/beam/uploads")).resolve() POLL_INTERVAL_SECONDS = float(os.environ.get("NODEDC_BIM_CONVERTER_INTERVAL_SECONDS", "10")) PROCESS_ONCE = os.environ.get("NODEDC_BIM_CONVERTER_ONCE", "").lower() in {"1", "true", "yes"} @@ -37,17 +37,27 @@ REPROCESS_FAILED_ON_VERSION_CHANGE = os.environ.get( ).lower() in {"1", "true", "yes"} XKT_ENABLED = os.environ.get("NODEDC_BIM_CONVERTER_XKT_ENABLED", "1").lower() not in {"0", "false", "no"} XKT_COMMAND = os.environ.get("NODEDC_BIM_CONVERTER_XKT_COMMAND", "xeokit-convert") +GLB_DRACO_ENABLED = os.environ.get("NODEDC_BIM_CONVERTER_GLB_DRACO_ENABLED", "1").lower() not in { + "0", + "false", + "no", +} +GLTF_TRANSFORM_COMMAND = os.environ.get("NODEDC_BIM_CONVERTER_GLTF_TRANSFORM_COMMAND", "gltf-transform") NODE_OPTIONS = os.environ.get("NODE_OPTIONS", "--max-old-space-size=8192") STEP_MESH_LINEAR_DEFLECTION = float(os.environ.get("NODEDC_BIM_CONVERTER_STEP_LINEAR_DEFLECTION", "0.1")) STEP_MESH_ANGULAR_DEFLECTION = float(os.environ.get("NODEDC_BIM_CONVERTER_STEP_ANGULAR_DEFLECTION", "0.1")) PROCESSING_STALE_SECONDS = float(os.environ.get("NODEDC_BIM_CONVERTER_PROCESSING_STALE_SECONDS", "60")) CONVERSION_MAX_ATTEMPTS = int(os.environ.get("NODEDC_BIM_CONVERTER_MAX_ATTEMPTS", "3")) CONVERSION_TIMEOUT_SECONDS = float(os.environ.get("NODEDC_BIM_CONVERTER_TIMEOUT_SECONDS", "300")) +GLB_DRACO_TIMEOUT_SECONDS = float( + os.environ.get("NODEDC_BIM_CONVERTER_GLB_DRACO_TIMEOUT_SECONDS", str(CONVERSION_TIMEOUT_SECONDS)) +) XCAF_TIMEOUT_SECONDS = float(os.environ.get("NODEDC_BIM_CONVERTER_XCAF_TIMEOUT_SECONDS", str(CONVERSION_TIMEOUT_SECONDS))) CADQUERY_TIMEOUT_SECONDS = float( os.environ.get("NODEDC_BIM_CONVERTER_CADQUERY_TIMEOUT_SECONDS", str(CONVERSION_TIMEOUT_SECONDS)) ) STEP_EXTENSIONS = {".step", ".stp"} +GLB_EXTENSIONS = {".glb"} def now_iso() -> str: @@ -103,6 +113,16 @@ def conversion_attempt_count(manifest: dict[str, Any]) -> int: return 0 +def draco_optimization_attempt_count(manifest: dict[str, Any]) -> int: + optimization = manifest.get("dracoOptimization") + if not isinstance(optimization, dict): + return 0 + try: + return max(0, int(optimization.get("attempts") or 0)) + except Exception: + return 0 + + def update_asset_manifest_version(source_path: Path, version_payload: dict[str, Any]) -> None: asset_path = asset_manifest_path(source_path) if not asset_path: @@ -138,8 +158,8 @@ def update_asset_manifest_version(source_path: Path, version_payload: dict[str, **asset, "assetId": asset.get("assetId") or version_payload.get("assetId"), "projectId": asset.get("projectId") or version_payload.get("projectId"), - "currentVersion": version_payload.get("version") or asset.get("currentVersion"), - "currentVersionId": version_payload.get("versionId") or asset.get("currentVersionId"), + "currentVersion": asset.get("currentVersion") or version_payload.get("version"), + "currentVersionId": asset.get("currentVersionId") or version_payload.get("versionId"), "updatedAt": now, "versions": next_versions, }, @@ -1163,6 +1183,212 @@ def process_one(source_path: Path) -> bool: return False +def limited_process_output(value: Any, limit: int = 4000) -> str | None: + if value is None: + return None + text = str(value).strip() + if not text: + return None + return text if len(text) <= limit else f"{text[:limit]}..." + + +def glb_draco_artifact_path(source_path: Path) -> Path: + return source_path.with_name(f"{source_path.stem}.draco.glb") + + +def should_optimize_glb(source_path: Path, manifest: dict[str, Any], artifact_path: Path) -> bool: + if not GLB_DRACO_ENABLED or not source_path.exists() or not manifest: + return False + if source_path.name.endswith(".draco.glb"): + return False + source_format = str(manifest.get("sourceFormat") or "").replace(".", "").lower() + if source_format != "glb": + return False + if manifest.get("status") not in {None, "ready"}: + return False + + optimization = manifest.get("dracoOptimization") + if not isinstance(optimization, dict): + optimization = {} + + optimization_status = optimization.get("status") + optimization_version = optimization.get("converterVersion") + artifact_ready = upload_src_exists(manifest.get("artifactSrc")) + if optimization_status == "ready" and artifact_ready: + return REPROCESS_READY_ON_VERSION_CHANGE and optimization_version != CONVERTER_VERSION + + if optimization_status == "failed": + attempts = draco_optimization_attempt_count(manifest) + if attempts >= CONVERSION_MAX_ATTEMPTS: + return REPROCESS_FAILED_ON_VERSION_CHANGE and optimization_version != CONVERTER_VERSION + return True + + if optimization_status == "processing": + updated_at = optimization.get("updatedAt") or manifest.get("updatedAt") + if updated_at: + try: + updated = datetime.fromisoformat(str(updated_at).replace("Z", "+00:00")) + if (datetime.now(timezone.utc) - updated).total_seconds() < PROCESSING_STALE_SECONDS: + return False + except Exception: + pass + + return True + + +def optimize_glb_one(source_path: Path) -> bool: + manifest_file = manifest_path(source_path) + if not manifest_file.exists(): + return False + + manifest = read_json(manifest_file) + artifact_path = glb_draco_artifact_path(source_path) + if not should_optimize_glb(source_path, manifest, artifact_path): + return False + + source_src = src_from_path(source_path) + base_manifest = { + **manifest, + "createdAt": manifest.get("createdAt") or now_iso(), + "downloadSrc": manifest.get("downloadSrc") or source_src, + "sourceFormat": "glb", + "sourceSrc": manifest.get("sourceSrc") or source_src, + "status": "ready", + } + + attempts = 0 + optimization = manifest.get("dracoOptimization") + if isinstance(optimization, dict) and optimization.get("converterVersion") == CONVERTER_VERSION: + attempts = draco_optimization_attempt_count(manifest) + if isinstance(optimization, dict) and optimization.get("status") == "processing" and attempts >= CONVERSION_MAX_ATTEMPTS: + failed_manifest = { + **base_manifest, + "message": "Model is ready. Draco optimization did not finish; original GLB is used.", + "dracoOptimization": { + **optimization, + "status": "failed", + "attempts": attempts, + "converterName": CONVERTER_NAME, + "converterVersion": CONVERTER_VERSION, + "error": f"GLB optimization stopped before completion after {attempts} attempt(s).", + "updatedAt": now_iso(), + }, + "updatedAt": now_iso(), + } + write_json_atomic(manifest_file, failed_manifest) + update_asset_manifest_version(source_path, failed_manifest) + print( + f"[{CONVERTER_NAME}] GLB Draco failed {source_path}: max attempts reached ({attempts})", + file=sys.stderr, + flush=True, + ) + return False + + attempt = attempts + 1 + command = [GLTF_TRANSFORM_COMMAND, "draco", str(source_path), str(artifact_path.with_suffix(".tmp.glb"))] + processing_manifest = { + **base_manifest, + "message": "Model is ready. Optimizing GLB geometry with Draco.", + "dracoOptimization": { + "status": "processing", + "attempts": attempt, + "converterName": CONVERTER_NAME, + "converterVersion": CONVERTER_VERSION, + "command": command, + "updatedAt": now_iso(), + }, + "updatedAt": now_iso(), + } + write_json_atomic(manifest_file, processing_manifest) + update_asset_manifest_version(source_path, processing_manifest) + + tmp_path = artifact_path.with_suffix(".tmp.glb") + print(f"[{CONVERTER_NAME}] optimizing GLB with Draco {source_path}", flush=True) + + try: + if tmp_path.exists(): + tmp_path.unlink() + run_env = os.environ.copy() + run_env["NODE_OPTIONS"] = NODE_OPTIONS + result = subprocess.run( + command, + cwd=str(Path(__file__).resolve().parent), + env=run_env, + text=True, + capture_output=True, + timeout=GLB_DRACO_TIMEOUT_SECONDS, + check=False, + ) + if result.returncode != 0: + raise RuntimeError( + limited_process_output(result.stderr) + or limited_process_output(result.stdout) + or f"gltf-transform exited with code {result.returncode}" + ) + if not tmp_path.exists() or tmp_path.stat().st_size <= 0: + raise RuntimeError("gltf-transform did not produce a Draco GLB artifact") + tmp_path.replace(artifact_path) + + source_size = source_path.stat().st_size + artifact_size = artifact_path.stat().st_size + ready_manifest = { + **base_manifest, + "artifactSha256": calculate_file_sha256(artifact_path), + "artifactSrc": src_from_path(artifact_path), + "artifactType": "gltf", + "fallbackArtifactSrc": source_src, + "fallbackArtifactType": "gltf", + "message": "Model is ready. GLB geometry optimized with Draco.", + "targetFormat": "gltf", + "dracoOptimization": { + "status": "ready", + "attempts": attempt, + "converterName": CONVERTER_NAME, + "converterVersion": CONVERTER_VERSION, + "command": command, + "sourceSize": source_size, + "artifactSize": artifact_size, + "compressionRatio": round(artifact_size / source_size, 6) if source_size else None, + "stdout": limited_process_output(result.stdout), + "stderr": limited_process_output(result.stderr), + "updatedAt": now_iso(), + }, + "updatedAt": now_iso(), + } + write_json_atomic(manifest_file, ready_manifest) + update_asset_manifest_version(source_path, ready_manifest) + print( + f"[{CONVERTER_NAME}] GLB Draco ready {ready_manifest['artifactSrc']} " + f"({source_size} -> {artifact_size} bytes)", + flush=True, + ) + return True + except Exception as exc: + if tmp_path.exists(): + try: + tmp_path.unlink() + except Exception: + pass + failed_manifest = { + **base_manifest, + "message": "Model is ready. Draco optimization failed; original GLB is used.", + "dracoOptimization": { + "status": "failed", + "attempts": attempt, + "converterName": CONVERTER_NAME, + "converterVersion": CONVERTER_VERSION, + "command": command, + "error": str(exc), + "updatedAt": now_iso(), + }, + "updatedAt": now_iso(), + } + write_json_atomic(manifest_file, failed_manifest) + update_asset_manifest_version(source_path, failed_manifest) + print(f"[{CONVERTER_NAME}] GLB Draco failed {source_path}: {exc}", file=sys.stderr, flush=True) + return False + + def scan_once() -> int: if not UPLOADS_DIR.exists(): print(f"[{CONVERTER_NAME}] uploads dir does not exist: {UPLOADS_DIR}", flush=True) @@ -1172,9 +1398,13 @@ def scan_once() -> int: for source_path in sorted(UPLOADS_DIR.rglob("*")): if not source_path.is_file(): continue - if source_path.suffix.lower() not in STEP_EXTENSIONS: - continue - if process_one(source_path): + suffix = source_path.suffix.lower() + did_process = False + if suffix in STEP_EXTENSIONS: + did_process = process_one(source_path) + elif suffix in GLB_EXTENSIONS: + did_process = optimize_glb_one(source_path) + if did_process: processed += 1 return processed diff --git a/docker-compose.beam.yml b/docker-compose.beam.yml index 86a71a2..5350b46 100644 --- a/docker-compose.beam.yml +++ b/docker-compose.beam.yml @@ -35,6 +35,8 @@ services: NODEDC_BIM_CONVERTER_INTERVAL_SECONDS: "10" NODEDC_BIM_CONVERTER_MAX_ATTEMPTS: "3" NODEDC_BIM_CONVERTER_TIMEOUT_SECONDS: "300" + NODEDC_BIM_CONVERTER_GLB_DRACO_ENABLED: "1" + NODEDC_BIM_CONVERTER_GLB_DRACO_TIMEOUT_SECONDS: "900" NODEDC_BIM_CONVERTER_XCAF_TIMEOUT_SECONDS: "1200" NODEDC_BIM_CONVERTER_CADQUERY_TIMEOUT_SECONDS: "1800" volumes: diff --git a/frontend/dcViewer.js b/frontend/dcViewer.js index 4b56d2f..0018b9f 100644 --- a/frontend/dcViewer.js +++ b/frontend/dcViewer.js @@ -1,5 +1,5 @@ const SDK_VERSION = "2.6.78"; // соответствует package.json -const SDK_URL = "./lib/dc-camera-context.es.js?v=4"; +const SDK_URL = "./lib/dc-camera-context.es.js?v=5"; import { createLogo } from "./src/ui/logo.js"; import { applyToolbarVars } from "./src/ui/toolbar.js?v=3"; diff --git a/frontend/index.html b/frontend/index.html index a5291fd..3541da0 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -697,6 +697,6 @@ - + diff --git a/frontend/lib/dc-camera-context.es.js b/frontend/lib/dc-camera-context.es.js index 330da6b..7de3eff 100644 --- a/frontend/lib/dc-camera-context.es.js +++ b/frontend/lib/dc-camera-context.es.js @@ -123676,7 +123676,12 @@ function parseGLTF(plugin, src, gltf, metaModelJSON, options, sceneModel, ok, er const spinner = plugin.viewer.scene.canvas.spinner; spinner.processes++; parse$3(gltf, GLTFLoader, { - baseUri: options.basePath + baseUri: options.basePath, + modules: { + "draco_wasm_wrapper.js": "/lib/draco/draco_wasm_wrapper.js", + "draco_decoder.wasm": "/lib/draco/draco_decoder.wasm", + "draco_decoder.js": "/lib/draco/draco_decoder.js" + } }).then((gltfData) => { const processedGLTF = postProcessGLTF(gltfData); const ctx = { diff --git a/frontend/lib/draco/LICENSE.loaders-gl-draco b/frontend/lib/draco/LICENSE.loaders-gl-draco new file mode 100644 index 0000000..7208843 --- /dev/null +++ b/frontend/lib/draco/LICENSE.loaders-gl-draco @@ -0,0 +1,41 @@ +loaders.gl is licensed under the MIT license + +Copyright (c) vis.gl contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +--- + +Copyright (c) 2015 Uber Technologies, Inc. + +loaders.gl includes certain files from Cesium (https://github.com/AnalyticalGraphicsInc/cesium) +under the Apache 2 License (found in the submodule: modules/3d-tiles):) + +Copyright 2011-2018 CesiumJS Contributors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and limitations under the License. + diff --git a/frontend/lib/draco/THIRD_PARTY.txt b/frontend/lib/draco/THIRD_PARTY.txt new file mode 100644 index 0000000..8149208 --- /dev/null +++ b/frontend/lib/draco/THIRD_PARTY.txt @@ -0,0 +1,7 @@ +Local Draco decoder assets: + +- draco_wasm_wrapper.js and draco_decoder.wasm are copied from @loaders.gl/draco 4.3.4. + License: MIT. See LICENSE.loaders-gl-draco. + +- draco_decoder.js is copied from draco3d 1.5.7 as the local JS fallback decoder. + Package license: Apache-2.0. diff --git a/frontend/lib/draco/draco_decoder.js b/frontend/lib/draco/draco_decoder.js new file mode 100644 index 0000000..bb5b122 --- /dev/null +++ b/frontend/lib/draco/draco_decoder.js @@ -0,0 +1,117 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(k){var n=0;return function(){return n>>0,$jscomp.propertyToPolyfillSymbol[h]=$jscomp.IS_SYMBOL_NATIVE? +$jscomp.global.Symbol(h):$jscomp.POLYFILL_PREFIX+l+"$"+h),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[h],{configurable:!0,writable:!0,value:n})))}; +$jscomp.polyfill("Promise",function(k){function n(){this.batch_=null}function l(f){return f instanceof h?f:new h(function(q,v){q(f)})}if(k&&(!($jscomp.FORCE_POLYFILL_PROMISE||$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&"undefined"===typeof $jscomp.global.PromiseRejectionEvent)||!$jscomp.global.Promise||-1===$jscomp.global.Promise.toString().indexOf("[native code]")))return k;n.prototype.asyncExecute=function(f){if(null==this.batch_){this.batch_=[];var q=this;this.asyncExecuteFunction(function(){q.executeBatch_()})}this.batch_.push(f)}; +var p=$jscomp.global.setTimeout;n.prototype.asyncExecuteFunction=function(f){p(f,0)};n.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var f=this.batch_;this.batch_=[];for(var q=0;q=A}},"es6","es3"); +$jscomp.polyfill("Array.prototype.copyWithin",function(k){function n(l){l=Number(l);return Infinity===l||-Infinity===l?l:l|0}return k?k:function(l,p,h){var A=this.length;l=n(l);p=n(p);h=void 0===h?A:n(h);l=0>l?Math.max(A+l,0):Math.min(l,A);p=0>p?Math.max(A+p,0):Math.min(p,A);h=0>h?Math.max(A+h,0):Math.min(h,A);if(lp;)--h in this?this[--l]=this[h]:delete this[--l];return this}},"es6","es3"); +$jscomp.typedArrayCopyWithin=function(k){return k?k:Array.prototype.copyWithin};$jscomp.polyfill("Int8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5"); +$jscomp.polyfill("Uint16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float64Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5"); +var DracoDecoderModule=function(){var k="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;"undefined"!==typeof __filename&&(k=k||__filename);return function(n){function l(e){return a.locateFile?a.locateFile(e,U):U+e}function p(e,b,c){var d=b+c;for(c=b;e[c]&&!(c>=d);)++c;if(16g?d+=String.fromCharCode(g):(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else d+=String.fromCharCode(g)}return d}function h(e,b){return e?p(ea,e,b):""}function A(){var e=ja.buffer;a.HEAP8=Y=new Int8Array(e);a.HEAP16=new Int16Array(e);a.HEAP32=ca=new Int32Array(e);a.HEAPU8=ea=new Uint8Array(e);a.HEAPU16=new Uint16Array(e);a.HEAPU32=V=new Uint32Array(e);a.HEAPF32=new Float32Array(e);a.HEAPF64=new Float64Array(e)}function f(e){if(a.onAbort)a.onAbort(e); +e="Aborted("+e+")";da(e);wa=!0;e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.");ka(e);throw e;}function q(e){try{if(e==P&&fa)return new Uint8Array(fa);if(ma)return ma(e);throw"both async and sync fetching of the wasm failed";}catch(b){f(b)}}function v(){if(!fa&&(xa||ha)){if("function"==typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+P+"'";return e.arrayBuffer()}).catch(function(){return q(P)}); +if(na)return new Promise(function(e,b){na(P,function(c){e(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return q(P)})}function z(e){for(;0>2]=b};this.get_type=function(){return V[this.ptr+4>>2]};this.set_destructor=function(b){V[this.ptr+8>>2]=b};this.get_destructor=function(){return V[this.ptr+8>>2]};this.set_refcount=function(b){ca[this.ptr>>2]=b};this.set_caught=function(b){Y[this.ptr+ +12>>0]=b?1:0};this.get_caught=function(){return 0!=Y[this.ptr+12>>0]};this.set_rethrown=function(b){Y[this.ptr+13>>0]=b?1:0};this.get_rethrown=function(){return 0!=Y[this.ptr+13>>0]};this.init=function(b,c){this.set_adjusted_ptr(0);this.set_type(b);this.set_destructor(c);this.set_refcount(0);this.set_caught(!1);this.set_rethrown(!1)};this.add_ref=function(){ca[this.ptr>>2]+=1};this.release_ref=function(){var b=ca[this.ptr>>2];ca[this.ptr>>2]=b-1;return 1===b};this.set_adjusted_ptr=function(b){V[this.ptr+ +16>>2]=b};this.get_adjusted_ptr=function(){return V[this.ptr+16>>2]};this.get_exception_ptr=function(){if(ya(this.get_type()))return V[this.excPtr>>2];var b=this.get_adjusted_ptr();return 0!==b?b:this.excPtr}}function ba(){function e(){if(!la&&(la=!0,a.calledRun=!0,!wa)){za=!0;z(oa);Aa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ba.unshift(a.postRun.shift());z(Ba)}}if(!(0=d?b++:2047>=d?b+=2:55296<=d&&57343>= +d?(b+=4,++c):b+=3}b=Array(b+1);c=0;d=b.length;if(0=u){var X=e.charCodeAt(++g);u=65536+((u&1023)<<10)|X&1023}if(127>=u){if(c>=d)break;b[c++]=u}else{if(2047>=u){if(c+1>=d)break;b[c++]=192|u>>6}else{if(65535>=u){if(c+2>=d)break;b[c++]=224|u>>12}else{if(c+3>=d)break;b[c++]=240|u>>18;b[c++]=128|u>>12&63}b[c++]=128|u>>6&63}b[c++]=128|u&63}}b[c]=0}e=r.alloc(b,Y);r.copy(b,Y,e);return e}return e}function pa(e){if("object"===typeof e){var b= +r.alloc(e,Y);r.copy(e,Y,b);return b}return e}function Z(){throw"cannot construct a VoidPtr, no constructor in IDL";}function S(){this.ptr=Da();x(S)[this.ptr]=this}function Q(){this.ptr=Ea();x(Q)[this.ptr]=this}function W(){this.ptr=Fa();x(W)[this.ptr]=this}function w(){this.ptr=Ga();x(w)[this.ptr]=this}function C(){this.ptr=Ha();x(C)[this.ptr]=this}function F(){this.ptr=Ia();x(F)[this.ptr]=this}function G(){this.ptr=Ja();x(G)[this.ptr]=this}function E(){this.ptr=Ka();x(E)[this.ptr]=this}function T(){this.ptr= +La();x(T)[this.ptr]=this}function B(){throw"cannot construct a Status, no constructor in IDL";}function H(){this.ptr=Ma();x(H)[this.ptr]=this}function I(){this.ptr=Na();x(I)[this.ptr]=this}function J(){this.ptr=Oa();x(J)[this.ptr]=this}function K(){this.ptr=Pa();x(K)[this.ptr]=this}function L(){this.ptr=Qa();x(L)[this.ptr]=this}function M(){this.ptr=Ra();x(M)[this.ptr]=this}function N(){this.ptr=Sa();x(N)[this.ptr]=this}function y(){this.ptr=Ta();x(y)[this.ptr]=this}function m(){this.ptr=Ua();x(m)[this.ptr]= +this}n=void 0===n?{}:n;var a="undefined"!=typeof n?n:{},Aa,ka;a.ready=new Promise(function(e,b){Aa=e;ka=b});var Va=!1,Wa=!1;a.onRuntimeInitialized=function(){Va=!0;if(Wa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Wa=!0;if(Va&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(e){if("string"!==typeof e)return!1;e=e.split(".");return 2>e.length||3=e[1]?!0:0!=e[0]||10>>=0;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,e+100663296);var g=Math;d=Math.max(e,d);g=g.min.call(g,2147483648,d+(65536-d%65536)%65536);a:{d=ja.buffer;try{ja.grow(g-d.byteLength+65535>>>16);A();var u=1;break a}catch(X){}u=void 0}if(u)return!0}return!1},f:function(e){return 52},d:function(e,b,c,d,g){return 70},c:function(e,b,c,d){for(var g=0,u=0;u>2],ab=V[b+4>>2];b+=8;for(var sa=0;sa>2]=g;return 0}};(function(){function e(g,u){a.asm=g.exports;ja=a.asm.h;A();oa.unshift(a.asm.i);aa--;a.monitorRunDependencies&&a.monitorRunDependencies(aa);0==aa&&(null!==ra&&(clearInterval(ra),ra=null),ia&&(g=ia,ia=null,g()))}function b(g){e(g.instance)}function c(g){return v().then(function(u){return WebAssembly.instantiate(u,d)}).then(function(u){return u}).then(g,function(u){da("failed to asynchronously prepare wasm: "+u);f(u)})}var d={a:xd};aa++;a.monitorRunDependencies&&a.monitorRunDependencies(aa); +if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(g){da("Module.instantiateWasm callback failed with error: "+g),ka(g)}(function(){return fa||"function"!=typeof WebAssembly.instantiateStreaming||P.startsWith("data:application/octet-stream;base64,")||P.startsWith("file://")||Ya||"function"!=typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(u){da("wasm streaming compile failed: "+u);da("falling back to ArrayBuffer instantiation"); +return c(b)})})})().catch(ka);return{}})();var bb=a._emscripten_bind_VoidPtr___destroy___0=function(){return(bb=a._emscripten_bind_VoidPtr___destroy___0=a.asm.k).apply(null,arguments)},Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return(Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=a.asm.l).apply(null,arguments)},cb=a._emscripten_bind_DecoderBuffer_Init_2=function(){return(cb=a._emscripten_bind_DecoderBuffer_Init_2=a.asm.m).apply(null,arguments)},db=a._emscripten_bind_DecoderBuffer___destroy___0= +function(){return(db=a._emscripten_bind_DecoderBuffer___destroy___0=a.asm.n).apply(null,arguments)},Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return(Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=a.asm.o).apply(null,arguments)},eb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return(eb=a._emscripten_bind_AttributeTransformData_transform_type_0=a.asm.p).apply(null,arguments)},fb=a._emscripten_bind_AttributeTransformData___destroy___0= +function(){return(fb=a._emscripten_bind_AttributeTransformData___destroy___0=a.asm.q).apply(null,arguments)},Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return(Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=a.asm.r).apply(null,arguments)},gb=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return(gb=a._emscripten_bind_GeometryAttribute___destroy___0=a.asm.s).apply(null,arguments)},Ga=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return(Ga= +a._emscripten_bind_PointAttribute_PointAttribute_0=a.asm.t).apply(null,arguments)},hb=a._emscripten_bind_PointAttribute_size_0=function(){return(hb=a._emscripten_bind_PointAttribute_size_0=a.asm.u).apply(null,arguments)},ib=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return(ib=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=a.asm.v).apply(null,arguments)},jb=a._emscripten_bind_PointAttribute_attribute_type_0=function(){return(jb=a._emscripten_bind_PointAttribute_attribute_type_0= +a.asm.w).apply(null,arguments)},kb=a._emscripten_bind_PointAttribute_data_type_0=function(){return(kb=a._emscripten_bind_PointAttribute_data_type_0=a.asm.x).apply(null,arguments)},lb=a._emscripten_bind_PointAttribute_num_components_0=function(){return(lb=a._emscripten_bind_PointAttribute_num_components_0=a.asm.y).apply(null,arguments)},mb=a._emscripten_bind_PointAttribute_normalized_0=function(){return(mb=a._emscripten_bind_PointAttribute_normalized_0=a.asm.z).apply(null,arguments)},nb=a._emscripten_bind_PointAttribute_byte_stride_0= +function(){return(nb=a._emscripten_bind_PointAttribute_byte_stride_0=a.asm.A).apply(null,arguments)},ob=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return(ob=a._emscripten_bind_PointAttribute_byte_offset_0=a.asm.B).apply(null,arguments)},pb=a._emscripten_bind_PointAttribute_unique_id_0=function(){return(pb=a._emscripten_bind_PointAttribute_unique_id_0=a.asm.C).apply(null,arguments)},qb=a._emscripten_bind_PointAttribute___destroy___0=function(){return(qb=a._emscripten_bind_PointAttribute___destroy___0= +a.asm.D).apply(null,arguments)},Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return(Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=a.asm.E).apply(null,arguments)},rb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return(rb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=a.asm.F).apply(null,arguments)},sb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0= +function(){return(sb=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=a.asm.G).apply(null,arguments)},tb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return(tb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=a.asm.H).apply(null,arguments)},ub=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return(ub=a._emscripten_bind_AttributeQuantizationTransform_range_0=a.asm.I).apply(null,arguments)},vb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0= +function(){return(vb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=a.asm.J).apply(null,arguments)},Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return(Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=a.asm.K).apply(null,arguments)},wb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=function(){return(wb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=a.asm.L).apply(null, +arguments)},xb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return(xb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=a.asm.M).apply(null,arguments)},yb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return(yb=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=a.asm.N).apply(null,arguments)},Ja=a._emscripten_bind_PointCloud_PointCloud_0=function(){return(Ja=a._emscripten_bind_PointCloud_PointCloud_0=a.asm.O).apply(null, +arguments)},zb=a._emscripten_bind_PointCloud_num_attributes_0=function(){return(zb=a._emscripten_bind_PointCloud_num_attributes_0=a.asm.P).apply(null,arguments)},Ab=a._emscripten_bind_PointCloud_num_points_0=function(){return(Ab=a._emscripten_bind_PointCloud_num_points_0=a.asm.Q).apply(null,arguments)},Bb=a._emscripten_bind_PointCloud___destroy___0=function(){return(Bb=a._emscripten_bind_PointCloud___destroy___0=a.asm.R).apply(null,arguments)},Ka=a._emscripten_bind_Mesh_Mesh_0=function(){return(Ka= +a._emscripten_bind_Mesh_Mesh_0=a.asm.S).apply(null,arguments)},Cb=a._emscripten_bind_Mesh_num_faces_0=function(){return(Cb=a._emscripten_bind_Mesh_num_faces_0=a.asm.T).apply(null,arguments)},Db=a._emscripten_bind_Mesh_num_attributes_0=function(){return(Db=a._emscripten_bind_Mesh_num_attributes_0=a.asm.U).apply(null,arguments)},Eb=a._emscripten_bind_Mesh_num_points_0=function(){return(Eb=a._emscripten_bind_Mesh_num_points_0=a.asm.V).apply(null,arguments)},Fb=a._emscripten_bind_Mesh___destroy___0=function(){return(Fb= +a._emscripten_bind_Mesh___destroy___0=a.asm.W).apply(null,arguments)},La=a._emscripten_bind_Metadata_Metadata_0=function(){return(La=a._emscripten_bind_Metadata_Metadata_0=a.asm.X).apply(null,arguments)},Gb=a._emscripten_bind_Metadata___destroy___0=function(){return(Gb=a._emscripten_bind_Metadata___destroy___0=a.asm.Y).apply(null,arguments)},Hb=a._emscripten_bind_Status_code_0=function(){return(Hb=a._emscripten_bind_Status_code_0=a.asm.Z).apply(null,arguments)},Ib=a._emscripten_bind_Status_ok_0=function(){return(Ib= +a._emscripten_bind_Status_ok_0=a.asm._).apply(null,arguments)},Jb=a._emscripten_bind_Status_error_msg_0=function(){return(Jb=a._emscripten_bind_Status_error_msg_0=a.asm.$).apply(null,arguments)},Kb=a._emscripten_bind_Status___destroy___0=function(){return(Kb=a._emscripten_bind_Status___destroy___0=a.asm.aa).apply(null,arguments)},Ma=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return(Ma=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=a.asm.ba).apply(null,arguments)}, +Lb=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return(Lb=a._emscripten_bind_DracoFloat32Array_GetValue_1=a.asm.ca).apply(null,arguments)},Mb=a._emscripten_bind_DracoFloat32Array_size_0=function(){return(Mb=a._emscripten_bind_DracoFloat32Array_size_0=a.asm.da).apply(null,arguments)},Nb=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return(Nb=a._emscripten_bind_DracoFloat32Array___destroy___0=a.asm.ea).apply(null,arguments)},Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0= +function(){return(Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=a.asm.fa).apply(null,arguments)},Ob=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return(Ob=a._emscripten_bind_DracoInt8Array_GetValue_1=a.asm.ga).apply(null,arguments)},Pb=a._emscripten_bind_DracoInt8Array_size_0=function(){return(Pb=a._emscripten_bind_DracoInt8Array_size_0=a.asm.ha).apply(null,arguments)},Qb=a._emscripten_bind_DracoInt8Array___destroy___0=function(){return(Qb=a._emscripten_bind_DracoInt8Array___destroy___0= +a.asm.ia).apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return(Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=a.asm.ja).apply(null,arguments)},Rb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return(Rb=a._emscripten_bind_DracoUInt8Array_GetValue_1=a.asm.ka).apply(null,arguments)},Sb=a._emscripten_bind_DracoUInt8Array_size_0=function(){return(Sb=a._emscripten_bind_DracoUInt8Array_size_0=a.asm.la).apply(null,arguments)},Tb=a._emscripten_bind_DracoUInt8Array___destroy___0= +function(){return(Tb=a._emscripten_bind_DracoUInt8Array___destroy___0=a.asm.ma).apply(null,arguments)},Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return(Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=a.asm.na).apply(null,arguments)},Ub=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return(Ub=a._emscripten_bind_DracoInt16Array_GetValue_1=a.asm.oa).apply(null,arguments)},Vb=a._emscripten_bind_DracoInt16Array_size_0=function(){return(Vb=a._emscripten_bind_DracoInt16Array_size_0= +a.asm.pa).apply(null,arguments)},Wb=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return(Wb=a._emscripten_bind_DracoInt16Array___destroy___0=a.asm.qa).apply(null,arguments)},Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return(Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=a.asm.ra).apply(null,arguments)},Xb=a._emscripten_bind_DracoUInt16Array_GetValue_1=function(){return(Xb=a._emscripten_bind_DracoUInt16Array_GetValue_1=a.asm.sa).apply(null,arguments)}, +Yb=a._emscripten_bind_DracoUInt16Array_size_0=function(){return(Yb=a._emscripten_bind_DracoUInt16Array_size_0=a.asm.ta).apply(null,arguments)},Zb=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return(Zb=a._emscripten_bind_DracoUInt16Array___destroy___0=a.asm.ua).apply(null,arguments)},Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return(Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=a.asm.va).apply(null,arguments)},$b=a._emscripten_bind_DracoInt32Array_GetValue_1= +function(){return($b=a._emscripten_bind_DracoInt32Array_GetValue_1=a.asm.wa).apply(null,arguments)},ac=a._emscripten_bind_DracoInt32Array_size_0=function(){return(ac=a._emscripten_bind_DracoInt32Array_size_0=a.asm.xa).apply(null,arguments)},bc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return(bc=a._emscripten_bind_DracoInt32Array___destroy___0=a.asm.ya).apply(null,arguments)},Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=function(){return(Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0= +a.asm.za).apply(null,arguments)},cc=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return(cc=a._emscripten_bind_DracoUInt32Array_GetValue_1=a.asm.Aa).apply(null,arguments)},dc=a._emscripten_bind_DracoUInt32Array_size_0=function(){return(dc=a._emscripten_bind_DracoUInt32Array_size_0=a.asm.Ba).apply(null,arguments)},ec=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return(ec=a._emscripten_bind_DracoUInt32Array___destroy___0=a.asm.Ca).apply(null,arguments)},Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0= +function(){return(Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=a.asm.Da).apply(null,arguments)},fc=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return(fc=a._emscripten_bind_MetadataQuerier_HasEntry_2=a.asm.Ea).apply(null,arguments)},gc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return(gc=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=a.asm.Fa).apply(null,arguments)},hc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=function(){return(hc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3= +a.asm.Ga).apply(null,arguments)},ic=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return(ic=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=a.asm.Ha).apply(null,arguments)},jc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return(jc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=a.asm.Ia).apply(null,arguments)},kc=a._emscripten_bind_MetadataQuerier_NumEntries_1=function(){return(kc=a._emscripten_bind_MetadataQuerier_NumEntries_1=a.asm.Ja).apply(null,arguments)}, +lc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return(lc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=a.asm.Ka).apply(null,arguments)},mc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return(mc=a._emscripten_bind_MetadataQuerier___destroy___0=a.asm.La).apply(null,arguments)},Ua=a._emscripten_bind_Decoder_Decoder_0=function(){return(Ua=a._emscripten_bind_Decoder_Decoder_0=a.asm.Ma).apply(null,arguments)},nc=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=function(){return(nc= +a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=a.asm.Na).apply(null,arguments)},oc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=function(){return(oc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=a.asm.Oa).apply(null,arguments)},pc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return(pc=a._emscripten_bind_Decoder_GetAttributeId_2=a.asm.Pa).apply(null,arguments)},qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=function(){return(qc=a._emscripten_bind_Decoder_GetAttributeIdByName_2= +a.asm.Qa).apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return(rc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=a.asm.Ra).apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return(sc=a._emscripten_bind_Decoder_GetAttribute_2=a.asm.Sa).apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return(tc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=a.asm.Ta).apply(null,arguments)}, +uc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return(uc=a._emscripten_bind_Decoder_GetMetadata_1=a.asm.Ua).apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return(vc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=a.asm.Va).apply(null,arguments)},wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return(wc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=a.asm.Wa).apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2= +function(){return(xc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=a.asm.Xa).apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return(yc=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=a.asm.Ya).apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=function(){return(zc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=a.asm.Za).apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return(Ac= +a._emscripten_bind_Decoder_GetAttributeFloat_3=a.asm._a).apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return(Bc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=a.asm.$a).apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return(Cc=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=a.asm.ab).apply(null,arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return(Dc= +a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=a.asm.bb).apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return(Ec=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=a.asm.cb).apply(null,arguments)},Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return(Fc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=a.asm.db).apply(null,arguments)},Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3= +function(){return(Gc=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=a.asm.eb).apply(null,arguments)},Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return(Hc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=a.asm.fb).apply(null,arguments)},Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return(Ic=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=a.asm.gb).apply(null,arguments)},Jc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5= +function(){return(Jc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=a.asm.hb).apply(null,arguments)},Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return(Kc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=a.asm.ib).apply(null,arguments)},Lc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=function(){return(Lc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=a.asm.jb).apply(null,arguments)},Mc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2= +function(){return(Mc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=a.asm.kb).apply(null,arguments)},Nc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return(Nc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=a.asm.lb).apply(null,arguments)},Oc=a._emscripten_bind_Decoder___destroy___0=function(){return(Oc=a._emscripten_bind_Decoder___destroy___0=a.asm.mb).apply(null,arguments)},Pc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return(Pc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM= +a.asm.nb).apply(null,arguments)},Qc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return(Qc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=a.asm.ob).apply(null,arguments)},Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return(Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=a.asm.pb).apply(null,arguments)},Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM= +function(){return(Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=a.asm.qb).apply(null,arguments)},Tc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return(Tc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=a.asm.rb).apply(null,arguments)},Uc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return(Uc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=a.asm.sb).apply(null,arguments)},Vc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL= +function(){return(Vc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=a.asm.tb).apply(null,arguments)},Wc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return(Wc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=a.asm.ub).apply(null,arguments)},Xc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return(Xc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=a.asm.vb).apply(null,arguments)},Yc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC= +function(){return(Yc=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=a.asm.wb).apply(null,arguments)},Zc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return(Zc=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=a.asm.xb).apply(null,arguments)},$c=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return($c=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=a.asm.yb).apply(null,arguments)},ad=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH= +function(){return(ad=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=a.asm.zb).apply(null,arguments)},bd=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return(bd=a._emscripten_enum_draco_DataType_DT_INVALID=a.asm.Ab).apply(null,arguments)},cd=a._emscripten_enum_draco_DataType_DT_INT8=function(){return(cd=a._emscripten_enum_draco_DataType_DT_INT8=a.asm.Bb).apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_UINT8=function(){return(dd=a._emscripten_enum_draco_DataType_DT_UINT8= +a.asm.Cb).apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_INT16=function(){return(ed=a._emscripten_enum_draco_DataType_DT_INT16=a.asm.Db).apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return(fd=a._emscripten_enum_draco_DataType_DT_UINT16=a.asm.Eb).apply(null,arguments)},gd=a._emscripten_enum_draco_DataType_DT_INT32=function(){return(gd=a._emscripten_enum_draco_DataType_DT_INT32=a.asm.Fb).apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_UINT32= +function(){return(hd=a._emscripten_enum_draco_DataType_DT_UINT32=a.asm.Gb).apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_INT64=function(){return(id=a._emscripten_enum_draco_DataType_DT_INT64=a.asm.Hb).apply(null,arguments)},jd=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return(jd=a._emscripten_enum_draco_DataType_DT_UINT64=a.asm.Ib).apply(null,arguments)},kd=a._emscripten_enum_draco_DataType_DT_FLOAT32=function(){return(kd=a._emscripten_enum_draco_DataType_DT_FLOAT32=a.asm.Jb).apply(null, +arguments)},ld=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return(ld=a._emscripten_enum_draco_DataType_DT_FLOAT64=a.asm.Kb).apply(null,arguments)},md=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return(md=a._emscripten_enum_draco_DataType_DT_BOOL=a.asm.Lb).apply(null,arguments)},nd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return(nd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=a.asm.Mb).apply(null,arguments)},od=a._emscripten_enum_draco_StatusCode_OK=function(){return(od= +a._emscripten_enum_draco_StatusCode_OK=a.asm.Nb).apply(null,arguments)},pd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return(pd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=a.asm.Ob).apply(null,arguments)},qd=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return(qd=a._emscripten_enum_draco_StatusCode_IO_ERROR=a.asm.Pb).apply(null,arguments)},rd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return(rd=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER= +a.asm.Qb).apply(null,arguments)},sd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return(sd=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=a.asm.Rb).apply(null,arguments)},td=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return(td=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=a.asm.Sb).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.Tb).apply(null,arguments)};a._free=function(){return(a._free=a.asm.Ub).apply(null,arguments)}; +var ya=function(){return(ya=a.asm.Vb).apply(null,arguments)};a.___start_em_js=15856;a.___stop_em_js=15954;var la;ia=function b(){la||ba();la||(ia=b)};if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0=r.size?(0>>=0;switch(c.BYTES_PER_ELEMENT){case 2:d>>>=1;break;case 4:d>>>=2;break;case 8:d>>>=3}for(var g=0;gb.byteLength)return a.INVALID_GEOMETRY_TYPE;switch(b[7]){case 0:return a.POINT_CLOUD;case 1:return a.TRIANGULAR_MESH;default:return a.INVALID_GEOMETRY_TYPE}};return n.ready}}(); +"object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule); diff --git a/frontend/lib/draco/draco_decoder.wasm b/frontend/lib/draco/draco_decoder.wasm new file mode 100644 index 0000000000000000000000000000000000000000..ef332a6a7a9c5e0c86c198ef5de530b871d2bc6c GIT binary patch literal 283091 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 literal 0 HcmV?d00001 diff --git a/frontend/lib/draco/draco_wasm_wrapper.js b/frontend/lib/draco/draco_wasm_wrapper.js new file mode 100644 index 0000000..2676a48 --- /dev/null +++ b/frontend/lib/draco/draco_wasm_wrapper.js @@ -0,0 +1,117 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(k){var n=0;return function(){return n>>0,$jscomp.propertyToPolyfillSymbol[h]=$jscomp.IS_SYMBOL_NATIVE? +$jscomp.global.Symbol(h):$jscomp.POLYFILL_PREFIX+l+"$"+h),$jscomp.defineProperty(p,$jscomp.propertyToPolyfillSymbol[h],{configurable:!0,writable:!0,value:n})))}; +$jscomp.polyfill("Promise",function(k){function n(){this.batch_=null}function l(f){return f instanceof h?f:new h(function(q,v){q(f)})}if(k&&(!($jscomp.FORCE_POLYFILL_PROMISE||$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION&&"undefined"===typeof $jscomp.global.PromiseRejectionEvent)||!$jscomp.global.Promise||-1===$jscomp.global.Promise.toString().indexOf("[native code]")))return k;n.prototype.asyncExecute=function(f){if(null==this.batch_){this.batch_=[];var q=this;this.asyncExecuteFunction(function(){q.executeBatch_()})}this.batch_.push(f)}; +var p=$jscomp.global.setTimeout;n.prototype.asyncExecuteFunction=function(f){p(f,0)};n.prototype.executeBatch_=function(){for(;this.batch_&&this.batch_.length;){var f=this.batch_;this.batch_=[];for(var q=0;q=A}},"es6","es3"); +$jscomp.polyfill("Array.prototype.copyWithin",function(k){function n(l){l=Number(l);return Infinity===l||-Infinity===l?l:l|0}return k?k:function(l,p,h){var A=this.length;l=n(l);p=n(p);h=void 0===h?A:n(h);l=0>l?Math.max(A+l,0):Math.min(l,A);p=0>p?Math.max(A+p,0):Math.min(p,A);h=0>h?Math.max(A+h,0):Math.min(h,A);if(lp;)--h in this?this[--l]=this[h]:delete this[--l];return this}},"es6","es3"); +$jscomp.typedArrayCopyWithin=function(k){return k?k:Array.prototype.copyWithin};$jscomp.polyfill("Int8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5"); +$jscomp.polyfill("Uint16Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Int32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Uint32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float32Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5");$jscomp.polyfill("Float64Array.prototype.copyWithin",$jscomp.typedArrayCopyWithin,"es6","es5"); +var DracoDecoderModule=function(){var k="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;"undefined"!==typeof __filename&&(k=k||__filename);return function(n){function l(e){return a.locateFile?a.locateFile(e,U):U+e}function p(e,b,c){var d=b+c;for(c=b;e[c]&&!(c>=d);)++c;if(16g?d+=String.fromCharCode(g):(g-=65536,d+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else d+=String.fromCharCode(g)}return d}function h(e,b){return e?p(ea,e,b):""}function A(e){va=e;a.HEAP8=Y=new Int8Array(e);a.HEAP16=new Int16Array(e);a.HEAP32=ca=new Int32Array(e);a.HEAPU8=ea=new Uint8Array(e);a.HEAPU16=new Uint16Array(e);a.HEAPU32=V=new Uint32Array(e);a.HEAPF32=new Float32Array(e);a.HEAPF64=new Float64Array(e)}function f(e){if(a.onAbort)a.onAbort(e); +e="Aborted("+e+")";da(e);wa=!0;e=new WebAssembly.RuntimeError(e+". Build with -sASSERTIONS for more info.");ja(e);throw e;}function q(e){try{if(e==P&&fa)return new Uint8Array(fa);if(ma)return ma(e);throw"both async and sync fetching of the wasm failed";}catch(b){f(b)}}function v(){if(!fa&&(xa||ha)){if("function"==typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+P+"'";return e.arrayBuffer()}).catch(function(){return q(P)}); +if(na)return new Promise(function(e,b){na(P,function(c){e(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return q(P)})}function z(e){for(;0>2]=b};this.get_type=function(){return V[this.ptr+4>>2]};this.set_destructor=function(b){V[this.ptr+8>>2]=b};this.get_destructor=function(){return V[this.ptr+8>>2]};this.set_refcount=function(b){ca[this.ptr>>2]=b};this.set_caught=function(b){Y[this.ptr+ +12>>0]=b?1:0};this.get_caught=function(){return 0!=Y[this.ptr+12>>0]};this.set_rethrown=function(b){Y[this.ptr+13>>0]=b?1:0};this.get_rethrown=function(){return 0!=Y[this.ptr+13>>0]};this.init=function(b,c){this.set_adjusted_ptr(0);this.set_type(b);this.set_destructor(c);this.set_refcount(0);this.set_caught(!1);this.set_rethrown(!1)};this.add_ref=function(){ca[this.ptr>>2]+=1};this.release_ref=function(){var b=ca[this.ptr>>2];ca[this.ptr>>2]=b-1;return 1===b};this.set_adjusted_ptr=function(b){V[this.ptr+ +16>>2]=b};this.get_adjusted_ptr=function(){return V[this.ptr+16>>2]};this.get_exception_ptr=function(){if(ya(this.get_type()))return V[this.excPtr>>2];var b=this.get_adjusted_ptr();return 0!==b?b:this.excPtr}}function ba(e){function b(){if(!ka&&(ka=!0,a.calledRun=!0,!wa)){za=!0;z(oa);Aa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)Ba.unshift(a.postRun.shift());z(Ba)}}if(!(0=d?b++:2047>=d?b+=2:55296<=d&&57343>= +d?(b+=4,++c):b+=3}b=Array(b+1);c=0;d=b.length;if(0=u){var X=e.charCodeAt(++g);u=65536+((u&1023)<<10)|X&1023}if(127>=u){if(c>=d)break;b[c++]=u}else{if(2047>=u){if(c+1>=d)break;b[c++]=192|u>>6}else{if(65535>=u){if(c+2>=d)break;b[c++]=224|u>>12}else{if(c+3>=d)break;b[c++]=240|u>>18;b[c++]=128|u>>12&63}b[c++]=128|u>>6&63}b[c++]=128|u&63}}b[c]=0}e=r.alloc(b,Y);r.copy(b,Y,e);return e}return e}function pa(e){if("object"===typeof e){var b= +r.alloc(e,Y);r.copy(e,Y,b);return b}return e}function Z(){throw"cannot construct a VoidPtr, no constructor in IDL";}function S(){this.ptr=Da();x(S)[this.ptr]=this}function Q(){this.ptr=Ea();x(Q)[this.ptr]=this}function W(){this.ptr=Fa();x(W)[this.ptr]=this}function w(){this.ptr=Ga();x(w)[this.ptr]=this}function C(){this.ptr=Ha();x(C)[this.ptr]=this}function F(){this.ptr=Ia();x(F)[this.ptr]=this}function G(){this.ptr=Ja();x(G)[this.ptr]=this}function E(){this.ptr=Ka();x(E)[this.ptr]=this}function T(){this.ptr= +La();x(T)[this.ptr]=this}function B(){throw"cannot construct a Status, no constructor in IDL";}function H(){this.ptr=Ma();x(H)[this.ptr]=this}function I(){this.ptr=Na();x(I)[this.ptr]=this}function J(){this.ptr=Oa();x(J)[this.ptr]=this}function K(){this.ptr=Pa();x(K)[this.ptr]=this}function L(){this.ptr=Qa();x(L)[this.ptr]=this}function M(){this.ptr=Ra();x(M)[this.ptr]=this}function N(){this.ptr=Sa();x(N)[this.ptr]=this}function y(){this.ptr=Ta();x(y)[this.ptr]=this}function m(){this.ptr=Ua();x(m)[this.ptr]= +this}n=n||{};var a="undefined"!=typeof n?n:{},Aa,ja;a.ready=new Promise(function(e,b){Aa=e;ja=b});var Va=!1,Wa=!1;a.onRuntimeInitialized=function(){Va=!0;if(Wa&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.onModuleParsed=function(){Wa=!0;if(Va&&"function"===typeof a.onModuleLoaded)a.onModuleLoaded(a)};a.isVersionSupported=function(e){if("string"!==typeof e)return!1;e=e.split(".");return 2>e.length||3=e[1]?!0:0!=e[0]||10>>=0;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,e+100663296);var g=Math;d=Math.max(e,d);g=g.min.call(g,2147483648,d+(65536-d%65536)%65536);a:{try{la.grow(g-va.byteLength+65535>>>16);A(la.buffer);var u=1;break a}catch(X){}u=void 0}if(u)return!0}return!1},g:function(e){return 52},e:function(e,b,c,d,g){return 70},d:function(e,b,c,d){for(var g=0,u=0;u>2],cb=V[b+4>>2];b+=8;for(var ra=0;ra>2]=g;return 0}};(function(){function e(g,u){a.asm=g.exports;la=a.asm.i;A(la.buffer);oa.unshift(a.asm.j);aa--;a.monitorRunDependencies&&a.monitorRunDependencies(aa);0==aa&&(null!==qa&&(clearInterval(qa),qa=null),ia&&(g=ia,ia=null,g()))}function b(g){e(g.instance)}function c(g){return v().then(function(u){return WebAssembly.instantiate(u,d)}).then(function(u){return u}).then(g,function(u){da("failed to asynchronously prepare wasm: "+u);f(u)})}var d={a:zd};aa++;a.monitorRunDependencies&&a.monitorRunDependencies(aa); +if(a.instantiateWasm)try{return a.instantiateWasm(d,e)}catch(g){da("Module.instantiateWasm callback failed with error: "+g),ja(g)}(function(){return fa||"function"!=typeof WebAssembly.instantiateStreaming||P.startsWith("data:application/octet-stream;base64,")||P.startsWith("file://")||Ya||"function"!=typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(g){return WebAssembly.instantiateStreaming(g,d).then(b,function(u){da("wasm streaming compile failed: "+u);da("falling back to ArrayBuffer instantiation"); +return c(b)})})})().catch(ja);return{}})();a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.j).apply(null,arguments)};var db=a._emscripten_bind_VoidPtr___destroy___0=function(){return(db=a._emscripten_bind_VoidPtr___destroy___0=a.asm.l).apply(null,arguments)},Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=function(){return(Da=a._emscripten_bind_DecoderBuffer_DecoderBuffer_0=a.asm.m).apply(null,arguments)},eb=a._emscripten_bind_DecoderBuffer_Init_2=function(){return(eb=a._emscripten_bind_DecoderBuffer_Init_2= +a.asm.n).apply(null,arguments)},fb=a._emscripten_bind_DecoderBuffer___destroy___0=function(){return(fb=a._emscripten_bind_DecoderBuffer___destroy___0=a.asm.o).apply(null,arguments)},Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=function(){return(Ea=a._emscripten_bind_AttributeTransformData_AttributeTransformData_0=a.asm.p).apply(null,arguments)},gb=a._emscripten_bind_AttributeTransformData_transform_type_0=function(){return(gb=a._emscripten_bind_AttributeTransformData_transform_type_0= +a.asm.q).apply(null,arguments)},hb=a._emscripten_bind_AttributeTransformData___destroy___0=function(){return(hb=a._emscripten_bind_AttributeTransformData___destroy___0=a.asm.r).apply(null,arguments)},Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=function(){return(Fa=a._emscripten_bind_GeometryAttribute_GeometryAttribute_0=a.asm.s).apply(null,arguments)},ib=a._emscripten_bind_GeometryAttribute___destroy___0=function(){return(ib=a._emscripten_bind_GeometryAttribute___destroy___0=a.asm.t).apply(null, +arguments)},Ga=a._emscripten_bind_PointAttribute_PointAttribute_0=function(){return(Ga=a._emscripten_bind_PointAttribute_PointAttribute_0=a.asm.u).apply(null,arguments)},jb=a._emscripten_bind_PointAttribute_size_0=function(){return(jb=a._emscripten_bind_PointAttribute_size_0=a.asm.v).apply(null,arguments)},kb=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=function(){return(kb=a._emscripten_bind_PointAttribute_GetAttributeTransformData_0=a.asm.w).apply(null,arguments)},lb=a._emscripten_bind_PointAttribute_attribute_type_0= +function(){return(lb=a._emscripten_bind_PointAttribute_attribute_type_0=a.asm.x).apply(null,arguments)},mb=a._emscripten_bind_PointAttribute_data_type_0=function(){return(mb=a._emscripten_bind_PointAttribute_data_type_0=a.asm.y).apply(null,arguments)},nb=a._emscripten_bind_PointAttribute_num_components_0=function(){return(nb=a._emscripten_bind_PointAttribute_num_components_0=a.asm.z).apply(null,arguments)},ob=a._emscripten_bind_PointAttribute_normalized_0=function(){return(ob=a._emscripten_bind_PointAttribute_normalized_0= +a.asm.A).apply(null,arguments)},pb=a._emscripten_bind_PointAttribute_byte_stride_0=function(){return(pb=a._emscripten_bind_PointAttribute_byte_stride_0=a.asm.B).apply(null,arguments)},qb=a._emscripten_bind_PointAttribute_byte_offset_0=function(){return(qb=a._emscripten_bind_PointAttribute_byte_offset_0=a.asm.C).apply(null,arguments)},rb=a._emscripten_bind_PointAttribute_unique_id_0=function(){return(rb=a._emscripten_bind_PointAttribute_unique_id_0=a.asm.D).apply(null,arguments)},sb=a._emscripten_bind_PointAttribute___destroy___0= +function(){return(sb=a._emscripten_bind_PointAttribute___destroy___0=a.asm.E).apply(null,arguments)},Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=function(){return(Ha=a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0=a.asm.F).apply(null,arguments)},tb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=function(){return(tb=a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1=a.asm.G).apply(null, +arguments)},ub=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=function(){return(ub=a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0=a.asm.H).apply(null,arguments)},vb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=function(){return(vb=a._emscripten_bind_AttributeQuantizationTransform_min_value_1=a.asm.I).apply(null,arguments)},wb=a._emscripten_bind_AttributeQuantizationTransform_range_0=function(){return(wb=a._emscripten_bind_AttributeQuantizationTransform_range_0= +a.asm.J).apply(null,arguments)},xb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=function(){return(xb=a._emscripten_bind_AttributeQuantizationTransform___destroy___0=a.asm.K).apply(null,arguments)},Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=function(){return(Ia=a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0=a.asm.L).apply(null,arguments)},yb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1= +function(){return(yb=a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1=a.asm.M).apply(null,arguments)},zb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=function(){return(zb=a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0=a.asm.N).apply(null,arguments)},Ab=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=function(){return(Ab=a._emscripten_bind_AttributeOctahedronTransform___destroy___0=a.asm.O).apply(null,arguments)},Ja=a._emscripten_bind_PointCloud_PointCloud_0= +function(){return(Ja=a._emscripten_bind_PointCloud_PointCloud_0=a.asm.P).apply(null,arguments)},Bb=a._emscripten_bind_PointCloud_num_attributes_0=function(){return(Bb=a._emscripten_bind_PointCloud_num_attributes_0=a.asm.Q).apply(null,arguments)},Cb=a._emscripten_bind_PointCloud_num_points_0=function(){return(Cb=a._emscripten_bind_PointCloud_num_points_0=a.asm.R).apply(null,arguments)},Db=a._emscripten_bind_PointCloud___destroy___0=function(){return(Db=a._emscripten_bind_PointCloud___destroy___0=a.asm.S).apply(null, +arguments)},Ka=a._emscripten_bind_Mesh_Mesh_0=function(){return(Ka=a._emscripten_bind_Mesh_Mesh_0=a.asm.T).apply(null,arguments)},Eb=a._emscripten_bind_Mesh_num_faces_0=function(){return(Eb=a._emscripten_bind_Mesh_num_faces_0=a.asm.U).apply(null,arguments)},Fb=a._emscripten_bind_Mesh_num_attributes_0=function(){return(Fb=a._emscripten_bind_Mesh_num_attributes_0=a.asm.V).apply(null,arguments)},Gb=a._emscripten_bind_Mesh_num_points_0=function(){return(Gb=a._emscripten_bind_Mesh_num_points_0=a.asm.W).apply(null, +arguments)},Hb=a._emscripten_bind_Mesh___destroy___0=function(){return(Hb=a._emscripten_bind_Mesh___destroy___0=a.asm.X).apply(null,arguments)},La=a._emscripten_bind_Metadata_Metadata_0=function(){return(La=a._emscripten_bind_Metadata_Metadata_0=a.asm.Y).apply(null,arguments)},Ib=a._emscripten_bind_Metadata___destroy___0=function(){return(Ib=a._emscripten_bind_Metadata___destroy___0=a.asm.Z).apply(null,arguments)},Jb=a._emscripten_bind_Status_code_0=function(){return(Jb=a._emscripten_bind_Status_code_0= +a.asm._).apply(null,arguments)},Kb=a._emscripten_bind_Status_ok_0=function(){return(Kb=a._emscripten_bind_Status_ok_0=a.asm.$).apply(null,arguments)},Lb=a._emscripten_bind_Status_error_msg_0=function(){return(Lb=a._emscripten_bind_Status_error_msg_0=a.asm.aa).apply(null,arguments)},Mb=a._emscripten_bind_Status___destroy___0=function(){return(Mb=a._emscripten_bind_Status___destroy___0=a.asm.ba).apply(null,arguments)},Ma=a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=function(){return(Ma= +a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0=a.asm.ca).apply(null,arguments)},Nb=a._emscripten_bind_DracoFloat32Array_GetValue_1=function(){return(Nb=a._emscripten_bind_DracoFloat32Array_GetValue_1=a.asm.da).apply(null,arguments)},Ob=a._emscripten_bind_DracoFloat32Array_size_0=function(){return(Ob=a._emscripten_bind_DracoFloat32Array_size_0=a.asm.ea).apply(null,arguments)},Pb=a._emscripten_bind_DracoFloat32Array___destroy___0=function(){return(Pb=a._emscripten_bind_DracoFloat32Array___destroy___0= +a.asm.fa).apply(null,arguments)},Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=function(){return(Na=a._emscripten_bind_DracoInt8Array_DracoInt8Array_0=a.asm.ga).apply(null,arguments)},Qb=a._emscripten_bind_DracoInt8Array_GetValue_1=function(){return(Qb=a._emscripten_bind_DracoInt8Array_GetValue_1=a.asm.ha).apply(null,arguments)},Rb=a._emscripten_bind_DracoInt8Array_size_0=function(){return(Rb=a._emscripten_bind_DracoInt8Array_size_0=a.asm.ia).apply(null,arguments)},Sb=a._emscripten_bind_DracoInt8Array___destroy___0= +function(){return(Sb=a._emscripten_bind_DracoInt8Array___destroy___0=a.asm.ja).apply(null,arguments)},Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=function(){return(Oa=a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0=a.asm.ka).apply(null,arguments)},Tb=a._emscripten_bind_DracoUInt8Array_GetValue_1=function(){return(Tb=a._emscripten_bind_DracoUInt8Array_GetValue_1=a.asm.la).apply(null,arguments)},Ub=a._emscripten_bind_DracoUInt8Array_size_0=function(){return(Ub=a._emscripten_bind_DracoUInt8Array_size_0= +a.asm.ma).apply(null,arguments)},Vb=a._emscripten_bind_DracoUInt8Array___destroy___0=function(){return(Vb=a._emscripten_bind_DracoUInt8Array___destroy___0=a.asm.na).apply(null,arguments)},Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=function(){return(Pa=a._emscripten_bind_DracoInt16Array_DracoInt16Array_0=a.asm.oa).apply(null,arguments)},Wb=a._emscripten_bind_DracoInt16Array_GetValue_1=function(){return(Wb=a._emscripten_bind_DracoInt16Array_GetValue_1=a.asm.pa).apply(null,arguments)},Xb= +a._emscripten_bind_DracoInt16Array_size_0=function(){return(Xb=a._emscripten_bind_DracoInt16Array_size_0=a.asm.qa).apply(null,arguments)},Yb=a._emscripten_bind_DracoInt16Array___destroy___0=function(){return(Yb=a._emscripten_bind_DracoInt16Array___destroy___0=a.asm.ra).apply(null,arguments)},Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=function(){return(Qa=a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0=a.asm.sa).apply(null,arguments)},Zb=a._emscripten_bind_DracoUInt16Array_GetValue_1= +function(){return(Zb=a._emscripten_bind_DracoUInt16Array_GetValue_1=a.asm.ta).apply(null,arguments)},$b=a._emscripten_bind_DracoUInt16Array_size_0=function(){return($b=a._emscripten_bind_DracoUInt16Array_size_0=a.asm.ua).apply(null,arguments)},ac=a._emscripten_bind_DracoUInt16Array___destroy___0=function(){return(ac=a._emscripten_bind_DracoUInt16Array___destroy___0=a.asm.va).apply(null,arguments)},Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0=function(){return(Ra=a._emscripten_bind_DracoInt32Array_DracoInt32Array_0= +a.asm.wa).apply(null,arguments)},bc=a._emscripten_bind_DracoInt32Array_GetValue_1=function(){return(bc=a._emscripten_bind_DracoInt32Array_GetValue_1=a.asm.xa).apply(null,arguments)},cc=a._emscripten_bind_DracoInt32Array_size_0=function(){return(cc=a._emscripten_bind_DracoInt32Array_size_0=a.asm.ya).apply(null,arguments)},dc=a._emscripten_bind_DracoInt32Array___destroy___0=function(){return(dc=a._emscripten_bind_DracoInt32Array___destroy___0=a.asm.za).apply(null,arguments)},Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0= +function(){return(Sa=a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0=a.asm.Aa).apply(null,arguments)},ec=a._emscripten_bind_DracoUInt32Array_GetValue_1=function(){return(ec=a._emscripten_bind_DracoUInt32Array_GetValue_1=a.asm.Ba).apply(null,arguments)},fc=a._emscripten_bind_DracoUInt32Array_size_0=function(){return(fc=a._emscripten_bind_DracoUInt32Array_size_0=a.asm.Ca).apply(null,arguments)},gc=a._emscripten_bind_DracoUInt32Array___destroy___0=function(){return(gc=a._emscripten_bind_DracoUInt32Array___destroy___0= +a.asm.Da).apply(null,arguments)},Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=function(){return(Ta=a._emscripten_bind_MetadataQuerier_MetadataQuerier_0=a.asm.Ea).apply(null,arguments)},hc=a._emscripten_bind_MetadataQuerier_HasEntry_2=function(){return(hc=a._emscripten_bind_MetadataQuerier_HasEntry_2=a.asm.Fa).apply(null,arguments)},ic=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=function(){return(ic=a._emscripten_bind_MetadataQuerier_GetIntEntry_2=a.asm.Ga).apply(null,arguments)},jc= +a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=function(){return(jc=a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3=a.asm.Ha).apply(null,arguments)},kc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=function(){return(kc=a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2=a.asm.Ia).apply(null,arguments)},lc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=function(){return(lc=a._emscripten_bind_MetadataQuerier_GetStringEntry_2=a.asm.Ja).apply(null,arguments)},mc=a._emscripten_bind_MetadataQuerier_NumEntries_1= +function(){return(mc=a._emscripten_bind_MetadataQuerier_NumEntries_1=a.asm.Ka).apply(null,arguments)},nc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=function(){return(nc=a._emscripten_bind_MetadataQuerier_GetEntryName_2=a.asm.La).apply(null,arguments)},oc=a._emscripten_bind_MetadataQuerier___destroy___0=function(){return(oc=a._emscripten_bind_MetadataQuerier___destroy___0=a.asm.Ma).apply(null,arguments)},Ua=a._emscripten_bind_Decoder_Decoder_0=function(){return(Ua=a._emscripten_bind_Decoder_Decoder_0= +a.asm.Na).apply(null,arguments)},pc=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=function(){return(pc=a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3=a.asm.Oa).apply(null,arguments)},qc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=function(){return(qc=a._emscripten_bind_Decoder_DecodeArrayToMesh_3=a.asm.Pa).apply(null,arguments)},rc=a._emscripten_bind_Decoder_GetAttributeId_2=function(){return(rc=a._emscripten_bind_Decoder_GetAttributeId_2=a.asm.Qa).apply(null,arguments)},sc=a._emscripten_bind_Decoder_GetAttributeIdByName_2= +function(){return(sc=a._emscripten_bind_Decoder_GetAttributeIdByName_2=a.asm.Ra).apply(null,arguments)},tc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=function(){return(tc=a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3=a.asm.Sa).apply(null,arguments)},uc=a._emscripten_bind_Decoder_GetAttribute_2=function(){return(uc=a._emscripten_bind_Decoder_GetAttribute_2=a.asm.Ta).apply(null,arguments)},vc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2=function(){return(vc=a._emscripten_bind_Decoder_GetAttributeByUniqueId_2= +a.asm.Ua).apply(null,arguments)},wc=a._emscripten_bind_Decoder_GetMetadata_1=function(){return(wc=a._emscripten_bind_Decoder_GetMetadata_1=a.asm.Va).apply(null,arguments)},xc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=function(){return(xc=a._emscripten_bind_Decoder_GetAttributeMetadata_2=a.asm.Wa).apply(null,arguments)},yc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=function(){return(yc=a._emscripten_bind_Decoder_GetFaceFromMesh_3=a.asm.Xa).apply(null,arguments)},zc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2= +function(){return(zc=a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2=a.asm.Ya).apply(null,arguments)},Ac=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=function(){return(Ac=a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3=a.asm.Za).apply(null,arguments)},Bc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=function(){return(Bc=a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3=a.asm._a).apply(null,arguments)},Cc=a._emscripten_bind_Decoder_GetAttributeFloat_3=function(){return(Cc= +a._emscripten_bind_Decoder_GetAttributeFloat_3=a.asm.$a).apply(null,arguments)},Dc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=function(){return(Dc=a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3=a.asm.ab).apply(null,arguments)},Ec=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=function(){return(Ec=a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3=a.asm.bb).apply(null,arguments)},Fc=a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=function(){return(Fc= +a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3=a.asm.cb).apply(null,arguments)},Gc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=function(){return(Gc=a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3=a.asm.db).apply(null,arguments)},Hc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=function(){return(Hc=a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3=a.asm.eb).apply(null,arguments)},Ic=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3= +function(){return(Ic=a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3=a.asm.fb).apply(null,arguments)},Jc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=function(){return(Jc=a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3=a.asm.gb).apply(null,arguments)},Kc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=function(){return(Kc=a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3=a.asm.hb).apply(null,arguments)},Lc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5= +function(){return(Lc=a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5=a.asm.ib).apply(null,arguments)},Mc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=function(){return(Mc=a._emscripten_bind_Decoder_SkipAttributeTransform_1=a.asm.jb).apply(null,arguments)},Nc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=function(){return(Nc=a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1=a.asm.kb).apply(null,arguments)},Oc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2= +function(){return(Oc=a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2=a.asm.lb).apply(null,arguments)},Pc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=function(){return(Pc=a._emscripten_bind_Decoder_DecodeBufferToMesh_2=a.asm.mb).apply(null,arguments)},Qc=a._emscripten_bind_Decoder___destroy___0=function(){return(Qc=a._emscripten_bind_Decoder___destroy___0=a.asm.nb).apply(null,arguments)},Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM=function(){return(Rc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM= +a.asm.ob).apply(null,arguments)},Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=function(){return(Sc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM=a.asm.pb).apply(null,arguments)},Tc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=function(){return(Tc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM=a.asm.qb).apply(null,arguments)},Uc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM= +function(){return(Uc=a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM=a.asm.rb).apply(null,arguments)},Vc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=function(){return(Vc=a._emscripten_enum_draco_GeometryAttribute_Type_INVALID=a.asm.sb).apply(null,arguments)},Wc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=function(){return(Wc=a._emscripten_enum_draco_GeometryAttribute_Type_POSITION=a.asm.tb).apply(null,arguments)},Xc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL= +function(){return(Xc=a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL=a.asm.ub).apply(null,arguments)},Yc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=function(){return(Yc=a._emscripten_enum_draco_GeometryAttribute_Type_COLOR=a.asm.vb).apply(null,arguments)},Zc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=function(){return(Zc=a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD=a.asm.wb).apply(null,arguments)},$c=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC= +function(){return($c=a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC=a.asm.xb).apply(null,arguments)},ad=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=function(){return(ad=a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE=a.asm.yb).apply(null,arguments)},bd=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=function(){return(bd=a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD=a.asm.zb).apply(null,arguments)},cd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH= +function(){return(cd=a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH=a.asm.Ab).apply(null,arguments)},dd=a._emscripten_enum_draco_DataType_DT_INVALID=function(){return(dd=a._emscripten_enum_draco_DataType_DT_INVALID=a.asm.Bb).apply(null,arguments)},ed=a._emscripten_enum_draco_DataType_DT_INT8=function(){return(ed=a._emscripten_enum_draco_DataType_DT_INT8=a.asm.Cb).apply(null,arguments)},fd=a._emscripten_enum_draco_DataType_DT_UINT8=function(){return(fd=a._emscripten_enum_draco_DataType_DT_UINT8= +a.asm.Db).apply(null,arguments)},gd=a._emscripten_enum_draco_DataType_DT_INT16=function(){return(gd=a._emscripten_enum_draco_DataType_DT_INT16=a.asm.Eb).apply(null,arguments)},hd=a._emscripten_enum_draco_DataType_DT_UINT16=function(){return(hd=a._emscripten_enum_draco_DataType_DT_UINT16=a.asm.Fb).apply(null,arguments)},id=a._emscripten_enum_draco_DataType_DT_INT32=function(){return(id=a._emscripten_enum_draco_DataType_DT_INT32=a.asm.Gb).apply(null,arguments)},jd=a._emscripten_enum_draco_DataType_DT_UINT32= +function(){return(jd=a._emscripten_enum_draco_DataType_DT_UINT32=a.asm.Hb).apply(null,arguments)},kd=a._emscripten_enum_draco_DataType_DT_INT64=function(){return(kd=a._emscripten_enum_draco_DataType_DT_INT64=a.asm.Ib).apply(null,arguments)},ld=a._emscripten_enum_draco_DataType_DT_UINT64=function(){return(ld=a._emscripten_enum_draco_DataType_DT_UINT64=a.asm.Jb).apply(null,arguments)},md=a._emscripten_enum_draco_DataType_DT_FLOAT32=function(){return(md=a._emscripten_enum_draco_DataType_DT_FLOAT32=a.asm.Kb).apply(null, +arguments)},nd=a._emscripten_enum_draco_DataType_DT_FLOAT64=function(){return(nd=a._emscripten_enum_draco_DataType_DT_FLOAT64=a.asm.Lb).apply(null,arguments)},od=a._emscripten_enum_draco_DataType_DT_BOOL=function(){return(od=a._emscripten_enum_draco_DataType_DT_BOOL=a.asm.Mb).apply(null,arguments)},pd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=function(){return(pd=a._emscripten_enum_draco_DataType_DT_TYPES_COUNT=a.asm.Nb).apply(null,arguments)},qd=a._emscripten_enum_draco_StatusCode_OK=function(){return(qd= +a._emscripten_enum_draco_StatusCode_OK=a.asm.Ob).apply(null,arguments)},rd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=function(){return(rd=a._emscripten_enum_draco_StatusCode_DRACO_ERROR=a.asm.Pb).apply(null,arguments)},sd=a._emscripten_enum_draco_StatusCode_IO_ERROR=function(){return(sd=a._emscripten_enum_draco_StatusCode_IO_ERROR=a.asm.Qb).apply(null,arguments)},td=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER=function(){return(td=a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER= +a.asm.Rb).apply(null,arguments)},ud=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=function(){return(ud=a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION=a.asm.Sb).apply(null,arguments)},vd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=function(){return(vd=a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION=a.asm.Tb).apply(null,arguments)},bb=a._malloc=function(){return(bb=a._malloc=a.asm.Ub).apply(null,arguments)};a._free=function(){return(a._free=a.asm.Vb).apply(null,arguments)}; +var ya=a.___cxa_is_pointer_type=function(){return(ya=a.___cxa_is_pointer_type=a.asm.Wb).apply(null,arguments)};a.___start_em_js=15856;a.___stop_em_js=15954;var ka;ia=function b(){ka||ba();ka||(ia=b)};if(a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);0=r.size?(0>>=0;switch(c.BYTES_PER_ELEMENT){case 2:d>>>=1;break;case 4:d>>>=2;break;case 8:d>>>=3}for(var g=0;gb.byteLength)return a.INVALID_GEOMETRY_TYPE;switch(b[7]){case 0:return a.POINT_CLOUD; +case 1:return a.TRIANGULAR_MESH;default:return a.INVALID_GEOMETRY_TYPE}};return n.ready}}();"object"===typeof exports&&"object"===typeof module?module.exports=DracoDecoderModule:"function"===typeof define&&define.amd?define([],function(){return DracoDecoderModule}):"object"===typeof exports&&(exports.DracoDecoderModule=DracoDecoderModule); diff --git a/server/index.js b/server/index.js index ee7d4d5..9ca2b0c 100644 --- a/server/index.js +++ b/server/index.js @@ -95,6 +95,7 @@ const CONVERTIBLE_MODEL_FORMATS = new Map([ [".step", "step"], [".stp", "step"] ]); +const GLB_DRACO_OPTIMIZABLE_FORMATS = new Set(["glb"]); const nowIso = () => new Date().toISOString(); @@ -2593,8 +2594,22 @@ const handleRawUpload = async (req, res, url) => { const uploadedAt = nowIso(); const sha256 = await calculateFileSha256(targetPath); const src = path.join("uploads", uploadId, assetId, versionId, safeName).replace(/\\/g, "/"); + const rawSourceFormat = path.extname(safeName).replace(/^\./, "").toLowerCase(); const sourceFormat = CONVERTIBLE_MODEL_FORMATS.get(path.extname(safeName).toLowerCase()); - const reusableOriginal = await findReusableOriginalBySha256({sha256, sourceFormat, targetPath}); + const modelSourceFormat = sourceFormat || rawSourceFormat || "file"; + const dracoOptimization = !sourceFormat && GLB_DRACO_OPTIMIZABLE_FORMATS.has(modelSourceFormat) + ? { + status: "queued", + targetFormat: "gltf", + compression: "draco", + updatedAt: uploadedAt + } + : null; + const reusableOriginal = await findReusableOriginalBySha256({ + sha256, + sourceFormat: modelSourceFormat === "file" ? null : modelSourceFormat, + targetPath + }); const sourceDedup = reusableOriginal ? { sourceDedupMode: await linkOrCopyUploadFile(reusableOriginal.sourcePath, targetPath), @@ -2613,10 +2628,12 @@ const handleRawUpload = async (req, res, url) => { sha256, sourceSrc: src, downloadSrc: src, - sourceFormat: sourceFormat || path.extname(safeName).replace(/^\./, "").toLowerCase() || "file", + sourceFormat: modelSourceFormat, status: sourceFormat ? "conversion_required" : "ready", - targetFormat: sourceFormat ? "xkt" : null, + targetFormat: sourceFormat ? "xkt" : (dracoOptimization ? "gltf" : null), uploadedAt, + message: dracoOptimization ? "Model is ready. Draco optimization queued." : "Model is ready.", + ...(dracoOptimization ? {dracoOptimization} : {}), ...(sourceDedup || {}) }; @@ -2658,7 +2675,6 @@ const handleRawUpload = async (req, res, url) => { await writeJSONFile(manifestPathForSource(targetPath), { ...versionRecord, - message: "Model is ready.", updatedAt: uploadedAt }); await upsertAssetVersion(assetDir, versionRecord);