UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

31 lines 1.16 kB
import { compare, s } from '../../../json-crdt-patch'; import { SliceHeaderShift } from './constants'; export const type = (sliceType) => Array.isArray(sliceType) ? s.arr(sliceType.map(step)) : s.con(sliceType); export const step = (sliceStep) => { if (Array.isArray(sliceStep)) { const tuple = [s.con(sliceStep[0])]; const length = sliceStep.length; if (length > 1) tuple.push(s.con(+(sliceStep[1] ?? 0))); if (length > 2) tuple.push(s.json(sliceStep[2] ?? {})); return s.vec(...tuple); } return s.con(sliceStep); }; export const slice = (range, stacking, sliceType, data) => { const { start, end } = range; const header = (stacking << SliceHeaderShift.Stacking) + ((start.anchor & 0b1) << SliceHeaderShift.X1Anchor) + ((end.anchor & 0b1) << SliceHeaderShift.X2Anchor); const elements = [ s.con(header), s.con(start.id), s.con(!compare(start.id, end.id) ? 0 : end.id), type(sliceType), ]; if (data !== void 0) elements.push(s.json(data)); return s.vec(...elements); }; //# sourceMappingURL=schema.js.map