@dabble/patches 0.8.14 → 0.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -237,4 +237,4 @@ declare abstract class BaseDoc<T extends object = object> extends ReadonlyStoreC
237
237
  abstract import(snapshot: PatchesSnapshot<T>): void;
238
238
  }
239
239
 
240
- export { BaseDoc as B, OTDoc as O, type PatchesDoc as P, type PatchesDocOptions as a };
240
+ export { BaseDoc as B, OTDoc as O, type PatchesDocOptions as P, type PatchesDoc as a };
@@ -1,5 +1,5 @@
1
1
  import { OTStoreBackend } from '../../../server/types.js';
2
- import { EditableVersionMetadata, Change, VersionMetadata } from '../../../types.js';
2
+ import { EditableVersionMetadata, VersionMetadata, Change } from '../../../types.js';
3
3
  import '../../../json-patch/types.js';
4
4
  import '../../../json-patch/JSONPatch.js';
5
5
  import '@dabble/delta';
@@ -1,6 +1,6 @@
1
1
  import 'easy-signal';
2
2
  import '../json-patch/types.js';
3
3
  import '../types.js';
4
- export { B as BaseDoc } from '../BaseDoc-BT18xPxU.js';
4
+ export { B as BaseDoc } from '../BaseDoc-CD5wZQMm.js';
5
5
  import '../json-patch/JSONPatch.js';
6
6
  import '@dabble/delta';
@@ -1,6 +1,6 @@
1
1
  import { JSONPatchOp } from '../json-patch/types.js';
2
2
  import { PatchesSnapshot, Change } from '../types.js';
3
- import { P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
3
+ import { a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
4
4
  import { PatchesStore, TrackedDoc } from './PatchesStore.js';
5
5
  import '../json-patch/JSONPatch.js';
6
6
  import '@dabble/delta';
@@ -2,7 +2,7 @@ import { JSONPatchOp } from '../json-patch/types.js';
2
2
  import { PatchesSnapshot, Change } from '../types.js';
3
3
  import { ClientAlgorithm } from './ClientAlgorithm.js';
4
4
  import { LWWClientStore } from './LWWClientStore.js';
5
- import { P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
5
+ import { a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
6
6
  import { TrackedDoc } from './PatchesStore.js';
7
7
  import '../json-patch/JSONPatch.js';
8
8
  import '@dabble/delta';
@@ -1,5 +1,5 @@
1
1
  import { PatchesSnapshot, Change } from '../types.js';
2
- import { B as BaseDoc } from '../BaseDoc-BT18xPxU.js';
2
+ import { B as BaseDoc } from '../BaseDoc-CD5wZQMm.js';
3
3
  import '../json-patch/JSONPatch.js';
4
4
  import '@dabble/delta';
5
5
  import '../json-patch/types.js';
@@ -2,7 +2,7 @@ import { JSONPatchOp } from '../json-patch/types.js';
2
2
  import { PatchesSnapshot, Change } from '../types.js';
3
3
  import { ClientAlgorithm } from './ClientAlgorithm.js';
4
4
  import { OTClientStore } from './OTClientStore.js';
5
- import { a as PatchesDocOptions, P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
5
+ import { P as PatchesDocOptions, a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
6
6
  import { TrackedDoc } from './PatchesStore.js';
7
7
  import '../json-patch/JSONPatch.js';
8
8
  import '@dabble/delta';
@@ -1,5 +1,5 @@
1
1
  import '../types.js';
2
- export { O as OTDoc } from '../BaseDoc-BT18xPxU.js';
2
+ export { O as OTDoc } from '../BaseDoc-CD5wZQMm.js';
3
3
  import '../json-patch/JSONPatch.js';
4
4
  import '@dabble/delta';
5
5
  import '../json-patch/types.js';
@@ -32,9 +32,10 @@ class OTInMemoryStore {
32
32
  // ─── Writes ────────────────────────────────────────────────────────────
33
33
  async saveDoc(docId, snapshot) {
34
34
  const existing = this.docs.get(docId);
35
+ const changes = snapshot.changes;
35
36
  this.docs.set(docId, {
36
37
  snapshot,
37
- committed: [],
38
+ committed: changes ? [...changes] : [],
38
39
  pending: existing?.pending ?? []
39
40
  });
40
41
  }
@@ -116,10 +116,13 @@ const _OTIndexedDBStore = class _OTIndexedDBStore {
116
116
  "readwrite"
117
117
  );
118
118
  const { rev, state } = docState;
119
+ const changes = docState.changes;
120
+ const committedRev = changes?.length ? changes[changes.length - 1].rev : rev;
121
+ await committedChanges.delete([docId, 0], [docId, Infinity]);
119
122
  await Promise.all([
120
- docsStore.put({ docId, committedRev: rev, algorithm: "ot" }),
123
+ docsStore.put({ docId, committedRev, algorithm: "ot" }),
121
124
  snapshots.put({ docId, state, rev }),
122
- committedChanges.delete([docId, 0], [docId, Infinity])
125
+ ...changes?.map((change) => committedChanges.put({ ...change, docId })) ?? []
123
126
  ]);
124
127
  await tx.complete();
125
128
  }
@@ -3,7 +3,7 @@ import { Unsubscriber } from 'easy-signal';
3
3
  import { JSONPatchOp } from '../json-patch/types.js';
4
4
  import { Change } from '../types.js';
5
5
  import { ClientAlgorithm } from './ClientAlgorithm.js';
6
- import { a as PatchesDocOptions, P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
6
+ import { P as PatchesDocOptions, a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
7
7
  import { AlgorithmName } from './PatchesStore.js';
8
8
  import '../json-patch/JSONPatch.js';
9
9
  import '@dabble/delta';
@@ -9,7 +9,7 @@ import '../json-patch/JSONPatch.js';
9
9
  import '@dabble/delta';
10
10
  import '../json-patch/types.js';
11
11
  import './ClientAlgorithm.js';
12
- import '../BaseDoc-BT18xPxU.js';
12
+ import '../BaseDoc-CD5wZQMm.js';
13
13
 
14
14
  interface PatchesBranchClientOptions {
15
15
  /** Maximum size in bytes for a single change in storage. Used to break large initial changes. */
@@ -1,6 +1,6 @@
1
1
  import 'easy-signal';
2
2
  import '../json-patch/types.js';
3
3
  import '../types.js';
4
- export { O as OTDoc, P as PatchesDoc, a as PatchesDocOptions } from '../BaseDoc-BT18xPxU.js';
4
+ export { O as OTDoc, a as PatchesDoc, P as PatchesDocOptions } from '../BaseDoc-CD5wZQMm.js';
5
5
  import '../json-patch/JSONPatch.js';
6
6
  import '@dabble/delta';
@@ -1,6 +1,6 @@
1
1
  import { AlgorithmName } from './PatchesStore.js';
2
2
  import { Patches } from './Patches.js';
3
- import { a as PatchesDocOptions } from '../BaseDoc-BT18xPxU.js';
3
+ import { P as PatchesDocOptions } from '../BaseDoc-CD5wZQMm.js';
4
4
  import '../types.js';
5
5
  import '../json-patch/JSONPatch.js';
6
6
  import '@dabble/delta';
@@ -1,4 +1,4 @@
1
- export { B as BaseDoc, O as OTDoc, P as PatchesDoc, a as PatchesDocOptions } from '../BaseDoc-BT18xPxU.js';
1
+ export { B as BaseDoc, O as OTDoc, a as PatchesDoc, P as PatchesDocOptions } from '../BaseDoc-CD5wZQMm.js';
2
2
  export { IndexedDBFactoryOptions, MultiAlgorithmFactoryOptions, MultiAlgorithmIndexedDBFactoryOptions, PatchesFactoryOptions, createLWWIndexedDBPatches, createLWWPatches, createMultiAlgorithmExternalDBPatches, createMultiAlgorithmIndexedDBPatches, createMultiAlgorithmPatches, createOTIndexedDBPatches, createOTPatches, upgradePatchesDB } from './factories.js';
3
3
  export { IDBStoreWrapper, IDBTransactionWrapper, IndexedDBStore } from './IndexedDBStore.js';
4
4
  export { OTIndexedDBStore } from './OTIndexedDBStore.js';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Delta } from '@dabble/delta';
2
- export { B as BaseDoc, O as OTDoc, P as PatchesDoc, a as PatchesDocOptions } from './BaseDoc-BT18xPxU.js';
2
+ export { B as BaseDoc, O as OTDoc, a as PatchesDoc, P as PatchesDocOptions } from './BaseDoc-CD5wZQMm.js';
3
3
  export { IndexedDBFactoryOptions, MultiAlgorithmFactoryOptions, MultiAlgorithmIndexedDBFactoryOptions, PatchesFactoryOptions, createLWWIndexedDBPatches, createLWWPatches, createMultiAlgorithmExternalDBPatches, createMultiAlgorithmIndexedDBPatches, createMultiAlgorithmPatches, createOTIndexedDBPatches, createOTPatches, upgradePatchesDB } from './client/factories.js';
4
4
  export { IDBStoreWrapper, IDBTransactionWrapper, IndexedDBStore } from './client/IndexedDBStore.js';
5
5
  export { OTIndexedDBStore } from './client/OTIndexedDBStore.js';
@@ -13,7 +13,7 @@ import { WebSocketOptions } from './websocket/WebSocketTransport.js';
13
13
  import '../json-patch/JSONPatch.js';
14
14
  import '@dabble/delta';
15
15
  import '../json-patch/types.js';
16
- import '../BaseDoc-BT18xPxU.js';
16
+ import '../BaseDoc-CD5wZQMm.js';
17
17
  import '../utils/deferred.js';
18
18
 
19
19
  interface PatchesSyncState {
@@ -344,7 +344,8 @@ class PatchesSync extends (_a = ReadonlyStoreClass, _syncDoc_dec = [serialGate],
344
344
  } else {
345
345
  const snapshot = await this.connection.getDoc(docId);
346
346
  await algorithm.store.saveDoc(docId, snapshot);
347
- this._updateDocSyncState(docId, { committedRev: snapshot.rev });
347
+ const savedRev = await algorithm.getCommittedRev(docId);
348
+ this._updateDocSyncState(docId, { committedRev: savedRev });
348
349
  if (baseDoc) {
349
350
  baseDoc.import({ ...snapshot, changes: [] });
350
351
  }
@@ -22,7 +22,7 @@ import '../algorithms/ot/shared/changeBatching.js';
22
22
  import '../client/BranchClientStore.js';
23
23
  import '../client/ClientAlgorithm.js';
24
24
  import '../json-patch/types.js';
25
- import '../BaseDoc-BT18xPxU.js';
25
+ import '../BaseDoc-CD5wZQMm.js';
26
26
  import '../client/PatchesStore.js';
27
27
  import '../client/Patches.js';
28
28
  import '../server/types.js';
@@ -1,5 +1,5 @@
1
1
  import { ApiDefinition } from '../net/protocol/JSONRPCServer.js';
2
- import { EditableBranchMetadata, Branch, CreateBranchMetadata } from '../types.js';
2
+ import { EditableBranchMetadata, CreateBranchMetadata, Branch } from '../types.js';
3
3
  import 'easy-signal';
4
4
  import '../net/websocket/AuthorizationProvider.js';
5
5
  import './types.js';
@@ -1,5 +1,5 @@
1
1
  import { Patches, OpenDocOptions } from '../client/Patches.js';
2
- import { P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
2
+ import { a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
3
3
  import 'easy-signal';
4
4
  import '../json-patch/types.js';
5
5
  import '../types.js';
@@ -7,7 +7,7 @@ import '../types.js';
7
7
  import '../json-patch/JSONPatch.js';
8
8
  import '@dabble/delta';
9
9
  import '../client/ClientAlgorithm.js';
10
- import '../BaseDoc-BT18xPxU.js';
10
+ import '../BaseDoc-CD5wZQMm.js';
11
11
  import '../client/PatchesStore.js';
12
12
  import '../algorithms/ot/shared/changeBatching.js';
13
13
  import '../client/BranchClientStore.js';
@@ -6,5 +6,5 @@ import '../types.js';
6
6
  import '../json-patch/JSONPatch.js';
7
7
  import '@dabble/delta';
8
8
  import '../client/ClientAlgorithm.js';
9
- import '../BaseDoc-BT18xPxU.js';
9
+ import '../BaseDoc-CD5wZQMm.js';
10
10
  import '../client/PatchesStore.js';
@@ -11,7 +11,7 @@ import '../types.js';
11
11
  import '../json-patch/JSONPatch.js';
12
12
  import '@dabble/delta';
13
13
  import '../client/ClientAlgorithm.js';
14
- import '../BaseDoc-BT18xPxU.js';
14
+ import '../BaseDoc-CD5wZQMm.js';
15
15
  import '../client/PatchesStore.js';
16
16
  import '../net/PatchesSync.js';
17
17
  import '../algorithms/ot/shared/changeBatching.js';
@@ -1,6 +1,6 @@
1
1
  import { Accessor } from 'solid-js';
2
2
  import { OpenDocOptions } from '../client/Patches.js';
3
- import { P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
3
+ import { a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
4
4
  import { ChangeMutator } from '../types.js';
5
5
  import 'easy-signal';
6
6
  import '../json-patch/types.js';
@@ -1,6 +1,6 @@
1
- import { ShallowRef, Ref, MaybeRef, MaybeRefOrGetter } from 'vue';
1
+ import { ShallowRef, Ref, MaybeRefOrGetter, MaybeRef } from 'vue';
2
2
  import { OpenDocOptions } from '../client/Patches.js';
3
- import { P as PatchesDoc } from '../BaseDoc-BT18xPxU.js';
3
+ import { a as PatchesDoc } from '../BaseDoc-CD5wZQMm.js';
4
4
  import { ChangeMutator } from '../types.js';
5
5
  import 'easy-signal';
6
6
  import '../json-patch/types.js';
@@ -6,5 +6,5 @@ import '../types.js';
6
6
  import '../json-patch/JSONPatch.js';
7
7
  import '@dabble/delta';
8
8
  import '../client/ClientAlgorithm.js';
9
- import '../BaseDoc-BT18xPxU.js';
9
+ import '../BaseDoc-CD5wZQMm.js';
10
10
  import '../client/PatchesStore.js';
@@ -11,7 +11,7 @@ import '../types.js';
11
11
  import '../json-patch/JSONPatch.js';
12
12
  import '@dabble/delta';
13
13
  import '../client/ClientAlgorithm.js';
14
- import '../BaseDoc-BT18xPxU.js';
14
+ import '../BaseDoc-CD5wZQMm.js';
15
15
  import '../client/PatchesStore.js';
16
16
  import '../net/PatchesSync.js';
17
17
  import '../algorithms/ot/shared/changeBatching.js';
@@ -1,4 +1,4 @@
1
- import { ShallowRef, Ref } from 'vue';
1
+ import { Ref, ShallowRef } from 'vue';
2
2
  import { OpenDocOptions } from '../client/Patches.js';
3
3
  import 'easy-signal';
4
4
  import '../json-patch/types.js';
@@ -6,7 +6,7 @@ import '../types.js';
6
6
  import '../json-patch/JSONPatch.js';
7
7
  import '@dabble/delta';
8
8
  import '../client/ClientAlgorithm.js';
9
- import '../BaseDoc-BT18xPxU.js';
9
+ import '../BaseDoc-CD5wZQMm.js';
10
10
  import '../client/PatchesStore.js';
11
11
 
12
12
  /**
@@ -7,7 +7,7 @@ import '../types.js';
7
7
  import '../json-patch/JSONPatch.js';
8
8
  import '@dabble/delta';
9
9
  import '../client/ClientAlgorithm.js';
10
- import '../BaseDoc-BT18xPxU.js';
10
+ import '../BaseDoc-CD5wZQMm.js';
11
11
  import '../client/PatchesStore.js';
12
12
  import '../algorithms/ot/shared/changeBatching.js';
13
13
  import '../client/BranchClientStore.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dabble/patches",
3
- "version": "0.8.14",
3
+ "version": "0.8.15",
4
4
  "description": "Immutable JSON Patch implementation based on RFC 6902 supporting operational transformation and last-writer-wins",
5
5
  "author": "Jacob Wright <jacwright@gmail.com>",
6
6
  "bugs": {