From 454e814353a69304145fe78cd94ad71ccd6297e5 Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Thu, 11 Dec 2025 22:50:18 +0800 Subject: [PATCH] feat: adopt flock 4 version encoding --- packages/loro-adaptors/CHANGELOG.md | 6 + packages/loro-adaptors/package.json | 2 +- packages/loro-adaptors/src/flock-adaptor.ts | 50 +---- .../src/server/server-flock-adaptor.ts | 47 +---- packages/loro-websocket/CHANGELOG.md | 6 + packages/loro-websocket/package.json | 2 +- pnpm-lock.yaml | 182 +++++++++--------- 7 files changed, 113 insertions(+), 182 deletions(-) diff --git a/packages/loro-adaptors/CHANGELOG.md b/packages/loro-adaptors/CHANGELOG.md index 8105172..8a0e7c1 100644 --- a/packages/loro-adaptors/CHANGELOG.md +++ b/packages/loro-adaptors/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### ⚠ BREAKING CHANGES + +* Flock adaptors now encode version vectors using `@loro-dev/flock`'s binary `encodeVersionVector`; version payloads are no longer JSON. + ## [0.5.0](https://github.com/loro-dev/protocol/compare/loro-adaptors-v0.4.2...loro-adaptors-v0.5.0) (2025-12-07) diff --git a/packages/loro-adaptors/package.json b/packages/loro-adaptors/package.json index 294b5d2..1a13ca7 100644 --- a/packages/loro-adaptors/package.json +++ b/packages/loro-adaptors/package.json @@ -15,7 +15,7 @@ "loro-protocol": "workspace:*" }, "peerDependencies": { - "@loro-dev/flock": "^3.1.0", + "@loro-dev/flock": "^4.0.0", "loro-crdt": "^1.9.0", "yjs": "*" }, diff --git a/packages/loro-adaptors/src/flock-adaptor.ts b/packages/loro-adaptors/src/flock-adaptor.ts index 61fd2e7..57243ae 100644 --- a/packages/loro-adaptors/src/flock-adaptor.ts +++ b/packages/loro-adaptors/src/flock-adaptor.ts @@ -1,4 +1,4 @@ -import { Flock } from "@loro-dev/flock"; +import { Flock, decodeVersionVector, encodeVersionVector } from "@loro-dev/flock"; import { CrdtType, JoinResponseOk, @@ -11,42 +11,6 @@ type FlockExportBundle = Awaited>; const encoder = new TextEncoder(); const decoder = new TextDecoder(); -function serializeVersion(version: FlockVersion | undefined): Uint8Array { - return encoder.encode(JSON.stringify(version ?? {})); -} - -function deserializeVersion(bytes: Uint8Array): FlockVersion { - if (!bytes.length) return {}; - try { - const parsed = JSON.parse(decoder.decode(bytes)); - if (!parsed || typeof parsed !== "object") return {}; - const next: FlockVersion = {}; - for (const [key, value] of Object.entries( - parsed as Record - )) { - if (!value || typeof value !== "object") continue; - const entry = value as { - logicalCounter?: unknown; - physicalTime?: unknown; - }; - const logicalCounter = - typeof entry.logicalCounter === "number" && - Number.isFinite(entry.logicalCounter) - ? Math.trunc(entry.logicalCounter) - : 0; - const physicalTime = - typeof entry.physicalTime === "number" && - Number.isFinite(entry.physicalTime) - ? entry.physicalTime - : 0; - next[key] = { logicalCounter, physicalTime }; - } - return next; - } catch { - return {}; - } -} - function compareVersions( a: FlockVersion, b: FlockVersion @@ -145,8 +109,12 @@ export class FlockAdaptor implements CrdtDocAdaptor { } cmpVersion(versionBytes: Uint8Array): 0 | 1 | -1 | undefined { - const remote = deserializeVersion(versionBytes); - return compareVersions(this.flock.version(), remote); + try { + const remote = decodeVersionVector(versionBytes); + return compareVersions(this.flock.version(), remote); + } catch { + return undefined; + } } setCtx(ctx: CrdtAdaptorContext): void { @@ -167,7 +135,7 @@ export class FlockAdaptor implements CrdtDocAdaptor { } getVersion(): Uint8Array { - return serializeVersion(this.flock.version()); + return encodeVersionVector(this.flock.version()); } getAlternativeVersion(): Uint8Array | undefined { @@ -185,7 +153,7 @@ export class FlockAdaptor implements CrdtDocAdaptor { async handleJoinOk(res: JoinResponseOk): Promise { if (this.destroyed) return; try { - const serverVersion = deserializeVersion(res.version); + const serverVersion = decodeVersionVector(res.version); this.initServerVersion = serverVersion; const comparison = compareVersions(this.flock.version(), serverVersion); if (comparison != null && comparison >= 0) { diff --git a/packages/loro-adaptors/src/server/server-flock-adaptor.ts b/packages/loro-adaptors/src/server/server-flock-adaptor.ts index 3356781..941f44c 100644 --- a/packages/loro-adaptors/src/server/server-flock-adaptor.ts +++ b/packages/loro-adaptors/src/server/server-flock-adaptor.ts @@ -1,4 +1,4 @@ -import { Flock } from "@loro-dev/flock"; +import { Flock, decodeVersionVector, encodeVersionVector } from "@loro-dev/flock"; import type { ExportBundle as FlockExportBundle, VersionVector as FlockVersion, @@ -31,45 +31,6 @@ function deserializeBundle(bytes: Uint8Array): FlockExportBundle { return { version: 0, entries: {} }; } -function serializeVersion(version: FlockVersion | undefined): Uint8Array { - return encoder.encode(JSON.stringify(version ?? {})); -} - -function deserializeVersion(bytes: Uint8Array): FlockVersion { - if (!bytes.length) { - return {}; - } - try { - const parsed = JSON.parse(decoder.decode(bytes)); - if (!parsed || typeof parsed !== "object") { - return {}; - } - const next: FlockVersion = {}; - for (const [peer, value] of Object.entries( - parsed as Record, - )) { - if (!value || typeof value !== "object") { - continue; - } - const entry = value as { logicalCounter?: unknown; physicalTime?: unknown }; - const logicalCounter = - typeof entry.logicalCounter === "number" && - Number.isFinite(entry.logicalCounter) - ? Math.trunc(entry.logicalCounter) - : 0; - const physicalTime = - typeof entry.physicalTime === "number" && - Number.isFinite(entry.physicalTime) - ? entry.physicalTime - : 0; - next[peer] = { logicalCounter, physicalTime }; - } - return next; - } catch { - return {}; - } -} - function importSnapshot(flock: Flock, data: Uint8Array): void { if (!data.length) return; const bundle = deserializeBundle(data); @@ -112,11 +73,11 @@ export class FlockServerAdaptor implements CrdtServerAdaptor { const flock = new Flock(); importSnapshot(flock, documentData); - const serverVersion = serializeVersion(flock.version()); + const serverVersion = encodeVersionVector(flock.version()); let updates: Uint8Array[] | undefined; if (clientVersion.length > 0) { - const clientVV = deserializeVersion(clientVersion); + const clientVV = decodeVersionVector(clientVersion); const delta = exportBundle(flock, clientVV); updates = [serializeBundle(delta)]; } else if (documentData.length > 0) { @@ -167,7 +128,7 @@ export class FlockServerAdaptor implements CrdtServerAdaptor { getVersion(documentData: Uint8Array): Uint8Array { const flock = new Flock(); importSnapshot(flock, documentData); - return serializeVersion(flock.version()); + return encodeVersionVector(flock.version()); } merge(documents: Uint8Array[]): Uint8Array { diff --git a/packages/loro-websocket/CHANGELOG.md b/packages/loro-websocket/CHANGELOG.md index a65a779..44491d6 100644 --- a/packages/loro-websocket/CHANGELOG.md +++ b/packages/loro-websocket/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### ⚠ BREAKING CHANGES + +* Flock client/server adaptors now emit binary-encoded version vectors using `@loro-dev/flock`'s `encodeVersionVector`; prior JSON encoding is no longer supported. + ## [0.5.0](https://github.com/loro-dev/protocol/compare/loro-websocket-v0.4.3...loro-websocket-v0.5.0) (2025-12-07) diff --git a/packages/loro-websocket/package.json b/packages/loro-websocket/package.json index a89a5fc..340af8e 100644 --- a/packages/loro-websocket/package.json +++ b/packages/loro-websocket/package.json @@ -72,7 +72,7 @@ "ws": "^8.18.3" }, "devDependencies": { - "@loro-dev/flock": "^3.1.0", + "@loro-dev/flock": "^4.0.0", "get-port": "^7.1.0", "tsdown": "^0.14.1", "tsx": "^4.20.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5e41dd..d32c91e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: packages/loro-adaptors: dependencies: '@loro-dev/flock': - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^4.0.0 + version: 4.0.0 loro-crdt: specifier: ^1.9.0 version: 1.9.0 @@ -86,8 +86,8 @@ importers: version: 8.18.3 devDependencies: '@loro-dev/flock': - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^4.0.0 + version: 4.0.0 get-port: specifier: ^7.1.0 version: 7.1.0 @@ -127,11 +127,11 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@emnapi/core@1.6.0': - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -443,15 +443,15 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@loro-dev/flock@3.1.0': - resolution: {integrity: sha512-8nutPTrutOOZ0gF5mSKUvDyHUBNytng0gUhTM/axmmGPv7BE3XrZ9YU6FuN1U7p+OHuxYn8r4Ntns2NCMBUnvw==} + '@loro-dev/flock@4.0.0': + resolution: {integrity: sha512-jWzwV/XZiNIXGkJ9oedy2On2byxf7WPMLpJ6WTpMOFXO+YAkEPHyfPNnrkz3Ek6q+s5pAz15daNX7pYEoeYkHw==} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@napi-rs/wasm-runtime@1.1.0': + resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} - '@oxc-project/types@0.99.0': - resolution: {integrity: sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==} + '@oxc-project/types@0.102.0': + resolution: {integrity: sha512-8Skrw405g+/UJPKWJ1twIk3BIH2nXdiVlVNtYT23AXVwpsd79es4K+KYt06Fbnkc5BaTvk/COT2JuCLYdwnCdA==} '@oxlint-tsgolint/darwin-arm64@0.0.4': resolution: {integrity: sha512-qL0zqIYdYrXl6ghTIHnhJkvyYy1eKz0P8YIEp59MjY3/zNiyk/gtyp8LkwZdqb9ezbcX9UDQhSuSO1wURJsq8g==} @@ -526,91 +526,85 @@ packages: '@quansync/fs@0.1.5': resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} - '@rolldown/binding-android-arm64@1.0.0-beta.52': - resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==} + '@rolldown/binding-android-arm64@1.0.0-beta.54': + resolution: {integrity: sha512-zZRx/ur3Fai3fxiEmVp48+6GCBR48PRWJR1X3TTMn9yiq2bBHlYPgBaQtDOYWXv5H3J5dXujeTyGnuoY+kdGCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.52': - resolution: {integrity: sha512-MmKeoLnKu1d9j6r19K8B+prJnIZ7u+zQ+zGQ3YHXGnr41rzE3eqQLovlkvoZnRoxDGPA4ps0pGiwXy6YE3lJyg==} + '@rolldown/binding-darwin-arm64@1.0.0-beta.54': + resolution: {integrity: sha512-zMyFEJmbIs91x22HAA/eUvmZHgjX8tGsD3TJ+WC9aY4bCdl3w84H9vMZmChSHAF1dYvGNH4KQDI2IubeZaCYtg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.52': - resolution: {integrity: sha512-qpHedvQBmIjT8zdnjN3nWPR2qjQyJttbXniCEKKdHeAbZG9HyNPBUzQF7AZZGwmS9coQKL+hWg9FhWzh2dZ2IA==} + '@rolldown/binding-darwin-x64@1.0.0-beta.54': + resolution: {integrity: sha512-Ex7QttdaVnEpmE/zroUT5Qm10e2+Vjd9q0LX9eXm59SitxDODMpC8GI1Rct5RrLf4GLU4DzdXBj6DGzuR+6g6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-beta.52': - resolution: {integrity: sha512-dDp7WbPapj/NVW0LSiH/CLwMhmLwwKb3R7mh2kWX+QW85X1DGVnIEyKh9PmNJjB/+suG1dJygdtdNPVXK1hylg==} + '@rolldown/binding-freebsd-x64@1.0.0-beta.54': + resolution: {integrity: sha512-E1XO10ryM/Vxw3Q1wvs9s2mSpVBfbHtzkbJcdu26qh17ZmVwNWLiIoqEcbkXm028YwkReG4Gd2gCZ3NxgTQ28Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': - resolution: {integrity: sha512-9e4l6vy5qNSliDPqNfR6CkBOAx6PH7iDV4OJiEJzajajGrVy8gc/IKKJUsoE52G8ud8MX6r3PMl97NfwgOzB7g==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.54': + resolution: {integrity: sha512-oS73Uks8jczQR9pg0Bj718vap/x71exyJ5yuxu4X5V4MhwRQnky7ANSPm6ARUfraxOqt49IBfcMeGnw2rTSqdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': - resolution: {integrity: sha512-V48oDR84feRU2KRuzpALp594Uqlx27+zFsT6+BgTcXOtu7dWy350J1G28ydoCwKB+oxwsRPx2e7aeQnmd3YJbQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.54': + resolution: {integrity: sha512-pY8N2X5C+/ZQcy0eRdfOzOP//OFngP1TaIqDjFwfBPws2UNavKS8SpxhPEgUaYIaT0keVBd/TB+eVy9z+CIOtw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': - resolution: {integrity: sha512-ENLmSQCWqSA/+YN45V2FqTIemg7QspaiTjlm327eUAMeOLdqmSOVVyrQexJGNTQ5M8sDYCgVAig2Kk01Ggmqaw==} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.54': + resolution: {integrity: sha512-cgTooAFm2MUmFriB7IYaWBNyqrGlRPKG+yaK2rGFl2rcdOcO24urY4p3eyB0ogqsRLvJbIxwjjYiWiIP7Eo1Cw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': - resolution: {integrity: sha512-klahlb2EIFltSUubn/VLjuc3qxp1E7th8ukayPfdkcKvvYcQ5rJztgx8JsJSuAKVzKtNTqUGOhy4On71BuyV8g==} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.54': + resolution: {integrity: sha512-nGyLT1Qau0W+kEL44V2jhHmvfS3wyJW08E4WEu2E6NuIy+uChKN1X0aoxzFIDi2owDsYaZYez/98/f268EupIQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': - resolution: {integrity: sha512-UuA+JqQIgqtkgGN2c/AQ5wi8M6mJHrahz/wciENPTeI6zEIbbLGoth5XN+sQe2pJDejEVofN9aOAp0kaazwnVg==} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.54': + resolution: {integrity: sha512-KH374P0TUjDXssROT/orvzaWrzGOptD13PTrltgKwbDprJTMknoLiYsOD6Ttz92O2VuAcCtFuJ1xbyFM2Uo/Xg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': - resolution: {integrity: sha512-1BNQW8u4ro8bsN1+tgKENJiqmvc+WfuaUhXzMImOVSMw28pkBKdfZtX2qJPADV3terx+vNJtlsgSGeb3+W6Jiw==} + '@rolldown/binding-openharmony-arm64@1.0.0-beta.54': + resolution: {integrity: sha512-oMAVO4wbfAbhpBxPsSp8R7ntL2DchpNfO+tGhN8/sI9jsbYwOv78uIW1fTwOBslhjTVFltGJ+l23mubNQcYNaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': - resolution: {integrity: sha512-K/p7clhCqJOQpXGykrFaBX2Dp9AUVIDHGc+PtFGBwg7V+mvBTv/tsm3LC3aUmH02H2y3gz4y+nUTQ0MLpofEEg==} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.54': + resolution: {integrity: sha512-MYY/FmY+HehHiQkNx04W5oLy/Fqd1hXYqZmmorSDXvAHnxMbSgmdFicKsSYOg/sVGHBMEP1tTn6kV5sWrS45rA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': - resolution: {integrity: sha512-a4EkXBtnYYsKipjS7QOhEBM4bU5IlR9N1hU+JcVEVeuTiaslIyhWVKsvf7K2YkQHyVAJ+7/A9BtrGqORFcTgng==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.54': + resolution: {integrity: sha512-66o3uKxUmcYskT9exskxs3OVduXf5x0ndlMkYOjSpBgqzhLtkub136yDvZkNT1OkNDET0odSwcU7aWdpnwzAyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': - resolution: {integrity: sha512-5ZXcYyd4GxPA6QfbGrNcQjmjbuLGvfz6728pZMsQvGHI+06LT06M6TPtXvFvLgXtexc+OqvFe1yAIXJU1gob/w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': - resolution: {integrity: sha512-tzpnRQXJrSzb8Z9sm97UD3cY0toKOImx+xRKsDLX4zHaAlRXWh7jbaKBePJXEN7gNw7Nm03PBNwphdtA8KSUYQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.54': + resolution: {integrity: sha512-FbbbrboChLBXfeEsOfaypBGqzbdJ/CcSA2BPLCggojnIHy58Jo+AXV7HATY8opZk7194rRbokIT8AfPJtZAWtg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-beta.52': - resolution: {integrity: sha512-/L0htLJZbaZFL1g9OHOblTxbCYIGefErJjtYOwgl9ZqNx27P3L0SDfjhhHIss32gu5NWgnxuT2a2Hnnv6QGHKA==} + '@rolldown/pluginutils@1.0.0-beta.54': + resolution: {integrity: sha512-AHgcZ+w7RIRZ65ihSQL8YuoKcpD9Scew4sEeP1BBUT9QdTo6KjwHrZZXjID6nL10fhKessCH6OPany2QKwAwTQ==} '@rollup/rollup-android-arm-eabi@4.46.2': resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} @@ -1030,8 +1024,8 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-beta.52: - resolution: {integrity: sha512-Hbnpljue+JhMJrlOjQ1ixp9me7sUec7OjFvS+A1Qm8k8Xyxmw3ZhxFu7LlSXW1s9AX3POE9W9o2oqCEeR5uDmg==} + rolldown@1.0.0-beta.54: + resolution: {integrity: sha512-3lIvjCWgjPL3gmiATUdV1NeVBGJZy6FdtwgLPol25tAkn46Q/MsVGfCSNswXwFOxGrxglPaN20IeALSIFuFyEg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -1285,13 +1279,13 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@emnapi/core@1.6.0': + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.6.0': + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true @@ -1462,16 +1456,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 - '@loro-dev/flock@3.1.0': {} + '@loro-dev/flock@4.0.0': {} - '@napi-rs/wasm-runtime@1.0.7': + '@napi-rs/wasm-runtime@1.1.0': dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true - '@oxc-project/types@0.99.0': {} + '@oxc-project/types@0.102.0': {} '@oxlint-tsgolint/darwin-arm64@0.0.4': optional: true @@ -1519,51 +1513,48 @@ snapshots: dependencies: quansync: 0.2.11 - '@rolldown/binding-android-arm64@1.0.0-beta.52': + '@rolldown/binding-android-arm64@1.0.0-beta.54': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.52': + '@rolldown/binding-darwin-arm64@1.0.0-beta.54': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.52': + '@rolldown/binding-darwin-x64@1.0.0-beta.54': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.52': + '@rolldown/binding-freebsd-x64@1.0.0-beta.54': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.54': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.54': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.54': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.54': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.52': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.54': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.52': + '@rolldown/binding-openharmony-arm64@1.0.0-beta.54': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.52': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.54': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52': + '@napi-rs/wasm-runtime': 1.1.0 optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.54': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.54': optional: true - '@rolldown/pluginutils@1.0.0-beta.52': {} + '@rolldown/pluginutils@1.0.0-beta.54': {} '@rollup/rollup-android-arm-eabi@4.46.2': optional: true @@ -1948,7 +1939,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.52)(typescript@5.9.2): + rolldown-plugin-dts@0.15.6(rolldown@1.0.0-beta.54)(typescript@5.9.2): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.3 @@ -1958,32 +1949,31 @@ snapshots: debug: 4.4.1 dts-resolver: 2.1.1 get-tsconfig: 4.10.1 - rolldown: 1.0.0-beta.52 + rolldown: 1.0.0-beta.54 optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - oxc-resolver - supports-color - rolldown@1.0.0-beta.52: + rolldown@1.0.0-beta.54: dependencies: - '@oxc-project/types': 0.99.0 - '@rolldown/pluginutils': 1.0.0-beta.52 + '@oxc-project/types': 0.102.0 + '@rolldown/pluginutils': 1.0.0-beta.54 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.52 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.52 - '@rolldown/binding-darwin-x64': 1.0.0-beta.52 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.52 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.52 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.52 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.52 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.52 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.52 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.52 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.52 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.52 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52 + '@rolldown/binding-android-arm64': 1.0.0-beta.54 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.54 + '@rolldown/binding-darwin-x64': 1.0.0-beta.54 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.54 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.54 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.54 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.54 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.54 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.54 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.54 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.54 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.54 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.54 rollup@4.46.2: dependencies: @@ -2057,8 +2047,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.52 - rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.52)(typescript@5.9.2) + rolldown: 1.0.0-beta.54 + rolldown-plugin-dts: 0.15.6(rolldown@1.0.0-beta.54)(typescript@5.9.2) semver: 7.7.2 tinyexec: 1.0.1 tinyglobby: 0.2.14