@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 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
- if (node.type !== _core.CrdtType.REGISTER) {
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