0.1.19 • Published 6 years ago

resettable v0.1.19

Weekly downloads
12
License
MIT
Repository
github
Last release
6 years ago

resettable-object

Reset object to its original state using JSON Patch with less strict rules. Maybe used to undo auto generated configuration data.

Commitizen friendly

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 -

ParamTypeDefaultDescription
dataObjectData to be reset.
historyArray.<Operation>[]Array of operations to execute.
optionsOperationOptionsOptions
options.forcebooleanfalseForces operation even it is not safe.
options.exactbooleanfalseModifies find algorithm for arrays. If true, function searches given value in given exact position. Otherwise searches all array.
options.checkDuplicatebooleantrueChecks duplicate values in array. If true, when duplicate value is present, add/replace operation is skipped.
options.addNotFoundbooleantrueIf true, during replace, adds given value even replaced key is not present in array or object.
options.cleanbooleantrueIf 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> -

ParamTypeDefaultDescription
currentObjectobject{}Object to be used in reset function.
originalObjectobject{}Original object to get after reset operation.

mayChange(currentObject, originalObject, path) ⇒ boolean

Kind: global function
Returns: boolean -

ParamTypeDescription
currentObjectobjectCurrent object.
originalObjectobjectOriginal object.
pathArray.<(string|number)> | string | numberPath 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

NameTypeDescription
opstringOperation to execte: test, remove, add , replace. (test checks the existence of value at given path).
pathstringPath to make changes at.
value*Value to be used in operation.
0.1.19

6 years ago

0.1.18

6 years ago

0.1.17

6 years ago

0.1.16

6 years ago

0.1.15

6 years ago

0.1.14

6 years ago

0.1.13

6 years ago

0.1.12

6 years ago

0.1.11

6 years ago

0.1.10

6 years ago

0.1.9

6 years ago

0.1.8

6 years ago

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago