@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.
- package/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +48 -0
- package/dist/index.d.mts +20 -39
- package/dist/index.d.ts +20 -39
- package/dist/index.js +62 -88
- package/dist/index.mjs +62 -88
- package/package.json +5 -5
- package/src/MockedRoom.ts +50 -55
- package/src/PluvClient.ts +11 -15
- package/src/PluvRoom.ts +52 -80
- package/src/createClient.ts +3 -4
- package/src/infer.ts +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/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
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
[34mCLI[39m Target: es6
|
|
9
9
|
[34mESM[39m Build start
|
|
10
10
|
[34mCJS[39m Build start
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
11
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m63.03 KB[39m
|
|
12
|
+
[32mESM[39m ⚡️ Build success in 108ms
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m64.77 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 109ms
|
|
15
15
|
[34mDTS[39m Build start
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in
|
|
17
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[
|
|
18
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 4487ms
|
|
17
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m19.16 KB[39m
|
|
18
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m19.16 KB[39m
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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> {
|