diff --git a/types/fast-json-patch/fast-json-patch-tests.ts b/types/fast-json-patch/fast-json-patch-tests.ts index 15ac0d57f1..10f8c376cb 100644 --- a/types/fast-json-patch/fast-json-patch-tests.ts +++ b/types/fast-json-patch/fast-json-patch-tests.ts @@ -1,41 +1,39 @@ -import * as jsonpatch from 'fast-json-patch' +import * as jsonpatch from 'fast-json-patch'; -var myobj:{ - firstName:string, - contactDetails: { - phoneNumbers:string[] - } -} = { firstName:"Albert", contactDetails: { phoneNumbers: [ ] } }; -var patches = [ - {op:"replace", path:"/firstName", value:"Joachim" }, - {op:"add", path:"/lastName", value:"Wester" }, - {op:"add", path:"/contactDetails/phoneNumbers/0", value:{ number:"555-123" } } - ]; -jsonpatch.apply( myobj, patches ); +var myobj: { + firstName: string, + contactDetails: { + phoneNumbers: string[] + } +} = { firstName: "Albert", contactDetails: { phoneNumbers: [] } }; +var patches: jsonpatch.Patch[] = [ + { op: "replace", path: "/firstName", value: "Joachim" }, + { op: "add", path: "/lastName", value: "Wester" }, + { op: "add", path: "/contactDetails/phoneNumbers/0", value: { number: "555-123" } } +]; +jsonpatch.apply(myobj, patches); -var myobj2 = { firstName:"Joachim", lastName:"Wester", contactDetails: { phoneNumbers: [ { number:"555-123" }] } }; -var observer = jsonpatch.observe( myobj2 ); +var myobj2 = { firstName: "Joachim", lastName: "Wester", contactDetails: { phoneNumbers: [{ number: "555-123" }] } }; +var observer = jsonpatch.observe(myobj2); myobj2.firstName = "Albert"; myobj2.contactDetails.phoneNumbers[0].number = "123"; -myobj2.contactDetails.phoneNumbers.push({number:"456"}); +myobj2.contactDetails.phoneNumbers.push({ number: "456" }); var patches2 = jsonpatch.generate(observer); -var objA = {user: {firstName: "Albert", lastName: "Einstein"}}; -var objB = {user: {firstName: "Albert", lastName: "Collins"}}; +var objA = { user: { firstName: "Albert", lastName: "Einstein" } }; +var objB = { user: { firstName: "Albert", lastName: "Collins" } }; var diff = jsonpatch.compare(objA, objB); -var obj = {user: {firstName: "Albert"}}; -var patches3 = [{op: "replace", path: "/user/firstName", value: "Albert"}, {op: "replace", path: "/user/lastName", value: "Einstein"}]; +var obj = { user: { firstName: "Albert" } }; +var patches3 = [{ op: "replace", path: "/user/firstName", value: "Albert" }, { op: "replace", path: "/user/lastName", value: "Einstein" }]; var errors = jsonpatch.validate(patches, obj); -if (errors.length == 0) { - //there are no errors! -} -else { - for (var i=0; i < errors.length; i++) { +if (errors.length === 0) { + //there are no errors! +} else { + for (var i = 0; i < errors.length; i++) { if (!errors[i]) { console.log("Valid patch at index", i, patches[i]); - } - else { + } else { console.error("Invalid patch at index", i, errors[i], patches[i]); } } diff --git a/types/fast-json-patch/index.d.ts b/types/fast-json-patch/index.d.ts index 9a4496b00c..02c8c0e25e 100644 --- a/types/fast-json-patch/index.d.ts +++ b/types/fast-json-patch/index.d.ts @@ -1,67 +1,104 @@ -// Type definitions for JSON-Patch v1.0.0 +// Type definitions for JSON-Patch v1.1.8 // Project: https://github.com/Starcounter-Jack/JSON-Patch/releases // Definitions by: Francis OBrien // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare namespace fastjsonpatch { - - interface JsonPatch { - /** - * Applies an array of patch instructions to an object - */ - apply(object:any, patches:Patch[], validate?:boolean):boolean - - /** - * Observes changes made to an object, which can then be retieved using generate - */ - observe(object:T, callback?:()=>void):Observer - - /** - * Detach an observer from an object - */ - unobserve(object:T, observer:Observer):void + type Patch = AddPatch | RemovePatch | ReplacePatch | MovePatch | CopyPatch | TestPatch; - /** - * Generate an array of patches from an observer - */ - generate(observer:Observer):Patch[] - - /** - * Create an array of patches from the differences in two objects - */ - compare(object1:any, object2:any):Patch[] - - /** - * Ensure a set of patch instructions is valid - */ - validate(patches:Patch[], tree?:any):JsonPatchError[] + interface PatchBase { + path: string; } - + + interface AddPatch extends PatchBase { + op: 'add'; + value: any; + } + + interface RemovePatch extends PatchBase { + op: 'remove'; + } + + interface ReplacePatch extends PatchBase { + op: 'replace'; + value: any; + } + + interface MovePatch extends PatchBase { + op: 'move'; + from: string; + } + + interface CopyPatch extends PatchBase { + op: 'copy'; + from: string; + } + + interface TestPatch extends PatchBase { + op: 'test'; + value: any; + } + interface Observer { - object:T - patches:Patch[] - unobserve():void + object: T + patches: Patch[] + unobserve(): void } - interface Patch { - op:string - path:string - value?:any - from?:string - } + type JsonPatchErrorName = 'SEQUENCE_NOT_AN_ARRAY' | + 'OPERATION_NOT_AN_OBJECT' | + 'OPERATION_OP_INVALID' | + 'OPERATION_PATH_INVALID' | + 'OPERATION_FROM_REQUIRED' | + 'OPERATION_VALUE_REQUIRED' | + 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED' | + 'OPERATION_PATH_CANNOT_ADD' | + 'OPERATION_PATH_UNRESOLVABLE' | + 'OPERATION_FROM_UNRESOLVABLE' | + 'OPERATION_PATH_ILLEGAL_ARRAY_INDEX' | + 'OPERATION_VALUE_OUT_OF_BOUNDS'; interface JsonPatchError { - name:string - message:string - index:number - operation:any - tree:any + name: JsonPatchErrorName + message: string + index: number + operation: any + tree: any } + + /** + * Applies an array of patch instructions to an object + */ + function apply(object: any, patches: Patch[], validate?: boolean): any[] + + /** + * Observes changes made to an object, which can then be retieved using generate + */ + function observe(object: T, callback?: () => void): Observer + + /** + * Detach an observer from an object + */ + function unobserve(object: T, observer: Observer): void + + /** + * Generate an array of patches from an observer + */ + function generate(observer: Observer): Patch[] + + /** + * Create an array of patches from the differences in two objects + */ + function compare(object1: any, object2: any): Patch[] + + /** + * Ensure a set of patch instructions is valid + */ + function validate(patches: Patch[], tree?: any): JsonPatchError[] + } -declare var jsonpatch: fastjsonpatch.JsonPatch; - declare module "fast-json-patch" { - export = jsonpatch + export = fastjsonpatch } \ No newline at end of file