@liveblocks/client 0.16.16 → 0.17.0-beta2
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/index.d.ts +28 -8
- package/index.js +1290 -830
- package/index.mjs +1091 -782
- package/internal.d.ts +418 -276
- package/internal.js +313 -205
- package/internal.mjs +265 -171
- package/package.json +15 -10
- package/shared.d.ts +719 -650
- package/shared.js +2583 -1326
- package/shared.mjs +2000 -1204
package/internal.mjs
CHANGED
|
@@ -1,188 +1,282 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function parseAuthToken(token) {
|
|
40
|
-
const data = parseJwtToken(token);
|
|
41
|
-
if (data && isAuthToken(data)) return data;
|
|
42
|
-
throw new Error("Authentication error. Liveblocks could not parse the response of your authentication endpoint");
|
|
43
|
-
}
|
|
44
|
-
|
|
1
|
+
import {
|
|
2
|
+
L as LiveObject,
|
|
3
|
+
q as LiveList,
|
|
4
|
+
s as LiveMap,
|
|
5
|
+
u as LiveRegister,
|
|
6
|
+
b as isPlainObject,
|
|
7
|
+
v as findNonSerializableValue,
|
|
8
|
+
f as isLiveList,
|
|
9
|
+
w as isLiveObject,
|
|
10
|
+
} from "./shared.mjs";
|
|
11
|
+
export {
|
|
12
|
+
C as ClientMsgCode,
|
|
13
|
+
I as CrdtType,
|
|
14
|
+
e as OpCode,
|
|
15
|
+
S as ServerMsgCode,
|
|
16
|
+
W as WebsocketCloseCodes,
|
|
17
|
+
x as assertNever,
|
|
18
|
+
M as b64decode,
|
|
19
|
+
G as comparePosition,
|
|
20
|
+
D as deprecate,
|
|
21
|
+
E as deprecateIf,
|
|
22
|
+
o as errorIf,
|
|
23
|
+
y as isAppOnlyAuthToken,
|
|
24
|
+
z as isAuthToken,
|
|
25
|
+
K as isChildCrdt,
|
|
26
|
+
h as isJsonArray,
|
|
27
|
+
l as isJsonObject,
|
|
28
|
+
J as isJsonScalar,
|
|
29
|
+
b as isPlainObject,
|
|
30
|
+
A as isRoomAuthToken,
|
|
31
|
+
k as isRootCrdt,
|
|
32
|
+
B as isScope,
|
|
33
|
+
H as makePosition,
|
|
34
|
+
n as nn,
|
|
35
|
+
F as throwUsageError,
|
|
36
|
+
t as tryParseJson,
|
|
37
|
+
} from "./shared.mjs";
|
|
45
38
|
function lsonObjectToJson(obj) {
|
|
46
|
-
const result = {};
|
|
47
|
-
for (const key in obj) {
|
|
48
|
-
const val = obj[key];
|
|
49
|
-
void 0 !== val && (result[key] = lsonToJson(val));
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function lsonListToJson(value) {
|
|
55
|
-
return value.map(lsonToJson);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function lsonToJson(value) {
|
|
59
|
-
if (value instanceof LiveObject) return lsonObjectToJson(value.toObject());
|
|
60
|
-
if (value instanceof LiveList) return function(value) {
|
|
61
|
-
return lsonListToJson(value.toArray());
|
|
62
|
-
}(value);
|
|
63
|
-
if (value instanceof LiveMap) return function(map) {
|
|
64
39
|
const result = {};
|
|
65
|
-
for (const
|
|
40
|
+
for (const key in obj) {
|
|
41
|
+
const val = obj[key];
|
|
42
|
+
void 0 !== val && (result[key] = lsonToJson(val));
|
|
43
|
+
}
|
|
66
44
|
return result;
|
|
67
|
-
}(value);
|
|
68
|
-
if (value instanceof LiveRegister) return value.data;
|
|
69
|
-
if (value instanceof AbstractCrdt) throw new Error("Unhandled subclass of AbstractCrdt encountered");
|
|
70
|
-
return Array.isArray(value) ? lsonListToJson(value) : isPlainObject(value) ? lsonObjectToJson(value) : value;
|
|
71
45
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return null !== obj && "[object Object]" === Object.prototype.toString.call(obj);
|
|
46
|
+
function lsonListToJson(value) {
|
|
47
|
+
return value.map(lsonToJson);
|
|
75
48
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
49
|
+
function lsonToJson(value) {
|
|
50
|
+
return value instanceof LiveObject
|
|
51
|
+
? lsonObjectToJson(value.toObject())
|
|
52
|
+
: value instanceof LiveList
|
|
53
|
+
? (function (value) {
|
|
54
|
+
return lsonListToJson(value.toArray());
|
|
55
|
+
})(value)
|
|
56
|
+
: value instanceof LiveMap
|
|
57
|
+
? (function (map) {
|
|
58
|
+
const result = {};
|
|
59
|
+
for (const [key, value] of map.entries())
|
|
60
|
+
result[key] = lsonToJson(value);
|
|
61
|
+
return result;
|
|
62
|
+
})(value)
|
|
63
|
+
: value instanceof LiveRegister
|
|
64
|
+
? value.data
|
|
65
|
+
: Array.isArray(value)
|
|
66
|
+
? lsonListToJson(value)
|
|
67
|
+
: isPlainObject(value)
|
|
68
|
+
? lsonObjectToJson(value)
|
|
69
|
+
: value;
|
|
86
70
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (void 0 === next) liveObject.delete(key); else if (void 0 === value) liveObject.set(key, anyToCrdt(next)); else {
|
|
95
|
-
if (prev === next) return;
|
|
96
|
-
value instanceof LiveList && Array.isArray(prev) && Array.isArray(next) ? function(liveList, prev, next) {
|
|
97
|
-
let i = 0, prevEnd = prev.length - 1, nextEnd = next.length - 1, prevNode = prev[0], nextNode = next[0];
|
|
98
|
-
outer: {
|
|
99
|
-
for (;prevNode === nextNode; ) {
|
|
100
|
-
if (++i, i > prevEnd || i > nextEnd) break outer;
|
|
101
|
-
prevNode = prev[i], nextNode = next[i];
|
|
102
|
-
}
|
|
103
|
-
for (prevNode = prev[prevEnd], nextNode = next[nextEnd]; prevNode === nextNode; ) {
|
|
104
|
-
if (prevEnd--, nextEnd--, i > prevEnd || i > nextEnd) break outer;
|
|
105
|
-
prevNode = prev[prevEnd], nextNode = next[nextEnd];
|
|
71
|
+
function deepLiveify(value) {
|
|
72
|
+
if (Array.isArray(value)) return new LiveList(value.map(deepLiveify));
|
|
73
|
+
if (isPlainObject(value)) {
|
|
74
|
+
const init = {};
|
|
75
|
+
for (const key in value) {
|
|
76
|
+
const val = value[key];
|
|
77
|
+
void 0 !== val && (init[key] = deepLiveify(val));
|
|
106
78
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
i++;
|
|
111
|
-
} else if (i > nextEnd) {
|
|
112
|
-
let localI = i;
|
|
113
|
-
for (;localI <= prevEnd; ) liveList.delete(i), localI++;
|
|
114
|
-
} else {
|
|
115
|
-
for (;i <= prevEnd && i <= nextEnd; ) {
|
|
116
|
-
prevNode = prev[i], nextNode = next[i];
|
|
117
|
-
const liveListNode = liveList.get(i);
|
|
118
|
-
liveListNode instanceof LiveObject && isPlainObject(prevNode) && isPlainObject(nextNode) ? patchLiveObject(liveListNode, prevNode, nextNode) : liveList.set(i, anyToCrdt(nextNode)),
|
|
119
|
-
i++;
|
|
120
|
-
}
|
|
121
|
-
for (;i <= nextEnd; ) liveList.insert(anyToCrdt(next[i]), i), i++;
|
|
122
|
-
let localI = i;
|
|
123
|
-
for (;localI <= prevEnd; ) liveList.delete(i), localI++;
|
|
124
|
-
}
|
|
125
|
-
}(value, prev, next) : value instanceof LiveObject && isPlainObject(prev) && isPlainObject(next) ? patchLiveObject(value, prev, next) : liveObject.set(key, anyToCrdt(next));
|
|
126
|
-
}
|
|
79
|
+
return new LiveObject(init);
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
127
82
|
}
|
|
83
|
+
function patchLiveObjectKey(liveObject, key, prev, next) {
|
|
84
|
+
if ("production" !== process.env.NODE_ENV) {
|
|
85
|
+
const nonSerializableValue = findNonSerializableValue(next);
|
|
86
|
+
if (nonSerializableValue)
|
|
87
|
+
return void console.error(
|
|
88
|
+
`New state path: '${nonSerializableValue.path}' value: '${nonSerializableValue.value}' is not serializable.\nOnly serializable value can be synced with Liveblocks.`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
const value = liveObject.get(key);
|
|
92
|
+
if (void 0 === next) liveObject.delete(key);
|
|
93
|
+
else if (void 0 === value) liveObject.set(key, deepLiveify(next));
|
|
94
|
+
else {
|
|
95
|
+
if (prev === next) return;
|
|
96
|
+
isLiveList(value) && Array.isArray(prev) && Array.isArray(next)
|
|
97
|
+
? (function (liveList, prev, next) {
|
|
98
|
+
let i = 0,
|
|
99
|
+
prevEnd = prev.length - 1,
|
|
100
|
+
nextEnd = next.length - 1,
|
|
101
|
+
prevNode = prev[0],
|
|
102
|
+
nextNode = next[0];
|
|
103
|
+
outer: {
|
|
104
|
+
for (; prevNode === nextNode; ) {
|
|
105
|
+
if ((++i, i > prevEnd || i > nextEnd)) break outer;
|
|
106
|
+
(prevNode = prev[i]), (nextNode = next[i]);
|
|
107
|
+
}
|
|
108
|
+
for (
|
|
109
|
+
prevNode = prev[prevEnd], nextNode = next[nextEnd];
|
|
110
|
+
prevNode === nextNode;
|
|
128
111
|
|
|
112
|
+
) {
|
|
113
|
+
if ((prevEnd--, nextEnd--, i > prevEnd || i > nextEnd))
|
|
114
|
+
break outer;
|
|
115
|
+
(prevNode = prev[prevEnd]), (nextNode = next[nextEnd]);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (i > prevEnd) {
|
|
119
|
+
if (i <= nextEnd)
|
|
120
|
+
for (; i <= nextEnd; )
|
|
121
|
+
liveList.insert(deepLiveify(next[i]), i), i++;
|
|
122
|
+
} else if (i > nextEnd) {
|
|
123
|
+
let localI = i;
|
|
124
|
+
for (; localI <= prevEnd; ) liveList.delete(i), localI++;
|
|
125
|
+
} else {
|
|
126
|
+
for (; i <= prevEnd && i <= nextEnd; ) {
|
|
127
|
+
(prevNode = prev[i]), (nextNode = next[i]);
|
|
128
|
+
const liveListNode = liveList.get(i);
|
|
129
|
+
isLiveObject(liveListNode) &&
|
|
130
|
+
isPlainObject(prevNode) &&
|
|
131
|
+
isPlainObject(nextNode)
|
|
132
|
+
? patchLiveObject(liveListNode, prevNode, nextNode)
|
|
133
|
+
: liveList.set(i, deepLiveify(nextNode)),
|
|
134
|
+
i++;
|
|
135
|
+
}
|
|
136
|
+
for (; i <= nextEnd; )
|
|
137
|
+
liveList.insert(deepLiveify(next[i]), i), i++;
|
|
138
|
+
let localI = i;
|
|
139
|
+
for (; localI <= prevEnd; ) liveList.delete(i), localI++;
|
|
140
|
+
}
|
|
141
|
+
})(value, prev, next)
|
|
142
|
+
: isLiveObject(value) && isPlainObject(prev) && isPlainObject(next)
|
|
143
|
+
? patchLiveObject(value, prev, next)
|
|
144
|
+
: liveObject.set(key, deepLiveify(next));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
129
147
|
function patchLiveObject(root, prev, next) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
148
|
+
const updates = {};
|
|
149
|
+
for (const key in next) patchLiveObjectKey(root, key, prev[key], next[key]);
|
|
150
|
+
for (const key in prev) void 0 === next[key] && root.delete(key);
|
|
151
|
+
Object.keys(updates).length > 0 && root.update(updates);
|
|
134
152
|
}
|
|
135
|
-
|
|
136
153
|
function patchImmutableObject(state, updates) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
154
|
+
return updates.reduce(
|
|
155
|
+
(state, update) =>
|
|
156
|
+
(function (state, update) {
|
|
157
|
+
const path = (function (node) {
|
|
158
|
+
const path = [];
|
|
159
|
+
for (; "HasParent" === node.parent.type; )
|
|
160
|
+
isLiveList(node.parent.node)
|
|
161
|
+
? path.push(node.parent.node._indexOfPosition(node.parent.key))
|
|
162
|
+
: path.push(node.parent.key),
|
|
163
|
+
(node = node.parent.node);
|
|
164
|
+
return path;
|
|
165
|
+
})(update.node);
|
|
166
|
+
return patchImmutableNode(state, path, update);
|
|
167
|
+
})(state, update),
|
|
168
|
+
state
|
|
169
|
+
);
|
|
146
170
|
}
|
|
147
|
-
|
|
148
171
|
function patchImmutableNode(state, path, update) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
172
|
+
var _a, _b, _c, _d;
|
|
173
|
+
const pathItem = path.pop();
|
|
174
|
+
if (void 0 === pathItem)
|
|
175
|
+
switch (update.type) {
|
|
176
|
+
case "LiveObject": {
|
|
177
|
+
if (null === state || "object" != typeof state || Array.isArray(state))
|
|
178
|
+
throw new Error(
|
|
179
|
+
"Internal: received update on LiveObject but state was not an object"
|
|
180
|
+
);
|
|
181
|
+
const newState = Object.assign({}, state);
|
|
182
|
+
for (const key in update.updates)
|
|
183
|
+
if (
|
|
184
|
+
"update" ===
|
|
185
|
+
(null === (_a = update.updates[key]) || void 0 === _a
|
|
186
|
+
? void 0
|
|
187
|
+
: _a.type)
|
|
188
|
+
) {
|
|
189
|
+
const val = update.node.get(key);
|
|
190
|
+
void 0 !== val && (newState[key] = lsonToJson(val));
|
|
191
|
+
} else
|
|
192
|
+
"delete" ===
|
|
193
|
+
(null === (_b = update.updates[key]) || void 0 === _b
|
|
194
|
+
? void 0
|
|
195
|
+
: _b.type) && delete newState[key];
|
|
196
|
+
return newState;
|
|
197
|
+
}
|
|
198
|
+
case "LiveList": {
|
|
199
|
+
if (!Array.isArray(state))
|
|
200
|
+
throw new Error(
|
|
201
|
+
"Internal: received update on LiveList but state was not an array"
|
|
202
|
+
);
|
|
203
|
+
let newState = state.map((x) => x);
|
|
204
|
+
for (const listUpdate of update.updates)
|
|
205
|
+
"set" === listUpdate.type
|
|
206
|
+
? (newState = newState.map((item, index) =>
|
|
207
|
+
index === listUpdate.index ? lsonToJson(listUpdate.item) : item
|
|
208
|
+
))
|
|
209
|
+
: "insert" === listUpdate.type
|
|
210
|
+
? listUpdate.index === newState.length
|
|
211
|
+
? newState.push(lsonToJson(listUpdate.item))
|
|
212
|
+
: (newState = [
|
|
213
|
+
...newState.slice(0, listUpdate.index),
|
|
214
|
+
lsonToJson(listUpdate.item),
|
|
215
|
+
...newState.slice(listUpdate.index),
|
|
216
|
+
])
|
|
217
|
+
: "delete" === listUpdate.type
|
|
218
|
+
? newState.splice(listUpdate.index, 1)
|
|
219
|
+
: "move" === listUpdate.type &&
|
|
220
|
+
(newState =
|
|
221
|
+
listUpdate.previousIndex > listUpdate.index
|
|
222
|
+
? [
|
|
223
|
+
...newState.slice(0, listUpdate.index),
|
|
224
|
+
lsonToJson(listUpdate.item),
|
|
225
|
+
...newState.slice(
|
|
226
|
+
listUpdate.index,
|
|
227
|
+
listUpdate.previousIndex
|
|
228
|
+
),
|
|
229
|
+
...newState.slice(listUpdate.previousIndex + 1),
|
|
230
|
+
]
|
|
231
|
+
: [
|
|
232
|
+
...newState.slice(0, listUpdate.previousIndex),
|
|
233
|
+
...newState.slice(
|
|
234
|
+
listUpdate.previousIndex + 1,
|
|
235
|
+
listUpdate.index + 1
|
|
236
|
+
),
|
|
237
|
+
lsonToJson(listUpdate.item),
|
|
238
|
+
...newState.slice(listUpdate.index + 1),
|
|
239
|
+
]);
|
|
240
|
+
return newState;
|
|
241
|
+
}
|
|
242
|
+
case "LiveMap": {
|
|
243
|
+
if (null === state || "object" != typeof state || Array.isArray(state))
|
|
244
|
+
throw new Error(
|
|
245
|
+
"Internal: received update on LiveMap but state was not an object"
|
|
246
|
+
);
|
|
247
|
+
const newState = Object.assign({}, state);
|
|
248
|
+
for (const key in update.updates)
|
|
249
|
+
if (
|
|
250
|
+
"update" ===
|
|
251
|
+
(null === (_c = update.updates[key]) || void 0 === _c
|
|
252
|
+
? void 0
|
|
253
|
+
: _c.type)
|
|
254
|
+
) {
|
|
255
|
+
const value = update.node.get(key);
|
|
256
|
+
void 0 !== value && (newState[key] = lsonToJson(value));
|
|
257
|
+
} else
|
|
258
|
+
"delete" ===
|
|
259
|
+
(null === (_d = update.updates[key]) || void 0 === _d
|
|
260
|
+
? void 0
|
|
261
|
+
: _d.type) && delete newState[key];
|
|
262
|
+
return newState;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (Array.isArray(state)) {
|
|
266
|
+
const newArray = [...state];
|
|
267
|
+
return (
|
|
268
|
+
(newArray[pathItem] = patchImmutableNode(state[pathItem], path, update)),
|
|
269
|
+
newArray
|
|
270
|
+
);
|
|
161
271
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
272
|
+
if (null !== state && "object" == typeof state) {
|
|
273
|
+
const node = state[pathItem];
|
|
274
|
+
return void 0 === node
|
|
275
|
+
? state
|
|
276
|
+
: Object.assign(Object.assign({}, state), {
|
|
277
|
+
[pathItem]: patchImmutableNode(node, path, update),
|
|
278
|
+
});
|
|
169
279
|
}
|
|
170
|
-
|
|
171
|
-
case "LiveMap":
|
|
172
|
-
{
|
|
173
|
-
if ("object" != typeof state) throw new Error("Internal: received update on LiveMap but state was not an object");
|
|
174
|
-
const newState = Object.assign({}, state);
|
|
175
|
-
for (const key in update.updates) "update" === (null === (_c = update.updates[key]) || void 0 === _c ? void 0 : _c.type) ? newState[key] = lsonToJson(update.node.get(key)) : "delete" === (null === (_d = update.updates[key]) || void 0 === _d ? void 0 : _d.type) && delete newState[key];
|
|
176
|
-
return newState;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
if (Array.isArray(state)) {
|
|
180
|
-
const newArray = [ ...state ];
|
|
181
|
-
return newArray[pathItem] = patchImmutableNode(state[pathItem], path, update), newArray;
|
|
182
|
-
}
|
|
183
|
-
return Object.assign(Object.assign({}, state), {
|
|
184
|
-
[pathItem]: patchImmutableNode(state[pathItem], path, update)
|
|
185
|
-
});
|
|
280
|
+
return state;
|
|
186
281
|
}
|
|
187
|
-
|
|
188
|
-
export { isAppOnlyAuthToken, isAuthToken, isRoomAuthToken, isScope, lsonToJson, parseAuthToken, patchImmutableObject, patchLiveObjectKey };
|
|
282
|
+
export { lsonToJson, patchImmutableObject, patchLiveObjectKey };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liveblocks/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0-beta2",
|
|
4
4
|
"description": "A client that lets you interact with Liveblocks servers.",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"module": "./index.mjs",
|
|
@@ -33,8 +33,9 @@
|
|
|
33
33
|
"build": "rollup -c && cp ./package.json ./README.md ./lib",
|
|
34
34
|
"format": "eslint --fix src/ test/ && prettier --write src/ test/",
|
|
35
35
|
"lint": "eslint src/ test/",
|
|
36
|
-
"test": "jest --watch",
|
|
37
|
-
"test-ci": "jest"
|
|
36
|
+
"test": "jest --watch --silent --verbose --config=./jest.config.js",
|
|
37
|
+
"test-ci": "jest --silent --verbose",
|
|
38
|
+
"test-e2e": "jest --silent --verbose --config=./jest.config.e2e.js"
|
|
38
39
|
},
|
|
39
40
|
"license": "Apache-2.0",
|
|
40
41
|
"devDependencies": {
|
|
@@ -45,23 +46,27 @@
|
|
|
45
46
|
"@rollup/plugin-node-resolve": "^13.1.3",
|
|
46
47
|
"@rollup/plugin-replace": "^4.0.0",
|
|
47
48
|
"@rollup/plugin-typescript": "^8.3.1",
|
|
48
|
-
"@types/jest": "^26.0.
|
|
49
|
+
"@types/jest": "^26.0.24",
|
|
49
50
|
"@types/node-fetch": "^2.6.1",
|
|
50
|
-
"@types/ws": "^8.
|
|
51
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
52
|
-
"@typescript-eslint/parser": "^5.
|
|
51
|
+
"@types/ws": "^8.5.3",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^5.26.0",
|
|
53
|
+
"@typescript-eslint/parser": "^5.26.0",
|
|
54
|
+
"dotenv": "^16.0.0",
|
|
53
55
|
"eslint": "^8.12.0",
|
|
54
56
|
"eslint-plugin-import": "^2.26.0",
|
|
55
57
|
"eslint-plugin-simple-import-sort": "^7.0.0",
|
|
56
|
-
"jest": "^
|
|
58
|
+
"jest": "^28.0.3",
|
|
57
59
|
"jest-each": "^27.5.1",
|
|
60
|
+
"jest-environment-jsdom": "^28.1.0",
|
|
58
61
|
"msw": "^0.39.1",
|
|
59
62
|
"node-fetch": "2.6.7",
|
|
63
|
+
"regenerator-runtime": "^0.13.9",
|
|
60
64
|
"rollup": "^2.68.0",
|
|
61
65
|
"rollup-plugin-command": "^1.1.3",
|
|
62
|
-
"rollup-plugin-dts": "^4.
|
|
66
|
+
"rollup-plugin-dts": "^4.2.2",
|
|
67
|
+
"rollup-plugin-prettier": "^2.2.2",
|
|
63
68
|
"rollup-plugin-terser": "^7.0.2",
|
|
64
|
-
"typescript": "^4.
|
|
69
|
+
"typescript": "^4.7.2",
|
|
65
70
|
"whatwg-fetch": "^3.6.2",
|
|
66
71
|
"ws": "^8.5.0"
|
|
67
72
|
},
|