diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2208e460c..3eb1fc743 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,3 +40,25 @@ jobs: # if: ${{ github.event.pull_request.base.ref == 'release' }} # env: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + dedupe-check: + runs-on: ubuntu-latest + if: github.event.pull_request.head.ref == 'next' + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install pnpm + run: npm install -g pnpm@9.0.4 + + - name: Run pnpm dedupe + run: pnpm dedupe + + - name: Check for changes + run: | + if ! git diff --exit-code --quiet pnpm-lock.yaml; then + echo "pnpm dedupe introduced changes:" + git diff --color=always pnpm-lock.yaml + exit 1 + else + echo "No changes detected after pnpm dedupe in pnpm-lock.yaml" + fi \ No newline at end of file diff --git a/.github/workflows/next-deploy.yml b/.github/workflows/next-deploy.yml index 488af273b..55fb87466 100644 --- a/.github/workflows/next-deploy.yml +++ b/.github/workflows/next-deploy.yml @@ -43,3 +43,26 @@ jobs: for alias in $(echo ${{ secrets.TEST_PREVIEW_DOMAIN }} | tr "," "\n"); do vercel alias set ${{ steps.deploy.outputs.stdout }} $alias --token=${{ secrets.VERCEL_TOKEN }} --scope=zaro done + + - name: Create Release Pull Request + uses: actions/github-script@v6 + with: + script: | + const { data: pulls } = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + head: `${context.repo.owner}:next`, + base: 'release', + state: 'open' + }); + + if (pulls.length === 0) { + await github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: 'Release', + head: 'next', + base: 'release', + body: 'PR was created automatically by the release workflow, hope you release it as soon as possible!', + }); + } diff --git a/.gitignore b/.gitignore index 3a1888627..f2a0006e0 100644 --- a/.gitignore +++ b/.gitignore @@ -18,5 +18,6 @@ out generated storybook-static server-jar +config.local.json src/react/npmReactComponents.ts diff --git a/Dockerfile b/Dockerfile index a5f6ac062..484d158e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,4 +31,5 @@ RUN npm i -g pnpm@9.0.4 RUN npm init -yp RUN pnpm i express github:zardoy/prismarinejs-net-browserify compression cors EXPOSE 8080 +VOLUME /app/dist ENTRYPOINT ["node", "server.js", "--prod"] diff --git a/README.MD b/README.MD index ceba1c6c9..b7494cdb1 100644 --- a/README.MD +++ b/README.MD @@ -2,23 +2,27 @@ ![banner](./docs-assets/banner.jpg) -A true Minecraft client running in your browser! A port of the original game to the web, written in JavaScript using the best modern web technologies. +Minecraft **clone** rewritten in TypeScript using the best modern web technologies. Minecraft vanilla-compatible client and integrated server packaged into a single web app. -You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg) (short link) [mcon.vercel.app](https://mcon.vercel.app/) or the GitHub pages deploy. Every commit from the `develop` (default) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) - so it's usually newer, but might be less stable. +You can try this out at [mcraft.fun](https://mcraft.fun/), [pcm.gg](https://pcm.gg) (short link), [mcon.vercel.app](https://mcon.vercel.app/) or the GitHub pages deploy. Every commit from the default (`develop`) branch is deployed to [s.mcraft.fun](https://s.mcraft.fun/) and [s.pcm.gg](https://s.pcm.gg/) - so it's usually newer, but might be less stable. -For building the project yourself / contributing, see [Development, Debugging & Contributing](#development-debugging--contributing). If you encounter any bugs or usability issues, please report them! +Don't confuse with [Eaglercraft](https://git.eaglercraft.rip/eaglercraft/eaglercraft-1.8) which is a REAL vanilla Minecraft Java edition port to the web (but with its own limitations). Eaglercraft is a fully playable solution, but this project is more in position of a "technical demo" to show how it's possible to build games for web at scale entirely with the JS ecosystem. Have fun! + +For building the project yourself / contributing, see [Development, Debugging & Contributing](#development-debugging--contributing). For reference at what and how web technologies / frameworks are used, see [TECH.md](./TECH.md). ### Big Features - Open any zip world file or even folder in read-write mode! - Connect to Java servers running in both offline (cracked) and online mode* (it's possible because of proxy servers, see below) +- Integrated JS server capable of opening Java world saves in any way (folders, zip, web streaming, etc) - Singleplayer mode with simple world generations! -- Google Drive support for reading / saving worlds - Works offline -- Play with friends over internet! (P2P is powered by Peer.js discovery servers) - First-class touch (mobile) & controller support +- First-class keybindings configuration - Basic Resource pack support: Custom GUI, all textures. Server resource packs are not supported yet. -- Builtin JEI with recipes & guides for every item (also replaces creative inventory) +- Builtin JEI with recipes & descriptions for every item (JEI is creative inventory replacement) +- Play with friends over internet! (P2P is powered by Peer.js discovery servers) +- ~~Google Drive support for reading / saving worlds back to the cloud~~ - even even more! All components that are in [Storybook](https://mcraft.fun/storybook) are published as npm module and can be used in other projects: [`minecraft-react`](https://npmjs.com/minecraft-react) @@ -131,6 +135,7 @@ There are some parameters you can set in the url to archive some specific behavi General: - **`?setting=:`** - Set and lock the setting on load. You can set multiple settings by separating them with `&` e.g. `?setting=autoParkour:true&setting=renderDistance:4` +- `?modal=` - Open specific modal on page load eg `keybindings`. Very useful on UI changes testing during dev. For path use `,` as separator. To get currently opened modal type this in the console: `activeModalStack.at(-1).reactType` Server specific: @@ -140,7 +145,6 @@ Server specific: - `?proxy=` - Set the proxy server address to use for the server - `?username=` - Set the username for the server - `?lockConnect=true` - Only works then `ip` parameter is set. Disables cancel/save buttons and all inputs in the connect screen already set as parameters. Useful for integrates iframes. -- `?reconnect=true` - Reconnect to the server on page reloads. Available in **dev mode only** and very useful on server testing. - `?serversList=` - `` can be a list of servers in the format `ip:version,ip` or a url to a json file with the same format (array) or a txt file with line-delimited list of server IPs. Single player specific: @@ -174,6 +178,10 @@ In this case you must use `?mapDirBaseUrl` to specify the base URL to fetch the - `?mapDirBaseUrl` - See above. +Only during development: + +- `?reconnect=true` - Reconnect to the server on page reloads. Very useful on server testing. + ### Notable Things that Power this Project diff --git a/TECH.md b/TECH.md new file mode 100644 index 000000000..3ea76719e --- /dev/null +++ b/TECH.md @@ -0,0 +1,57 @@ +### Eaglercraft Comparison + +This project uses proxies so you can connect to almost any vanilla server. Though proxies have some limitations such as increased latency and servers will complain about using VPN (though we have a workaround for that, but ping will be much higher). +This client generally has better performance but some features reproduction might be inaccurate eg its less stable and more buggy in some cases. + +| Feature | This project | Eaglercraft | Description | +| --------------------------------- | ------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| General | | | | +| Mobile Support (touch) | ✅(+) | ✅ | | +| Gamepad Support | ✅ | ❌ | | +| A11Y | ✅ | ❌ | We have DOM for almost all UI so your extensions and other browser features will work natively like on any other web page (but maybe it's not needed) | +| Game Features | | | | +| Servers Support (quality) | ❌ | ✅ | Eaglercraft is vanilla Minecraft, while this project tries to emulate original game behavior at protocol level (Mineflayer is used) | +| Servers Support (any version, ip) | ✅ | ❌ | We support almost all Minecraft versions, only important if you connect to a server where you need new content like blocks or if you play with friends. And you can connect to almost any server using proxy servers! | +| Singleplayer Survival Features | ❌ | ✅ | Just like Eaglercraft this project can generate and save worlds, but generator is simple and only a few survival features are supported (look here for [supported features list](https://github.com/zardoy/space-squid)) | +| Singleplayer Maps | ✅ | ✅ | We support any version, but adventure maps won't work, but simple parkour and build maps might be interesting to explore... | +| Singleplayer Maps World Streaming | ✅ | ❌ | Thanks to Browserfs, saves can be loaded to local singleplayer server using multiple ways: from local folder, server directory (not zip), dropbox or other cloud *backend* etc... | +| P2P Multiplayer | ✅ | ✅ | A way to connect to other browser running the project. But it's almost useless here since many survival features are not implemented. Maybe only to build / explore maps together... | +| Voice Chat | ❌ | ✅ | Eaglercraft has custom WebRTC voice chat implementation, though it could also be easily implemented there | +| Online Servers | ✅ | ❌ | We have custom implementation (including integration on proxy side) for joining to servers | +| Plugin Features | ✅ | ❌ | We have Mineflayer plugins support, like Auto Jump & Auto Parkour was added here that way | +| Direct Connection | ❌ | ✅ | We have DOM for almost all UI so your extensions and other browser features will work natively like on any other web page | +| Mods | ❌(roadmap) | ❌ | This project will support mods for singleplayer. In theory its possible to implement support for modded servers on protocol level (including all needed mods) | +| Video Recording | ❌ | ✅ | Don't feel needed | +| Metaverse Features | ❌(roadmap) | ❌ | Iframes, video streams inside of game world (custom protocol channel) | +| Sounds | ✅ | ✅ | | +| Resource Packs | ✅(--) | ✅ | This project has very limited support for them (only textures images are loadable for now) | +| Assets Compressing & Splitting | ✅ | ❌ | We have advanced Minecraft data processing and good code chunk splitting so the web app will open much faster and use less memory | +| Graphics | | | | +| Fancy Graphics | ❌ | ✅ | While Eaglercraft has top-level shaders we don't even support lighting | +| Fast & Efficient Graphics | ❌(+) | ❌ | Feels like no one needs to have 64 rendering distance work smoothly | +| VR | ✅ | ❌ | Feels like not needed feature. UI is missing in this project since DOM can't be rendered in VR so Eaglercraft could be better in that aspect | +| AR | ❌ | ❌ | Would be the most useless feature | +| Minimap & Waypoints | ✅(-) | ❌ | We have buggy minimap, which can be enabled in settings and full map is opened by pressing `M` key | + +Features available to only this project: + +- CSS & JS Customization +- JS Real Time Debugging & Console Scripting (eg Devtools) + +### Tech Stack + +Bundler: Rsbuild! +UI: powered by React and css modules. Storybook helps with UI development. + +### Rare WEB Features + +There are a number of web features that are not commonly used but you might be interested in them if you decide to build your own game in the web. + +TODO + +| API | Usage & Description | +| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `Crypto` API | Used to make chat features work when joining online servers with authentication. | +| `requestPointerLock({ unadjustedMovement: true })` API | Required for games. Disables system mouse acceleration (important for Mac users). Aka mouse raw input | +| `navigator.keyboard.lock()` | (only in Chromium browsers) When entering fullscreen it allows to use any key combination like ctrl+w in the game | +| `navigator.keyboard.getLayoutMap()` | (only in Chromium browsers) To display the right keyboard symbol for the key keybinding on different keyboard layouts (e.g. QWERTY vs AZERTY) | diff --git a/package.json b/package.json index 4ed5a4494..1d2eb0625 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "prod-start": "node server.js --prod", "test-mc-server": "tsx cypress/minecraft-server.mjs", "lint": "eslint \"{src,cypress,prismarine-viewer}/**/*.{ts,js,jsx,tsx}\"", + "lint-fix": "pnpm lint --fix", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build && node scripts/build.js moveStorybookFiles", "start-experiments": "vite --config experiments/vite.config.ts --host", @@ -68,12 +69,12 @@ "esbuild-plugin-polyfill-node": "^0.3.0", "express": "^4.18.2", "filesize": "^10.0.12", - "flying-squid": "npm:@zardoy/flying-squid@^0.0.49", + "flying-squid": "npm:@zardoy/flying-squid@^0.0.51", "fs-extra": "^11.1.1", "google-drive-browserfs": "github:zardoy/browserfs#google-drive", "jszip": "^3.10.1", "lodash-es": "^4.17.21", - "minecraft-data": "3.80.0", + "minecraft-data": "3.83.1", "minecraft-protocol": "github:PrismarineJS/node-minecraft-protocol#master", "mineflayer-item-map-downloader": "github:zardoy/mineflayer-item-map-downloader", "mojangson": "^2.0.4", @@ -142,7 +143,7 @@ "http-browserify": "^1.7.0", "http-server": "^14.1.1", "https-browserify": "^1.0.0", - "mc-assets": "^0.2.23", + "mc-assets": "^0.2.28", "minecraft-inventory-gui": "github:zardoy/minecraft-inventory-gui#next", "mineflayer": "github:zardoy/mineflayer", "mineflayer-pathfinder": "^2.4.4", @@ -174,7 +175,7 @@ "diamond-square": "github:zardoy/diamond-square", "prismarine-block": "github:zardoy/prismarine-block#next-era", "prismarine-world": "github:zardoy/prismarine-world#next-era", - "minecraft-data": "3.80.0", + "minecraft-data": "3.83.1", "prismarine-provider-anvil": "github:zardoy/prismarine-provider-anvil#everything", "prismarine-physics": "github:zardoy/prismarine-physics", "minecraft-protocol": "github:PrismarineJS/node-minecraft-protocol#master", @@ -189,7 +190,7 @@ "three@0.154.0": "patches/three@0.154.0.patch", "pixelarticons@1.8.1": "patches/pixelarticons@1.8.1.patch", "mineflayer-item-map-downloader@1.2.0": "patches/mineflayer-item-map-downloader@1.2.0.patch", - "minecraft-protocol@1.51.0": "patches/minecraft-protocol@1.49.0.patch" + "minecraft-protocol@1.54.0": "patches/minecraft-protocol@1.54.0.patch" } }, "packageManager": "pnpm@9.0.4" diff --git a/patches/minecraft-protocol@1.49.0.patch b/patches/minecraft-protocol@1.53.0.patch similarity index 93% rename from patches/minecraft-protocol@1.49.0.patch rename to patches/minecraft-protocol@1.53.0.patch index c54d54691..243e0bd7d 100644 --- a/patches/minecraft-protocol@1.49.0.patch +++ b/patches/minecraft-protocol@1.53.0.patch @@ -95,10 +95,10 @@ index b9d21bab9faccd5dbf1975fc423fc55c73e906c5..99ffd76527b410e3a393181beb260108 function onJoinServerResponse (err) { diff --git a/src/client.js b/src/client.js -index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c278950ba7f396 100644 +index 74749698f8cee05b5dc749c271544f78d06645b0..e77e0a3f41c1ee780c3abbd54b0801d248c2a07c 100644 --- a/src/client.js +++ b/src/client.js -@@ -88,10 +88,12 @@ class Client extends EventEmitter { +@@ -89,10 +89,12 @@ class Client extends EventEmitter { parsed.metadata.name = parsed.data.name parsed.data = parsed.data.params parsed.metadata.state = state @@ -115,7 +115,7 @@ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c27895 } if (this._hasBundlePacket && parsed.metadata.name === 'bundle_delimiter') { if (this._mcBundle.length) { // End bundle -@@ -109,7 +111,13 @@ class Client extends EventEmitter { +@@ -110,7 +112,13 @@ class Client extends EventEmitter { this._hasBundlePacket = false } } else { @@ -130,7 +130,7 @@ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c27895 } }) } -@@ -167,7 +175,10 @@ class Client extends EventEmitter { +@@ -168,7 +176,10 @@ class Client extends EventEmitter { } const onFatalError = (err) => { @@ -142,7 +142,7 @@ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c27895 endSocket() } -@@ -196,6 +207,8 @@ class Client extends EventEmitter { +@@ -197,6 +208,8 @@ class Client extends EventEmitter { serializer -> framer -> socket -> splitter -> deserializer */ if (this.serializer) { this.serializer.end() @@ -151,7 +151,7 @@ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c27895 } else { if (this.socket) this.socket.end() } -@@ -237,8 +250,11 @@ class Client extends EventEmitter { +@@ -238,8 +251,11 @@ class Client extends EventEmitter { write (name, params) { if (!this.serializer.writable) { return } @@ -166,10 +166,10 @@ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c27895 } diff --git a/src/index.d.ts b/src/index.d.ts -index 423085259176a10c9dfeb617f00975df077d02be..ae0558b7c53ab24474b22240e8a2f4e4cde02f19 100644 +index e61d5403bab46251d35b22a2ea30eb09b2746a26..84f597427893671eeac231b11e6e42aa815601df 100644 --- a/src/index.d.ts +++ b/src/index.d.ts -@@ -134,6 +134,7 @@ declare module 'minecraft-protocol' { +@@ -135,6 +135,7 @@ declare module 'minecraft-protocol' { sessionServer?: string keepAlive?: boolean closeTimeout?: number @@ -177,7 +177,7 @@ index 423085259176a10c9dfeb617f00975df077d02be..ae0558b7c53ab24474b22240e8a2f4e4 noPongTimeout?: number checkTimeoutInterval?: number version?: string -@@ -154,6 +155,8 @@ declare module 'minecraft-protocol' { +@@ -155,6 +156,8 @@ declare module 'minecraft-protocol' { disableChatSigning?: boolean /** Pass custom client implementation if needed. */ Client?: Client diff --git a/patches/minecraft-protocol@1.54.0.patch b/patches/minecraft-protocol@1.54.0.patch new file mode 100644 index 000000000..32371450f --- /dev/null +++ b/patches/minecraft-protocol@1.54.0.patch @@ -0,0 +1,188 @@ +diff --git a/src/client/autoVersion.js b/src/client/autoVersion.js +index 3fe1552672e4c0dd1b14b3b56950c3d7eaf3537b..6eb615e5827279c328d5547b5911626693252da4 100644 +--- a/src/client/autoVersion.js ++++ b/src/client/autoVersion.js +@@ -9,7 +9,7 @@ module.exports = function (client, options) { + client.wait_connect = true // don't let src/client/setProtocol proceed on socket 'connect' until 'connect_allowed' + debug('pinging', options.host) + // TODO: use 0xfe ping instead for better compatibility/performance? https://github.com/deathcap/node-minecraft-ping +- ping(options, function (err, response) { ++ ping(options, async function (err, response) { + if (err) { return client.emit('error', err) } + debug('ping response', response) + // TODO: could also use ping pre-connect to save description, type, max players, etc. +@@ -40,6 +40,7 @@ module.exports = function (client, options) { + + // Reinitialize client object with new version TODO: move out of its constructor? + client.version = minecraftVersion ++ await options.versionSelectedHook?.(client) + client.state = states.HANDSHAKING + + // Let other plugins such as Forge/FML (modinfo) respond to the ping response +diff --git a/src/client/chat.js b/src/client/chat.js +index f14269bea055d4329cd729271e7406ec4b344de7..00f5482eb6e3c911381ca9a728b1b4aae0d1d337 100644 +--- a/src/client/chat.js ++++ b/src/client/chat.js +@@ -111,7 +111,7 @@ module.exports = function (client, options) { + for (const player of packet.data) { + if (!player.chatSession) continue + client._players[player.UUID] = { +- publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }), ++ // publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }), + publicKeyDER: player.chatSession.publicKey.keyBytes, + sessionUuid: player.chatSession.uuid + } +@@ -127,7 +127,7 @@ module.exports = function (client, options) { + for (const player of packet.data) { + if (player.crypto) { + client._players[player.UUID] = { +- publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }), ++ // publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }), + publicKeyDER: player.crypto.publicKey, + signature: player.crypto.signature, + displayName: player.displayName || player.name +@@ -198,7 +198,7 @@ module.exports = function (client, options) { + if (mcData.supportFeature('useChatSessions')) { + const tsDelta = BigInt(Date.now()) - packet.timestamp + const expired = !packet.timestamp || tsDelta > messageExpireTime || tsDelta < 0 +- const verified = !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired ++ const verified = false && !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired + if (verified) client._signatureCache.push(packet.signature) + client.emit('playerChat', { + plainMessage: packet.plainMessage, +@@ -363,7 +363,7 @@ module.exports = function (client, options) { + } + } + +- client._signedChat = (message, options = {}) => { ++ client._signedChat = async (message, options = {}) => { + options.timestamp = options.timestamp || BigInt(Date.now()) + options.salt = options.salt || 1n + +@@ -405,7 +405,7 @@ module.exports = function (client, options) { + message, + timestamp: options.timestamp, + salt: options.salt, +- signature: (client.profileKeys && client._session) ? client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined, ++ signature: (client.profileKeys && client._session) ? await client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined, + offset: client._lastSeenMessages.pending, + acknowledged + }) +@@ -419,7 +419,7 @@ module.exports = function (client, options) { + message, + timestamp: options.timestamp, + salt: options.salt, +- signature: client.profileKeys ? client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0), ++ signature: client.profileKeys ? await client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0), + signedPreview: options.didPreview, + previousMessages: client._lastSeenMessages.map((e) => ({ + messageSender: e.sender, +diff --git a/src/client/encrypt.js b/src/client/encrypt.js +index b9d21bab9faccd5dbf1975fc423fc55c73e906c5..99ffd76527b410e3a393181beb260108f4c63536 100644 +--- a/src/client/encrypt.js ++++ b/src/client/encrypt.js +@@ -25,7 +25,11 @@ module.exports = function (client, options) { + if (packet.serverId !== '-') { + debug('This server appears to be an online server and you are providing no password, the authentication will probably fail') + } +- sendEncryptionKeyResponse() ++ client.end('This server appears to be an online server and you are providing no authentication. Try authenticating first.') ++ // sendEncryptionKeyResponse() ++ // client.once('set_compression', () => { ++ // clearTimeout(loginTimeout) ++ // }) + } + + function onJoinServerResponse (err) { +diff --git a/src/client.js b/src/client.js +index 74749698f8cee05b5dc749c271544f78d06645b0..e77e0a3f41c1ee780c3abbd54b0801d248c2a07c 100644 +--- a/src/client.js ++++ b/src/client.js +@@ -89,10 +89,12 @@ class Client extends EventEmitter { + parsed.metadata.name = parsed.data.name + parsed.data = parsed.data.params + parsed.metadata.state = state +- debug('read packet ' + state + '.' + parsed.metadata.name) +- if (debug.enabled) { +- const s = JSON.stringify(parsed.data, null, 2) +- debug(s && s.length > 10000 ? parsed.data : s) ++ if (!globalThis.excludeCommunicationDebugEvents?.includes(parsed.metadata.name)) { ++ debug('read packet ' + state + '.' + parsed.metadata.name) ++ if (debug.enabled) { ++ const s = JSON.stringify(parsed.data, null, 2) ++ debug(s && s.length > 10000 ? parsed.data : s) ++ } + } + if (this._hasBundlePacket && parsed.metadata.name === 'bundle_delimiter') { + if (this._mcBundle.length) { // End bundle +@@ -110,7 +112,13 @@ class Client extends EventEmitter { + this._hasBundlePacket = false + } + } else { +- emitPacket(parsed) ++ try { ++ emitPacket(parsed) ++ } catch (err) { ++ console.log('Client incorrectly handled packet ' + parsed.metadata.name) ++ console.error(err) ++ // todo investigate why it doesn't close the stream even if unhandled there ++ } + } + }) + } +@@ -168,7 +176,10 @@ class Client extends EventEmitter { + } + + const onFatalError = (err) => { +- this.emit('error', err) ++ // todo find out what is trying to write after client disconnect ++ if(err.code !== 'ECONNABORTED') { ++ this.emit('error', err) ++ } + endSocket() + } + +@@ -197,6 +208,8 @@ class Client extends EventEmitter { + serializer -> framer -> socket -> splitter -> deserializer */ + if (this.serializer) { + this.serializer.end() ++ this.socket?.end() ++ this.socket?.emit('end') + } else { + if (this.socket) this.socket.end() + } +@@ -238,8 +251,11 @@ class Client extends EventEmitter { + + write (name, params) { + if (!this.serializer.writable) { return } +- debug('writing packet ' + this.state + '.' + name) +- debug(params) ++ if (!globalThis.excludeCommunicationDebugEvents?.includes(name)) { ++ debug(`[${this.state}] from ${this.isServer ? 'server' : 'client'}: ` + name) ++ debug(params) ++ } ++ this.emit('writePacket', name, params) + this.serializer.write({ name, params }) + } + +diff --git a/src/index.d.ts b/src/index.d.ts +index e61d5403bab46251d35b22a2ea30eb09b2746a26..84f597427893671eeac231b11e6e42aa815601df 100644 +--- a/src/index.d.ts ++++ b/src/index.d.ts +@@ -135,6 +135,7 @@ declare module 'minecraft-protocol' { + sessionServer?: string + keepAlive?: boolean + closeTimeout?: number ++ closeTimeout?: number + noPongTimeout?: number + checkTimeoutInterval?: number + version?: string +@@ -155,6 +156,8 @@ declare module 'minecraft-protocol' { + disableChatSigning?: boolean + /** Pass custom client implementation if needed. */ + Client?: Client ++ /** Can be used to prepare mc data on autoVersion (client.version has selected version) */ ++ versionSelectedHook?: (client: Client) => Promise | void + } + + export class Server extends EventEmitter { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a89eb6df..7a3a5ef16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,7 +11,7 @@ overrides: diamond-square: github:zardoy/diamond-square prismarine-block: github:zardoy/prismarine-block#next-era prismarine-world: github:zardoy/prismarine-world#next-era - minecraft-data: 3.80.0 + minecraft-data: 3.83.1 prismarine-provider-anvil: github:zardoy/prismarine-provider-anvil#everything prismarine-physics: github:zardoy/prismarine-physics minecraft-protocol: github:PrismarineJS/node-minecraft-protocol#master @@ -20,9 +20,9 @@ overrides: prismarine-item: latest patchedDependencies: - minecraft-protocol@1.51.0: - hash: 7sh5krubuk2vjuogjioaktvwzi - path: patches/minecraft-protocol@1.49.0.patch + minecraft-protocol@1.54.0: + hash: 3wm2z233n46lqi64rbxem4nyv4 + path: patches/minecraft-protocol@1.54.0.patch mineflayer-item-map-downloader@1.2.0: hash: bck55yjvd4wrgz46x7o4vfur5q path: patches/mineflayer-item-map-downloader@1.2.0.patch @@ -99,7 +99,7 @@ importers: version: 2.8.5 debug: specifier: ^4.3.4 - version: 4.3.4(supports-color@8.1.1) + version: 4.4.0(supports-color@8.1.1) diff-match-patch: specifier: ^1.0.5 version: 1.0.5 @@ -108,10 +108,10 @@ importers: version: 3.0.1 esbuild: specifier: ^0.19.3 - version: 0.19.3 + version: 0.19.11 esbuild-plugin-polyfill-node: specifier: ^0.3.0 - version: 0.3.0(esbuild@0.19.3) + version: 0.3.0(esbuild@0.19.11) express: specifier: ^4.18.2 version: 4.18.2 @@ -119,8 +119,8 @@ importers: specifier: ^10.0.12 version: 10.0.12 flying-squid: - specifier: npm:@zardoy/flying-squid@^0.0.49 - version: '@zardoy/flying-squid@0.0.49(encoding@0.1.13)' + specifier: npm:@zardoy/flying-squid@^0.0.51 + version: '@zardoy/flying-squid@0.0.51(encoding@0.1.13)' fs-extra: specifier: ^11.1.1 version: 11.1.1 @@ -134,14 +134,14 @@ importers: specifier: ^4.17.21 version: 4.17.21 minecraft-data: - specifier: 3.80.0 - version: 3.80.0 + specifier: 3.83.1 + version: 3.83.1 minecraft-protocol: specifier: github:PrismarineJS/node-minecraft-protocol#master - version: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d(patch_hash=7sh5krubuk2vjuogjioaktvwzi)(encoding@0.1.13) + version: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76(patch_hash=3wm2z233n46lqi64rbxem4nyv4)(encoding@0.1.13) mineflayer-item-map-downloader: specifier: github:zardoy/mineflayer-item-map-downloader - version: https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/642fd4f7023a98a96da4caf8f993f8e19361a1e7(patch_hash=bck55yjvd4wrgz46x7o4vfur5q)(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/a8d210ecdcf78dd082fa149a96e1612cc9747824(patch_hash=bck55yjvd4wrgz46x7o4vfur5q)(encoding@0.1.13) mojangson: specifier: ^2.0.4 version: 2.0.4 @@ -162,7 +162,7 @@ importers: version: 6.1.1 prismarine-provider-anvil: specifier: github:zardoy/prismarine-provider-anvil#everything - version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/d807fc339a3d95a7aef91468d4d64d367e7c682a(minecraft-data@3.80.0) + version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/a3a7d031069373cc3e0cd05e54512dd9461ca34b(minecraft-data@3.83.1) prosemirror-example-setup: specifier: ^1.2.2 version: 1.2.2 @@ -207,7 +207,7 @@ importers: version: 3.0.1 source-map-js: specifier: ^1.0.2 - version: 1.0.2 + version: 1.2.1 stats-gl: specifier: ^1.0.5 version: 1.0.5 @@ -234,7 +234,7 @@ importers: version: 0.1.8 wait-on: specifier: ^7.2.0 - version: 7.2.0(debug@4.3.4) + version: 7.2.0(debug@4.4.0) workbox-build: specifier: ^7.0.0 version: 7.0.0(@types/babel__core@7.20.2) @@ -260,7 +260,7 @@ importers: version: 1.0.1-beta.9(@rsbuild/core@1.0.1-beta.9) '@rsbuild/plugin-type-check': specifier: ^1.0.1-beta.9 - version: 1.0.1-beta.9(@rsbuild/core@1.0.1-beta.9)(esbuild@0.19.3)(typescript@5.5.4) + version: 1.0.1-beta.9(@rsbuild/core@1.0.1-beta.9)(esbuild@0.19.11)(typescript@5.5.4) '@rsbuild/plugin-typed-css-modules': specifier: ^1.0.1 version: 1.0.1(@rsbuild/core@1.0.1-beta.9) @@ -278,7 +278,7 @@ importers: version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.4) '@storybook/react-vite': specifier: ^7.4.6 - version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3)) + version: 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3)) '@types/diff-match-patch': specifier: ^1.0.36 version: 1.0.36 @@ -305,7 +305,7 @@ importers: version: 5.1.0 assert: specifier: ^2.0.0 - version: 2.0.0 + version: 2.1.0 browserify-zlib: specifier: ^0.2.0 version: 0.2.0 @@ -341,19 +341,19 @@ importers: version: 1.7.0 http-server: specifier: ^14.1.1 - version: 14.1.1(debug@4.3.4) + version: 14.1.1(debug@4.4.0) https-browserify: specifier: ^1.0.0 version: 1.0.0 mc-assets: - specifier: ^0.2.23 - version: 0.2.23 + specifier: ^0.2.28 + version: 0.2.28 minecraft-inventory-gui: specifier: github:zardoy/minecraft-inventory-gui#next version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/75e940a4cd50d89e0ba03db3733d5d704917a3c8(@types/react@18.2.20)(react@18.2.0) mineflayer: specifier: github:zardoy/mineflayer - version: https://codeload.github.com/zardoy/mineflayer/tar.gz/390ce12c1e1f25e440a94ba422e45c874f8bbd2b(encoding@0.1.13) + version: https://codeload.github.com/zardoy/mineflayer/tar.gz/54f8c2282d822ad02967a197bda36302a4e7b4a5(encoding@0.1.13) mineflayer-pathfinder: specifier: ^2.4.4 version: 2.4.4 @@ -398,7 +398,7 @@ importers: version: 0.34.6(terser@5.31.3) yaml: specifier: ^2.3.2 - version: 2.3.2 + version: 2.4.1 prismarine-viewer: dependencies: @@ -407,7 +407,7 @@ importers: version: 20.0.3 assert: specifier: ^2.0.0 - version: 2.0.0 + version: 2.1.0 buffer: specifier: ^6.0.3 version: 6.0.3 @@ -428,10 +428,10 @@ importers: version: 1.3.6 prismarine-block: specifier: github:zardoy/prismarine-block#next-era - version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 + version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-chunk: specifier: github:zardoy/prismarine-chunk#master - version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) + version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) prismarine-schematic: specifier: ^1.2.0 version: 1.2.3 @@ -475,7 +475,7 @@ importers: dependencies: vite: specifier: ^4.4.9 - version: 4.4.10(@types/node@22.8.1)(terser@5.31.3) + version: 4.5.3(@types/node@22.8.1)(terser@5.31.3) packages: @@ -533,12 +533,6 @@ packages: resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.22.11': - resolution: {integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.22.15': resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} @@ -560,10 +554,6 @@ packages: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - '@babel/helper-environment-visitor@7.22.5': - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.22.5': resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} @@ -572,10 +562,6 @@ packages: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.22.5': - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.23.0': resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} @@ -584,16 +570,6 @@ packages: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.22.5': - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.22.9': - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.23.0': resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} @@ -640,18 +616,10 @@ packages: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.5': - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.22.15': resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.22.5': - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.22.10': resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} engines: {node: '>=6.9.0'} @@ -960,12 +928,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.22.11': - resolution: {integrity: sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.23.0': resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} engines: {node: '>=6.9.0'} @@ -1172,10 +1134,6 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.22.11': - resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.5': resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} @@ -1188,10 +1146,6 @@ packages: resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.22.11': - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.23.0': resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} @@ -1252,15 +1206,9 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@emotion/babel-plugin@11.11.0': - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - '@emotion/babel-plugin@11.12.0': resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} - '@emotion/cache@11.11.0': - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - '@emotion/cache@11.13.1': resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} @@ -1272,15 +1220,9 @@ packages: '@babel/core': optional: true - '@emotion/hash@0.9.1': - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} @@ -1293,43 +1235,23 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.1.2': - resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} - '@emotion/serialize@1.3.0': resolution: {integrity: sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA==} - '@emotion/sheet@1.2.2': - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - '@emotion/unitless@0.9.0': resolution: {integrity: sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ==} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1': - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: ^18.2.0 - '@emotion/use-insertion-effect-with-fallbacks@1.1.0': resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} peerDependencies: react: ^18.2.0 - '@emotion/utils@1.2.1': - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - '@emotion/utils@1.4.0': resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} - '@emotion/weak-memoize@0.3.1': - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} @@ -1351,12 +1273,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.19.3': - resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.18.20': resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -1369,12 +1285,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.19.3': - resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.18.20': resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -1387,12 +1297,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.19.3': - resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.18.20': resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -1405,12 +1309,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.19.3': - resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.18.20': resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -1423,12 +1321,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.19.3': - resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -1441,12 +1333,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.19.3': - resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -1459,12 +1345,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.3': - resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.18.20': resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -1477,12 +1357,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.19.3': - resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.18.20': resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -1495,12 +1369,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.19.3': - resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.18.20': resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -1513,12 +1381,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.19.3': - resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.18.20': resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -1531,12 +1393,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.19.3': - resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.18.20': resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -1549,12 +1405,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.19.3': - resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.18.20': resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -1567,12 +1417,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.19.3': - resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.18.20': resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -1585,12 +1429,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.19.3': - resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.18.20': resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -1603,12 +1441,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.19.3': - resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.18.20': resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -1621,12 +1453,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.19.3': - resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/netbsd-x64@0.18.20': resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -1639,12 +1465,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.19.3': - resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/openbsd-x64@0.18.20': resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -1657,12 +1477,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.3': - resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1675,12 +1489,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.19.3': - resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.18.20': resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -1693,12 +1501,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.19.3': - resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.18.20': resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -1711,12 +1513,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.19.3': - resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.18.20': resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -1729,12 +1525,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.19.3': - resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1766,12 +1556,6 @@ packages: '@floating-ui/dom@1.5.3': resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} - '@floating-ui/react-dom@2.0.2': - resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==} - peerDependencies: - react: ^18.2.0 - react-dom: '>=16.8.0' - '@floating-ui/react-dom@2.0.9': resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==} peerDependencies: @@ -2025,9 +1809,6 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/trace-mapping@0.3.19': - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -2963,9 +2744,6 @@ packages: '@types/estree@0.0.51': resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - '@types/estree@1.0.2': - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -3053,12 +2831,6 @@ packages: '@types/node@16.18.58': resolution: {integrity: sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==} - '@types/node@20.12.8': - resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} - - '@types/node@20.8.0': - resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} - '@types/node@22.8.1': resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==} @@ -3077,9 +2849,6 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - '@types/qs@6.9.8': resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} @@ -3161,9 +2930,6 @@ packages: '@types/yargs@17.0.28': resolution: {integrity: sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==} - '@types/yauzl@2.10.1': - resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==} - '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -3401,8 +3167,8 @@ packages: resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} - '@zardoy/flying-squid@0.0.49': - resolution: {integrity: sha512-Kt4wr5/R+44tcLU9gjuNG2an9weWeKEpIoKXfsgJN2GGQqdnbd5nBpxfGDdgZ9aMdFugsVW8BsyPZNhj9vbMXA==} + '@zardoy/flying-squid@0.0.51': + resolution: {integrity: sha512-HHZ79H9NkS44lL9vk6gVEuJDJqj88gpiBt9Ihh5p4rHXTVbRid95riiNK5dD0kHI94P5/DXdtNalvmJDPU86oQ==} engines: {node: '>=8'} hasBin: true @@ -3454,11 +3220,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} @@ -3606,20 +3367,13 @@ packages: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - - array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -3636,12 +3390,12 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} engines: {node: '>= 0.4'} - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} engines: {node: '>= 0.4'} array.prototype.toreversed@1.1.2: @@ -3651,12 +3405,8 @@ packages: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} arraybuffer.slice@0.0.7: @@ -3679,9 +3429,6 @@ packages: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} - assert@2.0.0: - resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} - assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} @@ -3711,6 +3458,10 @@ packages: async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} @@ -3732,10 +3483,6 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -3925,11 +3672,6 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.21.10: - resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.23.2: resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3997,11 +3739,16 @@ packages: resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} engines: {node: '>=6'} - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -4023,9 +3770,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001643: - resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} - caniuse-lite@1.0.30001646: resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} @@ -4080,7 +3824,6 @@ packages: chokidar@2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} - deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -4392,16 +4135,16 @@ packages: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} - data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} dayjs@1.11.9: @@ -4443,8 +4186,8 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4452,8 +4195,8 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4510,10 +4253,6 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} - engines: {node: '>= 0.4'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -4678,6 +4417,10 @@ packages: draco3d@1.5.6: resolution: {integrity: sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -4701,9 +4444,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.4.504: - resolution: {integrity: sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==} - electron-to-chromium@1.5.0: resolution: {integrity: sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==} @@ -4791,24 +4531,20 @@ packages: eruda@3.0.1: resolution: {integrity: sha512-6q1Xdwga4JTr1mKSW4mzuWSSbmXgqpm/8Wa1QGFGfCWRjC0bCQjbS4u06M1te1moucIS3hBLlbSTPWYH2W0qbQ==} - es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} - engines: {node: '>= 0.4'} - - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.1.0: - resolution: {integrity: sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==} + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} es-module-lexer@0.9.3: @@ -4817,31 +4553,21 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es6-object-assign@1.1.0: - resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} - es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -4871,11 +4597,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.19.3: - resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==} - engines: {node: '>=12'} - hasBin: true - escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -5042,6 +4763,7 @@ packages: eslint@8.50.0: resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@10.1.0: @@ -5298,15 +5020,6 @@ packages: resolution: {integrity: sha512-mk4e7UK4P/W3tjrJyto6oxPuCjwvRMyzBh72hTl8T0dOcTzkP0M2JJHpncgyhKphMFi9pnjwHfc8e0oe4Uk3LA==} engines: {node: '>=0.4.0'} - follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - follow-redirects@1.15.6: resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} @@ -5316,8 +5029,9 @@ packages: debug: optional: true - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.4: + resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} + engines: {node: '>= 0.4'} for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} @@ -5404,14 +5118,11 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} functions-have-names@1.2.3: @@ -5438,11 +5149,8 @@ packages: get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -5464,6 +5172,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -5472,12 +5184,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - - get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} get-tsconfig@4.7.2: @@ -5556,10 +5264,6 @@ packages: resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} engines: {node: '>=8'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -5571,8 +5275,9 @@ packages: glsl-tokenizer@2.1.5: resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -5597,8 +5302,9 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} has-binary2@1.0.3: resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==} @@ -5614,26 +5320,15 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: @@ -5670,10 +5365,6 @@ packages: hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -5854,12 +5545,8 @@ packages: inline-style-prefixer@6.0.4: resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - - internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} invariant@2.2.4: @@ -5884,11 +5571,8 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - - is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: @@ -5897,12 +5581,13 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@1.0.1: resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} @@ -5912,8 +5597,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.1: + resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} engines: {node: '>= 0.4'} is-buffer@1.1.6: @@ -5931,23 +5616,20 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} - is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} is-deflate@1.0.0: @@ -5978,8 +5660,9 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -5988,8 +5671,8 @@ packages: is-function@1.0.2: resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@3.1.0: @@ -6026,16 +5709,8 @@ packages: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} is-number@3.0.0: @@ -6074,8 +5749,8 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} is-regexp@1.0.0: @@ -6086,31 +5761,24 @@ packages: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-typedarray@1.0.0: @@ -6124,11 +5792,12 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.0: + resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} + engines: {node: '>= 0.4'} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} is-windows@1.0.2: @@ -6185,8 +5854,8 @@ packages: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} - iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} jackspeak@2.3.0: @@ -6443,6 +6112,7 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} @@ -6582,8 +6252,12 @@ packages: peerDependencies: react: ^18.2.0 - mc-assets@0.2.23: - resolution: {integrity: sha512-sLbPhsSOYdW8nYllIyPZbVPnLu7V3bZTgIO4mI4nlG525q17NIbUNEjItHKtdi60u0vI6qLgHKjf0CoNRqa/Nw==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mc-assets@0.2.28: + resolution: {integrity: sha512-NwUpKFExg/xs5YguFMeGa7Zie2yoJh2EcUSV4n46q4OF60AmgoEj0OSOS2xnZF2BL17JJ3Y97V6quAR9NCKLeQ==} engines: {node: '>=18.0.0'} md5-file@4.0.0: @@ -6772,8 +6446,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minecraft-data@3.80.0: - resolution: {integrity: sha512-UYq+ADpS9K1+cqiJiz6tqkht4y4cRYF3qOYanG9eIiHY+VC+qIAC7/UcW6G3adayvj5YBOCurlqaw3E0TMAtHg==} + minecraft-data@3.83.1: + resolution: {integrity: sha512-5K26za9k5WV1OnfkGexA77lBhfGZeFw3rT3NM7/rbFXRZC65prCx7Tk2BQvC9UfzgxxvmxHfxM5y8G1U+Oxgfg==} minecraft-folder-path@1.2.0: resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==} @@ -6782,10 +6456,10 @@ packages: resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/75e940a4cd50d89e0ba03db3733d5d704917a3c8} version: 1.0.1 - minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d: - resolution: {tarball: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d} - version: 1.51.0 - engines: {node: '>=14'} + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76: + resolution: {tarball: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76} + version: 1.54.0 + engines: {node: '>=22'} minecraft-wrap@1.5.1: resolution: {integrity: sha512-7DZ2WhrcRD3fUMau84l9Va0KWzV92SHNdB7mnNdNhgXID2aW6pjWuYPZi8MepEBemA4XKKdnDx7HmhTbkoiR8A==} @@ -6794,20 +6468,20 @@ packages: minecrafthawkeye@1.3.6: resolution: {integrity: sha512-SlRlorxQs6nNzMiiIQ5z47wzbAI27UaCdbRB82CE8jqj4C8m3Gqk5TlgN+PSThxx8EDPXySzd8Vk+/wNigAd5A==} - mineflayer-item-map-downloader@https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/642fd4f7023a98a96da4caf8f993f8e19361a1e7: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/642fd4f7023a98a96da4caf8f993f8e19361a1e7} + mineflayer-item-map-downloader@https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/a8d210ecdcf78dd082fa149a96e1612cc9747824: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/a8d210ecdcf78dd082fa149a96e1612cc9747824} version: 1.2.0 mineflayer-pathfinder@2.4.4: resolution: {integrity: sha512-HAXakZrJRb1UC+5dv8EaDrqjW3ZnBnBk3nkb6x/YWyhHCUKn/E7VU0FO+UN9whuqPlkSaVumEdXJdydE6lSYxQ==} - mineflayer@4.23.0: - resolution: {integrity: sha512-wSchhS59hK+oPs8tFg847H82YEvxU7zYKdDKj4e5FVo3CxJ74eXJVT+JcFwEvoqFO7kXiQlhJITxEvO13GOSKA==} + mineflayer@4.25.0: + resolution: {integrity: sha512-q7cmpZFaSI6sodcMJxc2GkV8IO84HbsUP+xNipGKfGg+FMISKabzdJ838Axb60qRtZrp6ny7LluQE7lesHvvxQ==} engines: {node: '>=18'} - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/390ce12c1e1f25e440a94ba422e45c874f8bbd2b: - resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/390ce12c1e1f25e440a94ba422e45c874f8bbd2b} - version: 4.23.0 + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/54f8c2282d822ad02967a197bda36302a4e7b4a5: + resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/54f8c2282d822ad02967a197bda36302a4e7b4a5} + version: 4.25.0 engines: {node: '>=18'} minimalistic-assert@1.0.1: @@ -6823,10 +6497,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -6919,9 +6589,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -6937,11 +6604,6 @@ packages: react: ^18.2.0 react-dom: '*' - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -7028,9 +6690,6 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -7098,14 +6757,8 @@ packages: resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} engines: {node: '>=0.10.0'} - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} object-is@1.1.5: @@ -7120,12 +6773,8 @@ packages: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} object.entries@1.1.8: @@ -7144,12 +6793,8 @@ packages: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} engines: {node: '>=0.10.0'} - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} omggif@1.0.10: @@ -7204,6 +6849,10 @@ packages: ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -7379,12 +7028,6 @@ packages: resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -7466,10 +7109,6 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} @@ -7518,29 +7157,26 @@ packages: prismarine-biome@1.3.0: resolution: {integrity: sha512-GY6nZxq93mTErT7jD7jt8YS1aPrOakbJHh39seYsJFXvueIOdHAmW16kYQVrTVMW5MlWLQVxV/EquRwOgr4MnQ==} peerDependencies: - minecraft-data: 3.80.0 + minecraft-data: 3.83.1 prismarine-registry: ^1.1.0 - prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05} - version: 1.19.0 + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9} + version: 1.21.0 prismarine-chat@1.10.1: resolution: {integrity: sha512-XukYcuueuhDxzEXG7r8BZyt6jOObrPPB4JESCgb+/XenB9nExoSHF8eTQWWj8faKPLqm1dRQaYwFJlNBlJZJUw==} - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb} - version: 1.36.0 + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374} + version: 1.38.1 engines: {node: '>=14'} prismarine-entity@2.3.1: resolution: {integrity: sha512-HOv8l7IetHNf4hwZ7V/W4vM3GNl+e6VCtKDkH9h02TRq7jWngsggKtJV+VanCce/sNwtJUhJDjORGs728ep4MA==} - prismarine-item@1.15.0: - resolution: {integrity: sha512-DysyiCzaI8S7PpRLFylAZnQo2CppXiBbaUp+8rhK+EzvzmMdS+D1/oETQm9ysB5Jw9eCer6iWGMgzZXxJE5+/w==} - - prismarine-nbt@2.2.1: - resolution: {integrity: sha512-Mb50c58CPnuZ+qvM31DBa08tf9UumlTq1LkvpMoUpKfCuN05GZHTqCUwER3lxTSHLL0GZKghIPbYR/JQkINijQ==} + prismarine-item@1.16.0: + resolution: {integrity: sha512-88Tz+/6HquYIsDuseae5G3IbqLeMews2L+ba2gX+p6K6soU9nuFhCfbwN56QuB7d/jZFcWrCYAPE5+UhwWh67w==} prismarine-nbt@2.5.0: resolution: {integrity: sha512-F0/8UAa9SDDnAGrBYqZc4nG8h2zj5cE2eAJU5xlDR/IsQQ3moVxkOjE3h3nMv6SbvZrvAcgX7waA/nd9LLHYdA==} @@ -7549,8 +7185,8 @@ packages: resolution: {tarball: https://codeload.github.com/zardoy/prismarine-physics/tar.gz/353e25b800149393f40539ec381218be44cbb03b} version: 1.9.0 - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/d807fc339a3d95a7aef91468d4d64d367e7c682a: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/d807fc339a3d95a7aef91468d4d64d367e7c682a} + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/a3a7d031069373cc3e0cd05e54512dd9461ca34b: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/a3a7d031069373cc3e0cd05e54512dd9461ca34b} version: 2.8.0 prismarine-realms@1.3.2: @@ -7561,11 +7197,8 @@ packages: peerDependencies: prismarine-registry: ^1.4.0 - prismarine-registry@1.10.0: - resolution: {integrity: sha512-6TYQiZHtsJ87HsB2E0yamCFp77ZyyLT16OmW5iXB5V30yCPflhHvR5TR2IqISmmiRc2093BkHfiIhsOZaMatmQ==} - - prismarine-registry@1.7.0: - resolution: {integrity: sha512-yyva0FpWI078nNeMhx8ekVza5uUTYhEv+C+ADu3wUQXiG8qhXkvrf0uzsnhTgZL8BLdsi2axgCEiKw9qSKIuxQ==} + prismarine-registry@1.11.0: + resolution: {integrity: sha512-uTvWE+bILxYv4i5MrrlxPQ0KYWINv1DJ3P2570GLC8uCdByDiDLBFfVyk4BrqOZBlDBft9CnaJMeOsC1Ly1iXw==} prismarine-schematic@1.2.3: resolution: {integrity: sha512-Mwpn43vEHhm3aw3cPhJjWqztkW+nX+QLajDHlTask8lEOTGl1WmpvFja4iwiws4GIvaC8x0Foptf4uvDsnjrAg==} @@ -7573,8 +7206,8 @@ packages: prismarine-windows@2.9.0: resolution: {integrity: sha512-fm4kOLjGFPov7TEJRmXHoiPabxIQrG36r2mDjlNxfkcLfMHFb3/1ML6mp4iRQa7wL0GK4DIAyiBqCWoeWDxARg==} - prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be: - resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be} + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c: + resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c} version: 3.6.3 engines: {node: '>=8.0.0'} @@ -7663,12 +7296,8 @@ packages: resolution: {integrity: sha512-lZ5FWKZYR9xOjpMw1+EfZRfCjzNRQWPq+Dk+jki47Sikl2EeWEPnTfnJERwnU/EwFq6us+0zqHHzSsmLeYX+Lg==} hasBin: true - protodef@1.15.0: - resolution: {integrity: sha512-bZ2Omw8dT+DACjJHLrBWZlqN4MlT9g9oSpJDdkUAJOStUzgJp+Zn42FJfPUdwutUxjaxA0PftN0PDlNa2XbneA==} - engines: {node: '>=14'} - - protodef@1.17.0: - resolution: {integrity: sha512-mnpNPV3xwu63u3NwZuXM1RCp979vjHxUGHzVrb6dxbvof5Fx+b8Rs0G0c3xtEuFDreGAMWS7VrlNkDUDBMsFWQ==} + protodef@1.18.0: + resolution: {integrity: sha512-jO64lkzkh0dYc0AVWCU/GzCKwqhFFIz1kfEz0NBf0RUuRNcmvgKbopabJdfZ6W8NvALdySUXgEhvKDZPhdBwrg==} engines: {node: '>=14'} proxy-addr@2.0.7: @@ -7710,10 +7339,6 @@ packages: punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -8004,8 +7629,8 @@ packages: reduce-configs@1.0.0: resolution: {integrity: sha512-/JCYSgL/QeXXsq0Lv/7kOZfqvof7vyzHWfyNQPt3c6vc73mU4WRyT8RJ6ZH5Ci08vUOqXwk7jkZy6BycHTDD9w==} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} regenerate-unicode-properties@10.1.0: @@ -8032,12 +7657,8 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} regexpp@3.2.0: @@ -8192,12 +7813,8 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - - safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -8206,11 +7823,12 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} - safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} safe-regex@1.1.0: @@ -8253,11 +7871,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -8291,12 +7904,8 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} set-function-name@2.0.2: @@ -8307,7 +7916,11 @@ packages: resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} engines: {node: '>=6.9'} - set-value@2.0.1: + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -8351,15 +7964,20 @@ packages: shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} - side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -8467,10 +8085,6 @@ packages: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -8606,34 +8220,22 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} string.prototype.padend@3.1.4: resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} @@ -8771,11 +8373,6 @@ packages: uglify-js: optional: true - terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} - engines: {node: '>=10'} - hasBin: true - terser@5.31.3: resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} engines: {node: '>=10'} @@ -8909,12 +8506,6 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -8991,35 +8582,20 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} typed-emitter@1.4.0: @@ -9053,11 +8629,9 @@ packages: uint4@0.1.2: resolution: {integrity: sha512-lhEx78gdTwFWG+mt6cWAZD/R6qrIj0TTBeH5xwyuDJyswLNlGe+KVlUPQ6+mx5Ld332pS0AMUTo9hIly7YsWxQ==} - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -9163,12 +8737,6 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - update-browserslist-db@1.0.11: - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true @@ -9329,34 +8897,6 @@ packages: engines: {node: '>=v14.18.0'} hasBin: true - vite@4.4.10: - resolution: {integrity: sha512-TzIjiqx9BEXF8yzYdF2NTf1kFFbjMjUSV0LFZ3HyHoI3SGSPLnnFUKiIQtL3gl2AjHvMrprOvQ3amzaHgQlAxw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@4.5.3: resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9433,10 +8973,6 @@ packages: warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} - watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -9492,23 +9028,20 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} engines: {node: '>= 0.4'} which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} which@1.3.1: @@ -9692,10 +9225,6 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - yaml@2.4.1: resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} engines: {node: '>= 14'} @@ -9794,7 +9323,7 @@ snapshots: '@babel/traverse': 7.22.11 '@babel/types': 7.23.0 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -9803,18 +9332,18 @@ snapshots: '@babel/generator@7.22.10': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.22.5': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-builder-binary-assignment-operator-visitor@7.22.10': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-compilation-targets@7.22.10': dependencies: @@ -9824,24 +9353,11 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.22.11)': - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.11) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.22.5 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -9862,7 +9378,7 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.4 transitivePeerDependencies: @@ -9870,18 +9386,12 @@ snapshots: '@babel/helper-environment-visitor@7.22.20': {} - '@babel/helper-environment-visitor@7.22.5': {} - '@babel/helper-function-name@7.22.5': dependencies: '@babel/template': 7.22.5 - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.22.11 - - '@babel/helper-member-expression-to-functions@7.22.5': dependencies: '@babel/types': 7.23.0 @@ -9893,19 +9403,6 @@ snapshots: dependencies: '@babel/types': 7.23.0 - '@babel/helper-module-imports@7.22.5': - dependencies: - '@babel/types': 7.22.11 - - '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11)': - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/helper-module-transforms@7.23.0(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -9917,7 +9414,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-plugin-utils@7.22.5': {} @@ -9925,38 +9422,34 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.10 '@babel/helper-replace-supers@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-simple-access@7.22.5': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-split-export-declaration@7.22.6': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@babel/helper-string-parser@7.22.5': {} '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.22.5': {} - '@babel/helper-validator-option@7.22.15': {} - '@babel/helper-validator-option@7.22.5': {} - '@babel/helper-wrap-function@7.22.10': dependencies: '@babel/helper-function-name': 7.22.5 @@ -9973,7 +9466,7 @@ snapshots: '@babel/highlight@7.22.13': dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 @@ -9996,7 +9489,7 @@ snapshots: '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.11)': @@ -10130,7 +9623,7 @@ snapshots: '@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11) @@ -10138,7 +9631,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) @@ -10155,13 +9648,13 @@ snapshots: '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.11) @@ -10170,7 +9663,7 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.10 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 @@ -10261,15 +9754,8 @@ snapshots: '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.22.11)': - dependencies: - '@babel/core': 7.22.11 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.11)': dependencies: @@ -10282,14 +9768,14 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.11)': @@ -10351,14 +9837,14 @@ snapshots: '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.11) @@ -10451,7 +9937,7 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 + '@babel/helper-validator-option': 7.22.15 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.11) '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.11) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.11) @@ -10495,7 +9981,7 @@ snapshots: '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.22.11) '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.11) - '@babel/plugin-transform-modules-commonjs': 7.22.11(@babel/core@7.22.11) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.11) '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.22.11) '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.11) @@ -10522,7 +10008,7 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.11) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.11) - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.11) babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.11) babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.11) @@ -10542,7 +10028,7 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 esutils: 2.0.3 '@babel/preset-typescript@7.23.0(@babel/core@7.22.11)': @@ -10565,10 +10051,6 @@ snapshots: '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.22.11': - dependencies: - regenerator-runtime: 0.14.0 - '@babel/runtime@7.24.5': dependencies: regenerator-runtime: 0.14.0 @@ -10589,17 +10071,11 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.13 '@babel/types': 7.23.0 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.22.11': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - '@babel/types@7.23.0': dependencies: '@babel/helper-string-parser': 7.22.5 @@ -10682,20 +10158,6 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@emotion/babel-plugin@11.11.0': - dependencies: - '@babel/helper-module-imports': 7.22.5 - '@babel/runtime': 7.24.5 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.2 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - '@emotion/babel-plugin@11.12.0': dependencies: '@babel/helper-module-imports': 7.22.15 @@ -10710,14 +10172,6 @@ snapshots: source-map: 0.5.7 stylis: 4.2.0 - '@emotion/cache@11.11.0': - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - '@emotion/cache@11.13.1': dependencies: '@emotion/memoize': 0.9.0 @@ -10728,20 +10182,16 @@ snapshots: '@emotion/css@11.5.0(@babel/core@7.22.11)': dependencies: - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.2 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.0 optionalDependencies: '@babel/core': 7.22.11 - '@emotion/hash@0.9.1': {} - '@emotion/hash@0.9.2': {} - '@emotion/memoize@0.8.1': {} - '@emotion/memoize@0.9.0': {} '@emotion/react@11.13.0(@types/react@18.2.20)(react@18.2.0)': @@ -10758,14 +10208,6 @@ snapshots: optionalDependencies: '@types/react': 18.2.20 - '@emotion/serialize@1.1.2': - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.2 - '@emotion/serialize@1.3.0': dependencies: '@emotion/hash': 0.9.2 @@ -10774,28 +10216,16 @@ snapshots: '@emotion/utils': 1.4.0 csstype: 3.1.2 - '@emotion/sheet@1.2.2': {} - '@emotion/sheet@1.4.0': {} - '@emotion/unitless@0.8.1': {} - '@emotion/unitless@0.9.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': - dependencies: - react: 18.2.0 - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.2.0)': dependencies: react: 18.2.0 - '@emotion/utils@1.2.1': {} - '@emotion/utils@1.4.0': {} - '@emotion/weak-memoize@0.3.1': {} - '@emotion/weak-memoize@0.4.0': {} '@esbuild/aix-ppc64@0.19.11': @@ -10807,198 +10237,132 @@ snapshots: '@esbuild/android-arm64@0.19.11': optional: true - '@esbuild/android-arm64@0.19.3': - optional: true - '@esbuild/android-arm@0.18.20': optional: true '@esbuild/android-arm@0.19.11': optional: true - '@esbuild/android-arm@0.19.3': - optional: true - '@esbuild/android-x64@0.18.20': optional: true '@esbuild/android-x64@0.19.11': optional: true - '@esbuild/android-x64@0.19.3': - optional: true - '@esbuild/darwin-arm64@0.18.20': optional: true '@esbuild/darwin-arm64@0.19.11': optional: true - '@esbuild/darwin-arm64@0.19.3': - optional: true - '@esbuild/darwin-x64@0.18.20': optional: true '@esbuild/darwin-x64@0.19.11': optional: true - '@esbuild/darwin-x64@0.19.3': - optional: true - '@esbuild/freebsd-arm64@0.18.20': optional: true '@esbuild/freebsd-arm64@0.19.11': optional: true - '@esbuild/freebsd-arm64@0.19.3': - optional: true - '@esbuild/freebsd-x64@0.18.20': optional: true '@esbuild/freebsd-x64@0.19.11': optional: true - '@esbuild/freebsd-x64@0.19.3': - optional: true - '@esbuild/linux-arm64@0.18.20': optional: true '@esbuild/linux-arm64@0.19.11': optional: true - '@esbuild/linux-arm64@0.19.3': - optional: true - '@esbuild/linux-arm@0.18.20': optional: true '@esbuild/linux-arm@0.19.11': optional: true - '@esbuild/linux-arm@0.19.3': - optional: true - '@esbuild/linux-ia32@0.18.20': optional: true '@esbuild/linux-ia32@0.19.11': optional: true - '@esbuild/linux-ia32@0.19.3': - optional: true - '@esbuild/linux-loong64@0.18.20': optional: true '@esbuild/linux-loong64@0.19.11': optional: true - '@esbuild/linux-loong64@0.19.3': - optional: true - '@esbuild/linux-mips64el@0.18.20': optional: true '@esbuild/linux-mips64el@0.19.11': optional: true - '@esbuild/linux-mips64el@0.19.3': - optional: true - '@esbuild/linux-ppc64@0.18.20': optional: true '@esbuild/linux-ppc64@0.19.11': optional: true - '@esbuild/linux-ppc64@0.19.3': - optional: true - '@esbuild/linux-riscv64@0.18.20': optional: true '@esbuild/linux-riscv64@0.19.11': optional: true - '@esbuild/linux-riscv64@0.19.3': - optional: true - '@esbuild/linux-s390x@0.18.20': optional: true '@esbuild/linux-s390x@0.19.11': optional: true - '@esbuild/linux-s390x@0.19.3': - optional: true - '@esbuild/linux-x64@0.18.20': optional: true '@esbuild/linux-x64@0.19.11': optional: true - '@esbuild/linux-x64@0.19.3': - optional: true - '@esbuild/netbsd-x64@0.18.20': optional: true '@esbuild/netbsd-x64@0.19.11': optional: true - '@esbuild/netbsd-x64@0.19.3': - optional: true - '@esbuild/openbsd-x64@0.18.20': optional: true '@esbuild/openbsd-x64@0.19.11': optional: true - '@esbuild/openbsd-x64@0.19.3': - optional: true - '@esbuild/sunos-x64@0.18.20': optional: true '@esbuild/sunos-x64@0.19.11': optional: true - '@esbuild/sunos-x64@0.19.3': - optional: true - '@esbuild/win32-arm64@0.18.20': optional: true '@esbuild/win32-arm64@0.19.11': optional: true - '@esbuild/win32-arm64@0.19.3': - optional: true - '@esbuild/win32-ia32@0.18.20': optional: true '@esbuild/win32-ia32@0.19.11': optional: true - '@esbuild/win32-ia32@0.19.3': - optional: true - '@esbuild/win32-x64@0.18.20': optional: true '@esbuild/win32-x64@0.19.11': optional: true - '@esbuild/win32-x64@0.19.3': - optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.50.0)': dependencies: eslint: 8.50.0 @@ -11009,7 +10373,7 @@ snapshots: '@eslint/eslintrc@2.1.2': dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) espree: 9.6.1 globals: 13.21.0 ignore: 5.2.4 @@ -11035,12 +10399,6 @@ snapshots: '@floating-ui/core': 1.5.0 '@floating-ui/utils': 0.1.6 - '@floating-ui/react-dom@2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@floating-ui/dom': 1.5.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - '@floating-ui/react-dom@2.0.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/dom': 1.5.3 @@ -11049,7 +10407,7 @@ snapshots: '@floating-ui/react@0.26.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/utils': 0.1.6 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -11069,7 +10427,7 @@ snapshots: '@humanwhocodes/config-array@0.11.11': dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -11105,7 +10463,7 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -11432,13 +10790,13 @@ snapshots: regenerator-runtime: 0.13.11 optional: true - '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.2.1(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.5.4) - vite: 4.5.3(@types/node@20.8.0)(terser@5.31.3) + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) optionalDependencies: typescript: 5.5.4 @@ -11446,7 +10804,7 @@ snapshots: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.1': {} @@ -11455,15 +10813,10 @@ snapshots: '@jridgewell/source-map@0.3.5': dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/trace-mapping@0.3.19': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.1 @@ -11482,7 +10835,7 @@ snapshots: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.4 + semver: 7.6.0 tar: 6.2.0 transitivePeerDependencies: - encoding @@ -11692,7 +11045,7 @@ snapshots: '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@floating-ui/react-dom': 2.0.9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.20)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.20)(react@18.2.0) @@ -11913,7 +11266,7 @@ snapshots: '@rollup/plugin-babel@5.3.1(@babel/core@7.22.11)(@types/babel__core@7.20.2)(rollup@2.79.1)': dependencies: '@babel/core': 7.22.11 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.22.15 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 optionalDependencies: @@ -11944,7 +11297,7 @@ snapshots: '@rollup/pluginutils@5.0.5(rollup@2.79.1)': dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: @@ -11994,14 +11347,14 @@ snapshots: '@rspack/plugin-react-refresh': 1.0.0-beta.1(react-refresh@0.14.2) react-refresh: 0.14.2 - '@rsbuild/plugin-type-check@1.0.1-beta.9(@rsbuild/core@1.0.1-beta.9)(esbuild@0.19.3)(typescript@5.5.4)': + '@rsbuild/plugin-type-check@1.0.1-beta.9(@rsbuild/core@1.0.1-beta.9)(esbuild@0.19.11)(typescript@5.5.4)': dependencies: '@rsbuild/core': 1.0.1-beta.9 deepmerge: 4.3.1 - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.4)(webpack@5.93.0(esbuild@0.19.3)) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.4)(webpack@5.93.0(esbuild@0.19.11)) json5: 2.2.3 reduce-configs: 1.0.0 - webpack: 5.93.0(esbuild@0.19.3) + webpack: 5.93.0(esbuild@0.19.11) transitivePeerDependencies: - '@swc/core' - esbuild @@ -12347,7 +11700,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.4.6(encoding@0.1.13)(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3))': + '@storybook/builder-vite@7.4.6(encoding@0.1.13)(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3))': dependencies: '@storybook/channels': 7.4.6 '@storybook/client-logger': 7.4.6 @@ -12368,7 +11721,7 @@ snapshots: remark-external-links: 8.0.0 remark-slug: 6.1.0 rollup: 3.29.4 - vite: 4.5.3(@types/node@20.8.0)(terser@5.31.3) + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -12388,7 +11741,7 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.4.6 '@storybook/core-common': 7.4.6(encoding@0.1.13) @@ -12421,7 +11774,7 @@ snapshots: prompts: 2.4.2 puppeteer-core: 2.1.1 read-pkg-up: 7.0.1 - semver: 7.5.4 + semver: 7.6.0 simple-update-notifier: 2.0.0 strip-json-comments: 3.1.1 tempy: 1.0.1 @@ -12441,7 +11794,7 @@ snapshots: dependencies: '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@storybook/csf': 0.1.1 '@storybook/csf-tools': 7.4.6 '@storybook/node-logger': 7.4.6 @@ -12547,13 +11900,13 @@ snapshots: pretty-hrtime: 1.0.3 prompts: 2.4.2 read-pkg-up: 7.0.1 - semver: 7.5.4 + semver: 7.6.0 telejson: 7.2.0 tiny-invariant: 1.3.1 ts-dedent: 2.2.0 util: 0.12.5 util-deprecate: 1.0.2 - watchpack: 2.4.0 + watchpack: 2.4.1 ws: 8.11.0 transitivePeerDependencies: - bufferutil @@ -12573,7 +11926,7 @@ snapshots: '@babel/generator': 7.22.10 '@babel/parser': 7.22.13 '@babel/traverse': 7.22.11 - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@storybook/csf': 0.1.1 '@storybook/types': 7.4.6 fs-extra: 11.1.1 @@ -12617,7 +11970,7 @@ snapshots: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - semver: 7.5.4 + semver: 7.6.0 store2: 2.14.2 telejson: 7.2.0 ts-dedent: 2.2.0 @@ -12654,19 +12007,19 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@storybook/react-vite@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3))': + '@storybook/react-vite@7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@2.79.1)(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.2.1(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3)) '@rollup/pluginutils': 5.0.5(rollup@2.79.1) - '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.5.4)(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3)) + '@storybook/builder-vite': 7.4.6(encoding@0.1.13)(typescript@5.5.4)(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3)) '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.5.4) - '@vitejs/plugin-react': 3.1.0(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3)) + '@vitejs/plugin-react': 3.1.0(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3)) ast-types: 0.14.2 magic-string: 0.30.4 react: 18.2.0 react-docgen: 6.0.0-alpha.3 react-dom: 18.2.0(react@18.2.0) - vite: 4.5.3(@types/node@20.8.0)(terser@5.31.3) + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) transitivePeerDependencies: - '@preact/preset-vite' - encoding @@ -12730,7 +12083,7 @@ snapshots: '@storybook/theming@7.4.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) '@storybook/client-logger': 7.4.6 '@storybook/global': 5.0.0 memoizerific: 1.11.3 @@ -12796,7 +12149,7 @@ snapshots: ejs: 3.1.9 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 '@swc/helpers@0.5.11': dependencies: @@ -12811,23 +12164,23 @@ snapshots: '@types/babel__core@7.20.2': dependencies: '@babel/parser': 7.22.13 - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@types/babel__generator': 7.6.5 '@types/babel__template': 7.4.2 '@types/babel__traverse': 7.20.2 '@types/babel__generator@7.6.5': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@types/babel__template@7.4.2': dependencies: '@babel/parser': 7.22.13 - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@types/babel__traverse@7.20.2': dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.0 '@types/body-parser@1.19.3': dependencies: @@ -12886,8 +12239,6 @@ snapshots: '@types/estree@0.0.51': {} - '@types/estree@1.0.2': {} - '@types/estree@1.0.5': {} '@types/express-serve-static-core@4.17.37': @@ -12945,7 +12296,7 @@ snapshots: '@types/mdast@4.0.3': dependencies: - '@types/unist': 2.0.8 + '@types/unist': 3.0.2 '@types/mdx@2.0.8': {} @@ -12975,12 +12326,6 @@ snapshots: '@types/node@16.18.58': {} - '@types/node@20.12.8': - dependencies: - undici-types: 5.26.5 - - '@types/node@20.8.0': {} - '@types/node@22.8.1': dependencies: undici-types: 6.19.8 @@ -12995,8 +12340,6 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/prop-types@15.7.5': {} - '@types/qs@6.9.8': {} '@types/range-parser@1.2.5': {} @@ -13013,13 +12356,13 @@ snapshots: '@types/react@18.2.20': dependencies: - '@types/prop-types': 15.7.5 + '@types/prop-types': 15.7.12 '@types/scheduler': 0.16.3 csstype: 3.1.2 '@types/readable-stream@4.0.12': dependencies: - '@types/node': 20.12.8 + '@types/node': 22.8.1 safe-buffer: 5.1.2 '@types/resolve@1.17.1': @@ -13077,7 +12420,7 @@ snapshots: '@types/wait-on@5.3.4': dependencies: - '@types/node': 20.12.8 + '@types/node': 22.8.1 '@types/webxr@0.5.7': {} @@ -13089,14 +12432,9 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.1 - '@types/yauzl@2.10.1': - dependencies: - '@types/node': 22.8.1 - '@types/yauzl@2.10.3': dependencies: '@types/node': 22.8.1 - optional: true '@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.4))(eslint@8.50.0)(typescript@5.5.4)': dependencies: @@ -13106,14 +12444,14 @@ snapshots: '@typescript-eslint/type-utils': 6.1.0(eslint@8.50.0)(typescript@5.5.4) '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) eslint: 8.50.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 natural-compare-lite: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.5.4) + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -13125,7 +12463,7 @@ snapshots: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.7.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) eslint: 8.50.0 optionalDependencies: typescript: 5.5.4 @@ -13151,9 +12489,9 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.1.0(typescript@5.5.4) '@typescript-eslint/utils': 6.1.0(eslint@8.50.0)(typescript@5.5.4) - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) eslint: 8.50.0 - ts-api-utils: 1.0.3(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -13169,11 +12507,11 @@ snapshots: dependencies: '@typescript-eslint/types': 6.1.0 '@typescript-eslint/visitor-keys': 6.1.0 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -13183,11 +12521,11 @@ snapshots: dependencies: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.3(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -13197,7 +12535,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.0.0 '@typescript-eslint/visitor-keys': 8.0.0 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -13248,14 +12586,14 @@ snapshots: '@typescript-eslint/types': 8.0.0 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-react@3.1.0(vite@4.5.3(@types/node@20.8.0)(terser@5.31.3))': + '@vitejs/plugin-react@3.1.0(vite@4.5.3(@types/node@22.8.1)(terser@5.31.3))': dependencies: '@babel/core': 7.22.11 '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.11) '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.11) magic-string: 0.27.0 react-refresh: 0.14.2 - vite: 4.5.3(@types/node@20.8.0)(terser@5.31.3) + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) transitivePeerDependencies: - supports-color @@ -13365,10 +12703,10 @@ snapshots: '@xboxreplay/errors@0.1.0': {} - '@xboxreplay/xboxlive-auth@3.3.3(debug@4.3.4)': + '@xboxreplay/xboxlive-auth@3.3.3(debug@4.4.0)': dependencies: '@xboxreplay/errors': 0.1.0 - axios: 0.21.4(debug@4.3.4) + axios: 0.21.4(debug@4.4.0) transitivePeerDependencies: - debug @@ -13407,7 +12745,7 @@ snapshots: '@xmcl/unzip@2.1.2(yauzl@2.10.0)': dependencies: - '@types/yauzl': 2.10.1 + '@types/yauzl': 2.10.3 yauzl: 2.10.0 '@xobotyi/scrollbar-width@1.9.5': {} @@ -13431,7 +12769,7 @@ snapshots: '@types/emscripten': 1.39.8 tslib: 1.14.1 - '@zardoy/flying-squid@0.0.49(encoding@0.1.13)': + '@zardoy/flying-squid@0.0.51(encoding@0.1.13)': dependencies: '@tootallnate/once': 2.0.0 chalk: 5.3.0 @@ -13441,18 +12779,18 @@ snapshots: exit-hook: 2.2.1 flatmap: 0.0.3 long: 5.2.3 - minecraft-data: 3.80.0 - minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d(patch_hash=7sh5krubuk2vjuogjioaktvwzi)(encoding@0.1.13) + minecraft-data: 3.83.1 + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76(patch_hash=3wm2z233n46lqi64rbxem4nyv4)(encoding@0.1.13) mkdirp: 2.1.6 node-gzip: 1.1.2 node-rsa: 1.1.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) prismarine-entity: 2.3.1 - prismarine-item: 1.15.0 + prismarine-item: 1.16.0 prismarine-nbt: 2.5.0 - prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/d807fc339a3d95a7aef91468d4d64d367e7c682a(minecraft-data@3.80.0) + prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/a3a7d031069373cc3e0cd05e54512dd9461ca34b(minecraft-data@3.83.1) prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c rambda: 9.2.0 random-seed: 0.3.0 range: 0.0.3 @@ -13503,10 +12841,6 @@ snapshots: dependencies: acorn: 7.4.1 - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -13517,8 +12851,6 @@ snapshots: acorn@7.4.1: {} - acorn@8.10.0: {} - acorn@8.12.1: {} address@1.2.2: {} @@ -13534,14 +12866,14 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color optional: true agent-base@7.1.0: dependencies: - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -13658,34 +12990,21 @@ snapshots: arr-union@3.1.0: {} - array-buffer-byte-length@1.0.0: - dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 - - array-buffer-byte-length@1.0.1: + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bound: 1.0.3 + is-array-buffer: 3.0.5 array-flatten@1.1.1: {} - array-includes@3.1.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - array-includes@3.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + is-string: 1.1.1 array-union@2.1.0: {} @@ -13693,62 +13012,51 @@ snapshots: array.prototype.findlast@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: + array.prototype.flat@1.3.3: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: + array.prototype.flatmap@1.3.3: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 array.prototype.toreversed@1.1.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.2: + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - arraybuffer.prototype.slice@1.0.3: - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 + get-intrinsic: 1.2.7 + is-array-buffer: 3.0.5 arraybuffer.slice@0.0.7: optional: true @@ -13771,19 +13079,12 @@ snapshots: assert-plus@1.0.0: optional: true - assert@2.0.0: - dependencies: - es6-object-assign: 1.1.0 - is-nan: 1.3.2 - object-is: 1.1.5 - util: 0.12.5 - assert@2.1.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-nan: 1.3.2 object-is: 1.1.5 - object.assign: 4.1.5 + object.assign: 4.1.7 util: 0.12.5 assertion-error@1.1.0: {} @@ -13807,6 +13108,8 @@ snapshots: async-each@1.0.6: {} + async-function@1.0.0: {} + async-limiter@1.0.1: {} async@2.6.4: @@ -13821,8 +13124,6 @@ snapshots: atob@2.1.2: {} - available-typed-arrays@1.0.5: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -13833,15 +13134,15 @@ snapshots: aws4@1.12.0: optional: true - axios@0.21.4(debug@4.3.4): + axios@0.21.4(debug@4.4.0): dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.4.0) transitivePeerDependencies: - debug - axios@1.7.2(debug@4.3.4): + axios@1.7.2(debug@4.4.0): dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.4.0) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -14093,16 +13394,9 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.21.10: - dependencies: - caniuse-lite: 1.0.30001643 - electron-to-chromium: 1.4.504 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.10) - browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001643 + caniuse-lite: 1.0.30001646 electron-to-chromium: 1.5.0 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) @@ -14193,18 +13487,22 @@ snapshots: cachedir@2.4.0: optional: true - call-bind@1.0.2: + call-bind-apply-helpers@1.0.1: dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.7 + set-function-length: 1.2.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 callsites@3.1.0: {} @@ -14224,8 +13522,6 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001643: {} - caniuse-lite@1.0.30001646: {} canvas@2.11.2(encoding@0.1.13): @@ -14556,7 +13852,7 @@ snapshots: core-js-compat@3.32.1: dependencies: - browserslist: 4.21.10 + browserslist: 4.23.2 core-js@3.37.1: {} @@ -14709,7 +14005,7 @@ snapshots: commander: 5.1.0 common-tags: 1.8.2 dayjs: 1.11.9 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) enquirer: 2.4.1 eventemitter2: 6.4.7 execa: 4.1.0 @@ -14741,23 +14037,23 @@ snapshots: assert-plus: 1.0.0 optional: true - data-view-buffer@1.0.1: + data-view-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-length@1.0.1: + data-view-byte-length@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 - data-view-byte-offset@1.0.0: + data-view-byte-offset@1.0.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-data-view: 1.0.1 + is-data-view: 1.0.2 dayjs@1.11.9: optional: true @@ -14784,15 +14080,15 @@ snapshots: ms: 2.1.3 optional: true - debug@4.3.4(supports-color@8.1.1): + debug@4.3.7: dependencies: - ms: 2.1.2 - optionalDependencies: - supports-color: 8.1.1 + ms: 2.1.3 - debug@4.3.7: + debug@4.4.0(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 decamelize-keys@1.1.1: dependencies: @@ -14837,24 +14133,18 @@ snapshots: dependencies: clone: 1.0.4 - define-data-property@1.1.0: - dependencies: - get-intrinsic: 1.2.1 - gopd: 1.0.1 - has-property-descriptors: 1.0.0 - define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-lazy-prop@2.0.0: {} define-properties@1.2.1: dependencies: - define-data-property: 1.1.0 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 define-property@0.2.5: @@ -14924,7 +14214,7 @@ snapshots: detect-port@1.5.1: dependencies: address: 1.2.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -14934,9 +14224,9 @@ snapshots: diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/cfaad2d1d5909fdfa63c8cc7bc05fb5e87782d71: dependencies: - minecraft-data: 3.80.0 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) - prismarine-registry: 1.10.0 + minecraft-data: 3.83.1 + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) + prismarine-registry: 1.11.0 random-seed: 0.3.0 vec3: 0.1.8 @@ -15017,6 +14307,12 @@ snapshots: draco3d@1.5.6: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} duplexify@3.7.1: @@ -15044,8 +14340,6 @@ snapshots: dependencies: jake: 10.8.7 - electron-to-chromium@1.4.504: {} - electron-to-chromium@1.5.0: {} elliptic@6.5.4: @@ -15101,7 +14395,7 @@ snapshots: engine.io-client@6.5.2: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 engine.io-parser: 5.2.1 ws: 8.11.0 xmlhttprequest-ssl: 2.0.0 @@ -15144,7 +14438,7 @@ snapshots: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 engine.io-parser: 5.2.1 ws: 8.11.0 transitivePeerDependencies: @@ -15183,155 +14477,107 @@ snapshots: eruda@3.0.1: {} - es-abstract@1.22.2: - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.12.3 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 - - es-abstract@1.23.3: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.3 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.0 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.3 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.18 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.1.0: + es-iterator-helpers@1.2.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 globalthis: 1.0.4 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 es-module-lexer@0.9.3: {} es-module-lexer@1.5.4: {} - es-object-atoms@1.0.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.1: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - has-tostringtag: 1.0.0 - - es-set-tostringtag@2.0.3: + es-set-tostringtag@2.1.0: dependencies: - get-intrinsic: 1.2.4 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.0.0: - dependencies: - has: 1.0.3 - es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - es6-object-assign@1.1.0: {} + is-date-object: 1.1.0 + is-symbol: 1.1.1 es6-promise@4.2.8: {} @@ -15341,15 +14587,15 @@ snapshots: esbuild-plugin-alias@0.2.1: {} - esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.3): + esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.11): dependencies: '@jspm/core': 2.0.1 - esbuild: 0.19.3 + esbuild: 0.19.11 import-meta-resolve: 3.0.0 esbuild-register@3.5.0(esbuild@0.18.20): dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -15405,31 +14651,6 @@ snapshots: '@esbuild/win32-ia32': 0.19.11 '@esbuild/win32-x64': 0.19.11 - esbuild@0.19.3: - optionalDependencies: - '@esbuild/android-arm': 0.19.3 - '@esbuild/android-arm64': 0.19.3 - '@esbuild/android-x64': 0.19.3 - '@esbuild/darwin-arm64': 0.19.3 - '@esbuild/darwin-x64': 0.19.3 - '@esbuild/freebsd-arm64': 0.19.3 - '@esbuild/freebsd-x64': 0.19.3 - '@esbuild/linux-arm': 0.19.3 - '@esbuild/linux-arm64': 0.19.3 - '@esbuild/linux-ia32': 0.19.3 - '@esbuild/linux-loong64': 0.19.3 - '@esbuild/linux-mips64el': 0.19.3 - '@esbuild/linux-ppc64': 0.19.3 - '@esbuild/linux-riscv64': 0.19.3 - '@esbuild/linux-s390x': 0.19.3 - '@esbuild/linux-x64': 0.19.3 - '@esbuild/netbsd-x64': 0.19.3 - '@esbuild/openbsd-x64': 0.19.3 - '@esbuild/sunos-x64': 0.19.3 - '@esbuild/win32-arm64': 0.19.3 - '@esbuild/win32-ia32': 0.19.3 - '@esbuild/win32-x64': 0.19.3 - escalade@3.1.2: {} escape-html@1.0.3: {} @@ -15494,7 +14715,7 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.13.0 + is-core-module: 2.16.1 resolve: 1.22.4 transitivePeerDependencies: - supports-color @@ -15523,19 +14744,19 @@ snapshots: eslint-plugin-import@2.27.5(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.4))(eslint@8.50.0): dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.50.0) has: 1.0.3 - is-core-module: 2.13.0 + is-core-module: 2.16.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.7 + object.values: 1.2.1 resolve: 1.22.4 semver: 6.3.1 tsconfig-paths: 3.14.2 @@ -15564,11 +14785,11 @@ snapshots: dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.1.0 + es-iterator-helpers: 1.2.1 eslint: 8.50.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -15576,11 +14797,11 @@ snapshots: object.entries: 1.1.8 object.fromentries: 2.0.8 object.hasown: 1.1.4 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 eslint-plugin-sonarjs@0.19.0(eslint@8.50.0): dependencies: @@ -15588,7 +14809,7 @@ snapshots: eslint-plugin-unicorn@48.0.0(eslint@8.50.0): dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) ci-info: 3.8.0 clean-regexp: 1.0.0 @@ -15602,7 +14823,7 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.0 strip-indent: 3.0.0 eslint-scope@5.1.1: @@ -15637,7 +14858,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -15675,8 +14896,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -15864,7 +15085,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -16016,15 +15237,11 @@ snapshots: flow-parser@0.218.0: {} - follow-redirects@1.15.3(debug@4.3.4): - optionalDependencies: - debug: 4.3.4(supports-color@8.1.1) - - follow-redirects@1.15.6(debug@4.3.4): + follow-redirects@1.15.6(debug@4.4.0): optionalDependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) - for-each@0.3.3: + for-each@0.3.4: dependencies: is-callable: 1.2.7 @@ -16043,7 +15260,7 @@ snapshots: forever-agent@0.6.1: optional: true - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.4)(webpack@5.93.0(esbuild@0.19.3)): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.4)(webpack@5.93.0(esbuild@0.19.11)): dependencies: '@babel/code-frame': 7.22.13 chalk: 4.1.2 @@ -16058,7 +15275,7 @@ snapshots: semver: 7.6.0 tapable: 2.2.1 typescript: 5.5.4 - webpack: 5.93.0(esbuild@0.19.3) + webpack: 5.93.0(esbuild@0.19.11) form-data@2.3.3: dependencies: @@ -16128,16 +15345,16 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} - function.prototype.name@1.1.6: + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.22.2 functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -16172,20 +15389,18 @@ snapshots: get-func-name@2.0.2: {} - get-intrinsic@1.2.1: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - - get-intrinsic@1.2.4: + get-intrinsic@1.2.7: dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.1 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 get-nonce@1.0.1: {} @@ -16197,22 +15412,22 @@ snapshots: get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@5.2.0: dependencies: pump: 3.0.0 get-stream@6.0.1: {} - get-symbol-description@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - - get-symbol-description@1.0.2: + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.7 get-tsconfig@4.7.2: dependencies: @@ -16284,7 +15499,7 @@ snapshots: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.0 - minimatch: 9.0.3 + minimatch: 9.0.5 minipass: 7.0.3 path-scurry: 1.10.1 @@ -16323,14 +15538,10 @@ snapshots: dependencies: type-fest: 0.20.2 - globalthis@1.0.3: - dependencies: - define-properties: 1.2.1 - globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: @@ -16346,9 +15557,7 @@ snapshots: through2: 0.6.5 optional: true - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.1 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -16378,7 +15587,7 @@ snapshots: hard-rejection@2.1.0: {} - has-bigints@1.0.2: {} + has-bigints@1.1.0: {} has-binary2@1.0.3: dependencies: @@ -16392,27 +15601,19 @@ snapshots: has-flag@4.0.0: {} - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.1 - has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.1: {} + es-define-property: 1.0.1 - has-proto@1.0.3: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.0: + has-proto@1.2.0: dependencies: - has-symbols: 1.0.3 + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 has-unicode@2.0.1: optional: true @@ -16438,7 +15639,7 @@ snapshots: has@1.0.3: dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 hash-base@3.1.0: dependencies: @@ -16451,10 +15652,6 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hasown@2.0.1: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -16533,27 +15730,27 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color optional: true - http-proxy@1.18.1(debug@4.3.4): + http-proxy@1.18.1(debug@4.4.0): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.3(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug - http-server@14.1.1(debug@4.3.4): + http-server@14.1.1(debug@4.4.0): dependencies: basic-auth: 2.0.1 chalk: 4.1.2 corser: 2.0.1 he: 1.2.0 html-encoding-sniffer: 3.0.0 - http-proxy: 1.18.1(debug@4.3.4) + http-proxy: 1.18.1(debug@4.4.0) mime: 1.6.0 minimist: 1.2.8 opener: 1.5.2 @@ -16577,14 +15774,14 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color optional: true @@ -16592,7 +15789,7 @@ snapshots: https-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -16665,17 +15862,11 @@ snapshots: css-in-js-utils: 3.1.0 fast-loops: 1.1.3 - internal-slot@1.0.5: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - side-channel: 1.0.4 - - internal-slot@1.0.7: + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 invariant@2.2.4: dependencies: @@ -16693,31 +15884,30 @@ snapshots: is-arguments@1.1.1: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-array-buffer@3.0.2: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.8 + has-tostringtag: 1.0.2 - is-array-buffer@3.0.4: + is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} - is-async-function@2.0.0: + is-async-function@2.1.1: dependencies: + async-function: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - is-bigint@1.0.4: + is-bigint@1.1.0: dependencies: - has-bigints: 1.0.2 + has-bigints: 1.1.0 is-binary-path@1.0.1: dependencies: @@ -16727,10 +15917,10 @@ snapshots: dependencies: binary-extensions: 2.2.0 - is-boolean-object@1.1.2: + is-boolean-object@1.2.1: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bound: 1.0.3 + has-tostringtag: 1.0.2 is-buffer@1.1.6: {} @@ -16745,11 +15935,7 @@ snapshots: ci-info: 3.8.0 optional: true - is-core-module@2.13.0: - dependencies: - has: 1.0.3 - - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -16757,13 +15943,16 @@ snapshots: dependencies: hasown: 2.0.2 - is-data-view@1.0.1: + is-data-view@1.0.2: dependencies: - is-typed-array: 1.1.13 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + is-typed-array: 1.1.15 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: - has-tostringtag: 1.0.0 + call-bound: 1.0.3 + has-tostringtag: 1.0.2 is-deflate@1.0.0: {} @@ -16787,18 +15976,21 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: + is-finalizationregistry@1.1.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 is-fullwidth-code-point@3.0.0: {} is-function@1.0.2: optional: true - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: - has-tostringtag: 1.0.0 + call-bound: 1.0.3 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@3.1.0: dependencies: @@ -16827,16 +16019,13 @@ snapshots: is-nan@1.3.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - is-negative-zero@2.0.2: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.0.7: + is-number-object@1.1.1: dependencies: - has-tostringtag: 1.0.0 + call-bound: 1.0.3 + has-tostringtag: 1.0.2 is-number@3.0.0: dependencies: @@ -16860,40 +16049,37 @@ snapshots: is-plain-object@5.0.0: {} - is-regex@1.1.4: + is-regex@1.2.1: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bound: 1.0.3 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 is-regexp@1.0.0: {} is-set@2.0.3: {} - is-shared-array-buffer@1.0.2: + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.2 - - is-shared-array-buffer@1.0.3: - dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 is-stream@2.0.1: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - - is-symbol@1.0.4: + is-string@1.1.1: dependencies: - has-symbols: 1.0.3 + call-bound: 1.0.3 + has-tostringtag: 1.0.2 - is-typed-array@1.1.12: + is-symbol@1.1.1: dependencies: - which-typed-array: 1.1.11 + call-bound: 1.0.3 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - is-typed-array@1.1.13: + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.18 is-typedarray@1.0.0: optional: true @@ -16902,14 +16088,14 @@ snapshots: is-weakmap@2.0.2: {} - is-weakref@1.0.2: + is-weakref@1.1.0: dependencies: - call-bind: 1.0.2 + call-bound: 1.0.3 - is-weakset@2.0.3: + is-weakset@2.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 is-windows@1.0.2: {} @@ -16963,12 +16149,13 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.3: + iterator.prototype@1.1.5: dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + has-symbols: 1.1.0 set-function-name: 2.0.2 jackspeak@2.3.0: @@ -17079,7 +16266,7 @@ snapshots: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.11) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.11) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.11) - '@babel/plugin-transform-modules-commonjs': 7.22.11(@babel/core@7.22.11) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.11) '@babel/preset-env': 7.22.10(@babel/core@7.22.11) '@babel/preset-flow': 7.22.15(@babel/core@7.22.11) '@babel/preset-typescript': 7.23.0(@babel/core@7.22.11) @@ -17164,9 +16351,9 @@ snapshots: jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 jszip@3.10.1: dependencies: @@ -17453,7 +16640,9 @@ snapshots: dependencies: react: 18.2.0 - mc-assets@0.2.23: {} + math-intrinsics@1.1.0: {} + + mc-assets@0.2.28: {} md5-file@4.0.0: {} @@ -17666,7 +16855,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -17737,7 +16926,7 @@ snapshots: min-indent@1.0.1: {} - minecraft-data@3.80.0: {} + minecraft-data@3.83.1: {} minecraft-folder-path@1.2.0: {} @@ -17748,17 +16937,17 @@ snapshots: - '@types/react' - react - minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d(patch_hash=7sh5krubuk2vjuogjioaktvwzi)(encoding@0.1.13): + minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76(patch_hash=3wm2z233n46lqi64rbxem4nyv4)(encoding@0.1.13): dependencies: '@types/node-rsa': 1.1.4 '@types/readable-stream': 4.0.12 aes-js: 3.1.2 buffer-equal: 1.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) endian-toggle: 0.0.0 lodash.get: 4.4.2 lodash.merge: 4.6.2 - minecraft-data: 3.80.0 + minecraft-data: 3.83.1 minecraft-folder-path: 1.2.0 node-fetch: 2.7.0(encoding@0.1.13) node-rsa: 0.4.2 @@ -17766,7 +16955,7 @@ snapshots: prismarine-chat: 1.10.1 prismarine-nbt: 2.5.0 prismarine-realms: 1.3.2(encoding@0.1.13) - protodef: 1.17.0 + protodef: 1.18.0 readable-stream: 4.5.2 uuid-1345: 1.0.2 yggdrasil: 1.7.0(encoding@0.1.13) @@ -17776,7 +16965,7 @@ snapshots: minecraft-wrap@1.5.1(encoding@0.1.13): dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) es6-promisify: 5.0.0 extract-zip: 2.0.1(supports-color@8.1.1) flatmap: 0.0.3 @@ -17797,9 +16986,9 @@ snapshots: detect-collisions: 7.0.5 vec3: 0.1.8 - mineflayer-item-map-downloader@https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/642fd4f7023a98a96da4caf8f993f8e19361a1e7(patch_hash=bck55yjvd4wrgz46x7o4vfur5q)(encoding@0.1.13): + mineflayer-item-map-downloader@https://codeload.github.com/zardoy/mineflayer-item-map-downloader/tar.gz/a8d210ecdcf78dd082fa149a96e1612cc9747824(patch_hash=bck55yjvd4wrgz46x7o4vfur5q)(encoding@0.1.13): dependencies: - mineflayer: 4.23.0(encoding@0.1.13) + mineflayer: 4.25.0(encoding@0.1.13) sharp: 0.30.7 transitivePeerDependencies: - encoding @@ -17807,54 +16996,54 @@ snapshots: mineflayer-pathfinder@2.4.4: dependencies: - minecraft-data: 3.80.0 - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 + minecraft-data: 3.83.1 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-entity: 2.3.1 - prismarine-item: 1.15.0 - prismarine-nbt: 2.2.1 + prismarine-item: 1.16.0 + prismarine-nbt: 2.5.0 prismarine-physics: https://codeload.github.com/zardoy/prismarine-physics/tar.gz/353e25b800149393f40539ec381218be44cbb03b vec3: 0.1.8 - mineflayer@4.23.0(encoding@0.1.13): + mineflayer@4.25.0(encoding@0.1.13): dependencies: - minecraft-data: 3.80.0 - minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d(patch_hash=7sh5krubuk2vjuogjioaktvwzi)(encoding@0.1.13) - prismarine-biome: 1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.10.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 + minecraft-data: 3.83.1 + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76(patch_hash=3wm2z233n46lqi64rbxem4nyv4)(encoding@0.1.13) + prismarine-biome: 1.3.0(minecraft-data@3.83.1)(prismarine-registry@1.11.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) prismarine-entity: 2.3.1 - prismarine-item: 1.15.0 + prismarine-item: 1.16.0 prismarine-nbt: 2.5.0 prismarine-physics: https://codeload.github.com/zardoy/prismarine-physics/tar.gz/353e25b800149393f40539ec381218be44cbb03b - prismarine-recipe: 1.3.1(prismarine-registry@1.10.0) - prismarine-registry: 1.10.0 + prismarine-recipe: 1.3.1(prismarine-registry@1.11.0) + prismarine-registry: 1.11.0 prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be - protodef: 1.17.0 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c + protodef: 1.18.0 typed-emitter: 1.4.0 vec3: 0.1.8 transitivePeerDependencies: - encoding - supports-color - mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/390ce12c1e1f25e440a94ba422e45c874f8bbd2b(encoding@0.1.13): + mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/54f8c2282d822ad02967a197bda36302a4e7b4a5(encoding@0.1.13): dependencies: - minecraft-data: 3.80.0 - minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/f258c76b3a15badd902e82cd892168849444d79d(patch_hash=7sh5krubuk2vjuogjioaktvwzi)(encoding@0.1.13) - prismarine-biome: 1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.10.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 + minecraft-data: 3.83.1 + minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/e9eb551ba30ec2e742c49e6927be6402b413bb76(patch_hash=3wm2z233n46lqi64rbxem4nyv4)(encoding@0.1.13) + prismarine-biome: 1.3.0(minecraft-data@3.83.1)(prismarine-registry@1.11.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-chat: 1.10.1 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) prismarine-entity: 2.3.1 - prismarine-item: 1.15.0 + prismarine-item: 1.16.0 prismarine-nbt: 2.5.0 prismarine-physics: https://codeload.github.com/zardoy/prismarine-physics/tar.gz/353e25b800149393f40539ec381218be44cbb03b - prismarine-recipe: 1.3.1(prismarine-registry@1.10.0) - prismarine-registry: 1.10.0 + prismarine-recipe: 1.3.1(prismarine-registry@1.11.0) + prismarine-registry: 1.11.0 prismarine-windows: 2.9.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be - protodef: 1.17.0 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c + protodef: 1.18.0 typed-emitter: 1.4.0 vec3: 0.1.8 transitivePeerDependencies: @@ -17873,10 +17062,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -17976,8 +17161,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} mz@2.7.0: @@ -18002,8 +17185,6 @@ snapshots: stacktrace-js: 2.0.2 stylis: 4.2.0 - nanoid@3.3.6: {} - nanoid@3.3.7: {} nanomatch@1.2.13: @@ -18118,8 +17299,6 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.13: {} - node-releases@2.0.18: {} node-rsa@0.4.2: @@ -18155,7 +17334,7 @@ snapshots: normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.0 + is-core-module: 2.16.1 semver: 7.6.0 validate-npm-package-license: 3.0.4 @@ -18209,16 +17388,11 @@ snapshots: define-property: 0.2.5 kind-of: 3.2.2 - object-inspect@1.12.3: {} - - object-inspect@1.13.1: - optional: true - - object-inspect@1.13.2: {} + object-inspect@1.13.3: {} object-is@1.1.5: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 object-keys@1.1.1: {} @@ -18227,54 +17401,44 @@ snapshots: dependencies: isobject: 3.0.1 - object.assign@4.1.4: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.assign@4.1.5: + object.assign@4.1.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 object-keys: 1.1.1 object.entries@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 object.hasown@1.1.4: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 object.pick@1.3.0: dependencies: isobject: 3.0.1 - object.values@1.1.7: + object.values@1.2.1: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.22.2 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 omggif@1.0.10: optional: true @@ -18337,6 +17501,12 @@ snapshots: ospath@1.2.2: optional: true + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.2.7 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -18511,10 +17681,6 @@ snapshots: phin@2.9.3: optional: true - picocolors@1.0.0: {} - - picocolors@1.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -18564,7 +17730,7 @@ snapshots: polished@4.2.2: dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.24.5 poly-decomp@0.3.0: {} @@ -18580,12 +17746,6 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss@8.4.31: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - postcss@8.4.47: dependencies: nanoid: 3.3.7 @@ -18631,8 +17791,8 @@ snapshots: prismarine-auth@2.4.2(encoding@0.1.13): dependencies: '@azure/msal-node': 2.7.0 - '@xboxreplay/xboxlive-auth': 3.3.3(debug@4.3.4) - debug: 4.3.4(supports-color@8.1.1) + '@xboxreplay/xboxlive-auth': 3.3.3(debug@4.4.0) + debug: 4.4.0(supports-color@8.1.1) jose: 4.15.5 node-fetch: 2.7.0(encoding@0.1.13) smart-buffer: 4.2.0 @@ -18641,37 +17801,34 @@ snapshots: - encoding - supports-color - prismarine-biome@1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.10.0): - dependencies: - minecraft-data: 3.80.0 - prismarine-registry: 1.10.0 - - prismarine-biome@1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.7.0): + prismarine-biome@1.3.0(minecraft-data@3.83.1)(prismarine-registry@1.11.0): dependencies: - minecraft-data: 3.80.0 - prismarine-registry: 1.7.0 + minecraft-data: 3.83.1 + prismarine-registry: 1.11.0 - prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05: + prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0): dependencies: - minecraft-data: 3.80.0 - prismarine-biome: 1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.7.0) + minecraft-data: 3.83.1 + prismarine-biome: 1.3.0(minecraft-data@3.83.1)(prismarine-registry@1.11.0) prismarine-chat: 1.10.1 - prismarine-item: 1.15.0 + prismarine-item: 1.16.0 prismarine-nbt: 2.5.0 - prismarine-registry: 1.7.0 + prismarine-registry: 1.11.0 + transitivePeerDependencies: + - prismarine-registry prismarine-chat@1.10.1: dependencies: mojangson: 2.0.4 prismarine-nbt: 2.5.0 - prismarine-registry: 1.10.0 + prismarine-registry: 1.11.0 - prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0): + prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1): dependencies: - prismarine-biome: 1.3.0(minecraft-data@3.80.0)(prismarine-registry@1.10.0) - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 + prismarine-biome: 1.3.0(minecraft-data@3.83.1)(prismarine-registry@1.11.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-nbt: 2.5.0 - prismarine-registry: 1.10.0 + prismarine-registry: 1.11.0 smart-buffer: 4.2.0 uint4: 0.1.2 vec3: 0.1.8 @@ -18682,35 +17839,31 @@ snapshots: prismarine-entity@2.3.1: dependencies: prismarine-chat: 1.10.1 - prismarine-item: 1.15.0 - prismarine-registry: 1.10.0 + prismarine-item: 1.16.0 + prismarine-registry: 1.11.0 vec3: 0.1.8 - prismarine-item@1.15.0: + prismarine-item@1.16.0: dependencies: prismarine-nbt: 2.5.0 - prismarine-registry: 1.10.0 - - prismarine-nbt@2.2.1: - dependencies: - protodef: 1.15.0 + prismarine-registry: 1.11.0 prismarine-nbt@2.5.0: dependencies: - protodef: 1.17.0 + protodef: 1.18.0 prismarine-physics@https://codeload.github.com/zardoy/prismarine-physics/tar.gz/353e25b800149393f40539ec381218be44cbb03b: dependencies: - minecraft-data: 3.80.0 + minecraft-data: 3.83.1 prismarine-nbt: 2.5.0 vec3: 0.1.8 - prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/d807fc339a3d95a7aef91468d4d64d367e7c682a(minecraft-data@3.80.0): + prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/a3a7d031069373cc3e0cd05e54512dd9461ca34b(minecraft-data@3.83.1): dependencies: - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 - prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/416dd49bec42f4cc9f50ccf79527e6e4c01cebcb(minecraft-data@3.80.0) + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) + prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/e68e9a423b5b1907535878fb636f12c28a1a9374(minecraft-data@3.83.1) prismarine-nbt: 2.5.0 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c uint4: 0.1.2 vec3: 0.1.8 transitivePeerDependencies: @@ -18718,41 +17871,37 @@ snapshots: prismarine-realms@1.3.2(encoding@0.1.13): dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - prismarine-recipe@1.3.1(prismarine-registry@1.10.0): + prismarine-recipe@1.3.1(prismarine-registry@1.11.0): dependencies: - prismarine-registry: 1.10.0 + prismarine-registry: 1.11.0 - prismarine-registry@1.10.0: + prismarine-registry@1.11.0: dependencies: - minecraft-data: 3.80.0 - prismarine-nbt: 2.5.0 - - prismarine-registry@1.7.0: - dependencies: - minecraft-data: 3.80.0 + minecraft-data: 3.83.1 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) prismarine-nbt: 2.5.0 prismarine-schematic@1.2.3: dependencies: - minecraft-data: 3.80.0 - prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/23849d4d24af91f45a5bd38781a6f82d40316c05 - prismarine-nbt: 2.2.1 - prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be + minecraft-data: 3.83.1 + prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/853c559bff2b402863ee9a75b125a3ca320838f9(prismarine-registry@1.11.0) + prismarine-nbt: 2.5.0 + prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c vec3: 0.1.8 prismarine-windows@2.9.0: dependencies: - prismarine-item: 1.15.0 - prismarine-registry: 1.10.0 + prismarine-item: 1.16.0 + prismarine-registry: 1.11.0 typed-emitter: 2.1.0 - prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6221e049e2ad0f508edc23c7f5bda7fd6d9566be: + prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/ab2146c9933eef3247c3f64446de4ccc2c484c7c: dependencies: vec3: 0.1.8 @@ -18876,14 +18025,7 @@ snapshots: dependencies: ajv: 6.12.6 - protodef@1.15.0: - dependencies: - lodash.get: 4.4.2 - lodash.reduce: 4.6.0 - protodef-validator: 1.3.1 - readable-stream: 3.6.2 - - protodef@1.17.0: + protodef@1.18.0: dependencies: lodash.get: 4.4.2 lodash.reduce: 4.6.0 @@ -18897,7 +18039,8 @@ snapshots: proxy-compare@2.5.1: {} - proxy-from-env@1.0.0: {} + proxy-from-env@1.0.0: + optional: true proxy-from-env@1.1.0: {} @@ -18935,20 +18078,18 @@ snapshots: punycode@1.4.1: {} - punycode@2.3.0: {} - punycode@2.3.1: {} puppeteer-core@2.1.1: dependencies: '@types/mime-types': 2.1.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 mime-types: 2.1.35 progress: 2.0.3 - proxy-from-env: 1.0.0 + proxy-from-env: 1.1.0 rimraf: 2.7.1 ws: 6.2.2 transitivePeerDependencies: @@ -18962,16 +18103,16 @@ snapshots: qs@6.10.4: dependencies: - side-channel: 1.0.5 + side-channel: 1.1.0 optional: true qs@6.11.0: dependencies: - side-channel: 1.0.4 + side-channel: 1.1.0 qs@6.11.2: dependencies: - side-channel: 1.0.4 + side-channel: 1.1.0 querystring-es3@0.2.1: {} @@ -19131,7 +18272,7 @@ snapshots: react-select@5.8.0(@types/react@18.2.20)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.24.5 - '@emotion/cache': 11.11.0 + '@emotion/cache': 11.13.1 '@emotion/react': 11.13.0(@types/react@18.2.20)(react@18.2.0) '@floating-ui/dom': 1.5.3 '@types/react-transition-group': 4.4.7 @@ -19155,7 +18296,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.24.5 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -19288,7 +18429,7 @@ snapshots: recast@0.23.4: dependencies: - assert: 2.0.0 + assert: 2.1.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 @@ -19303,15 +18444,16 @@ snapshots: dependencies: browserslist: 4.23.2 - reflect.getprototypeof@1.0.6: + reflect.getprototypeof@1.0.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 regenerate-unicode-properties@10.1.0: dependencies: @@ -19335,17 +18477,13 @@ snapshots: regexp-tree@0.1.27: {} - regexp.prototype.flags@1.5.1: + regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - set-function-name: 2.0.1 - - regexp.prototype.flags@1.5.3: - dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 set-function-name: 2.0.2 regexpp@3.2.0: {} @@ -19434,13 +18572,13 @@ snapshots: resolve@1.22.4: dependencies: - is-core-module: 2.13.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -19486,7 +18624,7 @@ snapshots: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.19.2 + terser: 5.31.3 rollup@2.79.1: optionalDependencies: @@ -19510,35 +18648,28 @@ snapshots: dependencies: tslib: 2.6.2 - safe-array-concat@1.0.1: + safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - isarray: 2.0.5 - - safe-array-concat@1.1.2: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + call-bound: 1.0.3 + get-intrinsic: 1.2.7 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-regex-test@1.0.0: + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-regex: 1.1.4 + es-errors: 1.3.0 + isarray: 2.0.5 - safe-regex-test@1.0.3: + safe-regex-test@1.1.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-regex: 1.1.4 + is-regex: 1.2.1 safe-regex@1.1.0: dependencies: @@ -19575,10 +18706,6 @@ snapshots: semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.6.0: dependencies: lru-cache: 6.0.0 @@ -19603,7 +18730,7 @@ snapshots: send@1.1.0: dependencies: - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) destroy: 1.2.0 encodeurl: 2.0.0 escape-html: 1.0.3 @@ -19656,21 +18783,15 @@ snapshots: set-blocking@2.0.0: optional: true - set-function-length@1.2.1: + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: - dependencies: - define-data-property: 1.1.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 - set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 @@ -19680,6 +18801,12 @@ snapshots: set-harmonic-interval@1.0.1: {} + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + set-value@2.0.1: dependencies: extend-shallow: 2.0.1 @@ -19727,26 +18854,33 @@ snapshots: shell-quote@1.8.1: {} - side-channel@1.0.4: + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 - side-channel@1.0.5: + side-channel-weakmap@1.0.2: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - optional: true + get-intrinsic: 1.2.7 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 - side-channel@1.0.6: + side-channel@1.1.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 siginfo@2.0.0: {} @@ -19865,7 +18999,7 @@ snapshots: socket.io-client@4.7.2: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 engine.io-client: 6.5.2 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -19894,7 +19028,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -19917,7 +19051,7 @@ snapshots: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 engine.io: 6.5.3 socket.io-adapter: 2.5.2 socket.io-parser: 4.2.4 @@ -19929,7 +19063,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.0(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -19941,8 +19075,6 @@ snapshots: smart-buffer: 4.2.0 optional: true - source-map-js@1.0.2: {} - source-map-js@1.2.1: {} source-map-resolve@0.5.3: @@ -20093,75 +19225,50 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.10: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - - string.prototype.matchall@4.0.11: + string.prototype.matchall@4.0.12: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.3 + es-object-atoms: 1.1.1 + get-intrinsic: 1.2.7 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 string.prototype.padend@3.1.4: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - - string.prototype.trim@1.2.8: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - - string.prototype.trim@1.2.9: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - - string.prototype.trimend@1.0.7: - dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.9 - string.prototype.trimend@1.0.8: + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.3 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 - string.prototype.trimstart@1.0.7: + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-object-atoms: 1.1.1 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 string_decoder@0.10.31: optional: true @@ -20208,7 +19315,7 @@ snapshots: strip-literal@1.3.0: dependencies: - acorn: 8.10.0 + acorn: 8.12.1 stylis@4.2.0: {} @@ -20284,23 +19391,16 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - terser-webpack-plugin@5.3.10(esbuild@0.19.3)(webpack@5.93.0(esbuild@0.19.3)): + terser-webpack-plugin@5.3.10(esbuild@0.19.11)(webpack@5.93.0(esbuild@0.19.11)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.3 - webpack: 5.93.0(esbuild@0.19.3) + webpack: 5.93.0(esbuild@0.19.11) optionalDependencies: - esbuild: 0.19.3 - - terser@5.19.2: - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.12.1 - commander: 2.20.3 - source-map-support: 0.5.21 + esbuild: 0.19.11 terser@5.31.3: dependencies: @@ -20439,10 +19539,6 @@ snapshots: dependencies: utf8-byte-length: 1.0.4 - ts-api-utils@1.0.3(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - ts-api-utils@1.3.0(typescript@5.5.4): dependencies: typescript: 5.5.4 @@ -20504,64 +19600,38 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 - - typed-array-buffer@1.0.2: + typed-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 es-errors: 1.3.0 - is-typed-array: 1.1.13 - - typed-array-byte-length@1.0.0: - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - - typed-array-byte-length@1.0.1: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.0: + typed-array-byte-length@1.0.3: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - typed-array-byte-offset@1.0.2: + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - - typed-array-length@1.0.4: - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - is-typed-array: 1.1.12 - - typed-array-length@1.0.6: - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.4 + gopd: 1.2.0 + is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.10 typed-emitter@1.4.0: {} @@ -20584,14 +19654,12 @@ snapshots: uint4@0.1.2: {} - unbox-primitive@1.0.2: + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - undici-types@5.26.5: {} + call-bound: 1.0.3 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 undici-types@6.19.8: {} @@ -20710,17 +19778,11 @@ snapshots: upath@1.2.0: {} - update-browserslist-db@1.0.11(browserslist@4.21.10): - dependencies: - browserslist: 4.21.10 - escalade: 3.1.2 - picocolors: 1.0.1 - update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: browserslist: 4.23.2 escalade: 3.1.2 - picocolors: 1.0.1 + picocolors: 1.1.1 upper-case-first@2.0.2: dependencies: @@ -20732,7 +19794,7 @@ snapshots: uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 urix@0.1.0: {} @@ -20787,7 +19849,7 @@ snapshots: use-typed-event-listener@4.0.2(react@18.2.0)(typescript@5.5.4): dependencies: - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.24.5 react: 18.2.0 use-deep-compare: 1.1.0(react@18.2.0) optionalDependencies: @@ -20808,9 +19870,9 @@ snapshots: dependencies: inherits: 2.0.4 is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.11 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 utils-merge@1.0.1: {} @@ -20826,7 +19888,7 @@ snapshots: v8-to-istanbul@9.1.3: dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 2.0.0 @@ -20865,14 +19927,14 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@0.34.6(@types/node@20.8.0)(terser@5.31.3): + vite-node@0.34.6(@types/node@22.8.1)(terser@5.31.3): dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) mlly: 1.4.2 pathe: 1.1.1 - picocolors: 1.0.0 - vite: 4.4.10(@types/node@20.8.0)(terser@5.31.3) + picocolors: 1.1.1 + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) transitivePeerDependencies: - '@types/node' - less @@ -20883,33 +19945,13 @@ snapshots: - supports-color - terser - vite@4.4.10(@types/node@20.8.0)(terser@5.31.3): - dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - '@types/node': 20.8.0 - fsevents: 2.3.3 - terser: 5.31.3 - - vite@4.4.10(@types/node@22.8.1)(terser@5.31.3): - dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 - optionalDependencies: - '@types/node': 22.8.1 - fsevents: 2.3.3 - terser: 5.31.3 - - vite@4.5.3(@types/node@20.8.0)(terser@5.31.3): + vite@4.5.3(@types/node@22.8.1)(terser@5.31.3): dependencies: esbuild: 0.18.20 postcss: 8.4.47 rollup: 3.29.4 optionalDependencies: - '@types/node': 20.8.0 + '@types/node': 22.8.1 fsevents: 2.3.3 terser: 5.31.3 @@ -20917,27 +19959,27 @@ snapshots: dependencies: '@types/chai': 4.3.6 '@types/chai-subset': 1.3.3 - '@types/node': 20.8.0 + '@types/node': 22.8.1 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 '@vitest/spy': 0.34.6 '@vitest/utils': 0.34.6 - acorn: 8.10.0 + acorn: 8.12.1 acorn-walk: 8.2.0 cac: 6.7.14 chai: 4.3.10 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0(supports-color@8.1.1) local-pkg: 0.4.3 magic-string: 0.30.4 pathe: 1.1.1 - picocolors: 1.0.0 + picocolors: 1.1.1 std-env: 3.4.3 strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.4.10(@types/node@20.8.0)(terser@5.31.3) - vite-node: 0.34.6(@types/node@20.8.0)(terser@5.31.3) + vite: 4.5.3(@types/node@22.8.1)(terser@5.31.3) + vite-node: 0.34.6(@types/node@22.8.1)(terser@5.31.3) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -20952,9 +19994,9 @@ snapshots: w3c-keyname@2.2.8: {} - wait-on@7.2.0(debug@4.3.4): + wait-on@7.2.0(debug@4.4.0): dependencies: - axios: 1.7.2(debug@4.3.4) + axios: 1.7.2(debug@4.4.0) joi: 17.13.1 lodash: 4.17.21 minimist: 1.2.8 @@ -20970,11 +20012,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - watchpack@2.4.0: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 @@ -20992,7 +20029,7 @@ snapshots: webpack-virtual-modules@0.5.0: {} - webpack@5.93.0(esbuild@0.19.3): + webpack@5.93.0(esbuild@0.19.11): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -21015,7 +20052,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.19.3)(webpack@5.93.0(esbuild@0.19.3)) + terser-webpack-plugin: 5.3.10(esbuild@0.19.11)(webpack@5.93.0(esbuild@0.19.11)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21053,50 +20090,44 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 - which-boxed-primitive@1.0.2: + which-boxed-primitive@1.1.1: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-bigint: 1.1.0 + is-boolean-object: 1.2.1 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 - which-builtin-type@1.1.4: + which-builtin-type@1.2.1: dependencies: - function.prototype.name: 1.1.6 + call-bound: 1.0.3 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.0 isarray: 2.0.5 - which-boxed-primitive: 1.0.2 + which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.18 which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 - is-weakset: 2.0.3 + is-weakset: 2.0.4 - which-typed-array@1.1.11: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - - which-typed-array@1.1.15: + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 + call-bind: 1.0.8 + call-bound: 1.0.3 + for-each: 0.3.4 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@1.3.1: @@ -21133,7 +20164,7 @@ snapshots: '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) '@babel/core': 7.22.11 '@babel/preset-env': 7.22.10(@babel/core@7.22.11) - '@babel/runtime': 7.22.11 + '@babel/runtime': 7.24.5 '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.11)(@types/babel__core@7.20.2)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) @@ -21314,8 +20345,6 @@ snapshots: yaml@1.10.2: {} - yaml@2.3.2: {} - yaml@2.4.1: {} yargs-parser@20.2.9: {} diff --git a/prismarine-viewer/examples/baseScene.ts b/prismarine-viewer/examples/baseScene.ts index 1db68eb82..daa56fcce 100644 --- a/prismarine-viewer/examples/baseScene.ts +++ b/prismarine-viewer/examples/baseScene.ts @@ -17,12 +17,14 @@ import { WorldDataEmitter } from '../viewer' import { Viewer } from '../viewer/lib/viewer' import { BlockNames } from '../../src/mcDataTypes' import { initWithRenderer, statsEnd, statsStart } from '../../src/topRightStats' +import { defaultWorldRendererConfig } from '../viewer/lib/worldrendererCommon' import { getSyncWorld } from './shared' window.THREE = THREE export class BasePlaygroundScene { continuousRender = false + stopRender = false guiParams = {} viewDistance = 0 targetPos = new Vec3(2, 90, 2) @@ -48,6 +50,15 @@ export class BasePlaygroundScene { windowHidden = false world: ReturnType + _worldConfig = defaultWorldRendererConfig + get worldConfig () { + return this._worldConfig + } + set worldConfig (value) { + this._worldConfig = value + viewer.world.config = value + } + constructor () { void this.initData().then(() => { this.addKeyboardShortcuts() @@ -55,16 +66,19 @@ export class BasePlaygroundScene { } onParamsUpdate (paramName: string, object: any) {} - updateQs () { + updateQs (paramName: string, valueSet: any) { if (this.skipUpdateQs) return - const oldQs = new URLSearchParams(window.location.search) - const newQs = new URLSearchParams() - if (oldQs.get('scene')) { - newQs.set('scene', oldQs.get('scene')!) - } - for (const [key, value] of Object.entries(this.params)) { - if (!value || typeof value === 'function' || this.params.skipQs?.includes(key) || this.alwaysIgnoreQs.includes(key)) continue - newQs.set(key, value) + const newQs = new URLSearchParams(window.location.search) + // if (oldQs.get('scene')) { + // newQs.set('scene', oldQs.get('scene')!) + // } + for (const [key, value] of Object.entries({ [paramName]: valueSet })) { + if (typeof value === 'function' || this.params.skipQs?.includes(key) || this.alwaysIgnoreQs.includes(key)) continue + if (value) { + newQs.set(key, value) + } else { + newQs.delete(key) + } } window.history.replaceState({}, '', `${window.location.pathname}?${newQs.toString()}`) } @@ -88,7 +102,9 @@ export class BasePlaygroundScene { if (option?.hide) continue this.gui.add(this.params, param, option?.options ?? option?.min, option?.max) } - this.gui.open(false) + if (window.innerHeight < 700) { + this.gui.open(false) + } this.gui.onChange(({ property, object }) => { if (object === this.params) { @@ -100,16 +116,18 @@ export class BasePlaygroundScene { window.location.reload() }) } + this.updateQs(property, value) } else { this.onParamsUpdate(property, object) } - this.updateQs() }) } // mainChunk: import('prismarine-chunk/types/index').PCChunk + // overridables setupWorld () { } + sceneReset () {} // eslint-disable-next-line max-params addWorldBlock (xOffset: number, yOffset: number, zOffset: number, blockName: BlockNames, properties?: Record) { @@ -158,8 +176,9 @@ export class BasePlaygroundScene { renderer.setSize(window.innerWidth, window.innerHeight) // Create viewer - const viewer = new Viewer(renderer, { numWorkers: 6, showChunkBorders: false, }) + const viewer = new Viewer(renderer, this.worldConfig) window.viewer = viewer + window.world = window.viewer.world const isWebgpu = false const promises = [] as Array> if (isWebgpu) { @@ -268,12 +287,14 @@ export class BasePlaygroundScene { loop () { if (this.continuousRender && !this.windowHidden) { - this.render() + this.render(true) requestAnimationFrame(() => this.loop()) } } - render () { + render (fromLoop = false) { + if (!fromLoop && this.continuousRender) return + if (this.stopRender) return statsStart() viewer.render() statsEnd() @@ -286,8 +307,13 @@ export class BasePlaygroundScene { this.controls?.reset() this.resetCamera() } - if (e.code === 'KeyE') { - worldView?.setBlockStateId(this.targetPos, this.world.getBlockStateId(this.targetPos)) + if (e.code === 'KeyE') { // refresh block (main) + worldView!.setBlockStateId(this.targetPos, this.world.getBlockStateId(this.targetPos)) + } + if (e.code === 'KeyF') { // reload all chunks + this.sceneReset() + worldView!.unloadAllChunks() + void worldView!.init(this.targetPos) } } }) diff --git a/prismarine-viewer/examples/scenes/frequentUpdates.ts b/prismarine-viewer/examples/scenes/frequentUpdates.ts index 6b0718f49..bc4012557 100644 --- a/prismarine-viewer/examples/scenes/frequentUpdates.ts +++ b/prismarine-viewer/examples/scenes/frequentUpdates.ts @@ -1,3 +1,4 @@ +import { Vec3 } from 'vec3' import { BasePlaygroundScene } from '../baseScene' export default class extends BasePlaygroundScene { @@ -6,69 +7,125 @@ export default class extends BasePlaygroundScene { override initGui (): void { this.params = { - squareSize: 50 + testActive: false, + testUpdatesPerSecond: 10, + testInitialUpdate: false, + stopGeometryUpdate: false, + manualTest: () => { + this.updateBlock() + }, + testNeighborUpdates: () => { + this.testNeighborUpdates() + } } super.initGui() } + lastUpdatedOffset = 0 + lastUpdatedId = 2 + updateBlock () { + const x = this.lastUpdatedOffset % 16 + const z = Math.floor(this.lastUpdatedOffset / 16) + const y = 90 + worldView!.setBlockStateId(new Vec3(x, y, z), this.lastUpdatedId++) + this.lastUpdatedOffset++ + if (this.lastUpdatedOffset > 16 * 16) this.lastUpdatedOffset = 0 + if (this.lastUpdatedId > 500) this.lastUpdatedId = 1 + } + + testNeighborUpdates () { + viewer.world.setBlockStateId(new Vec3(15, 95, 15), 1) + viewer.world.setBlockStateId(new Vec3(0, 95, 15), 1) + viewer.world.setBlockStateId(new Vec3(15, 95, 0), 1) + viewer.world.setBlockStateId(new Vec3(0, 95, 0), 1) + + viewer.world.setBlockStateId(new Vec3(16, 95, 15), 1) + viewer.world.setBlockStateId(new Vec3(-1, 95, 15), 1) + viewer.world.setBlockStateId(new Vec3(15, 95, -1), 1) + viewer.world.setBlockStateId(new Vec3(-1, 95, 0), 1) + setTimeout(() => { + viewer.world.setBlockStateId(new Vec3(16, 96, 16), 1) + viewer.world.setBlockStateId(new Vec3(-1, 96, 16), 1) + viewer.world.setBlockStateId(new Vec3(16, 96, -1), 1) + viewer.world.setBlockStateId(new Vec3(-1, 96, -1), 1) + }, 3000) + } + setupTimer () { + // this.stopRender = true + + let lastTime = 0 + const tick = () => { + viewer.world.debugStopGeometryUpdate = this.params.stopGeometryUpdate + const updateEach = 1000 / this.params.testUpdatesPerSecond + requestAnimationFrame(tick) + if (!this.params.testActive) return + const updateCount = Math.floor(performance.now() - lastTime) / updateEach + for (let i = 0; i < updateCount; i++) { + this.updateBlock() + } + lastTime = performance.now() + } + + requestAnimationFrame(tick) + // const limit = 1000 // const limit = 100 - const limit = 1 - const updatedChunks = new Set() - const updatedBlocks = new Set() - let lastSecond = 0 - setInterval(() => { - const second = Math.floor(performance.now() / 1000) - if (lastSecond !== second) { - lastSecond = second - updatedChunks.clear() - updatedBlocks.clear() - } - const isEven = second % 2 === 0 - if (updatedBlocks.size > limit) { - return - } - const changeBlock = (x, z) => { - const chunkKey = `${Math.floor(x / 16)},${Math.floor(z / 16)}` - const key = `${x},${z}` - if (updatedBlocks.has(chunkKey)) return + // const limit = 1 + // const updatedChunks = new Set() + // const updatedBlocks = new Set() + // let lastSecond = 0 + // setInterval(() => { + // const second = Math.floor(performance.now() / 1000) + // if (lastSecond !== second) { + // lastSecond = second + // updatedChunks.clear() + // updatedBlocks.clear() + // } + // const isEven = second % 2 === 0 + // if (updatedBlocks.size > limit) { + // return + // } + // const changeBlock = (x, z) => { + // const chunkKey = `${Math.floor(x / 16)},${Math.floor(z / 16)}` + // const key = `${x},${z}` + // if (updatedBlocks.has(chunkKey)) return - updatedChunks.add(chunkKey) - worldView!.world.setBlock(this.targetPos.offset(x, 0, z), this.Block.fromStateId(isEven ? 2 : 3, 0)) - updatedBlocks.add(key) - } - const { squareSize } = this.params - const xStart = -squareSize - const zStart = -squareSize - const xEnd = squareSize - const zEnd = squareSize - for (let x = xStart; x <= xEnd; x += 16) { - for (let z = zStart; z <= zEnd; z += 16) { - const key = `${x},${z}` - if (updatedChunks.has(key)) continue - changeBlock(x, z) - return - } - } - // for (let x = xStart; x <= xEnd; x += 16) { - // for (let z = zStart; z <= zEnd; z += 16) { - // const key = `${x},${z}` - // if (updatedChunks.has(key)) continue - // changeBlock(x, z) - // return - // } - // } - }, 1) + // updatedChunks.add(chunkKey) + // worldView!.world.setBlock(this.targetPos.offset(x, 0, z), this.Block.fromStateId(isEven ? 2 : 3, 0)) + // updatedBlocks.add(key) + // } + // const { squareSize } = this.params + // const xStart = -squareSize + // const zStart = -squareSize + // const xEnd = squareSize + // const zEnd = squareSize + // for (let x = xStart; x <= xEnd; x += 16) { + // for (let z = zStart; z <= zEnd; z += 16) { + // const key = `${x},${z}` + // if (updatedChunks.has(key)) continue + // changeBlock(x, z) + // return + // } + // } + // for (let x = xStart; x <= xEnd; x += 16) { + // for (let z = zStart; z <= zEnd; z += 16) { + // const key = `${x},${z}` + // if (updatedChunks.has(key)) continue + // changeBlock(x, z) + // return + // } + // } + // }, 1) } setupWorld () { - this.params.squareSize ??= 30 - const { squareSize } = this.params - const maxSquareSize = this.viewDistance * 16 * 2 - if (squareSize > maxSquareSize) throw new Error(`Square size too big, max is ${maxSquareSize}`) + this.worldConfig.showChunkBorders = true + + const maxSquareRadius = this.viewDistance * 16 // const fullBlocks = loadedData.blocksArray.map(x => x.name) + const squareSize = maxSquareRadius for (let x = -squareSize; x <= squareSize; x++) { for (let z = -squareSize; z <= squareSize; z++) { const i = Math.abs(x + z) * squareSize @@ -81,5 +138,10 @@ export default class extends BasePlaygroundScene { done = true this.setupTimer() }) + setTimeout(() => { + if (this.params.testInitialUpdate) { + this.updateBlock() + } + }) } } diff --git a/prismarine-viewer/examples/scenes/main.ts b/prismarine-viewer/examples/scenes/main.ts index 1fe801ee7..d7d2f8e09 100644 --- a/prismarine-viewer/examples/scenes/main.ts +++ b/prismarine-viewer/examples/scenes/main.ts @@ -295,7 +295,7 @@ class MainScene extends BasePlaygroundScene { } } - worldView!.setBlockStateId(this.targetPos, block.stateId!) + worldView!.setBlockStateId(this.targetPos, block.stateId) console.log('up stateId', block.stateId) this.params.metadata = block.metadata this.metadataGui.updateDisplay() diff --git a/prismarine-viewer/viewer/lib/entities.ts b/prismarine-viewer/viewer/lib/entities.ts index 47a0303ef..5e7a96bfe 100644 --- a/prismarine-viewer/viewer/lib/entities.ts +++ b/prismarine-viewer/viewer/lib/entities.ts @@ -8,15 +8,19 @@ import { PlayerObject, PlayerAnimation } from 'skinview3d' import { loadSkinToCanvas, loadEarsToCanvasFromSkin, inferModelType, loadCapeToCanvas, loadImage } from 'skinview-utils' // todo replace with url import stevePng from 'mc-assets/dist/other-textures/latest/entity/player/wide/steve.png' +import { degreesToRadians } from '@nxg-org/mineflayer-tracker/lib/mathUtils' import { NameTagObject } from 'skinview3d/libs/nametag' import { flat, fromFormattedString } from '@xmcl/text-component' import mojangson from 'mojangson' import { snakeCase } from 'change-case' +import { Item } from 'prismarine-item' import { EntityMetadataVersions } from '../../../src/mcDataTypes' import * as Entity from './entity/EntityMesh' +import { getMesh } from './entity/EntityMesh' import { WalkingGeneralSwing } from './entity/animations' -import externalTexturesJson from './entity/externalTextures.json' import { disposeObject } from './threeJsUtils' +import { armorModels } from './entity/objModels' +const { loadTexture } = globalThis.isElectron ? require('./utils.electron.js') : require('./utils') export const TWEEN_DURATION = 120 @@ -57,6 +61,26 @@ function toQuaternion (quaternion: any, defaultValue?: THREE.Quaternion) { return new THREE.Quaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w) } +function poseToEuler (pose: any, defaultValue?: THREE.Euler) { + if (pose === undefined) { + return defaultValue ?? new THREE.Euler() + } + if (pose instanceof THREE.Euler) { + return pose + } + if (pose['yaw'] !== undefined && pose['pitch'] !== undefined && pose['roll'] !== undefined) { + // Convert Minecraft pitch, yaw, roll definitions to our angle system + return new THREE.Euler(-degreesToRadians(pose.pitch), -degreesToRadians(pose.yaw), degreesToRadians(pose.roll), 'ZYX') + } + if (pose['x'] !== undefined && pose['y'] !== undefined && pose['z'] !== undefined) { + return new THREE.Euler(pose.z, pose.y, pose.x, 'ZYX') + } + if (Array.isArray(pose)) { + return new THREE.Euler(pose[0], pose[1], pose[2]) + } + return defaultValue ?? new THREE.Euler() +} + function getUsernameTexture ({ username, nameTagBackgroundColor = 'rgba(0, 0, 0, 0.3)', @@ -252,8 +276,20 @@ export class Entities extends EventEmitter { // fixme workaround defaultSteveTexture + usernamePerSkinUrlsCache = {} as Record + // true means use default skin url updatePlayerSkin (entityId: string | number, username: string | undefined, skinUrl: string | true, capeUrl: string | true | undefined = undefined) { + if (username) { + if (typeof skinUrl === 'string' || typeof capeUrl === 'string') this.usernamePerSkinUrlsCache[username] = {} + if (typeof skinUrl === 'string') this.usernamePerSkinUrlsCache[username].skinUrl = skinUrl + if (typeof capeUrl === 'string') this.usernamePerSkinUrlsCache[username].capeUrl = capeUrl + if (skinUrl === true) { + skinUrl = this.usernamePerSkinUrlsCache[username]?.skinUrl ?? skinUrl + } + capeUrl ??= this.usernamePerSkinUrlsCache[username]?.capeUrl + } + let playerObject = this.getPlayerObject(entityId) if (!playerObject) return // const username = this.entities[entityId].username @@ -369,13 +405,17 @@ export class Entities extends EventEmitter { return jsonLike.value } const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike) - const text = flat(parsed).map(x => x.text) + const text = flat(parsed).map(this.textFromComponent) return text.join('') } catch (err) { return jsonLike } } + private textFromComponent (component) { + return typeof component === 'string' ? component : component.text ?? '' + } + getItemMesh (item) { const textureUv = this.getItemUv?.(item.itemId ?? item.blockId) if (textureUv) { @@ -418,14 +458,38 @@ export class Entities extends EventEmitter { } } + setVisible (mesh: THREE.Object3D, visible: boolean) { + //mesh.visible = visible + //TODO: Fix workaround for visibility setting + if (visible) { + mesh.scale.set(1, 1, 1) + } else { + mesh.scale.set(0, 0, 0) + } + } + update (entity: import('prismarine-entity').Entity & { delete?; pos, name }, overrides) { const isPlayerModel = entity.name === 'player' if (entity.name === 'zombie' || entity.name === 'zombie_villager' || entity.name === 'husk') { overrides.texture = `textures/1.16.4/entity/${entity.name === 'zombie_villager' ? 'zombie_villager/zombie_villager.png' : `zombie/${entity.name}.png`}` } - if (!this.entities[entity.id] && !entity.delete) { + // this can be undefined in case where packet entity_destroy was sent twice (so it was already deleted) + let e = this.entities[entity.id] + + if (entity.delete) { + if (!e) return + if (e.additionalCleanup) e.additionalCleanup() + this.emit('remove', entity) + this.scene.remove(e) + disposeObject(e) + // todo dispose textures as well ? + delete this.entities[entity.id] + return + } + + let mesh + if (e === undefined) { const group = new THREE.Group() - let mesh if (entity.name === 'item') { const item = entity.metadata?.find((m: any) => typeof m === 'object' && m?.itemCount) if (item) { @@ -508,7 +572,8 @@ export class Entities extends EventEmitter { boxHelper.visible = false this.scene.add(group) - this.entities[entity.id] = group + e = group + this.entities[entity.id] = e this.emit('add', entity) @@ -517,6 +582,16 @@ export class Entities extends EventEmitter { } this.setDebugMode(this.debugMode, group) this.setRendering(this.rendering, group) + } else { + mesh = e.children.find(c => c.name === 'mesh') + } + + // check if entity has armor + if (entity.equipment) { + addArmorModel(e, 'feet', entity.equipment[2]) + addArmorModel(e, 'legs', entity.equipment[3], 2) + addArmorModel(e, 'chest', entity.equipment[4]) + addArmorModel(e, 'head', entity.equipment[5]) } const meta = getGeneralEntitiesMetadata(entity) @@ -524,7 +599,7 @@ export class Entities extends EventEmitter { //@ts-expect-error // set visibility const isInvisible = entity.metadata?.[0] & 0x20 - for (const child of this.entities[entity.id]?.children.find(c => c.name === 'mesh')?.children ?? []) { + for (const child of mesh.children ?? []) { if (child.name !== 'nametag') { child.visible = !isInvisible } @@ -547,10 +622,77 @@ export class Entities extends EventEmitter { nameTagScale: textDisplayMeta?.scale, nameTagTranslation: textDisplayMeta && (textDisplayMeta.translation || new THREE.Vector3(0, 0, 0)), nameTagRotationLeft: toQuaternion(textDisplayMeta?.left_rotation), nameTagRotationRight: toQuaternion(textDisplayMeta?.right_rotation) }, this.entitiesOptions, - this.entities[entity.id].children.find(c => c.name === 'mesh') + mesh ) } + const armorStandMeta = getSpecificEntityMetadata('armor_stand', entity) + if (armorStandMeta) { + const isSmall = (parseInt(armorStandMeta.client_flags, 10) & 0x01) !== 0 + const hasArms = (parseInt(armorStandMeta.client_flags, 10) & 0x04) !== 0 + const hasBasePlate = (parseInt(armorStandMeta.client_flags, 10) & 0x08) === 0 + const isMarker = (parseInt(armorStandMeta.client_flags, 10) & 0x10) !== 0 + mesh.castShadow = !isMarker + mesh.receiveShadow = !isMarker + if (isSmall) { + e.scale.set(0.5, 0.5, 0.5) + } else { + e.scale.set(1, 1, 1) + } + e.traverse(c => { + switch (c.name) { + case 'bone_baseplate': + this.setVisible(c, hasBasePlate) + c.rotation.y = -e.rotation.y + break + case 'bone_head': + if (armorStandMeta.head_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.head_pose)) + } + break + case 'bone_body': + if (armorStandMeta.body_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.body_pose)) + } + break + case 'bone_leftarm': + if (c.parent?.name !== 'bone_armor') { + this.setVisible(c, hasArms) + } + if (armorStandMeta.left_arm_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.left_arm_pose)) + } else { + c.setRotationFromEuler(poseToEuler({ 'yaw': -10, 'pitch': -10, 'roll': 0 })) + } + break + case 'bone_rightarm': + if (c.parent?.name !== 'bone_armor') { + this.setVisible(c, hasArms) + } + if (armorStandMeta.right_arm_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.right_arm_pose)) + } else { + c.setRotationFromEuler(poseToEuler({ 'yaw': 10, 'pitch': -10, 'roll': 0 })) + } + break + case 'bone_leftleg': + if (armorStandMeta.left_leg_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.left_leg_pose)) + } else { + c.setRotationFromEuler(poseToEuler({ 'yaw': -1, 'pitch': -1, 'roll': 0 })) + } + break + case 'bone_rightleg': + if (armorStandMeta.right_leg_pose) { + c.setRotationFromEuler(poseToEuler(armorStandMeta.right_leg_pose)) + } else { + c.setRotationFromEuler(poseToEuler({ 'yaw': 1, 'pitch': 1, 'roll': 0 })) + } + break + } + }) + } + // todo handle map, map_chunks events // if (entity.name === 'item_frame' || entity.name === 'glow_item_frame') { // const example = { @@ -578,9 +720,6 @@ export class Entities extends EventEmitter { // } // } - // this can be undefined in case where packet entity_destroy was sent twice (so it was already deleted) - const e = this.entities[entity.id] - if (entity.username) { e.username = entity.username } @@ -592,15 +731,6 @@ export class Entities extends EventEmitter { playerObject.skin.head.rotation.x = overrides.rotation.head.x ? - overrides.rotation.head.x : 0 } - if (entity.delete && e) { - if (e.additionalCleanup) e.additionalCleanup() - this.emit('remove', entity) - this.scene.remove(e) - disposeObject(e) - // todo dispose textures as well ? - delete this.entities[entity.id] - } - if (entity.pos) { new TWEEN.Tween(e.position).to({ x: entity.pos.x, y: entity.pos.y, z: entity.pos.z }, TWEEN_DURATION).start() } @@ -645,3 +775,73 @@ function getSpecificEntityMetadata (name if (entity.name !== name) return return getGeneralEntitiesMetadata(entity) as any } + +function addArmorModel (entityMesh: THREE.Object3D, slotType: string, item: Item, layer = 1, overlay = false) { + if (!item) { + removeArmorModel(entityMesh, slotType) + return + } + const itemParts = item.name.split('_') + const armorMaterial = itemParts[0] + if (!armorMaterial) { + removeArmorModel(entityMesh, slotType) + return + } + // TODO: Support resource pack + // TODO: Support mirroring on certain parts of the model + const texturePath = armorModels[`${armorMaterial}Layer${layer}${overlay ? 'Overlay' : ''}`] + if (!texturePath || !armorModels.armorModel[slotType]) { + return + } + + const meshName = `geometry_armor_${slotType}${overlay ? '_overlay' : ''}` + let mesh = entityMesh.children.findLast(c => c.name === meshName) as THREE.Mesh + let material + if (mesh) { + material = mesh.material + loadTexture(texturePath, texture => { + texture.magFilter = THREE.NearestFilter + texture.minFilter = THREE.NearestFilter + texture.flipY = false + texture.wrapS = THREE.MirroredRepeatWrapping + texture.wrapT = THREE.MirroredRepeatWrapping + material.map = texture + }) + } else { + mesh = getMesh(texturePath, armorModels.armorModel[slotType]) + mesh.name = meshName + material = mesh.material + material.side = THREE.DoubleSide + } + if (armorMaterial === 'leather' && !overlay) { + const color = (item.nbt?.value as any)?.display?.value?.color?.value + if (color) { + const r = color >> 16 & 0xff + const g = color >> 8 & 0xff + const b = color & 0xff + material.color.setRGB(r / 255, g / 255, b / 255) + } else { + material.color.setHex(0xB5_6D_51) // default brown color + } + addArmorModel(entityMesh, slotType, item, layer, true) + } + const group = new THREE.Object3D() + group.name = `armor_${slotType}${overlay ? '_overlay' : ''}` + group.add(mesh) + + const skeletonHelper = new THREE.SkeletonHelper(mesh) + //@ts-expect-error + skeletonHelper.material.linewidth = 2 + skeletonHelper.visible = false + group.add(skeletonHelper) + + entityMesh.add(mesh) +} + +function removeArmorModel (entityMesh: THREE.Object3D, slotType: string) { + for (const c of entityMesh.children) { + if (c.name === `geometry_armor_${slotType}` || c.name === `geometry_armor_${slotType}_overlay`) { + c.removeFromParent() + } + } +} diff --git a/prismarine-viewer/viewer/lib/entity/EntityMesh.js b/prismarine-viewer/viewer/lib/entity/EntityMesh.js index 1350dcf0d..69dd95d65 100644 --- a/prismarine-viewer/viewer/lib/entity/EntityMesh.js +++ b/prismarine-viewer/viewer/lib/entity/EntityMesh.js @@ -94,7 +94,7 @@ function dot(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] } -function addCube(attr, boneId, bone, cube, texWidth = 64, texHeight = 64) { +function addCube(attr, boneId, bone, cube, texWidth = 64, texHeight = 64, mirror = false) { const cubeRotation = new THREE.Euler(0, 0, 0) if (cube.rotation) { cubeRotation.x = -cube.rotation[0] * Math.PI / 180 @@ -104,15 +104,20 @@ function addCube(attr, boneId, bone, cube, texWidth = 64, texHeight = 64) { for (const { dir, corners, u0, v0, u1, v1 } of Object.values(elemFaces)) { const ndx = Math.floor(attr.positions.length / 3) + const eastOrWest = dir[0] !== 0 + const faceUvs = [] for (const pos of corners) { const u = (cube.uv[0] + dot(pos[3] ? u1 : u0, cube.size)) / texWidth const v = (cube.uv[1] + dot(pos[4] ? v1 : v0, cube.size)) / texHeight + const posX = eastOrWest && mirror ? pos[0] ^ 1 : pos[0] + const posY = pos[1] + const posZ = eastOrWest && mirror ? pos[2] ^ 1 : pos[2] const inflate = cube.inflate ?? 0 let vecPos = new THREE.Vector3( - cube.origin[0] + pos[0] * cube.size[0] + (pos[0] ? inflate : -inflate), - cube.origin[1] + pos[1] * cube.size[1] + (pos[1] ? inflate : -inflate), - cube.origin[2] + pos[2] * cube.size[2] + (pos[2] ? inflate : -inflate) + cube.origin[0] + posX * cube.size[0] + (posX ? inflate : -inflate), + cube.origin[1] + posY * cube.size[1] + (posY ? inflate : -inflate), + cube.origin[2] + posZ * cube.size[2] + (posZ ? inflate : -inflate) ) vecPos = vecPos.applyEuler(cubeRotation) @@ -122,16 +127,28 @@ function addCube(attr, boneId, bone, cube, texWidth = 64, texHeight = 64) { attr.positions.push(vecPos.x, vecPos.y, vecPos.z) attr.normals.push(...dir) - attr.uvs.push(u, v) + faceUvs.push(u, v) attr.skinIndices.push(boneId, 0, 0, 0) attr.skinWeights.push(1, 0, 0, 0) } + if (mirror) { + for (let i = 0; i + 1 < corners.length; i += 2) { + const faceIndex = i * 2 + const tempFaceUvs = faceUvs.slice(faceIndex, faceIndex + 4) + faceUvs[faceIndex] = tempFaceUvs[2] + faceUvs[faceIndex + 1] = tempFaceUvs[eastOrWest ? 1 : 3] + faceUvs[faceIndex + 2] = tempFaceUvs[0] + faceUvs[faceIndex + 3] = tempFaceUvs[eastOrWest ? 3 : 1] + } + } + attr.uvs.push(...faceUvs) + attr.indices.push(ndx, ndx + 1, ndx + 2, ndx + 2, ndx + 1, ndx + 3) } } -function getMesh(texture, jsonModel, overrides = {}) { +export function getMesh(texture, jsonModel, overrides = {}) { const bones = {} const geoData = { @@ -169,7 +186,7 @@ function getMesh(texture, jsonModel, overrides = {}) { if (jsonBone.cubes) { for (const cube of jsonBone.cubes) { - addCube(geoData, i, bone, cube, jsonModel.texturewidth, jsonModel.textureheight) + addCube(geoData, i, bone, cube, jsonModel.texturewidth, jsonModel.textureheight, jsonBone.mirror) } } i++ diff --git a/prismarine-viewer/viewer/lib/entity/armorModels.json b/prismarine-viewer/viewer/lib/entity/armorModels.json new file mode 100644 index 000000000..3632bad19 --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/armorModels.json @@ -0,0 +1,158 @@ +{ + "head": { + "bones": [ + {"name": "armor", "pivot": [0, 12, 0]}, + { + "name": "head", + "parent": "armor", + "pivot": [0, 12, 0], + "cubes": [ + { + "origin": [-4, 23, -4], + "size": [8, 8, 8], + "uv": [0, 0], + "inflate": 1 + } + ] + } + ], + "visible_bounds_width": 1.5, + "visible_bounds_offset": [0, 0.5, 0], + "texturewidth": 64, + "textureheight": 32 + }, + "chest": { + "bones": [ + {"name": "armor", "pivot": [0, 12, 0]}, + { + "name": "body", + "parent": "armor", + "pivot": [0, 13, 0], + "cubes": [ + { + "origin": [-4, 12, -2], + "size": [8, 12, 4], + "uv": [16, 16], + "inflate": 1 + } + ] + }, + { + "name": "rightarm", + "parent": "armor", + "pivot": [5, 10, 0], + "cubes": [ + { + "origin": [4, 12, -2], + "size": [4, 12, 4], + "uv": [40, 16], + "inflate": 0.75 + } + ] + }, + { + "name": "leftarm", + "parent": "armor", + "pivot": [-5, 10, 0], + "cubes": [ + { + "origin": [-8, 12, -2], + "size": [4, 12, 4], + "uv": [40, 16], + "inflate": 0.75 + } + ], + "mirror": true + } + ], + "visible_bounds_width": 1.5, + "visible_bounds_offset": [0, 0.5, 0], + "texturewidth": 64, + "textureheight": 32 + }, + "legs": { + "bones": [ + {"name": "armor", "pivot": [0, 12, 0]}, + { + "name": "body", + "parent": "armor", + "pivot": [0, 13, 0], + "cubes": [ + { + "origin": [-4, 12, -2], + "size": [8, 12, 4], + "uv": [16, 16], + "inflate": 0.75 + } + ] + }, + { + "name": "rightleg", + "parent": "armor", + "pivot": [1.9, 1, 0], + "cubes": [ + { + "origin": [-0.1, 0, -2], + "size": [4, 12, 4], + "uv": [0, 16], + "inflate": 0.5 + } + ] + }, + { + "name": "leftleg", + "parent": "armor", + "pivot": [-1.9, 1, 0], + "cubes": [ + { + "origin": [-3.9, 0, -2], + "size": [4, 12, 4], + "uv": [0, 16], + "inflate": 0.5 + } + ], + "mirror": true + } + ], + "visible_bounds_width": 1.5, + "visible_bounds_offset": [0, 0.5, 0], + "texturewidth": 64, + "textureheight": 32 + }, + "feet": { + "bones": [ + {"name": "armor", "pivot": [0, 12, 0]}, + { + "name": "rightleg", + "parent": "armor", + "pivot": [1.9, 1, 0], + "cubes": [ + { + "origin": [-0.1, 0, -2], + "size": [4, 12, 4], + "uv": [0, 16], + "inflate": 0.75 + } + ] + }, + { + "name": "leftleg", + "parent": "armor", + "pivot": [-1.9, 1, 0], + "cubes": [ + { + "origin": [-3.9, 0, -2], + "size": [4, 12, 4], + "uv": [0, 16], + "inflate": 0.75 + } + ], + "mirror": true + } + ], + "visible_bounds_width": 1.5, + "visible_bounds_offset": [0, 0.5, 0], + "texturewidth": 64, + "textureheight": 32 + } +} \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/armorModels.ts b/prismarine-viewer/viewer/lib/entity/armorModels.ts new file mode 100644 index 000000000..e1d3f87bb --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/armorModels.ts @@ -0,0 +1,36 @@ +/* + * prismarine-web-client - prismarine-web-client + * Copyright (C) 2024 Max Lee aka Phoenix616 (mail@moep.tv) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +// TODO: replace with load from resource pack +export { default as chainmailLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/chainmail_layer_1.png' +export { default as chainmailLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/chainmail_layer_2.png' +export { default as diamondLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/diamond_layer_1.png' +export { default as diamondLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/diamond_layer_2.png' +export { default as goldenLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/gold_layer_1.png' +export { default as goldenLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/gold_layer_2.png' +export { default as ironLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/iron_layer_1.png' +export { default as ironLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/iron_layer_2.png' +export { default as leatherLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/leather_layer_1.png' +export { default as leatherLayer1Overlay } from 'mc-assets/dist/other-textures/latest/models/armor/leather_layer_1_overlay.png' +export { default as leatherLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/leather_layer_2.png' +export { default as leatherLayer2Overlay } from 'mc-assets/dist/other-textures/latest/models/armor/leather_layer_2_overlay.png' +export { default as netheriteLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/netherite_layer_1.png' +export { default as netheriteLayer2 } from 'mc-assets/dist/other-textures/latest/models/armor/netherite_layer_2.png' +export { default as turtleLayer1 } from 'mc-assets/dist/other-textures/latest/models/armor/turtle_layer_1.png' + +export { default as armorModel } from './armorModels.json' diff --git a/prismarine-viewer/viewer/lib/entity/entities.json b/prismarine-viewer/viewer/lib/entity/entities.json index e084a5cd3..9824d4182 100644 --- a/prismarine-viewer/viewer/lib/entity/entities.json +++ b/prismarine-viewer/viewer/lib/entity/entities.json @@ -186,15 +186,16 @@ "bones": [ { "name": "baseplate", + "parent": "waist", "cubes": [ {"origin": [-6, 0, -6], "size": [12, 1, 12], "uv": [0, 32]} ] }, - {"name": "waist", "parent": "baseplate", "pivot": [0, 12, 0]}, + {"name": "waist", "pivot": [0, 12, 0]}, { "name": "body", "parent": "waist", - "pivot": [0, 24, 0], + "pivot": [0, 13, 0], "cubes": [ {"origin": [-6, 21, -1.5], "size": [12, 3, 3], "uv": [0, 26]}, {"origin": [-3, 14, -1], "size": [2, 7, 2], "uv": [16, 0]}, @@ -204,50 +205,50 @@ }, { "name": "head", - "parent": "body", - "pivot": [0, 24, 0], + "parent": "waist", + "pivot": [0, 12, 0], "cubes": [{"origin": [-1, 24, -1], "size": [2, 7, 2], "uv": [0, 0]}] }, { "name": "hat", "parent": "head", - "pivot": [0, 24, 0], + "pivot": [0, 12, 0], "cubes": [ {"origin": [-4, 24, -4], "size": [8, 8, 8], "uv": [32, 0]} ] }, { - "name": "leftarm", - "parent": "body", + "name": "rightarm", + "parent": "waist", "mirror": true, - "pivot": [5, 22, 0], + "pivot": [5, 10, 0], "cubes": [ {"origin": [5, 12, -1], "size": [2, 12, 2], "uv": [32, 16]} ] }, - {"name": "leftitem", "parent": "leftarm", "pivot": [6, 15, 1]}, + {"name": "rightitem", "parent": "leftarm", "pivot": [6, 15, 1]}, { - "name": "leftleg", - "parent": "body", + "name": "rightleg", + "parent": "waist", "mirror": true, - "pivot": [1.9, 12, 0], + "pivot": [1.9, 1, 0], "cubes": [ {"origin": [0.9, 1, -1], "size": [2, 11, 2], "uv": [40, 16]} ] }, { - "name": "rightarm", - "parent": "body", - "pivot": [-5, 22, 0], + "name": "leftarm", + "parent": "waist", + "pivot": [-5, 10, 0], "cubes": [ {"origin": [-7, 12, -1], "size": [2, 12, 2], "uv": [24, 0]} ] }, - {"name": "rightitem", "parent": "rightarm", "pivot": [-6, 15, 1]}, + {"name": "leftitem", "parent": "rightarm", "pivot": [-6, 15, 1]}, { - "name": "rightleg", - "parent": "body", - "pivot": [-1.9, 12, 0], + "name": "leftleg", + "parent": "waist", + "pivot": [-1.9, 1, 0], "cubes": [ {"origin": [-2.9, 1, -1], "size": [2, 11, 2], "uv": [8, 0]} ] diff --git a/prismarine-viewer/viewer/lib/entity/objModels.js b/prismarine-viewer/viewer/lib/entity/objModels.js index edff440b9..5af296067 100644 --- a/prismarine-viewer/viewer/lib/entity/objModels.js +++ b/prismarine-viewer/viewer/lib/entity/objModels.js @@ -1 +1,2 @@ export * as externalModels from './exportedModels' +export * as armorModels from './armorModels' diff --git a/prismarine-viewer/viewer/lib/hand.ts b/prismarine-viewer/viewer/lib/hand.ts new file mode 100644 index 000000000..6c9aacc53 --- /dev/null +++ b/prismarine-viewer/viewer/lib/hand.ts @@ -0,0 +1,96 @@ +import * as THREE from 'three' +import { loadSkinToCanvas } from 'skinview-utils' +import stevePng from 'mc-assets/dist/other-textures/latest/entity/player/wide/steve.png' + +let steveTexture: THREE.Texture +export const getMyHand = async (image?: string) => { + let newMap: THREE.Texture + if (!image && steveTexture) { + newMap = steveTexture + } else { + image ??= stevePng + const skinCanvas = document.createElement('canvas') + const img = new Image() + img.src = image + await new Promise(resolve => { + img.onload = () => { + resolve() + } + }) + loadSkinToCanvas(skinCanvas, img) + newMap = new THREE.CanvasTexture(skinCanvas) + // newMap.flipY = false + newMap.magFilter = THREE.NearestFilter + newMap.minFilter = THREE.NearestFilter + if (!image) { + steveTexture = newMap + } + } + + // right arm + const box = new THREE.BoxGeometry() + const material = new THREE.MeshStandardMaterial() + const slim = false + const mesh = new THREE.Mesh(box, material) + mesh.scale.x = slim ? 3 : 4 + mesh.scale.y = 12 + mesh.scale.z = 4 + setSkinUVs(box, 40, 16, slim ? 3 : 4, 12, 4) + material.map = newMap + material.needsUpdate = true + const group = new THREE.Group() + group.add(mesh) + group.scale.set(0.1, 0.1, 0.1) + mesh.rotation.z = Math.PI + return group +} + +function setUVs ( + box: THREE.BoxGeometry, + u: number, + v: number, + width: number, + height: number, + depth: number, + textureWidth: number, + textureHeight: number +): void { + const toFaceVertices = (x1: number, y1: number, x2: number, y2: number) => [ + new THREE.Vector2(x1 / textureWidth, 1 - y2 / textureHeight), + new THREE.Vector2(x2 / textureWidth, 1 - y2 / textureHeight), + new THREE.Vector2(x2 / textureWidth, 1 - y1 / textureHeight), + new THREE.Vector2(x1 / textureWidth, 1 - y1 / textureHeight), + ] + + const top = toFaceVertices(u + depth, v, u + width + depth, v + depth) + const bottom = toFaceVertices(u + width + depth, v, u + width * 2 + depth, v + depth) + const left = toFaceVertices(u, v + depth, u + depth, v + depth + height) + const front = toFaceVertices(u + depth, v + depth, u + width + depth, v + depth + height) + const right = toFaceVertices(u + width + depth, v + depth, u + width + depth * 2, v + height + depth) + const back = toFaceVertices(u + width + depth * 2, v + depth, u + width * 2 + depth * 2, v + height + depth) + + const uvAttr = box.attributes.uv as THREE.BufferAttribute + const uvRight = [right[3], right[2], right[0], right[1]] + const uvLeft = [left[3], left[2], left[0], left[1]] + const uvTop = [top[3], top[2], top[0], top[1]] + const uvBottom = [bottom[0], bottom[1], bottom[3], bottom[2]] + const uvFront = [front[3], front[2], front[0], front[1]] + const uvBack = [back[3], back[2], back[0], back[1]] + + // Create a new array to hold the modified UV data + const newUVData = [] as number[] + + // Iterate over the arrays and copy the data to uvData + for (const uvArray of [uvRight, uvLeft, uvTop, uvBottom, uvFront, uvBack]) { + for (const uv of uvArray) { + newUVData.push(uv.x, uv.y) + } + } + + uvAttr.set(new Float32Array(newUVData)) + uvAttr.needsUpdate = true +} + +function setSkinUVs (box: THREE.BoxGeometry, u: number, v: number, width: number, height: number, depth: number): void { + setUVs(box, u, v, width, height, depth, 64, 64) +} diff --git a/prismarine-viewer/viewer/lib/holdingBlock.ts b/prismarine-viewer/viewer/lib/holdingBlock.ts index f5a0ca799..5fc3e03c0 100644 --- a/prismarine-viewer/viewer/lib/holdingBlock.ts +++ b/prismarine-viewer/viewer/lib/holdingBlock.ts @@ -1,14 +1,19 @@ import * as THREE from 'three' import * as tweenJs from '@tweenjs/tween.js' import worldBlockProvider from 'mc-assets/dist/worldBlockProvider' +import { GUI } from 'lil-gui' import { getThreeBlockModelGroup, renderBlockThree, setBlockPosition } from './mesher/standaloneRenderer' +import { getMyHand } from './hand' export type HandItemBlock = { - name - properties + name? + properties? + type: 'block' | 'item' | 'hand' + id?: number } export default class HoldingBlock { + // TODO refactor with the tree builder for better visual understanding holdingBlock: THREE.Object3D | undefined = undefined swingAnimation: tweenJs.Group | undefined = undefined blockSwapAnimation: { @@ -16,22 +21,25 @@ export default class HoldingBlock { hidden: boolean } | undefined = undefined cameraGroup = new THREE.Mesh() - objectOuterGroup = new THREE.Group() - objectInnerGroup = new THREE.Group() - camera: THREE.Group | THREE.PerspectiveCamera + objectOuterGroup = new THREE.Group() // 3 + objectInnerGroup = new THREE.Group() // 4 + holdingBlockInnerGroup = new THREE.Group() // 5 + camera = new THREE.PerspectiveCamera(75, 1, 0.1, 100) stopUpdate = false lastHeldItem: HandItemBlock | undefined toBeRenderedItem: HandItemBlock | undefined isSwinging = false nextIterStopCallbacks: Array<() => void> | undefined + rightSide = true - constructor (public scene: THREE.Scene) { + debug = {} as Record + + constructor () { this.initCameraGroup() } initCameraGroup () { this.cameraGroup = new THREE.Mesh() - this.scene.add(this.cameraGroup) } startSwing () { @@ -44,17 +52,18 @@ export default class HoldingBlock { // const DURATION = 1000 * 0.35 / 2 const DURATION = 1000 * 0.35 / 3 // const DURATION = 1000 + const { position, rotation, object } = this.getFinalSwingPositionRotation() const initialPos = { - x: this.objectInnerGroup.position.x, - y: this.objectInnerGroup.position.y, - z: this.objectInnerGroup.position.z + x: object.position.x, + y: object.position.y, + z: object.position.z } const initialRot = { - x: this.objectInnerGroup.rotation.x, - y: this.objectInnerGroup.rotation.y, - z: this.objectInnerGroup.rotation.z + x: object.rotation.x, + y: object.rotation.y, + z: object.rotation.z } - const mainAnim = new tweenJs.Tween(this.objectInnerGroup.position, this.swingAnimation).to({ y: this.objectInnerGroup.position.y - this.objectInnerGroup.scale.y / 2 }, DURATION).yoyo(true).repeat(Infinity).start() + const mainAnim = new tweenJs.Tween(object.position, this.swingAnimation).to(position, DURATION).yoyo(true).repeat(Infinity).start() let i = 0 mainAnim.onRepeat(() => { i++ @@ -67,14 +76,66 @@ export default class HoldingBlock { this.swingAnimation!.removeAll() this.swingAnimation = undefined // todo refactor to be more generic for animations - this.objectInnerGroup.position.set(initialPos.x, initialPos.y, initialPos.z) - // this.objectInnerGroup.rotation.set(initialRot.x, initialRot.y, initialRot.z) - Object.assign(this.objectInnerGroup.rotation, initialRot) + object.position.set(initialPos.x, initialPos.y, initialPos.z) + // object.rotation.set(initialRot.x, initialRot.y, initialRot.z) + Object.assign(object.rotation, initialRot) } }) - new tweenJs.Tween(this.objectInnerGroup.rotation, this.swingAnimation).to({ z: THREE.MathUtils.degToRad(90) }, DURATION).yoyo(true).repeat(Infinity).start() - new tweenJs.Tween(this.objectInnerGroup.rotation, this.swingAnimation).to({ x: -THREE.MathUtils.degToRad(90) }, DURATION).yoyo(true).repeat(Infinity).start() + new tweenJs.Tween(object.rotation, this.swingAnimation).to(rotation, DURATION).yoyo(true).repeat(Infinity).start() + } + } + + getFinalSwingPositionRotation (origPosition?: THREE.Vector3) { + const object = this.objectInnerGroup + if (this.lastHeldItem?.type === 'block') { + origPosition ??= object.position + return { + position: { y: origPosition.y - this.objectInnerGroup.scale.y / 2 }, + rotation: { z: THREE.MathUtils.degToRad(90), x: -THREE.MathUtils.degToRad(90) }, + object + } + } + if (this.lastHeldItem?.type === 'item') { + const object = this.holdingBlockInnerGroup + origPosition ??= object.position + return { + position: { + y: origPosition.y - object.scale.y * 2, + // z: origPosition.z - window.zFinal, + // x: origPosition.x - window.xFinal, + }, + // rotation: { z: THREE.MathUtils.degToRad(90), x: -THREE.MathUtils.degToRad(90) } + rotation: { + // z: THREE.MathUtils.degToRad(window.zRotationFinal ?? 0), + // x: THREE.MathUtils.degToRad(window.xRotationFinal ?? 0), + // y: THREE.MathUtils.degToRad(window.yRotationFinal ?? 0), + x: THREE.MathUtils.degToRad(-120) + }, + object + } + } + if (this.lastHeldItem?.type === 'hand') { + const object = this.holdingBlockInnerGroup + origPosition ??= object.position + return { + position: { + y: origPosition.y - (window.yFinal ?? 0.15), + z: origPosition.z - window.zFinal, + x: origPosition.x - window.xFinal, + }, + rotation: { + x: THREE.MathUtils.degToRad(window.xRotationFinal || -14.7), + y: THREE.MathUtils.degToRad(window.yRotationFinal || 33.95), + z: THREE.MathUtils.degToRad(window.zRotationFinal || -28), + }, + object + } + } + return { + position: {}, + rotation: {}, + object } } @@ -89,11 +150,35 @@ export default class HoldingBlock { }) } - update (camera: typeof this.camera) { - this.camera = camera + render (originalCamera: THREE.PerspectiveCamera, renderer: THREE.WebGLRenderer, ambientLight: THREE.AmbientLight, directionalLight: THREE.DirectionalLight) { + if (!this.lastHeldItem) return this.swingAnimation?.update() this.blockSwapAnimation?.tween.update() + + const scene = new THREE.Scene() + scene.add(this.cameraGroup) + // if (this.camera.aspect !== originalCamera.aspect) { + // this.camera.aspect = originalCamera.aspect + // this.camera.updateProjectionMatrix() + // } this.updateCameraGroup() + scene.add(ambientLight.clone()) + scene.add(directionalLight.clone()) + + const viewerSize = renderer.getSize(new THREE.Vector2()) + const minSize = Math.min(viewerSize.width, viewerSize.height) + + renderer.autoClear = false + renderer.clearDepth() + if (this.rightSide) { + const x = viewerSize.width - minSize + // if (x) x -= x / 4 + renderer.setViewport(x, 0, minSize, minSize) + } else { + renderer.setViewport(0, 0, minSize, minSize) + } + renderer.render(scene, this.camera) + renderer.setViewport(0, 0, viewerSize.width, viewerSize.height) } // worldTest () { @@ -142,23 +227,36 @@ export default class HoldingBlock { this.cameraGroup.position.copy(camera.position) this.cameraGroup.rotation.copy(camera.rotation) - const viewerSize = viewer.renderer.getSize(new THREE.Vector2()) - // const x = window.x ?? 0.25 * viewerSize.width / viewerSize.height - // const x = 0 * viewerSize.width / viewerSize.height - const x = 0.2 * viewerSize.width / viewerSize.height - this.objectOuterGroup.position.set(x, -0.3, -0.45) + // const viewerSize = viewer.renderer.getSize(new THREE.Vector2()) + // const aspect = viewerSize.width / viewerSize.height + const aspect = 1 + + + // Adjust the position based on the aspect ratio + const { position, scale: scaleData } = this.getHandHeld3d() + const distance = -position.z + const side = this.rightSide ? 1 : -1 + this.objectOuterGroup.position.set( + distance * position.x * aspect * side, + distance * position.y, + -distance + ) + + // const scale = Math.min(0.8, Math.max(1, 1 * aspect)) + const scale = scaleData * 2.22 * 0.2 + this.objectOuterGroup.scale.set(scale, scale, scale) } - async initHandObject (material: THREE.Material, blockstatesModels: any, blocksAtlases: any, block?: HandItemBlock) { + async initHandObject (material: THREE.Material, blockstatesModels: any, blocksAtlases: any, handItem?: HandItemBlock) { let animatingCurrent = false - if (!this.swingAnimation && !this.blockSwapAnimation && this.isDifferentItem(block)) { + if (!this.swingAnimation && !this.blockSwapAnimation && this.isDifferentItem(handItem)) { animatingCurrent = true await this.playBlockSwapAnimation() this.holdingBlock?.removeFromParent() this.holdingBlock = undefined } - this.lastHeldItem = block - if (!block) { + this.lastHeldItem = handItem + if (!handItem) { this.holdingBlock?.removeFromParent() this.holdingBlock = undefined this.swingAnimation = undefined @@ -166,16 +264,28 @@ export default class HoldingBlock { return } const blockProvider = worldBlockProvider(blockstatesModels, blocksAtlases, 'latest') - const models = blockProvider.getAllResolvedModels0_1(block, true) - const blockInner = getThreeBlockModelGroup(material, models, undefined, 'plains', loadedData) - // const { mesh: itemMesh } = viewer.entities.getItemMesh({ - // itemId: 541, - // })! - // itemMesh.position.set(0.5, 0.5, 0.5) - // const blockInner = itemMesh + let blockInner + if (handItem.type === 'block') { + const models = blockProvider.getAllResolvedModels0_1({ + name: handItem.name, + properties: handItem.properties ?? {} + }, true) + blockInner = getThreeBlockModelGroup(material, models, undefined, 'plains', loadedData) + } else if (handItem.type === 'item') { + const { mesh: itemMesh } = viewer.entities.getItemMesh({ + itemId: handItem.id, + })! + itemMesh.position.set(0.5, 0.5, 0.5) + blockInner = itemMesh + } else { + blockInner = await getMyHand() + } blockInner.name = 'holdingBlock' const blockOuterGroup = new THREE.Group() - blockOuterGroup.add(blockInner) + this.holdingBlockInnerGroup.removeFromParent() + this.holdingBlockInnerGroup = new THREE.Group() + this.holdingBlockInnerGroup.add(blockInner) + blockOuterGroup.add(this.holdingBlockInnerGroup) this.holdingBlock = blockInner this.objectInnerGroup = new THREE.Group() this.objectInnerGroup.add(blockOuterGroup) @@ -190,18 +300,113 @@ export default class HoldingBlock { this.objectOuterGroup.add(this.objectInnerGroup) this.cameraGroup.add(this.objectOuterGroup) - const rotation = -45 + -90 - // const rotation = -45 // should be for item - this.holdingBlock.rotation.set(0, THREE.MathUtils.degToRad(rotation), 0, 'ZYX') + const rotationDeg = this.getHandHeld3d().rotation + let origPosition + const setRotation = () => { + const final = this.getFinalSwingPositionRotation(origPosition) + origPosition ??= final.object.position.clone() + if (this.debug.displayFinal) { + Object.assign(final.object.position, final.position) + Object.assign(final.object.rotation, final.rotation) + } else if (this.debug.displayFinal === false) { + final.object.rotation.set(0, 0, 0) + } - // const scale = window.scale ?? 0.2 - const scale = 0.2 - this.objectOuterGroup.scale.set(scale, scale, scale) - // this.objectOuterGroup.position.set(x, window.y ?? -0.41, window.z ?? -0.45) - // this.objectOuterGroup.position.set(x, 0, -0.45) + this.holdingBlock!.rotation.x = THREE.MathUtils.degToRad(rotationDeg.x) + this.holdingBlock!.rotation.y = THREE.MathUtils.degToRad(rotationDeg.y) + this.holdingBlock!.rotation.z = THREE.MathUtils.degToRad(rotationDeg.z) + this.objectOuterGroup.rotation.y = THREE.MathUtils.degToRad(rotationDeg.yOuter) + } + // const gui = new GUI() + // gui.add(rotationDeg, 'x', -180, 180, 0.1) + // gui.add(rotationDeg, 'y', -180, 180, 0.1) + // gui.add(rotationDeg, 'z', -180, 180, 0.1) + // gui.add(rotationDeg, 'yOuter', -180, 180, 0.1) + // Object.assign(window, { xFinal: 0, yFinal: 0, zFinal: 0, xRotationFinal: 0, yRotationFinal: 0, zRotationFinal: 0, displayFinal: true }) + // gui.add(window, 'xFinal', -10, 10, 0.05) + // gui.add(window, 'yFinal', -10, 10, 0.05) + // gui.add(window, 'zFinal', -10, 10, 0.05) + // gui.add(window, 'xRotationFinal', -180, 180, 0.05) + // gui.add(window, 'yRotationFinal', -180, 180, 0.05) + // gui.add(window, 'zRotationFinal', -180, 180, 0.05) + // gui.add(window, 'displayFinal') + // gui.onChange(setRotation) + setRotation() if (animatingCurrent) { await this.playBlockSwapAnimation() } } + + getHandHeld3d () { + const type = this.lastHeldItem?.type ?? 'hand' + const { debug } = this + + let scale = type === 'item' ? 0.68 : 0.45 + + const position = { + x: debug.x ?? 0.4, + y: debug.y ?? -0.7, + z: -0.45 + } + + if (type === 'item') { + position.x = -0.05 + // position.y -= 3.2 / 10 + // position.z += 1.13 / 10 + } + + if (type === 'hand') { + // position.x = viewer.camera.aspect > 1 ? 0.7 : 1.1 + position.y = -0.8 + scale = 0.8 + } + + const rotations = { + block: { + x: 0, + y: -45 + 90, + z: 0, + yOuter: 0 + }, + // hand: { + // x: 166.7, + // // y: -180, + // y: -165.2, + // // z: -156.3, + // z: -134.2, + // yOuter: -81.1 + // }, + hand: { + x: -32.4, + // y: 25.1 + y: 42.8, + z: -41.3, + yOuter: 0 + }, + // item: { + // x: -174, + // y: 47.3, + // z: -134.2, + // yOuter: -41.2 + // } + item: { + // x: -174, + // y: 47.3, + // z: -134.2, + // yOuter: -41.2 + x: 0, + // y: -90, // todo thats the correct one but we don't make it look too cheap because of no depth + y: -70, + z: window.z ?? 25, + yOuter: 0 + } + } + + return { + rotation: rotations[type], + position, + scale + } + } } diff --git a/prismarine-viewer/viewer/lib/mesher/models.ts b/prismarine-viewer/viewer/lib/mesher/models.ts index 51a00a448..84c591a1a 100644 --- a/prismarine-viewer/viewer/lib/mesher/models.ts +++ b/prismarine-viewer/viewer/lib/mesher/models.ts @@ -123,7 +123,7 @@ const isCube = (block: Block) => { if (block.isCube) return true if (!block.models?.length || block.models.length !== 1) return false // all variants - return block.models[0].every(v => v.elements!.every(e => { + return block.models[0].every(v => v.elements.every(e => { return e.from[0] === 0 && e.from[1] === 0 && e.from[2] === 0 && e.to[0] === 16 && e.to[1] === 16 && e.to[2] === 16 })) } diff --git a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts index 4e322bcf6..9ebd66045 100644 --- a/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts +++ b/prismarine-viewer/viewer/lib/mesher/test/tests.test.ts @@ -17,7 +17,7 @@ const addPositions = [ test('Known blocks are not rendered', () => { const { mesherWorld, getGeometry, pos, mcData } = setup(lastVersion, addPositions as any) - const ignoreAsExpected = new Set([...INVISIBLE_BLOCKS, 'water', 'lava', 'moving_piston', 'light']) + const ignoreAsExpected = new Set([...INVISIBLE_BLOCKS, 'water', 'lava']) let time = 0 let times = 0 @@ -43,11 +43,12 @@ test('Known blocks are not rendered', () => { } } } + console.log('Checking blocks of version', lastVersion) console.log('Average time', time / times) // should be fixed, but to avoid regressions & for visibility + // TODO resolve creaking_heart issue (1.21.3) expect(missingBlocks).toMatchInlineSnapshot(` { - "bubble_column": true, "end_gateway": true, "end_portal": true, "structure_void": true, diff --git a/prismarine-viewer/viewer/lib/mesher/world.ts b/prismarine-viewer/viewer/lib/mesher/world.ts index c69da7513..f6094e2cb 100644 --- a/prismarine-viewer/viewer/lib/mesher/world.ts +++ b/prismarine-viewer/viewer/lib/mesher/world.ts @@ -6,9 +6,18 @@ import { WorldBlockProvider } from 'mc-assets/dist/worldBlockProvider' import moreBlockDataGeneratedJson from '../moreBlockDataGenerated.json' import legacyJson from '../../../../src/preflatMap.json' import { defaultMesherConfig } from './shared' +import { INVISIBLE_BLOCKS } from './worldConstants' const ignoreAoBlocks = Object.keys(moreBlockDataGeneratedJson.noOcclusions) +const ALWAYS_WATERLOGGED = new Set([ + 'seagrass', + 'tall_seagrass', + 'kelp', + 'kelp_plant', + 'bubble_column' +]) + function columnKey (x, z) { return `${x},${z}` } @@ -159,6 +168,12 @@ export class World { if (block.models === undefined && blockProvider) { if (!attr) throw new Error('attr is required') const props = block.getProperties() + + // Patch waterlogged property for ocean plants + if (ALWAYS_WATERLOGGED.has(block.name)) { + props.waterlogged = 'true' + } + try { // fixme if (this.preflat) { @@ -178,7 +193,9 @@ export class World { properties: props, }, this.preflat)! // fixme! this is a hack (also need a setting for all versions) if (!block.models!.length) { - console.debug('[mesher] block to render not found', block.name, props) + if (block.name !== 'water' && block.name !== 'lava' && !INVISIBLE_BLOCKS.has(block.name)) { + console.debug('[mesher] block to render not found', block.name, props) + } block.models = null } } catch (err) { @@ -191,6 +208,7 @@ export class World { if (block.name === 'flowing_water') block.name = 'water' if (block.name === 'flowing_lava') block.name = 'lava' + if (block.name === 'bubble_column') block.name = 'water' // TODO need to distinguish between water and bubble column // block.position = loc // it overrides position of all currently loaded blocks block.biome = this.biomeCache[column.getBiome(locInChunk)] ?? this.biomeCache[1] ?? this.biomeCache[0] if (block.name === 'redstone_ore') block.transparent = false diff --git a/prismarine-viewer/viewer/lib/mesher/worldConstants.ts b/prismarine-viewer/viewer/lib/mesher/worldConstants.ts index 75f08e89e..6aa0e0fcd 100644 --- a/prismarine-viewer/viewer/lib/mesher/worldConstants.ts +++ b/prismarine-viewer/viewer/lib/mesher/worldConstants.ts @@ -1 +1 @@ -export const INVISIBLE_BLOCKS = new Set(['air', 'void_air', 'cave_air', 'barrier']) +export const INVISIBLE_BLOCKS = new Set(['air', 'void_air', 'cave_air', 'barrier', 'light', 'moving_piston']) diff --git a/prismarine-viewer/viewer/lib/ui/newStats.ts b/prismarine-viewer/viewer/lib/ui/newStats.ts index 4f4b5cee7..6fccac533 100644 --- a/prismarine-viewer/viewer/lib/ui/newStats.ts +++ b/prismarine-viewer/viewer/lib/ui/newStats.ts @@ -6,7 +6,6 @@ const stats = {} let lastY = 20 export const addNewStat = (id: string, width = 80, x = rightOffset, y = lastY) => { const pane = document.createElement('div') - pane.id = 'fps-counter' pane.style.position = 'fixed' pane.style.top = `${y}px` pane.style.right = `${x}px` @@ -27,6 +26,7 @@ export const addNewStat = (id: string, width = 80, x = rightOffset, y = lastY) = return { updateText (text: string) { + if (pane.innerText === text) return pane.innerText = text }, setVisibility (visible: boolean) { diff --git a/prismarine-viewer/viewer/lib/viewer.ts b/prismarine-viewer/viewer/lib/viewer.ts index 73f29fb2d..c7dd7fe56 100644 --- a/prismarine-viewer/viewer/lib/viewer.ts +++ b/prismarine-viewer/viewer/lib/viewer.ts @@ -3,12 +3,14 @@ import * as THREE from 'three' import { Vec3 } from 'vec3' import { generateSpiralMatrix } from 'flying-squid/dist/utils' import worldBlockProvider from 'mc-assets/dist/worldBlockProvider' +import stevePng from 'mc-assets/dist/other-textures/latest/entity/player/wide/steve.png' import { Entities } from './entities' import { Primitives } from './primitives' import { WorldRendererThree } from './worldrendererThree' import { WorldRendererCommon, WorldRendererConfig, defaultWorldRendererConfig } from './worldrendererCommon' import { getThreeBlockModelGroup, renderBlockThree, setBlockPosition } from './mesher/standaloneRenderer' import { addNewStat } from './ui/newStats' +import { getMyHand } from './hand' export class Viewer { scene: THREE.Scene @@ -88,6 +90,7 @@ export class Viewer { return new THREE.TextureLoader().loadAsync(this.world.itemsAtlasParser!.latestImage) }).then((texture) => { this.entities.itemsTexture = texture + this.world.renderUpdateEmitter.emit('itemsTextureDownloaded') }) } @@ -104,7 +107,11 @@ export class Viewer { const sectionX = Math.floor(pos.x / 16) * 16 const sectionZ = Math.floor(pos.z / 16) * 16 if (this.world.queuedChunks.has(`${sectionX},${sectionZ}`)) { - await this.world.waitForChunkToLoad(pos) + await new Promise(resolve => { + this.world.queuedFunctions.push(() => { + resolve() + }) + }) } if (!this.world.loadedChunks[`${sectionX},${sectionZ}`]) { console.debug('[should be unreachable] setBlockStateId called for unloaded chunk', pos) @@ -114,18 +121,12 @@ export class Viewer { void set() } - demoModel () { + async demoModel () { //@ts-expect-error const pos = cursorBlockRel(0, 1, 0).position const blockProvider = worldBlockProvider(this.world.blockstatesModels, this.world.blocksAtlases, 'latest') - const models = blockProvider.getAllResolvedModels0_1({ - name: 'item_frame', - properties: { - // map: false - } - }, true) - const { material } = this.world - const mesh = getThreeBlockModelGroup(material, models, undefined, 'plains', loadedData) + + const mesh = await getMyHand() // mesh.rotation.y = THREE.MathUtils.degToRad(90) setBlockPosition(mesh, pos) const helper = new THREE.BoxHelper(mesh, 0xff_ff_00) @@ -158,7 +159,7 @@ export class Viewer { })) } - setFirstPersonCamera (pos: Vec3 | null, yaw: number, pitch: number, roll = 0) { + setFirstPersonCamera (pos: Vec3 | null, yaw: number, pitch: number) { const cam = this.cameraObjectOverride || this.camera let yOffset = this.getMineflayerBot()?.entity?.eyeHeight ?? this.playerHeight if (this.isSneaking) yOffset -= 0.3 @@ -225,6 +226,10 @@ export class Viewer { this.world.queuedChunks.delete(`${args[0]},${args[1]}`) this.addColumn(...args as Parameters) } + for (const fn of this.world.queuedFunctions) { + fn() + } + this.world.queuedFunctions = [] currentLoadChunkBatch = null }, this.addChunksBatchWaitTime) } diff --git a/prismarine-viewer/viewer/lib/worldDataEmitter.ts b/prismarine-viewer/viewer/lib/worldDataEmitter.ts index 0223b855b..61d5a503a 100644 --- a/prismarine-viewer/viewer/lib/worldDataEmitter.ts +++ b/prismarine-viewer/viewer/lib/worldDataEmitter.ts @@ -23,15 +23,7 @@ export class WorldDataEmitter extends EventEmitter { private readonly emitter: WorldDataEmitter keepChunksDistance = 0 addWaitTime = 1 - _handDisplay = false isPlayground = false - get handDisplay () { - return this._handDisplay - } - set handDisplay (newVal) { - this._handDisplay = newVal - this.eventListeners.heldItemChanged?.() - } constructor (public world: typeof __type_bot['world'], public viewDistance: number, position: Vec3 = new Vec3(0, 0, 0)) { super() @@ -107,23 +99,29 @@ export class WorldDataEmitter extends EventEmitter { time: () => { this.emitter.emit('time', bot.time.timeOfDay) }, - heldItemChanged: () => { - if (!this.handDisplay) { - viewer.world.onHandItemSwitch(undefined) - return - } - const newItem = bot.heldItem - if (!newItem) { - viewer.world.onHandItemSwitch(undefined) - return - } - const block = loadedData.blocksByName[newItem.name] - // todo clean types - const blockProperties = block ? new window.PrismarineBlock(block.id, 'void', newItem.metadata).getProperties() : {} - viewer.world.onHandItemSwitch({ name: newItem.name, properties: blockProperties }) + heldItemChanged () { + handChanged(false) }, } satisfies Partial - this.eventListeners.heldItemChanged() + const handChanged = (isLeftHand: boolean) => { + const newItem = isLeftHand ? bot.inventory.slots[45] : bot.heldItem + if (!newItem) { + viewer.world.onHandItemSwitch(undefined, isLeftHand) + return + } + const block = loadedData.blocksByName[newItem.name] + // todo clean types + const blockProperties = block ? new window.PrismarineBlock(block.id, 'void', newItem.metadata).getProperties() : {} + // todo item props + viewer.world.onHandItemSwitch({ name: newItem.name, properties: blockProperties, id: newItem.type, type: block ? 'block' : 'item', }, isLeftHand) + } + bot.inventory.on('updateSlot', (index) => { + if (index === 45) { + handChanged(true) + } + }) + handChanged(false) + handChanged(true) bot._client.on('update_light', ({ chunkX, chunkZ }) => { diff --git a/prismarine-viewer/viewer/lib/worldrendererCommon.ts b/prismarine-viewer/viewer/lib/worldrendererCommon.ts index 71c094b4f..b456b27a0 100644 --- a/prismarine-viewer/viewer/lib/worldrendererCommon.ts +++ b/prismarine-viewer/viewer/lib/worldrendererCommon.ts @@ -12,6 +12,7 @@ import itemsAtlasLegacy from 'mc-assets/dist/itemsAtlasLegacy.png' import { AtlasParser } from 'mc-assets' import TypedEmitter from 'typed-emitter' import { LineMaterial } from 'three-stdlib' +import christmasPack from 'mc-assets/dist/textureReplacements/christmas' import { dynamicMcDataFiles } from '../../buildMesherConfig.mjs' import { toMajorVersion } from '../../../src/utils' import { buildCleanupDecorator } from './cleanupDecorator' @@ -29,7 +30,10 @@ export const worldCleanup = buildCleanupDecorator('resetWorld') export const defaultWorldRendererConfig = { showChunkBorders: false, - numWorkers: 4 + numWorkers: 4, + isPlayground: false, + // game renderer setting actually + displayHand: false } export type WorldRendererConfig = typeof defaultWorldRendererConfig @@ -45,29 +49,35 @@ export abstract class WorldRendererCommon threejsCursorLineMaterial: LineMaterial @worldCleanup() cursorBlock = null as Vec3 | null - isPlayground = false displayStats = true @worldCleanup() worldConfig = { minY: 0, worldHeight: 256 } // todo need to cleanup material = new THREE.MeshLambertMaterial({ vertexColors: true, transparent: true, alphaTest: 0.1 }) + cameraRoll = 0 @worldCleanup() active = false version = undefined as string | undefined + // #region CHUNK & SECTIONS TRACKING @worldCleanup() loadedChunks = {} as Record // data is added for these chunks and they might be still processing @worldCleanup() finishedChunks = {} as Record // these chunks are fully loaded into the world (scene) + @worldCleanup() + finishedSections = {} as Record // these sections are fully loaded into the world (scene) + @worldCleanup() // loading sections (chunks) sectionsWaiting = new Map() @worldCleanup() queuedChunks = new Set() + queuedFunctions = [] as Array<() => void> + // #endregion @worldCleanup() renderUpdateEmitter = new EventEmitter() as unknown as TypedEmitter<{ @@ -127,6 +137,7 @@ export abstract class WorldRendererCommon } neighborChunkUpdates = true lastChunkDistance = 0 + debugStopGeometryUpdate = false abstract outputFormat: 'threeJs' | 'webgpu' @@ -155,7 +166,9 @@ export abstract class WorldRendererCommon const worker: any = new Worker(src) const handleMessage = (data) => { if (!this.active) return - this.handleWorkerMessage(data) + if (data.type !== 'geometry' || !this.debugStopGeometryUpdate) { + this.handleWorkerMessage(data) + } if (data.type === 'geometry') { this.geometryReceiveCount[data.workerIndex] ??= 0 this.geometryReceiveCount[data.workerIndex]++ @@ -172,7 +185,10 @@ export abstract class WorldRendererCommon if (data.type === 'sectionFinished') { // on after load & unload section if (!this.sectionsWaiting.get(data.key)) throw new Error(`sectionFinished event for non-outstanding section ${data.key}`) this.sectionsWaiting.set(data.key, this.sectionsWaiting.get(data.key)! - 1) - if (this.sectionsWaiting.get(data.key) === 0) this.sectionsWaiting.delete(data.key) + if (this.sectionsWaiting.get(data.key) === 0) { + this.sectionsWaiting.delete(data.key) + this.finishedSections[data.key] = true + } const chunkCoords = data.key.split(',').map(Number) if (this.loadedChunks[`${chunkCoords[0]},${chunkCoords[2]}`]) { // ensure chunk data was added, not a neighbor chunk update @@ -213,12 +229,13 @@ export abstract class WorldRendererCommon if (allFinished) { this.allChunksLoaded?.() this.allChunksFinished = true + this.allLoadedIn ??= Date.now() - this.initialChunkLoadWasStartedIn! } } } - onHandItemSwitch (item: HandItemBlock | undefined): void { } - changeHandSwingingState (isAnimationPlaying: boolean): void { } + onHandItemSwitch (item: HandItemBlock | undefined, isLeftHand: boolean): void { } + changeHandSwingingState (isAnimationPlaying: boolean, isLeftHand: boolean): void { } abstract handleWorkerMessage (data: WorkerReceive): void @@ -298,14 +315,21 @@ export abstract class WorldRendererCommon } } - async updateTexturesData (resourcePackUpdate = false) { + async updateTexturesData (resourcePackUpdate = false, prioritizeBlockTextures?: string[]) { const blocksAssetsParser = new AtlasParser(this.blocksAtlases, blocksAtlasLatest, blocksAtlasLegacy) const itemsAssetsParser = new AtlasParser(this.itemsAtlases, itemsAtlasLatest, itemsAtlasLegacy) + + const blockTexturesChanges = {} as Record + const date = new Date() + if ((date.getMonth() === 11 && date.getDate() >= 24) || (date.getMonth() === 0 && date.getDate() <= 6)) { + Object.assign(blockTexturesChanges, christmasPack) + } + + const customBlockTextures = Object.keys(this.customTextures.blocks?.textures ?? {}) const { atlas: blocksAtlas, canvas: blocksCanvas } = await blocksAssetsParser.makeNewAtlas(this.texturesVersion ?? this.version ?? 'latest', (textureName) => { const texture = this.customTextures?.blocks?.textures[textureName] - if (!texture) return - return texture - }, this.customTextures?.blocks?.tileSize) + return blockTexturesChanges[textureName] ?? texture + }, /* this.customTextures?.blocks?.tileSize */undefined, prioritizeBlockTextures, customBlockTextures) const { atlas: itemsAtlas, canvas: itemsCanvas } = await itemsAssetsParser.makeNewAtlas(this.texturesVersion ?? this.version ?? 'latest', (textureName) => { const texture = this.customTextures?.items?.textures[textureName] if (!texture) return @@ -395,9 +419,15 @@ export abstract class WorldRendererCommon } delete this.finishedChunks[`${x},${z}`] this.allChunksFinished = Object.keys(this.finishedChunks).length === this.chunksLength + if (!this.allChunksFinished) { + this.allLoadedIn = undefined + this.initialChunkLoadWasStartedIn = undefined + } for (let y = this.worldConfig.minY; y < this.worldConfig.worldHeight; y += 16) { this.setSectionDirty(new Vec3(x, y, z), false) + delete this.finishedSections[`${x},${y},${z}`] } + // remove from highestBlocks const startX = Math.floor(x / 16) * 16 const startZ = Math.floor(z / 16) * 16 @@ -411,26 +441,54 @@ export abstract class WorldRendererCommon } setBlockStateId (pos: Vec3, stateId: number) { - const key = `${Math.floor(pos.x / 16) * 16},${Math.floor(pos.y / 16) * 16},${Math.floor(pos.z / 16) * 16}` - const useChangeWorker = !this.sectionsWaiting[key] + const needAoRecalculation = true for (const worker of this.workers) { worker.postMessage({ type: 'blockUpdate', pos, stateId }) } - this.setSectionDirty(pos, true, useChangeWorker) + this.setSectionDirty(pos, true, true) if (this.neighborChunkUpdates) { - if ((pos.x & 15) === 0) this.setSectionDirty(pos.offset(-16, 0, 0), true, useChangeWorker) - if ((pos.x & 15) === 15) this.setSectionDirty(pos.offset(16, 0, 0), true, useChangeWorker) - if ((pos.y & 15) === 0) this.setSectionDirty(pos.offset(0, -16, 0), true, useChangeWorker) - if ((pos.y & 15) === 15) this.setSectionDirty(pos.offset(0, 16, 0), true, useChangeWorker) - if ((pos.z & 15) === 0) this.setSectionDirty(pos.offset(0, 0, -16), true, useChangeWorker) - if ((pos.z & 15) === 15) this.setSectionDirty(pos.offset(0, 0, 16), true, useChangeWorker) + if ((pos.x & 15) === 0) this.setSectionDirty(pos.offset(-16, 0, 0), true, true) + if ((pos.x & 15) === 15) this.setSectionDirty(pos.offset(16, 0, 0), true, true) + if ((pos.y & 15) === 0) this.setSectionDirty(pos.offset(0, -16, 0), true, true) + if ((pos.y & 15) === 15) this.setSectionDirty(pos.offset(0, 16, 0), true, true) + if ((pos.z & 15) === 0) this.setSectionDirty(pos.offset(0, 0, -16), true, true) + if ((pos.z & 15) === 15) this.setSectionDirty(pos.offset(0, 0, 16), true, true) + + if (needAoRecalculation) { + // top view neighbors + if ((pos.x & 15) === 0 && (pos.z & 15) === 0) this.setSectionDirty(pos.offset(-16, 0, -16), true, true) + if ((pos.x & 15) === 15 && (pos.z & 15) === 0) this.setSectionDirty(pos.offset(16, 0, -16), true, true) + if ((pos.x & 15) === 0 && (pos.z & 15) === 15) this.setSectionDirty(pos.offset(-16, 0, 16), true, true) + if ((pos.x & 15) === 15 && (pos.z & 15) === 15) this.setSectionDirty(pos.offset(16, 0, 16), true, true) + + // side view neighbors (but ignore updates above) + // z view neighbors + if ((pos.x & 15) === 0 && (pos.y & 15) === 0) this.setSectionDirty(pos.offset(-16, -16, 0), true, true) + if ((pos.x & 15) === 15 && (pos.y & 15) === 0) this.setSectionDirty(pos.offset(16, -16, 0), true, true) + + // x view neighbors + if ((pos.z & 15) === 0 && (pos.y & 15) === 0) this.setSectionDirty(pos.offset(0, -16, -16), true, true) + if ((pos.z & 15) === 15 && (pos.y & 15) === 0) this.setSectionDirty(pos.offset(0, -16, 16), true, true) + + // x & z neighbors + if ((pos.y & 15) === 0 && (pos.x & 15) === 0 && (pos.z & 15) === 0) this.setSectionDirty(pos.offset(-16, -16, -16), true, true) + if ((pos.y & 15) === 0 && (pos.x & 15) === 15 && (pos.z & 15) === 0) this.setSectionDirty(pos.offset(16, -16, -16), true, true) + if ((pos.y & 15) === 0 && (pos.x & 15) === 0 && (pos.z & 15) === 15) this.setSectionDirty(pos.offset(-16, -16, 16), true, true) + if ((pos.y & 15) === 0 && (pos.x & 15) === 15 && (pos.z & 15) === 15) this.setSectionDirty(pos.offset(16, -16, 16), true, true) + } } } queueAwaited = false messagesQueue = {} as { [workerIndex: string]: any[] } - getWorkerNumber (pos: Vec3) { + getWorkerNumber (pos: Vec3, updateAction = false) { + if (updateAction) { + const key = `${Math.floor(pos.x / 16) * 16},${Math.floor(pos.y / 16) * 16},${Math.floor(pos.z / 16) * 16}` + const cantUseChangeWorker = this.sectionsWaiting.get(key) && !this.finishedSections[key] + if (!cantUseChangeWorker) return 0 + } + const hash = mod(Math.floor(pos.x / 16) + Math.floor(pos.y / 16) + Math.floor(pos.z / 16), this.workers.length - 1) return hash + 1 } @@ -446,7 +504,7 @@ export abstract class WorldRendererCommon // Dispatch sections to workers based on position // This guarantees uniformity accross workers and that a given section // is always dispatched to the same worker - const hash = useChangeWorker ? 0 : this.getWorkerNumber(pos) + const hash = this.getWorkerNumber(pos, useChangeWorker) this.sectionsWaiting.set(key, (this.sectionsWaiting.get(key) ?? 0) + 1) this.messagesQueue[hash] ??= [] this.messagesQueue[hash].push({ diff --git a/prismarine-viewer/viewer/lib/worldrendererThree.ts b/prismarine-viewer/viewer/lib/worldrendererThree.ts index 8671bfaf0..1845c98ca 100644 --- a/prismarine-viewer/viewer/lib/worldrendererThree.ts +++ b/prismarine-viewer/viewer/lib/worldrendererThree.ts @@ -23,6 +23,7 @@ export class WorldRendererThree extends WorldRendererCommon { starField: StarField cameraSectionPos: Vec3 = new Vec3(0, 0, 0) holdingBlock: HoldingBlock + holdingBlockLeft: HoldingBlock rendererDevice = '...' get tilesRendered () { @@ -35,33 +36,46 @@ export class WorldRendererThree extends WorldRendererCommon { constructor (public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) { super(config) - this.rendererDevice = String(WorldRendererThree.getRendererInfo(this.renderer)) + this.rendererDevice = `${WorldRendererThree.getRendererInfo(this.renderer)} powered by three.js r${THREE.REVISION}` this.starField = new StarField(scene) - this.holdingBlock = new HoldingBlock(this.scene) + this.holdingBlock = new HoldingBlock() + this.holdingBlockLeft = new HoldingBlock() + this.holdingBlockLeft.rightSide = false - this.renderUpdateEmitter.on('textureDownloaded', () => { + this.renderUpdateEmitter.on('itemsTextureDownloaded', () => { if (this.holdingBlock.toBeRenderedItem) { this.onHandItemSwitch(this.holdingBlock.toBeRenderedItem) this.holdingBlock.toBeRenderedItem = undefined } + if (this.holdingBlockLeft.toBeRenderedItem) { + this.onHandItemSwitch(this.holdingBlock.toBeRenderedItem, true) + this.holdingBlockLeft.toBeRenderedItem = undefined + } }) this.addDebugOverlay() } - onHandItemSwitch (item: HandItemBlock | undefined) { + onHandItemSwitch (item: HandItemBlock | undefined, isLeft = false) { + if (!isLeft) { + item ??= { + type: 'hand', + } + } + const holdingBlock = isLeft ? this.holdingBlockLeft : this.holdingBlock if (!this.currentTextureImage) { - this.holdingBlock.toBeRenderedItem = item + holdingBlock.toBeRenderedItem = item return } - void this.holdingBlock.initHandObject(this.material, this.blockstatesModels, this.blocksAtlases, item) + void holdingBlock.initHandObject(this.material, this.blockstatesModels, this.blocksAtlases, item) } - changeHandSwingingState (isAnimationPlaying: boolean) { + changeHandSwingingState (isAnimationPlaying: boolean, isLeft = false) { + const holdingBlock = isLeft ? this.holdingBlockLeft : this.holdingBlock if (isAnimationPlaying) { - this.holdingBlock.startSwing() + holdingBlock.startSwing() } else { - void this.holdingBlock.stopSwing() + void holdingBlock.stopSwing() } } @@ -218,15 +232,18 @@ export class WorldRendererThree extends WorldRendererCommon { if (pos) { new tweenJs.Tween(this.camera.position).to({ x: pos.x, y: pos.y, z: pos.z }, 50).start() } - this.camera.rotation.set(pitch, yaw, 0, 'ZYX') + this.camera.rotation.set(pitch, yaw, this.cameraRoll, 'ZYX') } render () { tweenJs.update() - this.holdingBlock.update(this.camera) // eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style const cam = this.camera instanceof THREE.Group ? this.camera.children.find(child => child instanceof THREE.PerspectiveCamera) as THREE.PerspectiveCamera : this.camera this.renderer.render(this.scene, cam) + if (this.config.displayHand) { + this.holdingBlock.render(this.camera, this.renderer, viewer.ambientLight, viewer.directionalLight) + this.holdingBlockLeft.render(this.camera, this.renderer, viewer.ambientLight, viewer.directionalLight) + } } renderSign (position: Vec3, rotation: number, isWall: boolean, isHanging: boolean, blockEntity) { @@ -405,7 +422,7 @@ export class WorldRendererThree extends WorldRendererCommon { static getRendererInfo (renderer: THREE.WebGLRenderer) { try { const gl = renderer.getContext() - return `${gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info')!.UNMASKED_RENDERER_WEBGL)} powered by three.js r{THREE.REVISION}` + return `${gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info')!.UNMASKED_RENDERER_WEBGL)}` } catch (err) { console.warn('Failed to get renderer info', err) } diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 5c2353f39..47c9bee3c 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -96,10 +96,14 @@ const appConfig = defineConfig({ fs.copyFileSync('./assets/release.json', './dist/release.json') } const configJson = JSON.parse(fs.readFileSync('./config.json', 'utf8')) + let configLocalJson = {} + try { + configLocalJson = JSON.parse(fs.readFileSync('./config.local.json', 'utf8')) + } catch (err) {} if (dev) { configJson.defaultProxy = ':8080' } - fs.writeFileSync('./dist/config.json', JSON.stringify(configJson), 'utf8') + fs.writeFileSync('./dist/config.json', JSON.stringify({ ...configJson, ...configLocalJson }), 'utf8') // childProcess.execSync('./scripts/prepareSounds.mjs', { stdio: 'inherit' }) // childProcess.execSync('tsx ./scripts/genMcDataTypes.ts', { stdio: 'inherit' }) // childProcess.execSync('tsx ./scripts/genPixelartTypes.ts', { stdio: 'inherit' }) diff --git a/src/botUtils.ts b/src/botUtils.ts index 4dadb529e..4e803de27 100644 --- a/src/botUtils.ts +++ b/src/botUtils.ts @@ -21,6 +21,15 @@ export const displayClientChat = (text: string) => { } export const parseFormattedMessagePacket = (arg) => { + // if (typeof arg === 'string') { + // try { + // arg = JSON.parse(arg) + // return { + // formatted: arg, + // plain: '' + // } + // } catch {} + // } if (typeof arg === 'object') { try { return { diff --git a/src/connect.ts b/src/connect.ts index 40a476693..b7023880f 100644 --- a/src/connect.ts +++ b/src/connect.ts @@ -1,4 +1,9 @@ +import { versionsByMinecraftVersion } from 'minecraft-data' +import minecraftInitialDataJson from '../generated/minecraft-initial-data.json' import { AuthenticatedAccount } from './react/ServersListProvider' +import { setLoadingScreenStatus } from './utils' +import { downloadSoundsIfNeeded } from './soundSystem' +import { miscUiState } from './globalState' export type ConnectOptions = { server?: string @@ -16,4 +21,24 @@ export type ConnectOptions = { /** If true, will show a UI to authenticate with a new account */ authenticatedAccount?: AuthenticatedAccount | true peerOptions?: any + viewerWsConnect?: string +} + +export const downloadNeededDataOnConnect = async (version: string) => { + // todo expose cache + const initialDataVersion = Object.keys(minecraftInitialDataJson)[0]! + if (version === initialDataVersion) { + // ignore cache hit + versionsByMinecraftVersion.pc[initialDataVersion]!.dataVersion!++ + } + setLoadingScreenStatus(`Loading data for ${version}`) + if (!document.fonts.check('1em mojangles')) { + // todo instead re-render signs on load + await document.fonts.load('1em mojangles').catch(() => { + console.error('Failed to load font, signs wont be rendered correctly') + }) + } + await window._MC_DATA_RESOLVER.promise // ensure data is loaded + await downloadSoundsIfNeeded() + miscUiState.loadedDataVersion = version } diff --git a/src/controls.ts b/src/controls.ts index cb1c132bc..559379a39 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -49,6 +49,7 @@ export const contro = new ControMax({ chat: [['KeyT', 'Enter']], command: ['Slash'], swapHands: ['KeyF'], + zoom: ['KeyC'], selectItem: ['KeyH'] // default will be removed }, ui: { @@ -282,6 +283,9 @@ const onTriggerOrReleased = (command: Command, pressed: boolean) => { case 'general.interactPlace': document.dispatchEvent(new MouseEvent(pressed ? 'mousedown' : 'mouseup', { button: 2 })) break + case 'general.zoom': + gameAdditionalState.isZooming = pressed + break } } } @@ -309,9 +313,11 @@ export function lockUrl () { newQs = `reconnect=1` } else if (lastConnectOptions.value?.server) { const qs = new URLSearchParams() - const { server, botVersion } = lastConnectOptions.value - qs.set('server', server) + const { server, botVersion, proxy, username } = lastConnectOptions.value + qs.set('ip', server) if (botVersion) qs.set('version', botVersion) + if (proxy) qs.set('proxy', proxy) + if (username) qs.set('username', username) newQs = String(qs.toString()) } @@ -415,6 +421,8 @@ contro.on('trigger', ({ command }) => { case 'general.prevHotbarSlot': cycleHotbarSlot(-1) break + case 'general.zoom': + break } } @@ -730,11 +738,22 @@ addEventListener('mousedown', async (e) => { window.addEventListener('keydown', (e) => { if (e.code !== 'Escape') return if (activeModalStack.length) { - hideCurrentModal(undefined, () => { - if (!activeModalStack.length) { - pointerLock.justHitEscape = true + const hideAll = e.ctrlKey || e.metaKey + if (hideAll) { + while (activeModalStack.length > 0) { + hideCurrentModal(undefined, () => { + if (!activeModalStack.length) { + pointerLock.justHitEscape = true + } + }) } - }) + } else { + hideCurrentModal(undefined, () => { + if (!activeModalStack.length) { + pointerLock.justHitEscape = true + } + }) + } } else if (pointerLock.hasPointerLock) { document.exitPointerLock?.() if (options.autoExitFullscreen) { diff --git a/src/defaultLocalServerOptions.js b/src/defaultLocalServerOptions.js index 130726e0f..cd9495673 100644 --- a/src/defaultLocalServerOptions.js +++ b/src/defaultLocalServerOptions.js @@ -33,6 +33,6 @@ module.exports = { keepAlive: false, 'everybody-op': true, 'max-entities': 100, - 'version': '1.14.4', - versionMajor: '1.14' + 'version': '1.18.2', + versionMajor: '1.18' } diff --git a/src/devtools.ts b/src/devtools.ts index 16337c1d7..9aec8b773 100644 --- a/src/devtools.ts +++ b/src/devtools.ts @@ -43,10 +43,10 @@ customEvents.on('gameLoaded', () => { }) }) -window.inspectPacket = (packetName, full = false) => { - const listener = (...args) => console.log('packet', packetName, full ? args : args[0]) +window.inspectPacket = (packetName, fullOrListener: boolean | ((...args) => void) = false) => { + const listener = typeof fullOrListener === 'function' ? fullOrListener : (...args) => console.log('packet', packetName, fullOrListener ? args : args[0]) const attach = () => { - bot?._client.on(packetName, listener) + bot?._client.prependListener(packetName, listener) } attach() customEvents.on('mineflayerBotCreated', attach) diff --git a/src/entities.ts b/src/entities.ts index 26641f5ac..4e3a73fbd 100644 --- a/src/entities.ts +++ b/src/entities.ts @@ -153,4 +153,32 @@ customEvents.on('gameLoaded', () => { watchValue(options, o => { viewer.entities.setDebugMode(o.showChunkBorders ? 'basic' : 'none') }) + + // Texture override from packet properties + bot._client.on('player_info', (packet) => { + for (const player of packet.data) { + const textureProperty = player.properties?.find(prop => prop.name === 'textures') + if (textureProperty) { + try { + const textureData = JSON.parse(Buffer.from(textureProperty.value, 'base64').toString()) + const skinUrl = textureData.textures?.SKIN?.url + const capeUrl = textureData.textures?.CAPE?.url + + // Find entity with matching UUID and update skin + let entityId = '' + for (const [entId, entity] of Object.entries(bot.entities)) { + if (entity.uuid === player.UUID) { + entityId = entId + break + } + } + // even if not found, still record to cache + viewer.entities.updatePlayerSkin(entityId, player.name, skinUrl, capeUrl) + } catch (err) { + console.error('Error decoding player texture:', err) + } + } + } + + }) }) diff --git a/src/flyingSquidUtils.ts b/src/flyingSquidUtils.ts index 78254cf23..012830d9f 100644 --- a/src/flyingSquidUtils.ts +++ b/src/flyingSquidUtils.ts @@ -27,8 +27,10 @@ export async function savePlayers (autoSave: boolean) { export const saveServer = async (autoSave = true) => { if (!localServer || fsState.isReadonly) return // todo + console.time('save server') const worlds = [(localServer as any).overworld] as Array await Promise.all([localServer.writeLevelDat(), savePlayers(autoSave), ...worlds.map(async world => world.saveNow())]) + console.timeEnd('save server') } export const disconnect = async () => { if (localServer) { diff --git a/src/generatedServerPackets.ts b/src/generatedServerPackets.ts index 1c7ffa9e8..3b3ce018f 100644 --- a/src/generatedServerPackets.ts +++ b/src/generatedServerPackets.ts @@ -6,14 +6,7 @@ export interface ClientOnMap { } | /** 1.12.2 */ { keepAliveId: bigint; }; - login: /** 1.7 */ { - entityId: number; - gameMode: number; - dimension: number; - difficulty: number; - maxPlayers: number; - levelType: string; - } | /** 1.8 */ { + login:/** 1.8 */ { entityId: number; gameMode: number; dimension: number; @@ -148,9 +141,7 @@ export interface ClientOnMap { entityId: number; equipments: any; }; - spawn_position: /** 1.7 */ { - location: any; - } | /** 1.8 */ { + spawn_position:/** 1.8 */ { location: { x: number, y: number, z: number }; } | /** 1.17 */ { location: { x: number, y: number, z: number }; @@ -215,14 +206,7 @@ export interface ClientOnMap { death: any; portalCooldown: number; }; - position: /** 1.7 */ { - x: number; - y: number; - z: number; - yaw: number; - pitch: number; - onGround: boolean; - } | /** 1.8 */ { + position: /** 1.8 */ { x: number; y: number; z: number; @@ -905,11 +889,7 @@ export interface ClientOnMap { statistics: /** 1.7 */ { entries: any; }; - player_info: /** 1.7 */ { - playerName: string; - online: boolean; - ping: number; - } | /** 1.8 */ { + player_info: /** 1.8 */ { action: number; data: any; }; @@ -926,22 +906,13 @@ export interface ClientOnMap { length: number; matches: any; }; - scoreboard_objective: /** 1.7 */ { - name: string; - displayText: string; - action: number; - } | /** 1.8 */ { + scoreboard_objective:/** 1.8 */ { name: string; action: number; displayText: any; type: any; }; - scoreboard_score: /** 1.7 */ { - itemName: string; - action: number; - scoreName: any; - value: any; - } | /** 1.8 */ { + scoreboard_score:/** 1.8 */ { itemName: string; action: number; scoreName: string; diff --git a/src/globalState.ts b/src/globalState.ts index 90e3e359c..fbaabe819 100644 --- a/src/globalState.ts +++ b/src/globalState.ts @@ -114,6 +114,9 @@ export type AppConfig = { peerJsServerFallback?: string promoteServers?: Array<{ ip, description, version? }> mapsProvider?: string + + defaultSettings?: Record + allowAutoConnect?: boolean } export const miscUiState = proxy({ @@ -154,6 +157,7 @@ export const gameAdditionalState = proxy({ isFlying: false, isSprinting: false, isSneaking: false, + isZooming: false, warps: [] as WorldWarp[] }) diff --git a/src/globals.d.ts b/src/globals.d.ts index 7fc9baecc..10d05fa05 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -26,6 +26,7 @@ declare const customEvents: import('typed-emitter').default<{ mineflayerBotCreated (): void search (q: string): void activateItem (item: Item, slot: number, offhand: boolean): void + hurtAnimation (): void }> declare const beforeRenderFrame: Array<() => void> diff --git a/src/index.ts b/src/index.ts index 16cd3b36c..7ed1ccb09 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,8 @@ import './globals' import './devtools' import './entities' import './globalDomListeners' +import './mineflayer/maps' +import './mineflayer/cameraShake' import initCollisionShapes from './getCollisionInteractionShapes' import { onGameLoad } from './inventoryWindows' import { supportedVersions } from 'minecraft-protocol' @@ -93,7 +95,7 @@ import { saveToBrowserMemory } from './react/PauseScreen' import { ViewerWrapper } from 'prismarine-viewer/viewer/lib/viewerWrapper' import './devReload' import './water' -import { ConnectOptions } from './connect' +import { ConnectOptions, downloadNeededDataOnConnect } from './connect' import { ref, subscribe } from 'valtio' import { signInMessageState } from './react/SignInMessageProvider' import { updateAuthenticatedAccountData, updateLoadedServerData } from './react/ServersListProvider' @@ -104,6 +106,7 @@ import { ItemsRenderer } from 'mc-assets/dist/itemsRenderer' import './mobileShim' import { parseFormattedMessagePacket } from './botUtils' import { appStartup } from './clientMods' +import { getViewerVersionData, getWsProtocolStream } from './viewerConnector' window.debug = debug window.THREE = THREE @@ -377,7 +380,7 @@ async function connect (connectOptions: ConnectOptions) { signal: errorAbortController.signal }) - if (proxy) { + if (proxy && !connectOptions.viewerWsConnect) { console.log(`using proxy ${proxy.host}:${proxy.port || location.port}`) net['setProxy']({ hostname: proxy.host, port: proxy.port }) @@ -396,22 +399,7 @@ async function connect (connectOptions: ConnectOptions) { throw new Error('Microsoft authentication is only supported on 1.19.4 - 1.20.6 (at least for now)') } - // todo expose cache - const lastVersion = supportedVersions.at(-1) - if (version === lastVersion) { - // ignore cache hit - versionsByMinecraftVersion.pc[lastVersion]!['dataVersion']!++ - } - setLoadingScreenStatus(`Loading data for ${version}`) - if (!document.fonts.check('1em mojangles')) { - // todo instead re-render signs on load - await document.fonts.load('1em mojangles').catch(() => { - console.error('Failed to load font, signs wont be rendered correctly') - }) - } - await window._MC_DATA_RESOLVER.promise // ensure data is loaded - await downloadSoundsIfNeeded() - miscUiState.loadedDataVersion = version + await downloadNeededDataOnConnect(version) try { await resourcepackReload(version) } catch (err) { @@ -487,12 +475,26 @@ async function connect (connectOptions: ConnectOptions) { connectingServer: server.host }) : undefined + let clientDataStream + if (p2pMultiplayer) { + clientDataStream = await connectToPeer(connectOptions.peerId!, connectOptions.peerOptions) + } + if (connectOptions.viewerWsConnect) { + const { version, time } = await getViewerVersionData(connectOptions.viewerWsConnect) + console.log('Latency:', Date.now() - time, 'ms') + // const version = '1.21.1' + connectOptions.botVersion = version + await downloadMcData(version) + setLoadingScreenStatus(`Connecting to WebSocket server ${connectOptions.viewerWsConnect}`) + clientDataStream = await getWsProtocolStream(connectOptions.viewerWsConnect) + } + bot = mineflayer.createBot({ host: server.host, port: server.port ? +server.port : undefined, version: connectOptions.botVersion || false, - ...p2pMultiplayer ? { - stream: await connectToPeer(connectOptions.peerId!, connectOptions.peerOptions), + ...clientDataStream ? { + stream: clientDataStream, } : {}, ...singleplayer || p2pMultiplayer ? { keepAlive: false, @@ -577,10 +579,13 @@ async function connect (connectOptions: ConnectOptions) { bot.emit('inject_allowed') bot._client.emit('connect') + } else if (connectOptions.viewerWsConnect) { + // bot.emit('inject_allowed') + bot._client.emit('connect') } else { const setupConnectHandlers = () => { bot._client.socket.on('connect', () => { - console.log('WebSocket connection established') + console.log('Proxy WebSocket connection established') //@ts-expect-error bot._client.socket._ws.addEventListener('close', () => { console.log('WebSocket connection closed') @@ -621,6 +626,7 @@ async function connect (connectOptions: ConnectOptions) { } else { const originalSetSocket = bot._client.setSocket.bind(bot._client) bot._client.setSocket = (socket) => { + if (!bot) return originalSetSocket(socket) setupConnectHandlers() } @@ -647,6 +653,8 @@ async function connect (connectOptions: ConnectOptions) { destroyAll() }) + // bot.emit('kicked', '{"translate":"disconnect.genericReason","with":["Internal Exception: io.netty.handler.codec.EncoderException: com.viaversion.viaversion.exception.InformativeException: Please report this on the Via support Discord or open an issue on the relevant GitHub repository\\nPacket Type: SYSTEM_CHAT, Index: 1, Type: TagType, Data: [], Packet ID: 103, Source 0: com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2$$Lambda/0x00007f9930f63080"]}', false) + const packetBeforePlay = (_, __, ___, fullBuffer) => { lastPacket = fullBuffer.toString() } @@ -1001,6 +1009,7 @@ downloadAndOpenFile().then((downloadAction) => { const ip = qs.get('ip') const lastConnect = JSON.parse(localStorage.lastConnectOptions ?? {}) void connect({ + botVersion: qs.get('version') ?? undefined, ...lastConnect, // todo mixing is not good idea ip: ip || undefined }) @@ -1055,6 +1064,21 @@ downloadAndOpenFile().then((downloadAction) => { if (qs.get('serversList')) { showModal({ reactType: 'serversList' }) } + + const viewerWsConnect = qs.get('viewerConnect') + if (viewerWsConnect) { + void connect({ + username: `viewer-${Math.random().toString(36).slice(2, 10)}`, + viewerWsConnect, + }) + } + + if (qs.get('modal')) { + const modals = qs.get('modal')!.split(',') + for (const modal of modals) { + showModal({ reactType: modal }) + } + } }, (err) => { console.error(err) alert(`Failed to download file: ${err}`) diff --git a/src/inventoryWindows.ts b/src/inventoryWindows.ts index c1101cbb0..bfa5b65f0 100644 --- a/src/inventoryWindows.ts +++ b/src/inventoryWindows.ts @@ -45,9 +45,13 @@ export const onGameLoad = (onLoad) => { if (!viewer.world.itemsAtlasParser) return itemsRenderer = new ItemsRenderer(bot.version, viewer.world.blockstatesModels, viewer.world.itemsAtlasParser, viewer.world.blocksAtlasParser) globalThis.itemsRenderer = itemsRenderer - if (allImagesLoadedState.value) return - onLoad?.() - allImagesLoadedState.value = true + if (!allImagesLoadedState.value) { + onLoad?.() + } + allImagesLoadedState.value = false + setTimeout(() => { + allImagesLoadedState.value = true + }, 0) } viewer.world.renderUpdateEmitter.on('textureDownloaded', checkIfLoaded) checkIfLoaded() @@ -190,7 +194,7 @@ const renderSlot = (slot: RenderSlot, skipBlock = false): { itemTexture = itemsRenderer.getItemTexture(itemName) ?? itemsRenderer.getItemTexture('item/missing_texture')! } catch (err) { itemTexture = itemsRenderer.getItemTexture('block/errored')! - inGameError(`Failed to render item ${itemName} on ${bot.version} (resourcepack: ${options.enabledResourcepack}): ${err.message}`) + inGameError(`Failed to render item ${itemName} on ${bot.version} (resourcepack: ${options.enabledResourcepack}): ${err.stack}`) } if ('type' in itemTexture) { // is item diff --git a/src/mineflayer/cameraShake.ts b/src/mineflayer/cameraShake.ts new file mode 100644 index 000000000..043eb207b --- /dev/null +++ b/src/mineflayer/cameraShake.ts @@ -0,0 +1,107 @@ +import * as THREE from 'three' + +class CameraShake { + private rollAngle = 0 + private get damageRollAmount () { return 5 } + private get damageAnimDuration () { return 200 } + private rollAnimation?: { startTime: number, startRoll: number, targetRoll: number, duration: number, returnToZero?: boolean } + + constructor () { + this.rollAngle = 0 + } + + shakeFromDamage () { + // Add roll animation + const startRoll = this.rollAngle + const targetRoll = startRoll + (Math.random() < 0.5 ? -1 : 1) * this.damageRollAmount + + this.rollAnimation = { + startTime: performance.now(), + startRoll, + targetRoll, + duration: this.damageAnimDuration / 2 + } + } + + update () { + // Update roll animation + if (this.rollAnimation) { + const now = performance.now() + const elapsed = now - this.rollAnimation.startTime + const progress = Math.min(elapsed / this.rollAnimation.duration, 1) + + if (this.rollAnimation.returnToZero) { + // Ease back to zero + this.rollAngle = this.rollAnimation.startRoll * (1 - this.easeInOut(progress)) + if (progress === 1) { + this.rollAnimation = undefined + } + } else { + // Initial roll + this.rollAngle = this.rollAnimation.startRoll + (this.rollAnimation.targetRoll - this.rollAnimation.startRoll) * this.easeOut(progress) + if (progress === 1) { + // Start return to zero animation + this.rollAnimation = { + startTime: now, + startRoll: this.rollAngle, + targetRoll: 0, + duration: this.damageAnimDuration / 2, + returnToZero: true + } + } + } + } + + // Apply roll in camera's local space to maintain consistent left/right roll + const { camera } = viewer + const rollQuat = new THREE.Quaternion() + rollQuat.setFromAxisAngle(new THREE.Vector3(0, 0, 1), THREE.MathUtils.degToRad(this.rollAngle)) + + // Get camera's current rotation + const camQuat = new THREE.Quaternion() + camera.getWorldQuaternion(camQuat) + + // Apply roll after camera rotation + const finalQuat = camQuat.multiply(rollQuat) + camera.setRotationFromQuaternion(finalQuat) + } + + private easeOut (t: number): number { + return 1 - (1 - t) * (1 - t) + } + + private easeInOut (t: number): number { + return t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2 + } +} + +let cameraShake: CameraShake + +customEvents.on('mineflayerBotCreated', () => { + if (!cameraShake) { + cameraShake = new CameraShake() + beforeRenderFrame.push(() => { + cameraShake.update() + }) + } + + customEvents.on('hurtAnimation', () => { + cameraShake.shakeFromDamage() + }) + + bot._client.on('hurt_animation', () => { + customEvents.emit('hurtAnimation') + }) + bot.on('entityHurt', ({ id }) => { + if (id === bot.entity.id) { + customEvents.emit('hurtAnimation') + } + }) + let { health } = bot + bot.on('health', () => { + if (bot.health < health) { + customEvents.emit('hurtAnimation') + } + health = bot.health + }) +}) diff --git a/src/mineflayer/maps.ts b/src/mineflayer/maps.ts new file mode 100644 index 000000000..75169a9f6 --- /dev/null +++ b/src/mineflayer/maps.ts @@ -0,0 +1,20 @@ +import { mapDownloader } from 'mineflayer-item-map-downloader' +import { setImageConverter } from 'mineflayer-item-map-downloader/lib/util' + +setImageConverter((buf: Uint8Array) => { + const canvas = document.createElement('canvas') + const ctx = canvas.getContext('2d')! + canvas.width = 128 + canvas.height = 128 + const imageData = ctx.createImageData(canvas.width, canvas.height) + imageData.data.set(buf) + ctx.putImageData(imageData, 0, 0) + // data url + return canvas.toDataURL('image/png') +}) + +customEvents.on('mineflayerBotCreated', () => { + bot.on('login', () => { + bot.loadPlugin(mapDownloader) + }) +}) diff --git a/src/optionsGuiScheme.tsx b/src/optionsGuiScheme.tsx index 283bd6a38..e96d7d00a 100644 --- a/src/optionsGuiScheme.tsx +++ b/src/optionsGuiScheme.tsx @@ -445,21 +445,30 @@ export const guiOptionsScheme: { onClick={() => { packetsReplaceSessionState.active = !active }} - >{active ? 'Disable' : 'Enable'} Packets Replay + >{active ? 'Stop' : 'Start'} Packets Replay Logging }, }, { custom () { - const { active } = useSnapshot(packetsReplaceSessionState) + const { active, hasRecordedPackets } = useSnapshot(packetsReplaceSessionState) return }, - } + }, + { + packetsLoggerPreset: { + text: 'Packets Logger Preset', + values: [ + ['all', 'All'], + ['no-buffers', 'No Buffers'] + ], + }, + }, ], } export type OptionsGroupType = 'main' | 'render' | 'interface' | 'controls' | 'sound' | 'advanced' | 'VR' diff --git a/src/optionsStorage.ts b/src/optionsStorage.ts index 0e39012ff..f84ee032b 100644 --- a/src/optionsStorage.ts +++ b/src/optionsStorage.ts @@ -52,6 +52,7 @@ const defaultOptions = { modsSupport: false, modsAutoUpdate: 'check' as 'check' | 'never' | 'always', modsUpdatePeriodCheck: 24, // hours + packetsLoggerPreset: 'all' as 'all' | 'no-buffers', // antiAliasing: false, @@ -83,6 +84,7 @@ const defaultOptions = { autoParkour: false, vrSupport: true, // doesn't directly affect the VR mode, should only disable the button which is annoying to android users renderDebug: (isDev ? 'advanced' : 'basic') as 'none' | 'advanced' | 'basic', + autoVersionSelect: '1.20.4', // advanced bot options autoRespawn: false, @@ -95,7 +97,7 @@ const defaultOptions = { minimapOptimizations: true, displayBossBars: false, // boss bar overlay was removed for some reason, enable safely disabledUiParts: [] as string[], - neighborChunkUpdates: true + neighborChunkUpdates: true, } function getDefaultTouchControlsPositions () { diff --git a/src/packetsReplay.ts b/src/packetsReplay.ts index 57d0805e9..615f77822 100644 --- a/src/packetsReplay.ts +++ b/src/packetsReplay.ts @@ -1,25 +1,60 @@ import { proxy } from 'valtio' import { PacketsLogger } from './packetsReplayBase' +import { options } from './optionsStorage' export const packetsReplaceSessionState = proxy({ active: false, + hasRecordedPackets: false }) -const replayLogger = new PacketsLogger() +export const replayLogger = new PacketsLogger() + +const isBufferData = (data: any): boolean => { + if (Buffer.isBuffer(data) || data instanceof Uint8Array) return true + if (typeof data === 'object' && data !== null) { + return Object.values(data).some(value => isBufferData(value)) + } + return false +} + +const processPacketData = (data: any): any => { + if (options.packetsLoggerPreset === 'no-buffers') { + if (Buffer.isBuffer(data)) { + return '[buffer]' + } + if (typeof data === 'object' && data !== null) { + const processed = {} + for (const [key, value] of Object.entries(data)) { + processed[key] = isBufferData(value) ? '[buffer]' : value + } + return processed + } + } + return data +} + export default () => { customEvents.on('mineflayerBotCreated', () => { replayLogger.contents = '' - bot._client.on('packet', (data, { name, state }) => { + packetsReplaceSessionState.hasRecordedPackets = false + const handleServerPacket = (data, { name, state = bot._client.state }) => { if (!packetsReplaceSessionState.active) { return } - replayLogger.log(true, { name, state }, data) + replayLogger.log(true, { name, state }, processPacketData(data)) + packetsReplaceSessionState.hasRecordedPackets = true + } + bot._client.on('packet', handleServerPacket) + bot._client.on('packet_name' as any, (name, data) => { + handleServerPacket(data, { name }) }) + bot._client.on('writePacket' as any, (name, data) => { if (!packetsReplaceSessionState.active) { return } - replayLogger.log(false, { name, state: bot._client.state }, data) + replayLogger.log(false, { name, state: bot._client.state }, processPacketData(data)) + packetsReplaceSessionState.hasRecordedPackets = true }) }) } @@ -30,3 +65,4 @@ export const downloadPacketsReplay = async () => { a.download = `packets-replay-${new Date().toISOString()}.txt` a.click() } +globalThis.downloadPacketsReplay = downloadPacketsReplay diff --git a/src/react/AddServerOrConnect.tsx b/src/react/AddServerOrConnect.tsx index d98a74b85..e3fb2a153 100644 --- a/src/react/AddServerOrConnect.tsx +++ b/src/react/AddServerOrConnect.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect } from 'react' import Screen from './Screen' import Input from './Input' import Button from './Button' @@ -26,11 +26,12 @@ interface Props { accounts?: string[] authenticatedAccounts?: number versions?: string[] + allowAutoConnect?: boolean } const ELEMENTS_WIDTH = 190 -export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, placeholders, accounts, versions, authenticatedAccounts }: Props) => { +export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQs, onQsConnect, placeholders, accounts, versions, allowAutoConnect }: Props) => { const qsParams = parseQs ? new URLSearchParams(window.location.search) : undefined const qsParamName = qsParams?.get('name') const qsParamIp = qsParams?.get('ip') @@ -40,7 +41,7 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ const qsParamLockConnect = qsParams?.get('lockConnect') const qsIpParts = qsParamIp?.split(':') - const ipParts = initialData?.ip.split(':') + const ipParts = initialData?.ip ? initialData?.ip.split(':') : undefined const [serverName, setServerName] = React.useState(initialData?.name ?? qsParamName ?? '') const [serverIp, setServerIp] = React.useState(ipParts?.[0] ?? qsIpParts?.[0] ?? '') @@ -69,6 +70,12 @@ export default ({ onBack, onConfirm, title = 'Add a Server', initialData, parseQ authenticatedAccountOverride, } + useEffect(() => { + if (qsParams?.get('autoConnect') === 'true' && qsParams?.get('ip') && allowAutoConnect) { + onQsConnect?.(commonUseOptions) + } + }, []) + return
diff --git a/src/react/AppStatusProvider.tsx b/src/react/AppStatusProvider.tsx index 8aaa5d701..84d30c4a3 100644 --- a/src/react/AppStatusProvider.tsx +++ b/src/react/AppStatusProvider.tsx @@ -5,7 +5,7 @@ import { resetLocalStorageWorld } from '../browserfs' import { fsState } from '../loadSave' import { guessProblem } from '../errorLoadingScreenHelpers' import { ConnectOptions } from '../connect' -import { downloadPacketsReplay, packetsReplaceSessionState } from '../packetsReplay' +import { downloadPacketsReplay, packetsReplaceSessionState, replayLogger } from '../packetsReplay' import { getProxyDetails } from '../microsoftAuthflow' import AppStatus from './AppStatus' import DiveTransition from './DiveTransition' @@ -121,7 +121,7 @@ export default () => { <> {displayAuthButton && diff --git a/src/react/DebugEdges.tsx b/src/react/DebugEdges.tsx new file mode 100644 index 000000000..a65b9f92f --- /dev/null +++ b/src/react/DebugEdges.tsx @@ -0,0 +1,55 @@ +import { useState } from 'react' +import { useIsHashActive } from './simpleHooks' + +export default () => { + const MODES_COUNT = 4 + const [mode, setMode] = useState(0) + const isHashActive = useIsHashActive('#edges') + + if (!isHashActive) return null + + const styles: React.CSSProperties = { + display: 'flex', + fontSize: 18, + zIndex: 10_000, + background: 'rgba(0, 0, 255, 0.5)', + border: '2px solid red', + whiteSpace: 'pre', + } + let text = '' + if (mode === 0) { + styles.position = 'fixed' + styles.inset = 0 + styles.height = '100%' + text = 'inset 0 fixed 100% height' + } + if (mode === 1) { + styles.position = 'fixed' + styles.inset = 0 + text = 'inset 0 fixed' + } + if (mode === 2) { + styles.position = 'absolute' + styles.inset = 0 + text = 'inset 0 absolute' + } + if (mode === 3) { + styles.position = 'fixed' + styles.top = 0 + styles.left = 0 + styles.right = 0 + styles.height = '100dvh' + text = 'top 0 fixed 100dvh' + } + + return
{ + setMode((mode + 1) % MODES_COUNT) + }} + > + {mode}: {text}{'\n'} + inner: {window.innerWidth}x{window.innerHeight}{'\n'} + outer: {window.outerWidth}x{window.outerHeight}{'\n'} +
+} diff --git a/src/react/GlobalSearchInput.tsx b/src/react/GlobalSearchInput.tsx index 6f2d56d12..05b102ac9 100644 --- a/src/react/GlobalSearchInput.tsx +++ b/src/react/GlobalSearchInput.tsx @@ -17,7 +17,6 @@ function InnerSearch () { > { customEvents.emit('search', value) diff --git a/src/react/HeldMapUi.tsx b/src/react/HeldMapUi.tsx index 12f032982..b4eaea605 100644 --- a/src/react/HeldMapUi.tsx +++ b/src/react/HeldMapUi.tsx @@ -1,31 +1,16 @@ import { useEffect, useState } from 'react' -import { mapDownloader } from 'mineflayer-item-map-downloader/' -import { setImageConverter } from 'mineflayer-item-map-downloader/lib/util' export default () => { const [dataUrl, setDataUrl] = useState(null) // true means loading useEffect(() => { - bot.loadPlugin(mapDownloader) - - setImageConverter((buf: Uint8Array) => { - const canvas = document.createElement('canvas') - const ctx = canvas.getContext('2d')! - canvas.width = 128 - canvas.height = 128 - const imageData = ctx.createImageData(canvas.width, canvas.height) - imageData.data.set(buf) - ctx.putImageData(imageData, 0, 0) - // data url - return canvas.toDataURL('image/png') - }) - // TODO delete maps! const updateHeldMap = () => { setDataUrl(null) - if (!bot.heldItem || !['filled_map', 'map'].includes(bot.heldItem.name)) return + const item = bot.heldItem + if (!item || !['filled_map', 'map'].includes(item.name)) return // setDataUrl(true) - const mapNumber = (bot.heldItem?.nbt?.value as any)?.map?.value + const mapNumber = ((item?.nbt?.value as any)?.map?.value) ?? (item['components']?.find(x => x.type === 'map_id')?.data) // if (!mapNumber) return setDataUrl(bot.mapDownloader.maps?.[mapNumber] as unknown as string) } @@ -38,6 +23,8 @@ export default () => { // total maps: Object.keys(bot.mapDownloader.maps).length updateHeldMap() }) + + updateHeldMap() }, []) return dataUrl && dataUrl !== true ?
{ +interface Props extends Omit, 'width'> { rootStyles?: React.CSSProperties autoFocus?: boolean inputRef?: React.RefObject validateInput?: (value: string) => CSSProperties | undefined + width?: number } -export default ({ autoFocus, rootStyles, inputRef, validateInput, defaultValue, ...inputProps }: Props) => { +export default ({ autoFocus, rootStyles, inputRef, validateInput, defaultValue, width, ...inputProps }: Props) => { + if (width) rootStyles = { ...rootStyles, width } + const ref = useRef(null!) const [validationStyle, setValidationStyle] = useState({}) const [value, setValue] = useState(defaultValue ?? '') diff --git a/src/react/MainMenu.tsx b/src/react/MainMenu.tsx index 45196f4c5..0c5b40072 100644 --- a/src/react/MainMenu.tsx +++ b/src/react/MainMenu.tsx @@ -71,7 +71,7 @@ export default ({
+ mapsProvider && openURL(httpsRegex.test(mapsProvider) ? mapsProvider : 'https://' + mapsProvider, false)} + /> + A Minecraft client in the browser!
- - {mapsProvider && - openURL(httpsRegex.test(mapsProvider) ? mapsProvider : 'https://' + mapsProvider, false)} - />}
) } diff --git a/src/react/OptionsItems.tsx b/src/react/OptionsItems.tsx index efd647432..bc431bd21 100644 --- a/src/react/OptionsItems.tsx +++ b/src/react/OptionsItems.tsx @@ -63,6 +63,8 @@ export const OptionButton = ({ item }: { item: Extract { if (!item.values) { return { + // true: ON, + // false: OFF, true: 'ON', false: 'OFF', } @@ -82,7 +84,9 @@ export const OptionButton = ({ item }: { item: Extract { + // label={`${item.text}:`} + // postLabel={valuesTitlesMap[optionValue]} + onClick={async (event) => { if (disabledReason) { await showOptionsModal(`The option is unavailable. ${disabledReason}`, []) return @@ -106,7 +110,10 @@ export const OptionButton = ({ item }: { item: Extract { +export default ({ title, children, backdrop = true, style, className = '', titleSelectable, titleMarginTop }: Props) => { return ( <> {backdrop === 'dirt' ?
: backdrop ?
: null}
-
-
{title}
+
+
{title}
{children}
diff --git a/src/react/ServersList.tsx b/src/react/ServersList.tsx index 57316d222..cc75e0370 100644 --- a/src/react/ServersList.tsx +++ b/src/react/ServersList.tsx @@ -2,9 +2,10 @@ import React from 'react' import Singleplayer from './Singleplayer' import Input from './Input' import Button from './Button' -import PixelartIcon from './PixelartIcon' +import PixelartIcon, { pixelartIcons } from './PixelartIcon' import Select from './Select' import { BaseServerInfo } from './AddServerOrConnect' +import { useIsSmallWidth } from './simpleHooks' interface Props extends React.ComponentProps { joinServer: (info: BaseServerInfo, additional: { @@ -52,6 +53,8 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, return styles } + const isSmallWidth = useIsSmallWidth() + return - +
} searchRowChildrenOverride={ @@ -110,14 +114,18 @@ export default ({ initialProxies, updateProxies: updateProxiesProp, joinServer, }} >
- Proxy: + {isSmallWidth + ? + : Proxy:} setUsername(value)} /> diff --git a/src/react/ServersListProvider.tsx b/src/react/ServersListProvider.tsx index c5cff9f2f..fa9242a2f 100644 --- a/src/react/ServersListProvider.tsx +++ b/src/react/ServersListProvider.tsx @@ -145,7 +145,7 @@ const Inner = ({ hidden, customServersList }: { hidden?: boolean, customServersL const [defaultUsername, _setDefaultUsername] = useState(localStorage['username'] ?? (`mcrafter${Math.floor(Math.random() * 1000)}`)) const [authenticatedAccounts, _setAuthenticatedAccounts] = useState(JSON.parse(localStorage['authenticatedAccounts'] || '[]')) const [quickConnectIp, setQuickConnectIp] = useState('') - const [selectedIndex, setSelectedIndex] = useState(-1) + const [selectedIndex, setSelectedIndex] = useState(0) const setAuthenticatedAccounts = (newState: typeof authenticatedAccounts) => { _setAuthenticatedAccounts(newState) @@ -252,6 +252,7 @@ const Inner = ({ hidden, customServersList }: { hidden?: boolean, customServersL }) const editModalJsx = isEditScreenModal ? { setSelectedIndex(i) }} + selectedRow={selectedIndex} /> return <> {serversListJsx} diff --git a/src/react/SignInMessage.tsx b/src/react/SignInMessage.tsx index 2c530f3ac..b51edee93 100644 --- a/src/react/SignInMessage.tsx +++ b/src/react/SignInMessage.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import { useUtilsEffect } from '@zardoy/react-util' -import PixelartIcon from './PixelartIcon' +import { QRCodeSVG } from 'qrcode.react' +import PixelartIcon, { pixelartIcons } from './PixelartIcon' import Screen from './Screen' import Button from './Button' @@ -8,7 +9,6 @@ export default ({ code = 'ABCD-EFGH-IJKL-MNOP', loginLink = 'https://aka.ms/devicelogin', connectingServer = 'mc.example.comsdlfjsklfjsfjdskfjsj', - warningText = true, expiresEnd = Date.now() + 1000 * 60 * 5, setSaveToken = (() => { }) as ((state: boolean) => void) | undefined, defaultSaveToken = true, @@ -28,7 +28,7 @@ export default ({ }) }, []) - return + return
{loginLink} + >{loginLink.replace(/(https?:\/\/)?(www\.)?/, '')} {' '} and enter the code above.
- {warningText &&
- Join only vanilla servers! This client is detectable and may result in a ban by anti-cheat plugins. -
} +
+ + Join only vanilla servers! This client is detectable and may result in a ban by anti-cheat plugins. +
+ +
{setSaveToken &&