@pluv/client 2.3.1 → 3.1.0

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @pluv/client@2.3.1 build /home/runner/work/pluv/pluv/packages/client
2
+ > @pluv/client@3.1.0 build /home/runner/work/pluv/pluv/packages/client
3
3
  > tsup src/index.ts --format esm,cjs --dts
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -8,11 +8,11 @@
8
8
  CLI Target: es6
9
9
  ESM Build start
10
10
  CJS Build start
11
- CJS dist/index.js 65.55 KB
12
- CJS ⚡️ Build success in 126ms
13
- ESM dist/index.mjs 63.81 KB
14
- ESM ⚡️ Build success in 128ms
11
+ ESM dist/index.mjs 63.03 KB
12
+ ESM ⚡️ Build success in 108ms
13
+ CJS dist/index.js 64.77 KB
14
+ CJS ⚡️ Build success in 109ms
15
15
  DTS Build start
16
- DTS ⚡️ Build success in 4543ms
17
- DTS dist/index.d.mts 20.11 KB
18
- DTS dist/index.d.ts 20.11 KB
16
+ DTS ⚡️ Build success in 4487ms
17
+ DTS dist/index.d.mts 19.16 KB
18
+ DTS dist/index.d.ts 19.16 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # @pluv/client
2
2
 
3
+ ## 3.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 022857d: TypeScript will now emit an error if `initialStorage` was provided to `createClient` while `createIO` was not provided a `crdt`.
8
+
9
+ ```ts
10
+ import { createClient, infer } from "@pluv/client";
11
+ import { yjs } from "@pluv/crdt-yjs";
12
+ import { createIO } from "@pluv/io";
13
+ import { platformCloudflare } from "@pluv/platform-cloudflare";
14
+
15
+ const io = createIO(
16
+ // Assume no crdt was provided here
17
+ platformCloudflare({
18
+ /* ... */
19
+ }),
20
+ );
21
+
22
+ const ioServer = io.server();
23
+
24
+ const types = infer((i) => ({ io: i<typeof ioServer> }));
25
+ const client = createClient({
26
+ types,
27
+ // This will now emit a TypeScript error, because `crdt` was not provided to
28
+ // `createIO` above
29
+ initialStorage: yjs.doc((t) => ({
30
+ groceries: t.array<string>("groceries"),
31
+ })),
32
+ });
33
+ ```
34
+
35
+ ### Patch Changes
36
+
37
+ - @pluv/crdt@3.1.0
38
+ - @pluv/types@3.1.0
39
+
40
+ ## 3.0.0
41
+
42
+ ### Major Changes
43
+
44
+ - bc1ae91: **BREAKING** Removed deprecated `event`, `others`, `storageLoaded`, `storageRoot` and `storage` methods on `PluvRoom`. These methods now exist under `PluvRoom.subscribe`.
45
+
46
+ ### Patch Changes
47
+
48
+ - @pluv/crdt@3.0.0
49
+ - @pluv/types@3.0.0
50
+
3
51
  ## 2.3.1
4
52
 
5
53
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AbstractCrdtDocFactory, InferDocLike, NoopCrdtDocFactory, InferStorage, InferDoc, InferCrdtJson } from '@pluv/crdt';
2
2
  export { CrdtType, InferCrdtJson } from '@pluv/crdt';
3
- import { IOLike, JsonObject, EventRecord, CrdtDocLike, UserInfo, MaybePromise, Id, ProcedureLike, InputZodLike, IORouterLike, InferIOAuthorizeUser, InferIOAuthorize, BaseUser, RoomLike, InferIOOutput, InferIOInput, RoomEventListenerMap, BroadcastProxy, EventProxy, WebSocketConnection, OtherSubscriptionCallback, StorageProxy, SubscribeProxy, UpdateMyPresenceAction, MergeEvents } from '@pluv/types';
3
+ import { IOLike, JsonObject, EventRecord, CrdtDocLike, UserInfo, MaybePromise, Id, ProcedureLike, InputZodLike, IORouterLike, InferIOAuthorizeUser, InferIOAuthorize, BaseUser, RoomLike, InferIOOutput, InferIOInput, RoomEventListenerMap, BroadcastProxy, WebSocketConnection, SubscribeProxy, UpdateMyPresenceAction, InferIOCrdtKind, MergeEvents } from '@pluv/types';
4
4
  export { BaseUser, ConnectionState, EventMessage, EventNotifierSubscriptionCallback, EventRecord, IOEventMessage, MergeEvents, RoomLike, UserInfo, WebSocketConnection, WebSocketState } from '@pluv/types';
5
5
 
6
6
  declare abstract class AbstractStorageStore {
@@ -16,10 +16,10 @@ declare abstract class AbstractStorageStore {
16
16
 
17
17
  declare const identity: <T extends unknown>(x: T) => T;
18
18
 
19
- type InferCallback<TIO extends IOLike<any, any>> = (i: typeof identity) => {
19
+ type InferCallback<TIO extends IOLike<any, any, any>> = (i: typeof identity) => {
20
20
  io: (io: TIO) => TIO;
21
21
  };
22
- declare const infer: <TIO extends IOLike<any, any>>(callback: InferCallback<TIO>) => InferCallback<TIO>;
22
+ declare const infer: <TIO extends IOLike<any, any, any>>(callback: InferCallback<TIO>) => InferCallback<TIO>;
23
23
 
24
24
  type EventResolver<TIO extends IOLike, TInput extends JsonObject, TOutput extends EventRecord<string, any>, TPresence extends Record<string, any>, TDocLike extends CrdtDocLike<any, any>> = (data: TInput, context: EventResolverContext<TIO, TPresence, TDocLike>) => MaybePromise<TOutput | void>;
25
25
  interface EventResolverContext<TIO extends IOLike, TPresence extends Record<string, any>, TDocLike extends CrdtDocLike<any, any>> {
@@ -108,7 +108,7 @@ type FetchOptions = {
108
108
  url: string;
109
109
  options?: RequestInit;
110
110
  };
111
- type RoomEndpoints<TIO extends IOLike<any, any>, TMetadata extends JsonObject> = {
111
+ type RoomEndpoints<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject> = {
112
112
  wsEndpoint?: WsEndpoint<TMetadata>;
113
113
  } & (InferIOAuthorizeUser<InferIOAuthorize<TIO>> extends BaseUser ? {
114
114
  authEndpoint: AuthEndpoint<TMetadata>;
@@ -141,7 +141,7 @@ type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject, TPresence exte
141
141
  reconnectTimeoutMs?: ReconnectTimeoutMs;
142
142
  router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
143
143
  } & RoomEndpoints<TIO, TMetadata> & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & UsersManagerConfig<TPresence>>;
144
- declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
144
+ declare class PluvRoom<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
145
145
  readonly _endpoints: RoomEndpoints<TIO, TMetadata>;
146
146
  readonly id: string;
147
147
  readonly metadata?: InputZodLike<TMetadata>;
@@ -167,10 +167,6 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
167
167
  private _windowListeners;
168
168
  private _wsListeners;
169
169
  constructor(room: string, options: RoomConfig<TIO, TMetadata, TPresence, TCrdt, TEvents>);
170
- /**
171
- * @deprecated To be removed in v3. Use `getStorageLoaded` instead.
172
- */
173
- get storageLoaded(): boolean;
174
170
  get webSocket(): WebSocket | null;
175
171
  addEventListener<TKind extends keyof RoomEventListenerMap>(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void;
176
172
  broadcast: BroadcastProxy<TIO, TEvents>;
@@ -178,10 +174,6 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
178
174
  canUndo: () => boolean;
179
175
  connect(...args: RoomConnectParams<TMetadata>): Promise<void>;
180
176
  disconnect(): Promise<void>;
181
- /**
182
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.event instead
183
- */
184
- event: EventProxy<TIO, TEvents>;
185
177
  getConnection: () => WebSocketConnection;
186
178
  getDoc: () => CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
187
179
  getMyPresence: () => TPresence;
@@ -192,20 +184,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
192
184
  getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
193
185
  getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
194
186
  getStorageLoaded: () => boolean;
195
- /**
196
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.other instead
197
- */
198
- other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
199
187
  redo: () => void;
200
- /**
201
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.storage instead
202
- */
203
- storage: StorageProxy<InferStorage<TCrdt>>;
204
- /**
205
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.storage instead
206
- * @description Subscribes to the root storage object (serialized)
207
- */
208
- storageRoot: (callback: (value: { [P in keyof InferStorage<TCrdt>]: InferCrdtJson<InferStorage<TCrdt>[P]>; }) => void) => (() => void);
209
188
  subscribe: SubscribeProxy<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
210
189
  transact: (fn: (storage: InferStorage<TCrdt>) => void, origin?: string) => void;
211
190
  undo: () => void;
@@ -219,6 +198,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
219
198
  private _detachWindowListeners;
220
199
  private _detachWsListeners;
221
200
  private _emitSharedTypes;
201
+ private _event;
222
202
  private _flattenStorageStore;
223
203
  private _getAddon;
224
204
  private _getAuthFetchOptions;
@@ -250,17 +230,18 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
250
230
  private _onNavigatorOnline;
251
231
  private _onVisibilityChange;
252
232
  private _onWindowFocus;
233
+ private _other;
253
234
  private _parseMessage;
254
235
  private _pollReconnect;
255
236
  private _reconnect;
256
237
  private _sendMessage;
257
238
  private _setMetadata;
239
+ private _storage;
258
240
  private _updateState;
259
241
  }
260
242
 
261
- type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
243
+ type PluvClientOptions<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TCrdt extends InferIOCrdtKind<TIO>, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
262
244
  debug?: boolean;
263
- initialStorage?: TCrdt;
264
245
  /**
265
246
  * @description Configurable limits defined for client-side validation. You should only set
266
247
  * this if you control the server and have changed the limits there.
@@ -270,8 +251,12 @@ type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends Record<st
270
251
  presence?: InputZodLike<TPresence>;
271
252
  publicKey?: PublicKey<TMetadata>;
272
253
  types: InferCallback<TIO>;
273
- };
274
- type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = {
254
+ } & (InferIOCrdtKind<TIO> extends NoopCrdtDocFactory ? {
255
+ initialStorage?: "[ERROR]: Must provide crdt to createIO to use storage";
256
+ } : {
257
+ initialStorage?: TCrdt;
258
+ });
259
+ type CreateRoomOptions<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = {
275
260
  addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, InferStorage<TCrdt>>[];
276
261
  debug?: boolean | PluvRoomDebug<TIO>;
277
262
  initialPresence?: TPresence;
@@ -281,7 +266,7 @@ type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends Record<st
281
266
  router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
282
267
  };
283
268
  type EnterRoomParams<TMetadata extends JsonObject = {}> = keyof TMetadata extends never ? [] : [WithMetadata<TMetadata>];
284
- declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TMetadata extends JsonObject = {}> {
269
+ declare class PluvClient<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TMetadata extends JsonObject = {}> {
285
270
  readonly metadata?: InputZodLike<TMetadata>;
286
271
  private readonly _authEndpoint;
287
272
  private readonly _debug;
@@ -305,7 +290,7 @@ declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends Record<
305
290
  private _logDebug;
306
291
  }
307
292
 
308
- declare const createClient: <TIO extends IOLike<any, any>, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TPresence, TCrdt, TMetadata>) => PluvClient<TIO, TPresence, TCrdt, TMetadata>;
293
+ declare const createClient: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TPresence, TCrdt, TMetadata>) => PluvClient<TIO, TPresence, TCrdt, TMetadata>;
309
294
 
310
295
  type MockedRoomEvents<TIO extends IOLike> = Partial<{
311
296
  [P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
@@ -317,10 +302,6 @@ type MockedRoomConfig<TIO extends IOLike, TPresence extends Record<string, any>,
317
302
  } & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & Omit<UsersManagerConfig<TPresence>, "limits">;
318
303
  declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>>> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
319
304
  readonly id: string;
320
- /**
321
- * @deprecated To be removed in v3. Use `getStorageLoaded` instead.
322
- */
323
- readonly storageLoaded: boolean;
324
305
  private readonly _crdtManager;
325
306
  private readonly _crdtNotifier;
326
307
  private readonly _eventNotifier;
@@ -337,7 +318,6 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, an
337
318
  broadcast: BroadcastProxy<TIO, TEvents>;
338
319
  canRedo: () => boolean;
339
320
  canUndo: () => boolean;
340
- event: EventProxy<TIO, TEvents>;
341
321
  getConnection: () => WebSocketConnection;
342
322
  getDoc(): CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
343
323
  getMyPresence: () => TPresence;
@@ -348,16 +328,17 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, an
348
328
  getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
349
329
  getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
350
330
  getStorageLoaded(): boolean;
351
- other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
352
331
  redo: () => void;
353
- storage: StorageProxy<InferStorage<TCrdt>>;
354
332
  storageRoot: (fn: (value: { [P in keyof InferStorage<TCrdt>]: InferCrdtJson<InferStorage<TCrdt>[P]>; }) => void) => (() => void);
355
333
  subscribe: SubscribeProxy<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
356
334
  transact: (fn: (storage: InferStorage<TCrdt>) => void, origin?: string) => void;
357
335
  undo: () => void;
358
336
  updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
337
+ private _event;
359
338
  private _observeCrdt;
339
+ private _other;
360
340
  private _simulateEvent;
341
+ private _storage;
361
342
  }
362
343
 
363
344
  interface RegisterParams<TMetadata extends JsonObject> {
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AbstractCrdtDocFactory, InferDocLike, NoopCrdtDocFactory, InferStorage, InferDoc, InferCrdtJson } from '@pluv/crdt';
2
2
  export { CrdtType, InferCrdtJson } from '@pluv/crdt';
3
- import { IOLike, JsonObject, EventRecord, CrdtDocLike, UserInfo, MaybePromise, Id, ProcedureLike, InputZodLike, IORouterLike, InferIOAuthorizeUser, InferIOAuthorize, BaseUser, RoomLike, InferIOOutput, InferIOInput, RoomEventListenerMap, BroadcastProxy, EventProxy, WebSocketConnection, OtherSubscriptionCallback, StorageProxy, SubscribeProxy, UpdateMyPresenceAction, MergeEvents } from '@pluv/types';
3
+ import { IOLike, JsonObject, EventRecord, CrdtDocLike, UserInfo, MaybePromise, Id, ProcedureLike, InputZodLike, IORouterLike, InferIOAuthorizeUser, InferIOAuthorize, BaseUser, RoomLike, InferIOOutput, InferIOInput, RoomEventListenerMap, BroadcastProxy, WebSocketConnection, SubscribeProxy, UpdateMyPresenceAction, InferIOCrdtKind, MergeEvents } from '@pluv/types';
4
4
  export { BaseUser, ConnectionState, EventMessage, EventNotifierSubscriptionCallback, EventRecord, IOEventMessage, MergeEvents, RoomLike, UserInfo, WebSocketConnection, WebSocketState } from '@pluv/types';
5
5
 
6
6
  declare abstract class AbstractStorageStore {
@@ -16,10 +16,10 @@ declare abstract class AbstractStorageStore {
16
16
 
17
17
  declare const identity: <T extends unknown>(x: T) => T;
18
18
 
19
- type InferCallback<TIO extends IOLike<any, any>> = (i: typeof identity) => {
19
+ type InferCallback<TIO extends IOLike<any, any, any>> = (i: typeof identity) => {
20
20
  io: (io: TIO) => TIO;
21
21
  };
22
- declare const infer: <TIO extends IOLike<any, any>>(callback: InferCallback<TIO>) => InferCallback<TIO>;
22
+ declare const infer: <TIO extends IOLike<any, any, any>>(callback: InferCallback<TIO>) => InferCallback<TIO>;
23
23
 
24
24
  type EventResolver<TIO extends IOLike, TInput extends JsonObject, TOutput extends EventRecord<string, any>, TPresence extends Record<string, any>, TDocLike extends CrdtDocLike<any, any>> = (data: TInput, context: EventResolverContext<TIO, TPresence, TDocLike>) => MaybePromise<TOutput | void>;
25
25
  interface EventResolverContext<TIO extends IOLike, TPresence extends Record<string, any>, TDocLike extends CrdtDocLike<any, any>> {
@@ -108,7 +108,7 @@ type FetchOptions = {
108
108
  url: string;
109
109
  options?: RequestInit;
110
110
  };
111
- type RoomEndpoints<TIO extends IOLike<any, any>, TMetadata extends JsonObject> = {
111
+ type RoomEndpoints<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject> = {
112
112
  wsEndpoint?: WsEndpoint<TMetadata>;
113
113
  } & (InferIOAuthorizeUser<InferIOAuthorize<TIO>> extends BaseUser ? {
114
114
  authEndpoint: AuthEndpoint<TMetadata>;
@@ -141,7 +141,7 @@ type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject, TPresence exte
141
141
  reconnectTimeoutMs?: ReconnectTimeoutMs;
142
142
  router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
143
143
  } & RoomEndpoints<TIO, TMetadata> & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & UsersManagerConfig<TPresence>>;
144
- declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
144
+ declare class PluvRoom<TIO extends IOLike<any, any, any>, TMetadata extends JsonObject = {}, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
145
145
  readonly _endpoints: RoomEndpoints<TIO, TMetadata>;
146
146
  readonly id: string;
147
147
  readonly metadata?: InputZodLike<TMetadata>;
@@ -167,10 +167,6 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
167
167
  private _windowListeners;
168
168
  private _wsListeners;
169
169
  constructor(room: string, options: RoomConfig<TIO, TMetadata, TPresence, TCrdt, TEvents>);
170
- /**
171
- * @deprecated To be removed in v3. Use `getStorageLoaded` instead.
172
- */
173
- get storageLoaded(): boolean;
174
170
  get webSocket(): WebSocket | null;
175
171
  addEventListener<TKind extends keyof RoomEventListenerMap>(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void;
176
172
  broadcast: BroadcastProxy<TIO, TEvents>;
@@ -178,10 +174,6 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
178
174
  canUndo: () => boolean;
179
175
  connect(...args: RoomConnectParams<TMetadata>): Promise<void>;
180
176
  disconnect(): Promise<void>;
181
- /**
182
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.event instead
183
- */
184
- event: EventProxy<TIO, TEvents>;
185
177
  getConnection: () => WebSocketConnection;
186
178
  getDoc: () => CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
187
179
  getMyPresence: () => TPresence;
@@ -192,20 +184,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
192
184
  getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
193
185
  getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
194
186
  getStorageLoaded: () => boolean;
195
- /**
196
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.other instead
197
- */
198
- other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
199
187
  redo: () => void;
200
- /**
201
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.storage instead
202
- */
203
- storage: StorageProxy<InferStorage<TCrdt>>;
204
- /**
205
- * @deprecated To be removed in v3. Use PluvRoom.subscribe.storage instead
206
- * @description Subscribes to the root storage object (serialized)
207
- */
208
- storageRoot: (callback: (value: { [P in keyof InferStorage<TCrdt>]: InferCrdtJson<InferStorage<TCrdt>[P]>; }) => void) => (() => void);
209
188
  subscribe: SubscribeProxy<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
210
189
  transact: (fn: (storage: InferStorage<TCrdt>) => void, origin?: string) => void;
211
190
  undo: () => void;
@@ -219,6 +198,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
219
198
  private _detachWindowListeners;
220
199
  private _detachWsListeners;
221
200
  private _emitSharedTypes;
201
+ private _event;
222
202
  private _flattenStorageStore;
223
203
  private _getAddon;
224
204
  private _getAuthFetchOptions;
@@ -250,17 +230,18 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
250
230
  private _onNavigatorOnline;
251
231
  private _onVisibilityChange;
252
232
  private _onWindowFocus;
233
+ private _other;
253
234
  private _parseMessage;
254
235
  private _pollReconnect;
255
236
  private _reconnect;
256
237
  private _sendMessage;
257
238
  private _setMetadata;
239
+ private _storage;
258
240
  private _updateState;
259
241
  }
260
242
 
261
- type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
243
+ type PluvClientOptions<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TCrdt extends InferIOCrdtKind<TIO>, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
262
244
  debug?: boolean;
263
- initialStorage?: TCrdt;
264
245
  /**
265
246
  * @description Configurable limits defined for client-side validation. You should only set
266
247
  * this if you control the server and have changed the limits there.
@@ -270,8 +251,12 @@ type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends Record<st
270
251
  presence?: InputZodLike<TPresence>;
271
252
  publicKey?: PublicKey<TMetadata>;
272
253
  types: InferCallback<TIO>;
273
- };
274
- type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = {
254
+ } & (InferIOCrdtKind<TIO> extends NoopCrdtDocFactory ? {
255
+ initialStorage?: "[ERROR]: Must provide crdt to createIO to use storage";
256
+ } : {
257
+ initialStorage?: TCrdt;
258
+ });
259
+ type CreateRoomOptions<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}> = {
275
260
  addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, InferStorage<TCrdt>>[];
276
261
  debug?: boolean | PluvRoomDebug<TIO>;
277
262
  initialPresence?: TPresence;
@@ -281,7 +266,7 @@ type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends Record<st
281
266
  router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
282
267
  };
283
268
  type EnterRoomParams<TMetadata extends JsonObject = {}> = keyof TMetadata extends never ? [] : [WithMetadata<TMetadata>];
284
- declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TMetadata extends JsonObject = {}> {
269
+ declare class PluvClient<TIO extends IOLike<any, any, any>, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TMetadata extends JsonObject = {}> {
285
270
  readonly metadata?: InputZodLike<TMetadata>;
286
271
  private readonly _authEndpoint;
287
272
  private readonly _debug;
@@ -305,7 +290,7 @@ declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends Record<
305
290
  private _logDebug;
306
291
  }
307
292
 
308
- declare const createClient: <TIO extends IOLike<any, any>, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TPresence, TCrdt, TMetadata>) => PluvClient<TIO, TPresence, TCrdt, TMetadata>;
293
+ declare const createClient: <TIO extends IOLike<any, any, any>, TPresence extends Record<string, any> = {}, TCrdt extends InferIOCrdtKind<TIO> = InferIOCrdtKind<TIO>, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TPresence, TCrdt, TMetadata>) => PluvClient<TIO, TPresence, TCrdt, TMetadata>;
309
294
 
310
295
  type MockedRoomEvents<TIO extends IOLike> = Partial<{
311
296
  [P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
@@ -317,10 +302,6 @@ type MockedRoomConfig<TIO extends IOLike, TPresence extends Record<string, any>,
317
302
  } & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & Omit<UsersManagerConfig<TPresence>, "limits">;
318
303
  declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>>> implements RoomLike<TIO, InferDoc<TCrdt>, TPresence, InferStorage<TCrdt>> {
319
304
  readonly id: string;
320
- /**
321
- * @deprecated To be removed in v3. Use `getStorageLoaded` instead.
322
- */
323
- readonly storageLoaded: boolean;
324
305
  private readonly _crdtManager;
325
306
  private readonly _crdtNotifier;
326
307
  private readonly _eventNotifier;
@@ -337,7 +318,6 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, an
337
318
  broadcast: BroadcastProxy<TIO, TEvents>;
338
319
  canRedo: () => boolean;
339
320
  canUndo: () => boolean;
340
- event: EventProxy<TIO, TEvents>;
341
321
  getConnection: () => WebSocketConnection;
342
322
  getDoc(): CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
343
323
  getMyPresence: () => TPresence;
@@ -348,16 +328,17 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends Record<string, an
348
328
  getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
349
329
  getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
350
330
  getStorageLoaded(): boolean;
351
- other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
352
331
  redo: () => void;
353
- storage: StorageProxy<InferStorage<TCrdt>>;
354
332
  storageRoot: (fn: (value: { [P in keyof InferStorage<TCrdt>]: InferCrdtJson<InferStorage<TCrdt>[P]>; }) => void) => (() => void);
355
333
  subscribe: SubscribeProxy<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
356
334
  transact: (fn: (storage: InferStorage<TCrdt>) => void, origin?: string) => void;
357
335
  undo: () => void;
358
336
  updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
337
+ private _event;
359
338
  private _observeCrdt;
339
+ private _other;
360
340
  private _simulateEvent;
341
+ private _storage;
361
342
  }
362
343
 
363
344
  interface RegisterParams<TMetadata extends JsonObject> {