@liveblocks/client 0.15.0-alpha.2 → 0.15.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/lib/esm/index.js +2991 -5
- package/lib/esm/index.mjs +2991 -0
- package/lib/esm/internal.js +149 -0
- package/lib/esm/internal.mjs +149 -0
- package/lib/{esm/types.d.ts → index.d.ts} +255 -50
- package/lib/index.js +4237 -0
- package/lib/{esm/live.d.ts → internal.d.ts} +46 -34
- package/lib/internal.js +193 -0
- package/package.json +36 -9
- package/lib/cjs/AbstractCrdt.d.ts +0 -67
- package/lib/cjs/AbstractCrdt.js +0 -95
- package/lib/cjs/LiveList.d.ts +0 -144
- package/lib/cjs/LiveList.js +0 -527
- package/lib/cjs/LiveMap.d.ts +0 -91
- package/lib/cjs/LiveMap.js +0 -322
- package/lib/cjs/LiveObject.d.ts +0 -80
- package/lib/cjs/LiveObject.js +0 -453
- package/lib/cjs/LiveRegister.d.ts +0 -29
- package/lib/cjs/LiveRegister.js +0 -88
- package/lib/cjs/authentication.d.ts +0 -3
- package/lib/cjs/authentication.js +0 -71
- package/lib/cjs/client.d.ts +0 -27
- package/lib/cjs/client.js +0 -80
- package/lib/cjs/immutable.d.ts +0 -9
- package/lib/cjs/immutable.js +0 -291
- package/lib/cjs/index.d.ts +0 -6
- package/lib/cjs/index.js +0 -18
- package/lib/cjs/live.d.ts +0 -181
- package/lib/cjs/live.js +0 -49
- package/lib/cjs/position.d.ts +0 -6
- package/lib/cjs/position.js +0 -113
- package/lib/cjs/room.d.ts +0 -159
- package/lib/cjs/room.js +0 -1094
- package/lib/cjs/types.d.ts +0 -489
- package/lib/cjs/types.js +0 -2
- package/lib/cjs/utils.d.ts +0 -11
- package/lib/cjs/utils.js +0 -175
- package/lib/esm/AbstractCrdt.d.ts +0 -67
- package/lib/esm/AbstractCrdt.js +0 -91
- package/lib/esm/LiveList.d.ts +0 -144
- package/lib/esm/LiveList.js +0 -523
- package/lib/esm/LiveMap.d.ts +0 -91
- package/lib/esm/LiveMap.js +0 -318
- package/lib/esm/LiveObject.d.ts +0 -80
- package/lib/esm/LiveObject.js +0 -449
- package/lib/esm/LiveRegister.d.ts +0 -29
- package/lib/esm/LiveRegister.js +0 -84
- package/lib/esm/authentication.d.ts +0 -3
- package/lib/esm/authentication.js +0 -66
- package/lib/esm/client.d.ts +0 -27
- package/lib/esm/client.js +0 -76
- package/lib/esm/immutable.d.ts +0 -9
- package/lib/esm/immutable.js +0 -282
- package/lib/esm/index.d.ts +0 -6
- package/lib/esm/live.js +0 -46
- package/lib/esm/position.d.ts +0 -6
- package/lib/esm/position.js +0 -106
- package/lib/esm/room.d.ts +0 -159
- package/lib/esm/room.js +0 -1069
- package/lib/esm/types.js +0 -1
- package/lib/esm/utils.d.ts +0 -11
- package/lib/esm/utils.js +0 -164
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
declare type Presence = {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
declare type ServerMessage = UpdatePresenceMessage | UserJoinMessage | UserLeftMessage | EventMessage | RoomStateMessage | InitialDocumentStateMessage | UpdateStorageMessage;
|
|
6
|
+
declare enum ServerMessageType {
|
|
4
7
|
UpdatePresence = 100,
|
|
5
8
|
UserJoined = 101,
|
|
6
9
|
UserLeft = 102,
|
|
@@ -9,7 +12,7 @@ export declare enum ServerMessageType {
|
|
|
9
12
|
InitialStorageState = 200,
|
|
10
13
|
UpdateStorage = 201
|
|
11
14
|
}
|
|
12
|
-
|
|
15
|
+
declare type RoomStateMessage = {
|
|
13
16
|
type: ServerMessageType.RoomState;
|
|
14
17
|
users: {
|
|
15
18
|
[actor: number]: {
|
|
@@ -18,65 +21,65 @@ export declare type RoomStateMessage = {
|
|
|
18
21
|
};
|
|
19
22
|
};
|
|
20
23
|
};
|
|
21
|
-
|
|
24
|
+
declare type UpdatePresenceMessage = {
|
|
22
25
|
type: ServerMessageType.UpdatePresence;
|
|
23
26
|
actor: number;
|
|
24
27
|
data: Presence;
|
|
25
28
|
};
|
|
26
|
-
|
|
29
|
+
declare type UserJoinMessage = {
|
|
27
30
|
type: ServerMessageType.UserJoined;
|
|
28
31
|
actor: number;
|
|
29
32
|
id?: string;
|
|
30
33
|
info?: string;
|
|
31
34
|
};
|
|
32
|
-
|
|
35
|
+
declare type UserLeftMessage = {
|
|
33
36
|
type: ServerMessageType.UserLeft;
|
|
34
37
|
actor: number;
|
|
35
38
|
};
|
|
36
|
-
|
|
39
|
+
declare type EventMessage = {
|
|
37
40
|
type: ServerMessageType.Event;
|
|
38
41
|
actor: number;
|
|
39
42
|
event: any;
|
|
40
43
|
};
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
declare type SerializedCrdtWithId = [id: string, crdt: SerializedCrdt];
|
|
45
|
+
declare type InitialDocumentStateMessage = {
|
|
43
46
|
type: ServerMessageType.InitialStorageState;
|
|
44
47
|
items: SerializedCrdtWithId[];
|
|
45
48
|
};
|
|
46
|
-
|
|
49
|
+
declare type UpdateStorageMessage = {
|
|
47
50
|
type: ServerMessageType.UpdateStorage;
|
|
48
51
|
ops: Op[];
|
|
49
52
|
};
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
declare type ClientMessage = ClientEventMessage | UpdatePresenceClientMessage | UpdateStorageClientMessage | FetchStorageClientMessage;
|
|
54
|
+
declare enum ClientMessageType {
|
|
52
55
|
UpdatePresence = 100,
|
|
53
56
|
ClientEvent = 103,
|
|
54
57
|
FetchStorage = 200,
|
|
55
58
|
UpdateStorage = 201
|
|
56
59
|
}
|
|
57
|
-
|
|
60
|
+
declare type ClientEventMessage = {
|
|
58
61
|
type: ClientMessageType.ClientEvent;
|
|
59
62
|
event: any;
|
|
60
63
|
};
|
|
61
|
-
|
|
64
|
+
declare type UpdatePresenceClientMessage = {
|
|
62
65
|
type: ClientMessageType.UpdatePresence;
|
|
63
66
|
data: Presence;
|
|
64
67
|
targetActor?: number;
|
|
65
68
|
};
|
|
66
|
-
|
|
69
|
+
declare type UpdateStorageClientMessage = {
|
|
67
70
|
type: ClientMessageType.UpdateStorage;
|
|
68
71
|
ops: Op[];
|
|
69
72
|
};
|
|
70
|
-
|
|
73
|
+
declare type FetchStorageClientMessage = {
|
|
71
74
|
type: ClientMessageType.FetchStorage;
|
|
72
75
|
};
|
|
73
|
-
|
|
76
|
+
declare enum CrdtType {
|
|
74
77
|
Object = 0,
|
|
75
78
|
List = 1,
|
|
76
79
|
Map = 2,
|
|
77
80
|
Register = 3
|
|
78
81
|
}
|
|
79
|
-
|
|
82
|
+
declare type SerializedObject = {
|
|
80
83
|
type: CrdtType.Object;
|
|
81
84
|
parentId?: string;
|
|
82
85
|
parentKey?: string;
|
|
@@ -84,24 +87,24 @@ export declare type SerializedObject = {
|
|
|
84
87
|
[key: string]: any;
|
|
85
88
|
};
|
|
86
89
|
};
|
|
87
|
-
|
|
90
|
+
declare type SerializedList = {
|
|
88
91
|
type: CrdtType.List;
|
|
89
92
|
parentId: string;
|
|
90
93
|
parentKey: string;
|
|
91
94
|
};
|
|
92
|
-
|
|
95
|
+
declare type SerializedMap = {
|
|
93
96
|
type: CrdtType.Map;
|
|
94
97
|
parentId: string;
|
|
95
98
|
parentKey: string;
|
|
96
99
|
};
|
|
97
|
-
|
|
100
|
+
declare type SerializedRegister = {
|
|
98
101
|
type: CrdtType.Register;
|
|
99
102
|
parentId: string;
|
|
100
103
|
parentKey: string;
|
|
101
104
|
data: any;
|
|
102
105
|
};
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
declare type SerializedCrdt = SerializedObject | SerializedList | SerializedMap | SerializedRegister;
|
|
107
|
+
declare enum OpType {
|
|
105
108
|
Init = 0,
|
|
106
109
|
SetParentKey = 1,
|
|
107
110
|
CreateList = 2,
|
|
@@ -112,8 +115,8 @@ export declare enum OpType {
|
|
|
112
115
|
CreateMap = 7,
|
|
113
116
|
CreateRegister = 8
|
|
114
117
|
}
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
declare type Op = CreateObjectOp | UpdateObjectOp | DeleteCrdtOp | CreateListOp | SetParentKeyOp | DeleteObjectKeyOp | CreateMapOp | CreateRegisterOp;
|
|
119
|
+
declare type UpdateObjectOp = {
|
|
117
120
|
opId?: string;
|
|
118
121
|
id: string;
|
|
119
122
|
type: OpType.UpdateObject;
|
|
@@ -121,7 +124,7 @@ export declare type UpdateObjectOp = {
|
|
|
121
124
|
[key: string]: any;
|
|
122
125
|
};
|
|
123
126
|
};
|
|
124
|
-
|
|
127
|
+
declare type CreateObjectOp = {
|
|
125
128
|
opId?: string;
|
|
126
129
|
id: string;
|
|
127
130
|
type: OpType.CreateObject;
|
|
@@ -131,21 +134,21 @@ export declare type CreateObjectOp = {
|
|
|
131
134
|
[key: string]: any;
|
|
132
135
|
};
|
|
133
136
|
};
|
|
134
|
-
|
|
137
|
+
declare type CreateListOp = {
|
|
135
138
|
opId?: string;
|
|
136
139
|
id: string;
|
|
137
140
|
type: OpType.CreateList;
|
|
138
141
|
parentId: string;
|
|
139
142
|
parentKey: string;
|
|
140
143
|
};
|
|
141
|
-
|
|
144
|
+
declare type CreateMapOp = {
|
|
142
145
|
opId?: string;
|
|
143
146
|
id: string;
|
|
144
147
|
type: OpType.CreateMap;
|
|
145
148
|
parentId: string;
|
|
146
149
|
parentKey: string;
|
|
147
150
|
};
|
|
148
|
-
|
|
151
|
+
declare type CreateRegisterOp = {
|
|
149
152
|
opId?: string;
|
|
150
153
|
id: string;
|
|
151
154
|
type: OpType.CreateRegister;
|
|
@@ -153,24 +156,24 @@ export declare type CreateRegisterOp = {
|
|
|
153
156
|
parentKey: string;
|
|
154
157
|
data: any;
|
|
155
158
|
};
|
|
156
|
-
|
|
159
|
+
declare type DeleteCrdtOp = {
|
|
157
160
|
opId?: string;
|
|
158
161
|
id: string;
|
|
159
162
|
type: OpType.DeleteCrdt;
|
|
160
163
|
};
|
|
161
|
-
|
|
164
|
+
declare type SetParentKeyOp = {
|
|
162
165
|
opId?: string;
|
|
163
166
|
id: string;
|
|
164
167
|
type: OpType.SetParentKey;
|
|
165
168
|
parentKey: string;
|
|
166
169
|
};
|
|
167
|
-
|
|
170
|
+
declare type DeleteObjectKeyOp = {
|
|
168
171
|
opId?: string;
|
|
169
172
|
id: string;
|
|
170
173
|
type: OpType.DeleteObjectKey;
|
|
171
174
|
key: string;
|
|
172
175
|
};
|
|
173
|
-
|
|
176
|
+
declare enum WebsocketCloseCodes {
|
|
174
177
|
CLOSE_ABNORMAL = 1006,
|
|
175
178
|
INVALID_MESSAGE_FORMAT = 4000,
|
|
176
179
|
NOT_ALLOWED = 4001,
|
|
@@ -179,3 +182,12 @@ export declare enum WebsocketCloseCodes {
|
|
|
179
182
|
MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP = 4004,
|
|
180
183
|
MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM = 4005
|
|
181
184
|
}
|
|
185
|
+
|
|
186
|
+
declare const min = 32;
|
|
187
|
+
declare const max = 126;
|
|
188
|
+
declare function makePosition(before?: string, after?: string): string;
|
|
189
|
+
declare function posCodes(str: string): number[];
|
|
190
|
+
declare function pos(codes: number[]): string;
|
|
191
|
+
declare function compare(posA: string, posB: string): number;
|
|
192
|
+
|
|
193
|
+
export { ClientEventMessage, ClientMessage, ClientMessageType, CrdtType, CreateListOp, CreateMapOp, CreateObjectOp, CreateRegisterOp, DeleteCrdtOp, DeleteObjectKeyOp, EventMessage, FetchStorageClientMessage, InitialDocumentStateMessage, Op, OpType, RoomStateMessage, SerializedCrdt, SerializedCrdtWithId, SerializedList, SerializedMap, SerializedObject, SerializedRegister, ServerMessage, ServerMessageType, SetParentKeyOp, UpdateObjectOp, UpdatePresenceClientMessage, UpdatePresenceMessage, UpdateStorageClientMessage, UpdateStorageMessage, UserJoinMessage, UserLeftMessage, WebsocketCloseCodes, compare, makePosition, max, min, pos, posCodes };
|
package/lib/internal.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
exports.ServerMessageType = void 0;
|
|
6
|
+
|
|
7
|
+
(function (ServerMessageType) {
|
|
8
|
+
ServerMessageType[ServerMessageType["UpdatePresence"] = 100] = "UpdatePresence";
|
|
9
|
+
ServerMessageType[ServerMessageType["UserJoined"] = 101] = "UserJoined";
|
|
10
|
+
ServerMessageType[ServerMessageType["UserLeft"] = 102] = "UserLeft";
|
|
11
|
+
ServerMessageType[ServerMessageType["Event"] = 103] = "Event";
|
|
12
|
+
ServerMessageType[ServerMessageType["RoomState"] = 104] = "RoomState";
|
|
13
|
+
ServerMessageType[ServerMessageType["InitialStorageState"] = 200] = "InitialStorageState";
|
|
14
|
+
ServerMessageType[ServerMessageType["UpdateStorage"] = 201] = "UpdateStorage";
|
|
15
|
+
})(exports.ServerMessageType || (exports.ServerMessageType = {}));
|
|
16
|
+
|
|
17
|
+
exports.ClientMessageType = void 0;
|
|
18
|
+
|
|
19
|
+
(function (ClientMessageType) {
|
|
20
|
+
ClientMessageType[ClientMessageType["UpdatePresence"] = 100] = "UpdatePresence";
|
|
21
|
+
ClientMessageType[ClientMessageType["ClientEvent"] = 103] = "ClientEvent";
|
|
22
|
+
ClientMessageType[ClientMessageType["FetchStorage"] = 200] = "FetchStorage";
|
|
23
|
+
ClientMessageType[ClientMessageType["UpdateStorage"] = 201] = "UpdateStorage";
|
|
24
|
+
})(exports.ClientMessageType || (exports.ClientMessageType = {}));
|
|
25
|
+
|
|
26
|
+
exports.CrdtType = void 0;
|
|
27
|
+
|
|
28
|
+
(function (CrdtType) {
|
|
29
|
+
CrdtType[CrdtType["Object"] = 0] = "Object";
|
|
30
|
+
CrdtType[CrdtType["List"] = 1] = "List";
|
|
31
|
+
CrdtType[CrdtType["Map"] = 2] = "Map";
|
|
32
|
+
CrdtType[CrdtType["Register"] = 3] = "Register";
|
|
33
|
+
})(exports.CrdtType || (exports.CrdtType = {}));
|
|
34
|
+
|
|
35
|
+
exports.OpType = void 0;
|
|
36
|
+
|
|
37
|
+
(function (OpType) {
|
|
38
|
+
OpType[OpType["Init"] = 0] = "Init";
|
|
39
|
+
OpType[OpType["SetParentKey"] = 1] = "SetParentKey";
|
|
40
|
+
OpType[OpType["CreateList"] = 2] = "CreateList";
|
|
41
|
+
OpType[OpType["UpdateObject"] = 3] = "UpdateObject";
|
|
42
|
+
OpType[OpType["CreateObject"] = 4] = "CreateObject";
|
|
43
|
+
OpType[OpType["DeleteCrdt"] = 5] = "DeleteCrdt";
|
|
44
|
+
OpType[OpType["DeleteObjectKey"] = 6] = "DeleteObjectKey";
|
|
45
|
+
OpType[OpType["CreateMap"] = 7] = "CreateMap";
|
|
46
|
+
OpType[OpType["CreateRegister"] = 8] = "CreateRegister";
|
|
47
|
+
})(exports.OpType || (exports.OpType = {}));
|
|
48
|
+
|
|
49
|
+
exports.WebsocketCloseCodes = void 0;
|
|
50
|
+
|
|
51
|
+
(function (WebsocketCloseCodes) {
|
|
52
|
+
WebsocketCloseCodes[WebsocketCloseCodes["CLOSE_ABNORMAL"] = 1006] = "CLOSE_ABNORMAL";
|
|
53
|
+
WebsocketCloseCodes[WebsocketCloseCodes["INVALID_MESSAGE_FORMAT"] = 4000] = "INVALID_MESSAGE_FORMAT";
|
|
54
|
+
WebsocketCloseCodes[WebsocketCloseCodes["NOT_ALLOWED"] = 4001] = "NOT_ALLOWED";
|
|
55
|
+
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_MESSAGES_PER_SECONDS"] = 4002] = "MAX_NUMBER_OF_MESSAGES_PER_SECONDS";
|
|
56
|
+
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_CONCURRENT_CONNECTIONS"] = 4003] = "MAX_NUMBER_OF_CONCURRENT_CONNECTIONS";
|
|
57
|
+
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP"] = 4004] = "MAX_NUMBER_OF_MESSAGES_PER_DAY_PER_APP";
|
|
58
|
+
WebsocketCloseCodes[WebsocketCloseCodes["MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM"] = 4005] = "MAX_NUMBER_OF_CONCURRENT_CONNECTIONS_PER_ROOM";
|
|
59
|
+
})(exports.WebsocketCloseCodes || (exports.WebsocketCloseCodes = {}));
|
|
60
|
+
|
|
61
|
+
var min = 32;
|
|
62
|
+
var max = 126;
|
|
63
|
+
function makePosition(before, after) {
|
|
64
|
+
if (before == null && after == null) {
|
|
65
|
+
return pos([min + 1]);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (before != null && after == null) {
|
|
69
|
+
return getNextPosition(before);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (before == null && after != null) {
|
|
73
|
+
return getPreviousPosition(after);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return pos(makePositionFromCodes(posCodes(before), posCodes(after)));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function getPreviousPosition(after) {
|
|
80
|
+
var result = [];
|
|
81
|
+
var afterCodes = posCodes(after);
|
|
82
|
+
|
|
83
|
+
for (var i = 0; i < afterCodes.length; i++) {
|
|
84
|
+
var code = afterCodes[i];
|
|
85
|
+
|
|
86
|
+
if (code <= min + 1) {
|
|
87
|
+
result.push(min);
|
|
88
|
+
|
|
89
|
+
if (afterCodes.length - 1 === i) {
|
|
90
|
+
result.push(max);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
result.push(code - 1);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return pos(result);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function getNextPosition(before) {
|
|
103
|
+
var result = [];
|
|
104
|
+
var beforeCodes = posCodes(before);
|
|
105
|
+
|
|
106
|
+
for (var i = 0; i < beforeCodes.length; i++) {
|
|
107
|
+
var code = beforeCodes[i];
|
|
108
|
+
|
|
109
|
+
if (code === max) {
|
|
110
|
+
result.push(code);
|
|
111
|
+
|
|
112
|
+
if (beforeCodes.length - 1 === i) {
|
|
113
|
+
result.push(min + 1);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
result.push(code + 1);
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return pos(result);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function makePositionFromCodes(before, after) {
|
|
126
|
+
var index = 0;
|
|
127
|
+
var result = [];
|
|
128
|
+
|
|
129
|
+
while (true) {
|
|
130
|
+
var beforeDigit = before[index] || min;
|
|
131
|
+
var afterDigit = after[index] || max;
|
|
132
|
+
|
|
133
|
+
if (beforeDigit > afterDigit) {
|
|
134
|
+
throw new Error("Impossible to generate position between " + before + " and " + after);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (beforeDigit === afterDigit) {
|
|
138
|
+
result.push(beforeDigit);
|
|
139
|
+
index++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (afterDigit - beforeDigit === 1) {
|
|
144
|
+
result.push(beforeDigit);
|
|
145
|
+
result.push.apply(result, makePositionFromCodes(before.slice(index + 1), []));
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var mid = afterDigit + beforeDigit >> 1;
|
|
150
|
+
result.push(mid);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function posCodes(str) {
|
|
158
|
+
var codes = [];
|
|
159
|
+
|
|
160
|
+
for (var i = 0; i < str.length; i++) {
|
|
161
|
+
codes.push(str.charCodeAt(i));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return codes;
|
|
165
|
+
}
|
|
166
|
+
function pos(codes) {
|
|
167
|
+
return String.fromCharCode.apply(String, codes);
|
|
168
|
+
}
|
|
169
|
+
function compare(posA, posB) {
|
|
170
|
+
var aCodes = posCodes(posA);
|
|
171
|
+
var bCodes = posCodes(posB);
|
|
172
|
+
var maxLength = Math.max(aCodes.length, bCodes.length);
|
|
173
|
+
|
|
174
|
+
for (var i = 0; i < maxLength; i++) {
|
|
175
|
+
var a = aCodes[i] == null ? min : aCodes[i];
|
|
176
|
+
var b = bCodes[i] == null ? min : bCodes[i];
|
|
177
|
+
|
|
178
|
+
if (a === b) {
|
|
179
|
+
continue;
|
|
180
|
+
} else {
|
|
181
|
+
return a - b;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
throw new Error("Impossible to compare similar position \"" + posA + "\" and \"" + posB + "\"");
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
exports.compare = compare;
|
|
189
|
+
exports.makePosition = makePosition;
|
|
190
|
+
exports.max = max;
|
|
191
|
+
exports.min = min;
|
|
192
|
+
exports.pos = pos;
|
|
193
|
+
exports.posCodes = posCodes;
|
package/package.json
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/client",
|
|
3
|
-
"version": "0.15.0
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "",
|
|
5
|
-
"main": "./lib/
|
|
6
|
-
"
|
|
5
|
+
"main": "./lib/index.js",
|
|
6
|
+
"types": "./lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"lib
|
|
8
|
+
"lib/**"
|
|
9
9
|
],
|
|
10
|
+
"exports": {
|
|
11
|
+
"./package.json": "./package.json",
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./lib/index.d.ts",
|
|
14
|
+
"module": "./lib/esm/index.js",
|
|
15
|
+
"import": "./lib/esm/index.mjs",
|
|
16
|
+
"default": "./lib/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./internal": {
|
|
19
|
+
"types": "./lib/internal.d.ts",
|
|
20
|
+
"module": "./lib/esm/internal.js",
|
|
21
|
+
"import": "./lib/esm/internal.mjs",
|
|
22
|
+
"default": "./lib/internal.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
10
25
|
"keywords": [
|
|
11
26
|
"liveblocks",
|
|
12
27
|
"multiplayer",
|
|
@@ -17,21 +32,33 @@
|
|
|
17
32
|
"url": "https://github.com/liveblocks/liveblocks/issues"
|
|
18
33
|
},
|
|
19
34
|
"scripts": {
|
|
20
|
-
"build
|
|
21
|
-
"build": "npm run build:esm && npm run build:cjs",
|
|
22
|
-
"build:esm": "tsc -p tsconfig-esm.json",
|
|
23
|
-
"build:cjs": "tsc -p tsconfig-cjs.json",
|
|
35
|
+
"build": "rollup -c",
|
|
24
36
|
"test": "jest --watch"
|
|
25
37
|
},
|
|
26
38
|
"license": "Apache-2.0",
|
|
27
39
|
"devDependencies": {
|
|
28
40
|
"@babel/core": "^7.12.16",
|
|
41
|
+
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
42
|
+
"@babel/plugin-proposal-private-methods": "^7.16.11",
|
|
29
43
|
"@babel/preset-env": "^7.12.16",
|
|
30
44
|
"@babel/preset-typescript": "^7.12.16",
|
|
45
|
+
"@rollup/plugin-babel": "^5.3.1",
|
|
46
|
+
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
47
|
+
"@rollup/plugin-typescript": "^8.3.1",
|
|
31
48
|
"@types/jest": "^26.0.21",
|
|
49
|
+
"@types/node-fetch": "^2.6.1",
|
|
50
|
+
"@types/ws": "^8.2.2",
|
|
32
51
|
"babel-jest": "^26.6.3",
|
|
33
52
|
"jest": "^26.6.3",
|
|
34
|
-
"
|
|
53
|
+
"jest-each": "^27.5.1",
|
|
54
|
+
"msw": "^0.39.1",
|
|
55
|
+
"node-fetch": "2.6.7",
|
|
56
|
+
"rollup": "^2.68.0",
|
|
57
|
+
"rollup-plugin-dts": "^4.1.0",
|
|
58
|
+
"rollup-plugin-esbuild": "^4.8.2",
|
|
59
|
+
"typescript": "^4.4.0",
|
|
60
|
+
"whatwg-fetch": "^3.6.2",
|
|
61
|
+
"ws": "^8.5.0"
|
|
35
62
|
},
|
|
36
63
|
"repository": {
|
|
37
64
|
"type": "git",
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Op, SerializedCrdt } from "./live";
|
|
2
|
-
import { StorageUpdate } from "./types";
|
|
3
|
-
export declare type ApplyResult = {
|
|
4
|
-
reverse: Op[];
|
|
5
|
-
modified: StorageUpdate;
|
|
6
|
-
} | {
|
|
7
|
-
modified: false;
|
|
8
|
-
};
|
|
9
|
-
export interface Doc {
|
|
10
|
-
generateId: () => string;
|
|
11
|
-
generateOpId: () => string;
|
|
12
|
-
addItem: (id: string, item: AbstractCrdt) => void;
|
|
13
|
-
deleteItem: (id: string) => void;
|
|
14
|
-
dispatch: (ops: Op[], reverseOps: Op[], storageUpdates: Map<string, StorageUpdate>) => void;
|
|
15
|
-
}
|
|
16
|
-
export declare abstract class AbstractCrdt {
|
|
17
|
-
#private;
|
|
18
|
-
/**
|
|
19
|
-
* INTERNAL
|
|
20
|
-
*/
|
|
21
|
-
protected get _doc(): Doc | undefined;
|
|
22
|
-
/**
|
|
23
|
-
* INTERNAL
|
|
24
|
-
*/
|
|
25
|
-
get _id(): string | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* INTERNAL
|
|
28
|
-
*/
|
|
29
|
-
get _parent(): AbstractCrdt | undefined;
|
|
30
|
-
/**
|
|
31
|
-
* INTERNAL
|
|
32
|
-
*/
|
|
33
|
-
get _parentKey(): string | undefined;
|
|
34
|
-
/**
|
|
35
|
-
* INTERNAL
|
|
36
|
-
*/
|
|
37
|
-
_apply(op: Op, isLocal: boolean): ApplyResult;
|
|
38
|
-
/**
|
|
39
|
-
* INTERNAL
|
|
40
|
-
*/
|
|
41
|
-
_setParentLink(parent: AbstractCrdt, key: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* INTERNAL
|
|
44
|
-
*/
|
|
45
|
-
_attach(id: string, doc: Doc): void;
|
|
46
|
-
/**
|
|
47
|
-
* INTERNAL
|
|
48
|
-
*/
|
|
49
|
-
abstract _attachChild(id: string, key: string, crdt: AbstractCrdt, isLocal: boolean): ApplyResult;
|
|
50
|
-
/**
|
|
51
|
-
* INTERNAL
|
|
52
|
-
*/
|
|
53
|
-
_detach(): void;
|
|
54
|
-
/**
|
|
55
|
-
* INTERNAL
|
|
56
|
-
*/
|
|
57
|
-
abstract _detachChild(crdt: AbstractCrdt): ApplyResult;
|
|
58
|
-
/**
|
|
59
|
-
* INTERNAL
|
|
60
|
-
*/
|
|
61
|
-
abstract _serialize(parentId: string, parentKey: string, doc?: Doc): Op[];
|
|
62
|
-
/**
|
|
63
|
-
* INTERNAL
|
|
64
|
-
*/
|
|
65
|
-
abstract _toSerializedCrdt(): SerializedCrdt;
|
|
66
|
-
abstract _getType(): string;
|
|
67
|
-
}
|
package/lib/cjs/AbstractCrdt.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
-
};
|
|
13
|
-
var _AbstractCrdt_parent, _AbstractCrdt_doc, _AbstractCrdt_id, _AbstractCrdt_parentKey;
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.AbstractCrdt = void 0;
|
|
16
|
-
const live_1 = require("./live");
|
|
17
|
-
class AbstractCrdt {
|
|
18
|
-
constructor() {
|
|
19
|
-
_AbstractCrdt_parent.set(this, void 0);
|
|
20
|
-
_AbstractCrdt_doc.set(this, void 0);
|
|
21
|
-
_AbstractCrdt_id.set(this, void 0);
|
|
22
|
-
_AbstractCrdt_parentKey.set(this, void 0);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* INTERNAL
|
|
26
|
-
*/
|
|
27
|
-
get _doc() {
|
|
28
|
-
return __classPrivateFieldGet(this, _AbstractCrdt_doc, "f");
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* INTERNAL
|
|
32
|
-
*/
|
|
33
|
-
get _id() {
|
|
34
|
-
return __classPrivateFieldGet(this, _AbstractCrdt_id, "f");
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* INTERNAL
|
|
38
|
-
*/
|
|
39
|
-
get _parent() {
|
|
40
|
-
return __classPrivateFieldGet(this, _AbstractCrdt_parent, "f");
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* INTERNAL
|
|
44
|
-
*/
|
|
45
|
-
get _parentKey() {
|
|
46
|
-
return __classPrivateFieldGet(this, _AbstractCrdt_parentKey, "f");
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* INTERNAL
|
|
50
|
-
*/
|
|
51
|
-
_apply(op, isLocal) {
|
|
52
|
-
switch (op.type) {
|
|
53
|
-
case live_1.OpType.DeleteCrdt: {
|
|
54
|
-
if (this._parent != null && this._parentKey != null) {
|
|
55
|
-
return this._parent._detachChild(this);
|
|
56
|
-
}
|
|
57
|
-
return { modified: false };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return { modified: false };
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* INTERNAL
|
|
64
|
-
*/
|
|
65
|
-
_setParentLink(parent, key) {
|
|
66
|
-
if (__classPrivateFieldGet(this, _AbstractCrdt_parent, "f") != null && __classPrivateFieldGet(this, _AbstractCrdt_parent, "f") !== parent) {
|
|
67
|
-
throw new Error("Cannot attach parent if it already exist");
|
|
68
|
-
}
|
|
69
|
-
__classPrivateFieldSet(this, _AbstractCrdt_parentKey, key, "f");
|
|
70
|
-
__classPrivateFieldSet(this, _AbstractCrdt_parent, parent, "f");
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* INTERNAL
|
|
74
|
-
*/
|
|
75
|
-
_attach(id, doc) {
|
|
76
|
-
if (__classPrivateFieldGet(this, _AbstractCrdt_id, "f") || __classPrivateFieldGet(this, _AbstractCrdt_doc, "f")) {
|
|
77
|
-
throw new Error("Cannot attach if CRDT is already attached");
|
|
78
|
-
}
|
|
79
|
-
doc.addItem(id, this);
|
|
80
|
-
__classPrivateFieldSet(this, _AbstractCrdt_id, id, "f");
|
|
81
|
-
__classPrivateFieldSet(this, _AbstractCrdt_doc, doc, "f");
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* INTERNAL
|
|
85
|
-
*/
|
|
86
|
-
_detach() {
|
|
87
|
-
if (__classPrivateFieldGet(this, _AbstractCrdt_doc, "f") && __classPrivateFieldGet(this, _AbstractCrdt_id, "f")) {
|
|
88
|
-
__classPrivateFieldGet(this, _AbstractCrdt_doc, "f").deleteItem(__classPrivateFieldGet(this, _AbstractCrdt_id, "f"));
|
|
89
|
-
}
|
|
90
|
-
__classPrivateFieldSet(this, _AbstractCrdt_parent, undefined, "f");
|
|
91
|
-
__classPrivateFieldSet(this, _AbstractCrdt_doc, undefined, "f");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
exports.AbstractCrdt = AbstractCrdt;
|
|
95
|
-
_AbstractCrdt_parent = new WeakMap(), _AbstractCrdt_doc = new WeakMap(), _AbstractCrdt_id = new WeakMap(), _AbstractCrdt_parentKey = new WeakMap();
|