@liveblocks/server 1.6.1 → 1.7.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/dist/index.cjs +80 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -3
- package/dist/index.d.ts +30 -3
- package/dist/index.js +88 -12
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -165,7 +165,15 @@ var jsonObjectYolo = jsonYolo.refine(
|
|
|
165
165
|
|
|
166
166
|
|
|
167
167
|
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
168
171
|
var intent = _decoders.oneOf.call(void 0, ["set", "push"]);
|
|
172
|
+
var storageFileId = _decoders.sized.call(void 0, _decoders.startsWith.call(void 0, "fl_"), { size: 24 });
|
|
173
|
+
var fileSize = _decoders.number.refine(
|
|
174
|
+
(value) => Number.isSafeInteger(value) && value >= 0,
|
|
175
|
+
"Must be a valid file size"
|
|
176
|
+
);
|
|
169
177
|
var updateObjectOp = _decoders.object.call(void 0, {
|
|
170
178
|
type: _decoders.constant.call(void 0, _core.OpCode.UPDATE_OBJECT),
|
|
171
179
|
opId: _decoders.string,
|
|
@@ -210,6 +218,21 @@ var createRegisterOp = _decoders.object.call(void 0, {
|
|
|
210
218
|
intent: _decoders.optional.call(void 0, intent),
|
|
211
219
|
deletedId: _decoders.optional.call(void 0, _decoders.string)
|
|
212
220
|
});
|
|
221
|
+
var createFileOp = _decoders.object.call(void 0, {
|
|
222
|
+
type: _decoders.constant.call(void 0, _core.OpCode.CREATE_FILE),
|
|
223
|
+
opId: _decoders.string,
|
|
224
|
+
id: _decoders.string,
|
|
225
|
+
parentId: _decoders.string,
|
|
226
|
+
parentKey: _decoders.string,
|
|
227
|
+
data: _decoders.object.call(void 0, {
|
|
228
|
+
id: storageFileId,
|
|
229
|
+
name: _decoders.string,
|
|
230
|
+
size: fileSize,
|
|
231
|
+
mimeType: _decoders.string
|
|
232
|
+
}),
|
|
233
|
+
intent: _decoders.optional.call(void 0, intent),
|
|
234
|
+
deletedId: _decoders.optional.call(void 0, _decoders.string)
|
|
235
|
+
});
|
|
213
236
|
var deleteCrdtOp = _decoders.object.call(void 0, {
|
|
214
237
|
type: _decoders.constant.call(void 0, _core.OpCode.DELETE_CRDT),
|
|
215
238
|
opId: _decoders.string,
|
|
@@ -233,6 +256,7 @@ var op = _decoders.taggedUnion.call(void 0, "type", {
|
|
|
233
256
|
[_core.OpCode.CREATE_LIST]: createListOp,
|
|
234
257
|
[_core.OpCode.CREATE_MAP]: createMapOp,
|
|
235
258
|
[_core.OpCode.CREATE_REGISTER]: createRegisterOp,
|
|
259
|
+
[_core.OpCode.CREATE_FILE]: createFileOp,
|
|
236
260
|
[_core.OpCode.DELETE_CRDT]: deleteCrdtOp,
|
|
237
261
|
[_core.OpCode.SET_PARENT_KEY]: setParentKeyOp,
|
|
238
262
|
[_core.OpCode.DELETE_OBJECT_KEY]: deleteObjectKeyOp
|
|
@@ -372,6 +396,8 @@ function buildNode(snapshot2, id) {
|
|
|
372
396
|
return buildList(snapshot2, id);
|
|
373
397
|
} else if (node.type === _core.CrdtType.MAP) {
|
|
374
398
|
return buildMap(snapshot2, id);
|
|
399
|
+
} else if (node.type === _core.CrdtType.FILE) {
|
|
400
|
+
return node.data;
|
|
375
401
|
} else {
|
|
376
402
|
return node.data;
|
|
377
403
|
}
|
|
@@ -415,6 +441,8 @@ function* emit(snapshot2, id) {
|
|
|
415
441
|
yield* emitMap(snapshot2, id);
|
|
416
442
|
} else if (node.type === _core.CrdtType.REGISTER) {
|
|
417
443
|
yield JSON.stringify(node.data);
|
|
444
|
+
} else if (node.type === _core.CrdtType.FILE) {
|
|
445
|
+
yield JSON.stringify(node.data);
|
|
418
446
|
}
|
|
419
447
|
}
|
|
420
448
|
function* emitObject(snapshot2, id, staticJson) {
|
|
@@ -486,6 +514,17 @@ function* iterJson(key, data, parent, state) {
|
|
|
486
514
|
case "LiveMap":
|
|
487
515
|
yield* iterMap(key, data.data, parent, state);
|
|
488
516
|
return;
|
|
517
|
+
case "LiveFile":
|
|
518
|
+
yield [
|
|
519
|
+
generateId(state),
|
|
520
|
+
{
|
|
521
|
+
type: _core.CrdtType.FILE,
|
|
522
|
+
data: data.data,
|
|
523
|
+
parentId: parent[0],
|
|
524
|
+
parentKey: key
|
|
525
|
+
}
|
|
526
|
+
];
|
|
527
|
+
return;
|
|
489
528
|
// istanbul ignore next
|
|
490
529
|
default:
|
|
491
530
|
_core.assertNever.call(void 0, data, "Unknown `liveblocksType` field");
|
|
@@ -570,6 +609,8 @@ function buildNode2(snapshot2, id) {
|
|
|
570
609
|
return buildList2(snapshot2, id);
|
|
571
610
|
} else if (node.type === _core.CrdtType.MAP) {
|
|
572
611
|
return buildMap2(snapshot2, id);
|
|
612
|
+
} else if (node.type === _core.CrdtType.FILE) {
|
|
613
|
+
return { liveblocksType: "LiveFile", data: node.data };
|
|
573
614
|
} else {
|
|
574
615
|
return _nullishCoalesce(node.data, () => ( null));
|
|
575
616
|
}
|
|
@@ -616,6 +657,10 @@ function* emit2(snapshot2, id) {
|
|
|
616
657
|
yield* emitMap2(snapshot2, id);
|
|
617
658
|
} else if (node.type === _core.CrdtType.REGISTER) {
|
|
618
659
|
yield JSON.stringify(_nullishCoalesce(node.data, () => ( null)));
|
|
660
|
+
} else if (node.type === _core.CrdtType.FILE) {
|
|
661
|
+
yield '{"liveblocksType":"LiveFile","data":';
|
|
662
|
+
yield JSON.stringify(node.data);
|
|
663
|
+
yield "}";
|
|
619
664
|
}
|
|
620
665
|
}
|
|
621
666
|
function* emitObject2(snapshot2, id, staticJson) {
|
|
@@ -1012,9 +1057,10 @@ function buildReverseLookup(nodes) {
|
|
|
1012
1057
|
delete node.data[key];
|
|
1013
1058
|
}
|
|
1014
1059
|
}
|
|
1015
|
-
|
|
1060
|
+
const isLeafNode = node.type === _core.CrdtType.REGISTER || node.type === _core.CrdtType.FILE;
|
|
1061
|
+
if (!isLeafNode) {
|
|
1016
1062
|
queue.push(...revNodes.valuesAt(nodeId));
|
|
1017
|
-
} else {
|
|
1063
|
+
} else if (node.type === _core.CrdtType.REGISTER) {
|
|
1018
1064
|
const parent = nodes.get(node.parentId);
|
|
1019
1065
|
if (_optionalChain([parent, 'optionalAccess', _34 => _34.type]) === _core.CrdtType.OBJECT) {
|
|
1020
1066
|
continue;
|
|
@@ -1377,6 +1423,9 @@ var InMemoryDriver = class {
|
|
|
1377
1423
|
if (node.type === _core.CrdtType.REGISTER && parentNode.type === _core.CrdtType.OBJECT) {
|
|
1378
1424
|
throw new Error("Cannot add register under object");
|
|
1379
1425
|
}
|
|
1426
|
+
if (parentNode.type === _core.CrdtType.FILE) {
|
|
1427
|
+
throw new Error("Cannot add child under file");
|
|
1428
|
+
}
|
|
1380
1429
|
const conflictingSiblingId = revNodes.get(node.parentId, node.parentKey);
|
|
1381
1430
|
if (conflictingSiblingId !== id) {
|
|
1382
1431
|
const parentNode2 = nodes.get(node.parentId);
|
|
@@ -1598,6 +1647,13 @@ function nodeFromCreateChildOp(op2) {
|
|
|
1598
1647
|
parentKey: op2.parentKey,
|
|
1599
1648
|
data: op2.data
|
|
1600
1649
|
};
|
|
1650
|
+
case _core.OpCode.CREATE_FILE:
|
|
1651
|
+
return {
|
|
1652
|
+
type: _core.CrdtType.FILE,
|
|
1653
|
+
parentId: op2.parentId,
|
|
1654
|
+
parentKey: op2.parentKey,
|
|
1655
|
+
data: op2.data
|
|
1656
|
+
};
|
|
1601
1657
|
// istanbul ignore next
|
|
1602
1658
|
default:
|
|
1603
1659
|
return _core.assertNever.call(void 0, op2, "Unknown op code");
|
|
@@ -1639,6 +1695,7 @@ var Storage = class {
|
|
|
1639
1695
|
case _core.OpCode.CREATE_MAP:
|
|
1640
1696
|
case _core.OpCode.CREATE_REGISTER:
|
|
1641
1697
|
case _core.OpCode.CREATE_OBJECT:
|
|
1698
|
+
case _core.OpCode.CREATE_FILE:
|
|
1642
1699
|
return this.applyCreateOp(op2);
|
|
1643
1700
|
case _core.OpCode.UPDATE_OBJECT:
|
|
1644
1701
|
return this.applyUpdateObjectOp(op2);
|
|
@@ -1684,6 +1741,7 @@ var Storage = class {
|
|
|
1684
1741
|
case _core.CrdtType.LIST:
|
|
1685
1742
|
return this.createChildAsListItem(op2, node);
|
|
1686
1743
|
case _core.CrdtType.REGISTER:
|
|
1744
|
+
case _core.CrdtType.FILE:
|
|
1687
1745
|
return ignore(op2);
|
|
1688
1746
|
// istanbul ignore next
|
|
1689
1747
|
default:
|
|
@@ -3154,7 +3212,7 @@ var Room = class {
|
|
|
3154
3212
|
});
|
|
3155
3213
|
}
|
|
3156
3214
|
if (opsToForward.length > 0) {
|
|
3157
|
-
const p$ = _optionalChain([this, 'access', _109 => _109.hooks, 'access', _110 => _110.postClientMsgStorageDidUpdate, 'optionalCall', _111 => _111(ctx)]);
|
|
3215
|
+
const p$ = _optionalChain([this, 'access', _109 => _109.hooks, 'access', _110 => _110.postClientMsgStorageDidUpdate, 'optionalCall', _111 => _111(ctx, session)]);
|
|
3158
3216
|
if (p$) defer(p$);
|
|
3159
3217
|
}
|
|
3160
3218
|
break;
|
|
@@ -3396,6 +3454,24 @@ var Room = class {
|
|
|
3396
3454
|
_logger = new WeakMap();
|
|
3397
3455
|
__debug2 = new WeakMap();
|
|
3398
3456
|
|
|
3457
|
+
// src/lib/semver.ts
|
|
3458
|
+
function cmpSemver(a, b) {
|
|
3459
|
+
const [coreA = "", preA] = a.split("-", 2);
|
|
3460
|
+
const [coreB = "", preB] = b.split("-", 2);
|
|
3461
|
+
const partsA = coreA.split(".").map(Number);
|
|
3462
|
+
const partsB = coreB.split(".").map(Number);
|
|
3463
|
+
for (let i = 0; i < 3; i++) {
|
|
3464
|
+
const pa = _nullishCoalesce(partsA[i], () => ( 0));
|
|
3465
|
+
const pb = _nullishCoalesce(partsB[i], () => ( 0));
|
|
3466
|
+
if (pa !== pb) return pa - pb;
|
|
3467
|
+
}
|
|
3468
|
+
if (!preA && preB) return 1;
|
|
3469
|
+
if (preA && !preB) return -1;
|
|
3470
|
+
if (preA && preB) return preA < preB ? -1 : preA > preB ? 1 : 0;
|
|
3471
|
+
return 0;
|
|
3472
|
+
}
|
|
3473
|
+
|
|
3474
|
+
|
|
3399
3475
|
|
|
3400
3476
|
|
|
3401
3477
|
|
|
@@ -3440,5 +3516,5 @@ __debug2 = new WeakMap();
|
|
|
3440
3516
|
|
|
3441
3517
|
|
|
3442
3518
|
|
|
3443
|
-
exports.BackendSession = BackendSession; exports.BrowserSession = BrowserSession; exports.ConsoleTarget = ConsoleTarget; exports.DefaultMap = DefaultMap; exports.FeedMsgCode = FeedMsgCode; exports.FeedRequestErrorCode = FeedRequestErrorCode; exports.InMemoryDriver = InMemoryDriver; exports.LogLevel = LogLevel; exports.LogTarget = LogTarget; exports.Logger = Logger; exports.NestedMap = NestedMap; exports.ProtocolVersion = ProtocolVersion; exports.ROOT_YDOC_ID = ROOT_YDOC_ID; exports.Room = Room; exports.UniqueMap = UniqueMap; exports.ackIgnoredOp = ackIgnoredOp; exports.clientMsgDecoder = clientMsgDecoder; exports.concatUint8Arrays = concatUint8Arrays; exports.feedFailureServerMsg = feedFailureServerMsg; exports.feedMetadataIdDecoder = feedMetadataIdDecoder; exports.feedMetadataUpdateDecoder = feedMetadataUpdateDecoder; exports.feedRequestFailed = feedRequestFailed; exports.fetchFeedsMetadataFilterDecoder = fetchFeedsMetadataFilterDecoder; exports.guidDecoder = guidDecoder; exports.isLeasedSessionExpired = isLeasedSessionExpired; exports.jsonObjectYolo = jsonObjectYolo; exports.jsonYolo = jsonYolo; exports.makeInMemorySnapshot = makeInMemorySnapshot; exports.makeMetadataDB = makeMetadataDB; exports.mapFeedError = mapFeedError; exports.optionalFeedMetadataDecoder = optionalFeedMetadataDecoder; exports.plainLsonToNodeStream = plainLsonToNodeStream; exports.protocolVersionDecoder = protocolVersionDecoder; exports.quote = quote; exports.serializeServerMsg = serialize; exports.snapshotToLossyJson_eager = snapshotToLossyJson_eager; exports.snapshotToLossyJson_lazy = snapshotToLossyJson_lazy; exports.snapshotToNodeStream = snapshotToNodeStream; exports.snapshotToPlainLson_eager = snapshotToPlainLson_eager; exports.snapshotToPlainLson_lazy = snapshotToPlainLson_lazy; exports.test_only__Storage = Storage; exports.test_only__YjsStorage = YjsStorage; exports.transientClientMsgDecoder = transientClientMsgDecoder; exports.tryCatch = tryCatch;
|
|
3519
|
+
exports.BackendSession = BackendSession; exports.BrowserSession = BrowserSession; exports.ConsoleTarget = ConsoleTarget; exports.DefaultMap = DefaultMap; exports.FeedMsgCode = FeedMsgCode; exports.FeedRequestErrorCode = FeedRequestErrorCode; exports.InMemoryDriver = InMemoryDriver; exports.LogLevel = LogLevel; exports.LogTarget = LogTarget; exports.Logger = Logger; exports.NestedMap = NestedMap; exports.ProtocolVersion = ProtocolVersion; exports.ROOT_YDOC_ID = ROOT_YDOC_ID; exports.Room = Room; exports.UniqueMap = UniqueMap; exports.ackIgnoredOp = ackIgnoredOp; exports.clientMsgDecoder = clientMsgDecoder; exports.cmpSemver = cmpSemver; exports.concatUint8Arrays = concatUint8Arrays; exports.feedFailureServerMsg = feedFailureServerMsg; exports.feedMetadataIdDecoder = feedMetadataIdDecoder; exports.feedMetadataUpdateDecoder = feedMetadataUpdateDecoder; exports.feedRequestFailed = feedRequestFailed; exports.fetchFeedsMetadataFilterDecoder = fetchFeedsMetadataFilterDecoder; exports.guidDecoder = guidDecoder; exports.isLeasedSessionExpired = isLeasedSessionExpired; exports.jsonObjectYolo = jsonObjectYolo; exports.jsonYolo = jsonYolo; exports.makeInMemorySnapshot = makeInMemorySnapshot; exports.makeMetadataDB = makeMetadataDB; exports.mapFeedError = mapFeedError; exports.optionalFeedMetadataDecoder = optionalFeedMetadataDecoder; exports.plainLsonToNodeStream = plainLsonToNodeStream; exports.protocolVersionDecoder = protocolVersionDecoder; exports.quote = quote; exports.serializeServerMsg = serialize; exports.snapshotToLossyJson_eager = snapshotToLossyJson_eager; exports.snapshotToLossyJson_lazy = snapshotToLossyJson_lazy; exports.snapshotToNodeStream = snapshotToNodeStream; exports.snapshotToPlainLson_eager = snapshotToPlainLson_eager; exports.snapshotToPlainLson_lazy = snapshotToPlainLson_lazy; exports.test_only__Storage = Storage; exports.test_only__YjsStorage = YjsStorage; exports.transientClientMsgDecoder = transientClientMsgDecoder; exports.tryCatch = tryCatch;
|
|
3444
3520
|
//# sourceMappingURL=index.cjs.map
|