@dabble/patches 0.8.2 → 0.8.4

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';
@@ -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';
@@ -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, createMultiAlgorithmIndexedDBPatches, createMultiAlgorithmPatches, createOTIndexedDBPatches, createOTPatches } 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, createMultiAlgorithmIndexedDBPatches, createMultiAlgorithmPatches, createOTIndexedDBPatches, createOTPatches } from './client/factories.js';
4
4
  export { IDBStoreWrapper, IDBTransactionWrapper, IndexedDBStore } from './client/IndexedDBStore.js';
5
5
  export { OTIndexedDBStore } from './client/OTIndexedDBStore.js';
@@ -10,7 +10,7 @@ import { JSONRPCClient } from './protocol/JSONRPCClient.js';
10
10
  import { ConnectionState } from './protocol/types.js';
11
11
  import { WebSocketOptions } from './websocket/WebSocketTransport.js';
12
12
  import '../json-patch/types.js';
13
- import '../BaseDoc-BT18xPxU.js';
13
+ import '../BaseDoc-CD5wZQMm.js';
14
14
  import '../json-patch/JSONPatch.js';
15
15
  import '@dabble/delta';
16
16
  import '../utils/deferred.js';
@@ -21,7 +21,7 @@ import 'easy-signal';
21
21
  import '../algorithms/ot/shared/changeBatching.js';
22
22
  import '../client/ClientAlgorithm.js';
23
23
  import '../json-patch/types.js';
24
- import '../BaseDoc-BT18xPxU.js';
24
+ import '../BaseDoc-CD5wZQMm.js';
25
25
  import '../client/PatchesStore.js';
26
26
  import '../client/Patches.js';
27
27
  import '../server/types.js';
@@ -118,14 +118,15 @@ declare class SSEServer {
118
118
  * Connected clients receive the event immediately via their SSE stream.
119
119
  * Disconnected clients (within buffer TTL) get the event buffered for replay.
120
120
  *
121
+ * @param docId - The document ID used for subscription routing. This may differ
122
+ * from `params.docId` — for example, when subscriptions are stored by root
123
+ * document path (e.g. `users/abc`) but the event payload contains a sub-path
124
+ * (e.g. `users/abc/settings`).
121
125
  * @param event - The SSE event type (e.g. 'changesCommitted', 'docDeleted').
122
- * @param params - Event data. Must include `docId` for subscription routing.
126
+ * @param params - Event data sent to clients.
123
127
  * @param exceptClientId - Client ID to exclude (typically the one who made the change).
124
128
  */
125
- notify(event: string, params: {
126
- docId: string;
127
- [k: string]: any;
128
- }, exceptClientId?: string): void;
129
+ notify(docId: string, event: string, params: Record<string, any>, exceptClientId?: string): void;
129
130
  /**
130
131
  * List all client IDs subscribed to a document.
131
132
  */
@@ -129,12 +129,15 @@ class SSEServer {
129
129
  * Connected clients receive the event immediately via their SSE stream.
130
130
  * Disconnected clients (within buffer TTL) get the event buffered for replay.
131
131
  *
132
+ * @param docId - The document ID used for subscription routing. This may differ
133
+ * from `params.docId` — for example, when subscriptions are stored by root
134
+ * document path (e.g. `users/abc`) but the event payload contains a sub-path
135
+ * (e.g. `users/abc/settings`).
132
136
  * @param event - The SSE event type (e.g. 'changesCommitted', 'docDeleted').
133
- * @param params - Event data. Must include `docId` for subscription routing.
137
+ * @param params - Event data sent to clients.
134
138
  * @param exceptClientId - Client ID to exclude (typically the one who made the change).
135
139
  */
136
- notify(event, params, exceptClientId) {
137
- const { docId } = params;
140
+ notify(docId, event, params, exceptClientId) {
138
141
  const data = JSON.stringify(params);
139
142
  for (const [clientId, client] of this.clients) {
140
143
  if (clientId === exceptClientId) continue;
@@ -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 '../net/PatchesConnection.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 { JSONPatch } from '../json-patch/JSONPatch.js';
5
5
  import { ChangeMutator } from '../types.js';
6
6
  import 'easy-signal';
package/dist/types.d.ts CHANGED
@@ -141,6 +141,8 @@ interface VersionMetadata {
141
141
  isOffline?: boolean;
142
142
  /** User-defined name if origin is 'branch'. */
143
143
  branchName?: string;
144
+ /** Whether this version was auto-saved immediately before restoring a previous version. */
145
+ beforeRestored?: boolean;
144
146
  /** Unix timestamp in milliseconds of version start. */
145
147
  startedAt: number;
146
148
  /** Unix timestamp in milliseconds of version end. */
@@ -1,6 +1,6 @@
1
1
  import { ShallowRef, Ref, 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 { JSONPatch } from '../json-patch/JSONPatch.js';
5
5
  import { ChangeMutator } from '../types.js';
6
6
  import 'easy-signal';
@@ -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 '../net/PatchesConnection.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dabble/patches",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
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": {