UNPKG

json-p3

Version:

JSONPath, JSON Pointer and JSON Patch

162 lines (161 loc) 4.01 kB
import { JSONPointer } from "../pointer"; import { JSONValue } from "../types"; export type OpObject = { op: string; path: string; value?: JSONValue; from?: string; }; /** * A JSON Patch operation. */ export interface Op { /** * The patch operation name. */ name: string; /** * Apply the patch operation to _value_. * @param value - The target JSON value. */ apply: (value: JSONValue, index: number) => JSONValue; /** * A plain object representation of the patch operation. */ toObject: () => OpObject; } /** * The JSON Patch _add_ operation. */ export declare class OpAdd implements Op { readonly path: JSONPointer; readonly value: JSONValue; name: string; constructor(path: JSONPointer, value: JSONValue); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; } /** * The JSON Patch _remove_ operation. */ export declare class OpRemove implements Op { readonly path: JSONPointer; name: string; constructor(path: JSONPointer); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; } /** * The JSON Patch _replace_ operation. */ export declare class OpReplace implements Op { readonly path: JSONPointer; readonly value: JSONValue; name: string; constructor(path: JSONPointer, value: JSONValue); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; } /** * The JSON Patch _move_ operation. */ export declare class OpMove implements Op { readonly from: JSONPointer; readonly path: JSONPointer; name: string; constructor(from: JSONPointer, path: JSONPointer); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; } /** * The JSON Patch _copy_ operation. */ export declare class OpCopy implements Op { readonly from: JSONPointer; readonly path: JSONPointer; name: string; constructor(from: JSONPointer, path: JSONPointer); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; protected deepCopy(value: JSONValue): JSONValue; } /** * The JSON Patch _test_ operation. */ export declare class OpTest implements Op { readonly path: JSONPointer; readonly value: JSONValue; name: string; constructor(path: JSONPointer, value: JSONValue); apply(value: JSONValue, index: number): JSONValue; toObject(): OpObject; } /** * */ export declare class JSONPatch { private ops; /** * * @param ops - */ constructor(ops?: OpObject[]); /** * @returns an iterator over ops in this patch. */ [Symbol.iterator](): Iterator<OpObject>; /** * * @param path - * @param value - * @returns */ add(path: string | JSONPointer, value: JSONValue): this; /** * * @param path - */ remove(path: string | JSONPointer): this; /** * * @param path - * @param value - * @returns */ replace(path: string | JSONPointer, value: JSONValue): this; /** * * @param from - * @param path - * @returns */ move(from: string | JSONPointer, path: string | JSONPointer): this; /** * * @param from - * @param path - * @returns */ copy(from: string | JSONPointer, path: string | JSONPointer): this; /** * * @param path - * @param value - * @returns */ test(path: string | JSONPointer, value: JSONValue): this; /** * * @param value - */ apply(value: JSONValue): JSONValue; /** * * @returns */ toArray(): OpObject[]; protected build(ops: OpObject[]): void; protected opPointer(opObj: OpObject, key: keyof OpObject, op: string, index: number): JSONPointer; protected opValue(opObj: OpObject, key: keyof OpObject, op: string, index: number): JSONValue; protected ensurePointer(p: JSONPointer | string, op: string, index: number): JSONPointer; }