resettable v0.1.19
resettable-object
Reset object to its original state using JSON Patch with less strict rules. Maybe used to undo auto generated configuration data.
Description
Provide functions to get diff of two objects and use that diff to reset object into its original state. Uses less strict rules than JSON Patch. Maybe used to undo auto generated configuration data.
Synopsis
Modify package.json
file
import { mayChange, diff, reset, clone } from "resettable";
import fs from "fs";
import isEqual from "lodash.isEqual";
const originalPkg = JSON.parse(fs.readFileSync(`${__dirname}/../package.json`, "utf8")); // Read package.json
const pkg: any = clone(originalPkg); // Clone it for changes.
pkg.scripts.myScript = "echo 1"; // Add some script.
// Look if scripts.test can be changed safely. (Not same with "test in scripts", See API.)
if (mayChange(pkg, originalPkg, "scripts.test")) {
pkg.scripts.test = "test-different";
}
const patch = diff(pkg, originalPkg);
fs.writeFileSync(`${__dirname}/../package.json`, JSON.stringify(pkg, undefined, 2)); // Write package.json
fs.writeFileSync(`${__dirname}/../patch.json`, JSON.stringify(patch, undefined, 2)); // Write patch.json
Reset package.json
to its original state
const pkgFromDisk = JSON.parse(fs.readFileSync(`${__dirname}/../package.json`, "utf8")); // Read package.json
const patchFromDisk = JSON.parse(fs.readFileSync(`${__dirname}/../patch.json`, "utf8")); // Read package.json
reset(pkgFromDisk, patchFromDisk);
fs.writeFileSync(`${__dirname}/../package.json`, JSON.stringify(pkgFromDisk, undefined, 2)); // Write package.json
fs.writeFileSync(`${__dirname}/../patch.json`, JSON.stringify({}, undefined, 2)); // Clear patch.json
API
Functions
Typedefs
reset(data, history, options) ⇒ Array.<Operation> | undefined
Kind: global function
Returns: Array.<Operation> | undefined -
Param | Type | Default | Description |
---|---|---|---|
data | Object | Data to be reset. | |
history | Array.<Operation> | [] | Array of operations to execute. |
options | OperationOptions | Options | |
options.force | boolean | false | Forces operation even it is not safe. |
options.exact | boolean | false | Modifies find algorithm for arrays. If true, function searches given value in given exact position. Otherwise searches all array. |
options.checkDuplicate | boolean | true | Checks duplicate values in array. If true, when duplicate value is present, add/replace operation is skipped. |
options.addNotFound | boolean | true | If true, during replace, adds given value even replaced key is not present in array or object. |
options.clean | boolean | true | If true, removes empty objects, empty arrays, empty strings, null and undefined values from objects and arrays. |
diff(currentObject, originalObject) ⇒ Array.<Operation>
Kind: global function
Returns: Array.<Operation> -
Param | Type | Default | Description |
---|---|---|---|
currentObject | object | {} | Object to be used in reset function. |
originalObject | object | {} | Original object to get after reset operation. |
mayChange(currentObject, originalObject, path) ⇒ boolean
Kind: global function
Returns: boolean -
Param | Type | Description |
---|---|---|
currentObject | object | Current object. |
originalObject | object | Original object. |
path | Array.<(string|number)> | string | number | Path to get result for. |
Path : string | number | Array.<(number|string)>
Kind: global typedef
Example
const path = "member.name"; // { member: { name: ... } }
const other = ["member", "first.name"]; // { member: { "first.name": ... } }
Operation : Object
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
op | string | Operation to execte: test, remove, add , replace. (test checks the existence of value at given path). |
path | string | Path to make changes at. |
value | * | Value to be used in operation. |
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago