@pluv/client 2.1.0 → 2.2.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 +44 -0
- package/dist/index.d.mts +49 -56
- package/dist/index.d.ts +49 -56
- package/dist/index.js +80 -27
- package/dist/index.mjs +82 -29
- package/package.json +5 -5
- package/src/CrdtManager.ts +9 -13
- package/src/ListenerManager.ts +21 -0
- package/src/MockedRoom.ts +36 -16
- package/src/PluvClient.ts +8 -8
- package/src/PluvProcedure.ts +27 -25
- package/src/PluvRoom.ts +76 -25
- package/src/PluvRouter.ts +31 -22
- package/src/StateNotifier.ts +2 -2
- package/src/UsersManager.ts +18 -4
- package/src/UsersNotifier.ts +1 -1
- package/src/constants.ts +1 -0
- package/src/createClient.ts +2 -2
- package/src/index.ts +2 -1
- package/src/types.ts +10 -31
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/client@2.
|
|
2
|
+
> @pluv/client@2.2.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
|
-
[32mESM[39m [1mdist/index.mjs [22m[
|
|
12
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
-
[32mCJS[39m [1mdist/index.js [22m[
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
11
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m63.81 KB[39m
|
|
12
|
+
[32mESM[39m ⚡️ Build success in 137ms
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m65.55 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 136ms
|
|
15
15
|
[34mDTS[39m Build start
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in
|
|
17
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[32m20.
|
|
18
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m20.
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 4812ms
|
|
17
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m20.11 KB[39m
|
|
18
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m20.11 KB[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# @pluv/client
|
|
2
2
|
|
|
3
|
+
## 2.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3ce1547: Updated typings for `PluvRoom.getDoc` to be narrower to get the native doc type.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { createClient } from "@pluv/client";
|
|
11
|
+
import { yjs } from "@pluv/crdt-yjs";
|
|
12
|
+
import type { Doc as YDoc } from "yjs";
|
|
13
|
+
|
|
14
|
+
const client = createClient({
|
|
15
|
+
// ...
|
|
16
|
+
crdt: yjs,
|
|
17
|
+
});
|
|
18
|
+
const room = client.createRoom("example-room");
|
|
19
|
+
|
|
20
|
+
const doc = room.getDoc();
|
|
21
|
+
|
|
22
|
+
// This is now typed as the native YDoc
|
|
23
|
+
doc.value;
|
|
24
|
+
// ^? const value: YDoc
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- fd3bfe2: Added the ability to listen to the room's underlying websocket's event listeners.
|
|
28
|
+
- aee40cb: Updated `presence` types to be more lenient (i.e. no-longer extends `JsonObject`). This is to enable types like `.passthrough` with zod, which can be useful for integrating `yjs.awareness` with libraries such as [lexical](https://lexical.dev/).
|
|
29
|
+
- edd1789: **DEPRECATED** `PluvRoom.storageLoaded` will be removed in v3. Added `PluvRoom.getStorageLoaded` with improved detection of when the storage was synced.
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const room = client.createRoom("example-room");
|
|
33
|
+
|
|
34
|
+
// Before
|
|
35
|
+
room.storageLoaded;
|
|
36
|
+
|
|
37
|
+
// After
|
|
38
|
+
room.getStorageLoaded();
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- 48191fa: Fixed `PluvRoom.getDoc` not returning a stable doc reference for a single connection.
|
|
44
|
+
- @pluv/crdt@2.2.0
|
|
45
|
+
- @pluv/types@2.2.0
|
|
46
|
+
|
|
3
47
|
## 2.1.0
|
|
4
48
|
|
|
5
49
|
### Minor Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
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,
|
|
4
|
-
export { BaseUser, ConnectionState, EventMessage, EventNotifierSubscriptionCallback, EventRecord, IOEventMessage, MergeEvents, RoomLike, UserInfo, WebSocketState } from '@pluv/types';
|
|
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';
|
|
4
|
+
export { BaseUser, ConnectionState, EventMessage, EventNotifierSubscriptionCallback, EventRecord, IOEventMessage, MergeEvents, RoomLike, UserInfo, WebSocketConnection, WebSocketState } from '@pluv/types';
|
|
5
5
|
|
|
6
6
|
declare abstract class AbstractStorageStore {
|
|
7
7
|
room: string;
|
|
@@ -21,9 +21,9 @@ type InferCallback<TIO extends IOLike<any, any>> = (i: typeof identity) => {
|
|
|
21
21
|
};
|
|
22
22
|
declare const infer: <TIO extends IOLike<any, any>>(callback: InferCallback<TIO>) => InferCallback<TIO>;
|
|
23
23
|
|
|
24
|
-
type EventResolver<TIO extends IOLike
|
|
25
|
-
interface EventResolverContext<TIO extends IOLike
|
|
26
|
-
doc:
|
|
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
|
+
interface EventResolverContext<TIO extends IOLike, TPresence extends Record<string, any>, TDocLike extends CrdtDocLike<any, any>> {
|
|
26
|
+
doc: TDocLike;
|
|
27
27
|
others: readonly UserInfo<TIO, TPresence>[];
|
|
28
28
|
room: string;
|
|
29
29
|
user: UserInfo<TIO, TPresence>;
|
|
@@ -45,65 +45,47 @@ interface PublicKeyParams<TMetadata extends JsonObject> {
|
|
|
45
45
|
metadata: TMetadata;
|
|
46
46
|
}
|
|
47
47
|
type PublicKey<TMetadata extends JsonObject> = string | ((params: PublicKeyParams<TMetadata>) => string);
|
|
48
|
-
interface WebSocketConnection {
|
|
49
|
-
/**
|
|
50
|
-
* @description How many times a connection attempt was made. This will increment upon each
|
|
51
|
-
* unsuccessful attempt, and will reset upon a successful connection.
|
|
52
|
-
* @date April 13, 2025
|
|
53
|
-
*/
|
|
54
|
-
attempts: number;
|
|
55
|
-
/**
|
|
56
|
-
* @description How many times the user has connected to the room. This can be more than 1 in
|
|
57
|
-
* the case of reconnects. This is tracked because on the very first connection (i.e. when
|
|
58
|
-
* count is 0) we don't want to send the storage state as an update to the room and overwrite
|
|
59
|
-
* the upstream state.
|
|
60
|
-
* @date April 13, 2025
|
|
61
|
-
*/
|
|
62
|
-
count: number;
|
|
63
|
-
id: string | null;
|
|
64
|
-
state: ConnectionState;
|
|
65
|
-
}
|
|
66
48
|
type WithMetadata<TMetadata extends JsonObject = {}> = keyof TMetadata extends never ? {
|
|
67
49
|
metadata?: undefined;
|
|
68
50
|
} : {
|
|
69
51
|
metadata: TMetadata;
|
|
70
52
|
};
|
|
71
53
|
|
|
72
|
-
interface PluvProcedureConfig<TIO extends IOLike
|
|
73
|
-
broadcast?: EventResolver<TIO, TInput, TOutput, TPresence,
|
|
54
|
+
interface PluvProcedureConfig<TIO extends IOLike, TInput extends JsonObject, TOutput extends EventRecord<string, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> {
|
|
55
|
+
broadcast?: EventResolver<TIO, TInput, TOutput, TPresence, InferDocLike<TCrdt>> | null;
|
|
74
56
|
input?: InputZodLike<TInput>;
|
|
75
57
|
}
|
|
76
|
-
declare class PluvProcedure<TIO extends IOLike
|
|
58
|
+
declare class PluvProcedure<TIO extends IOLike, TInput extends JsonObject, TOutput extends EventRecord<string, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TFilled extends "input" | "broadcast" | ""> implements ProcedureLike<TInput, TOutput> {
|
|
77
59
|
private _broadcast;
|
|
78
60
|
private _input;
|
|
79
61
|
get config(): ProcedureLike<TInput, TOutput>["config"];
|
|
80
|
-
constructor(config?: PluvProcedureConfig<TIO, TInput, TOutput, TPresence,
|
|
81
|
-
broadcast<TResult extends EventRecord<string, any> = {}>(resolver: EventResolver<TIO, TInput, TResult, TPresence,
|
|
82
|
-
input<TData extends JsonObject>(input: InputZodLike<TData>): Omit<PluvProcedure<TIO, TData, {}, TPresence,
|
|
62
|
+
constructor(config?: PluvProcedureConfig<TIO, TInput, TOutput, TPresence, TCrdt>);
|
|
63
|
+
broadcast<TResult extends EventRecord<string, any> = {}>(resolver: EventResolver<TIO, TInput, TResult, TPresence, InferDocLike<TCrdt>>): Omit<PluvProcedure<TIO, TInput, MergeEventRecords<[TOutput, TResult]>, TPresence, TCrdt, TFilled | "input" | "broadcast">, TFilled | "input" | "broadcast">;
|
|
64
|
+
input<TData extends JsonObject>(input: InputZodLike<TData>): Omit<PluvProcedure<TIO, TData, {}, TPresence, TCrdt, TFilled | "input">, TFilled | "input">;
|
|
83
65
|
private _resolver;
|
|
84
66
|
}
|
|
85
67
|
|
|
86
|
-
type CrdtManagerOptions<TCrdt extends AbstractCrdtDocFactory<any>> = {
|
|
68
|
+
type CrdtManagerOptions<TCrdt extends AbstractCrdtDocFactory<any, any>> = {
|
|
87
69
|
initialStorage?: TCrdt;
|
|
88
70
|
};
|
|
89
71
|
|
|
90
|
-
type PluvRouterEventConfig<TIO extends IOLike
|
|
91
|
-
[P: string]: Pick<PluvProcedure<TIO, any, any, TPresence,
|
|
72
|
+
type PluvRouterEventConfig<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> = {
|
|
73
|
+
[P: string]: Pick<PluvProcedure<TIO, any, any, TPresence, TCrdt, "">, "config">;
|
|
92
74
|
};
|
|
93
|
-
type MergedRouter<TRouters extends PluvRouter<TIO, TPresence,
|
|
94
|
-
infer IHead extends PluvRouter<TIO, TPresence,
|
|
95
|
-
...infer ITail extends PluvRouter<TIO, TPresence,
|
|
96
|
-
] ? MergedRouter<ITail, TIO, TPresence,
|
|
97
|
-
declare class PluvRouter<TIO extends IOLike
|
|
75
|
+
type MergedRouter<TRouters extends PluvRouter<TIO, TPresence, TCrdt, any>[], TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TRoot extends TRouters[0]["_defs"]["events"]> = TRouters extends [
|
|
76
|
+
infer IHead extends PluvRouter<TIO, TPresence, TCrdt, any>,
|
|
77
|
+
...infer ITail extends PluvRouter<TIO, TPresence, TCrdt, any>[]
|
|
78
|
+
] ? MergedRouter<ITail, TIO, TPresence, TCrdt, TRoot & IHead["_defs"]["events"]> : PluvRouter<TIO, TPresence, TCrdt, TRoot>;
|
|
79
|
+
declare class PluvRouter<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, TCrdt> = {}> implements IORouterLike<TEvents> {
|
|
98
80
|
readonly _defs: {
|
|
99
81
|
events: TEvents;
|
|
100
82
|
};
|
|
101
83
|
constructor(events: TEvents);
|
|
102
|
-
static merge<TRouters extends PluvRouter<
|
|
84
|
+
static merge<TRouters extends PluvRouter<TIO, TPresence, TCrdt, any>[], TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>>(...routers: TRouters): MergedRouter<TRouters, TIO, TPresence, TCrdt, {}>;
|
|
103
85
|
private _isValidEventName;
|
|
104
86
|
}
|
|
105
87
|
|
|
106
|
-
type UsersManagerConfig<TPresence extends
|
|
88
|
+
type UsersManagerConfig<TPresence extends Record<string, any> = {}> = {
|
|
107
89
|
initialPresence?: TPresence;
|
|
108
90
|
limits: PluvClientLimits;
|
|
109
91
|
presence?: InputZodLike<TPresence>;
|
|
@@ -133,8 +115,8 @@ type RoomEndpoints<TIO extends IOLike<any, any>, TMetadata extends JsonObject> =
|
|
|
133
115
|
} : {
|
|
134
116
|
authEndpoint?: undefined;
|
|
135
117
|
});
|
|
136
|
-
type PluvRoomAddon<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends
|
|
137
|
-
interface PluvRoomAddonInput<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends
|
|
118
|
+
type PluvRoomAddon<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> = (input: PluvRoomAddonInput<TIO, TMetadata, TPresence, TCrdt>) => Partial<PluvRoomAddonResult>;
|
|
119
|
+
interface PluvRoomAddonInput<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>> {
|
|
138
120
|
room: PluvRoom<TIO, TMetadata, TPresence, TCrdt>;
|
|
139
121
|
}
|
|
140
122
|
interface PluvRoomAddonResult {
|
|
@@ -149,7 +131,7 @@ interface ReconnectTimeoutMsParams {
|
|
|
149
131
|
attempts: number;
|
|
150
132
|
}
|
|
151
133
|
type ReconnectTimeoutMs = number | ((params: ReconnectTimeoutMsParams) => number);
|
|
152
|
-
type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends
|
|
134
|
+
type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>>> = Id<{
|
|
153
135
|
addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, TCrdt>[];
|
|
154
136
|
debug?: boolean | PluvRoomDebug<TIO>;
|
|
155
137
|
limits: PluvClientLimits;
|
|
@@ -159,7 +141,7 @@ type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject, TPresence exte
|
|
|
159
141
|
reconnectTimeoutMs?: ReconnectTimeoutMs;
|
|
160
142
|
router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
|
|
161
143
|
} & RoomEndpoints<TIO, TMetadata> & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & UsersManagerConfig<TPresence>>;
|
|
162
|
-
declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObject = {}, TPresence extends
|
|
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>> {
|
|
163
145
|
readonly _endpoints: RoomEndpoints<TIO, TMetadata>;
|
|
164
146
|
readonly id: string;
|
|
165
147
|
readonly metadata?: InputZodLike<TMetadata>;
|
|
@@ -169,6 +151,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
|
|
|
169
151
|
private readonly _eventNotifier;
|
|
170
152
|
private readonly _intervals;
|
|
171
153
|
private readonly _limits;
|
|
154
|
+
private readonly _listenerManager;
|
|
172
155
|
private readonly _listeners;
|
|
173
156
|
private readonly _publicKey;
|
|
174
157
|
private readonly _reconnectTimeoutMs;
|
|
@@ -184,8 +167,12 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
|
|
|
184
167
|
private _windowListeners;
|
|
185
168
|
private _wsListeners;
|
|
186
169
|
constructor(room: string, options: RoomConfig<TIO, TMetadata, TPresence, TCrdt, TEvents>);
|
|
170
|
+
/**
|
|
171
|
+
* @deprecated To be removed in v3. Use `getStorageLoaded` instead.
|
|
172
|
+
*/
|
|
187
173
|
get storageLoaded(): boolean;
|
|
188
174
|
get webSocket(): WebSocket | null;
|
|
175
|
+
addEventListener<TKind extends keyof RoomEventListenerMap>(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void;
|
|
189
176
|
broadcast: BroadcastProxy<TIO, TEvents>;
|
|
190
177
|
canRedo: () => boolean;
|
|
191
178
|
canUndo: () => boolean;
|
|
@@ -196,7 +183,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
|
|
|
196
183
|
*/
|
|
197
184
|
event: EventProxy<TIO, TEvents>;
|
|
198
185
|
getConnection: () => WebSocketConnection;
|
|
199
|
-
getDoc: () => CrdtDocLike<InferStorage<TCrdt>>;
|
|
186
|
+
getDoc: () => CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
|
|
200
187
|
getMyPresence: () => TPresence;
|
|
201
188
|
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
202
189
|
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
@@ -204,13 +191,14 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
|
|
|
204
191
|
getStorage: <TKey extends keyof InferStorage<TCrdt>>(type: TKey) => InferStorage<TCrdt>[TKey] | null;
|
|
205
192
|
getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
|
|
206
193
|
getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
|
|
194
|
+
getStorageLoaded: () => boolean;
|
|
207
195
|
/**
|
|
208
196
|
* @deprecated To be removed in v3. Use PluvRoom.subscribe.other instead
|
|
209
197
|
*/
|
|
210
198
|
other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
|
|
211
199
|
redo: () => void;
|
|
212
200
|
/**
|
|
213
|
-
* @deprecated To be removed in v3.
|
|
201
|
+
* @deprecated To be removed in v3. Use PluvRoom.subscribe.storage instead
|
|
214
202
|
*/
|
|
215
203
|
storage: StorageProxy<InferStorage<TCrdt>>;
|
|
216
204
|
/**
|
|
@@ -270,7 +258,7 @@ declare class PluvRoom<TIO extends IOLike<any, any>, TMetadata extends JsonObjec
|
|
|
270
258
|
private _updateState;
|
|
271
259
|
}
|
|
272
260
|
|
|
273
|
-
type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends
|
|
261
|
+
type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
|
|
274
262
|
debug?: boolean;
|
|
275
263
|
initialStorage?: TCrdt;
|
|
276
264
|
/**
|
|
@@ -283,7 +271,7 @@ type PluvClientOptions<TIO extends IOLike<any, any>, TPresence extends JsonObjec
|
|
|
283
271
|
publicKey?: PublicKey<TMetadata>;
|
|
284
272
|
types: InferCallback<TIO>;
|
|
285
273
|
};
|
|
286
|
-
type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends
|
|
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>> = {}> = {
|
|
287
275
|
addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, InferStorage<TCrdt>>[];
|
|
288
276
|
debug?: boolean | PluvRoomDebug<TIO>;
|
|
289
277
|
initialPresence?: TPresence;
|
|
@@ -293,7 +281,7 @@ type CreateRoomOptions<TIO extends IOLike<any, any>, TPresence extends JsonObjec
|
|
|
293
281
|
router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
|
|
294
282
|
};
|
|
295
283
|
type EnterRoomParams<TMetadata extends JsonObject = {}> = keyof TMetadata extends never ? [] : [WithMetadata<TMetadata>];
|
|
296
|
-
declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends
|
|
284
|
+
declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends Record<string, any> = {}, TCrdt extends AbstractCrdtDocFactory<any, any> = NoopCrdtDocFactory, TMetadata extends JsonObject = {}> {
|
|
297
285
|
readonly metadata?: InputZodLike<TMetadata>;
|
|
298
286
|
private readonly _authEndpoint;
|
|
299
287
|
private readonly _debug;
|
|
@@ -306,7 +294,7 @@ declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends JsonObj
|
|
|
306
294
|
get _defs(): {
|
|
307
295
|
initialStorage: TCrdt | undefined;
|
|
308
296
|
};
|
|
309
|
-
get procedure(): PluvProcedure<TIO, {}, {}, TPresence,
|
|
297
|
+
get procedure(): PluvProcedure<TIO, {}, {}, TPresence, TCrdt, "">;
|
|
310
298
|
constructor(options: PluvClientOptions<TIO, TPresence, TCrdt, TMetadata>);
|
|
311
299
|
createRoom: <TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>> = {}>(room: string, options?: CreateRoomOptions<TIO, TPresence, TCrdt, TMetadata, TEvents>) => PluvRoom<TIO, TMetadata, TPresence, TCrdt, TEvents>;
|
|
312
300
|
enter: (room: string | PluvRoom<TIO, TMetadata, any, any, any>, ...args: EnterRoomParams<TMetadata>) => Promise<PluvRoom<TIO, TMetadata, TPresence, TCrdt, any>>;
|
|
@@ -317,18 +305,22 @@ declare class PluvClient<TIO extends IOLike<any, any>, TPresence extends JsonObj
|
|
|
317
305
|
private _logDebug;
|
|
318
306
|
}
|
|
319
307
|
|
|
320
|
-
declare const createClient: <TIO extends IOLike<any, any>, TPresence extends
|
|
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>;
|
|
321
309
|
|
|
322
310
|
type MockedRoomEvents<TIO extends IOLike> = Partial<{
|
|
323
311
|
[P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
|
|
324
312
|
}>;
|
|
325
|
-
type MockedRoomConfig<TIO extends IOLike, TPresence extends
|
|
313
|
+
type MockedRoomConfig<TIO extends IOLike, TPresence extends Record<string, any>, TCrdt extends AbstractCrdtDocFactory<any, any>, TEvents extends PluvRouterEventConfig<TIO, TPresence, InferStorage<TCrdt>>> = {
|
|
326
314
|
events?: MockedRoomEvents<MergeEvents<TEvents, TIO>>;
|
|
327
315
|
limits?: PluvClientLimits;
|
|
328
316
|
router?: PluvRouter<TIO, TPresence, InferStorage<TCrdt>, TEvents>;
|
|
329
317
|
} & Pick<CrdtManagerOptions<TCrdt>, "initialStorage"> & Omit<UsersManagerConfig<TPresence>, "limits">;
|
|
330
|
-
declare class MockedRoom<TIO extends IOLike, TPresence extends
|
|
318
|
+
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>> {
|
|
331
319
|
readonly id: string;
|
|
320
|
+
/**
|
|
321
|
+
* @deprecated To be removed in v3. Use `getStorageLoaded` instead.
|
|
322
|
+
*/
|
|
323
|
+
readonly storageLoaded: boolean;
|
|
332
324
|
private readonly _crdtManager;
|
|
333
325
|
private readonly _crdtNotifier;
|
|
334
326
|
private readonly _eventNotifier;
|
|
@@ -341,13 +333,13 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject, TCrdt
|
|
|
341
333
|
private readonly _subscriptions;
|
|
342
334
|
private readonly _usersManager;
|
|
343
335
|
constructor(room: string, options: MockedRoomConfig<TIO, TPresence, TCrdt, TEvents>);
|
|
344
|
-
|
|
336
|
+
addEventListener<TKind extends keyof RoomEventListenerMap>(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void;
|
|
345
337
|
broadcast: BroadcastProxy<TIO, TEvents>;
|
|
346
338
|
canRedo: () => boolean;
|
|
347
339
|
canUndo: () => boolean;
|
|
348
340
|
event: EventProxy<TIO, TEvents>;
|
|
349
341
|
getConnection: () => WebSocketConnection;
|
|
350
|
-
getDoc(): CrdtDocLike<InferStorage<TCrdt>>;
|
|
342
|
+
getDoc(): CrdtDocLike<InferDoc<TCrdt>, InferStorage<TCrdt>>;
|
|
351
343
|
getMyPresence: () => TPresence;
|
|
352
344
|
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
353
345
|
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
@@ -355,6 +347,7 @@ declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject, TCrdt
|
|
|
355
347
|
getStorage: <TKey extends keyof InferStorage<TCrdt>>(type: TKey) => InferStorage<TCrdt>[TKey] | null;
|
|
356
348
|
getStorageJson(): InferCrdtJson<InferStorage<TCrdt>> | null;
|
|
357
349
|
getStorageJson<TKey extends keyof InferStorage<TCrdt>>(type: TKey): InferCrdtJson<InferStorage<TCrdt>[TKey]> | null;
|
|
350
|
+
getStorageLoaded(): boolean;
|
|
358
351
|
other: (connectionId: string, callback: OtherSubscriptionCallback<TIO, TPresence>) => (() => void);
|
|
359
352
|
redo: () => void;
|
|
360
353
|
storage: StorageProxy<InferStorage<TCrdt>>;
|
|
@@ -377,4 +370,4 @@ declare const register: <TMetadata extends JsonObject>(params: RegisterParams<TM
|
|
|
377
370
|
wsEndpoint: (params: EndpointParams<TMetadata>) => string;
|
|
378
371
|
};
|
|
379
372
|
|
|
380
|
-
export { AbstractStorageStore, type CreateRoomOptions, type EnterRoomParams, type InferCallback, type InferMetadata, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, type PluvProcedureConfig, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, PluvRouter, type PluvRouterEventConfig, type PublicKey, type PublicKeyParams, type RegisterParams, type RoomConnectParams, type RoomEndpoints,
|
|
373
|
+
export { AbstractStorageStore, type CreateRoomOptions, type EnterRoomParams, type InferCallback, type InferMetadata, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, type PluvProcedureConfig, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, PluvRouter, type PluvRouterEventConfig, type PublicKey, type PublicKeyParams, type RegisterParams, type RoomConnectParams, type RoomEndpoints, createClient, infer, register };
|