json-joy
Version:
Collection of libraries for building collaborative editing apps.
31 lines • 1.16 kB
JavaScript
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