UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

39 lines (38 loc) 962 B
import { AbstractOp } from './AbstractOp'; import { find, formatJsonPointer } from '@jsonjoy.com/json-pointer'; import { OPCODE } from '../constants'; /** * @category JSON Patch Extended */ export class OpFlip extends AbstractOp { op() { return 'flip'; } code() { return OPCODE.flip; } apply(doc) { const ref = find(doc, this.path); if (ref.obj) ref.obj[ref.key] = !ref.val; else doc = !ref.val; return { doc, old: ref.val }; } toJson(parent) { const op = { op: 'flip', path: formatJsonPointer(this.path), }; return op; } toCompact(parent, verbose) { const opcode = verbose ? 'flip' : OPCODE.flip; return [opcode, this.path]; } encode(encoder, parent) { encoder.encodeArrayHeader(2); encoder.writer.u8(OPCODE.flip); encoder.encodeArray(this.path); } }