Non-destructive data modification via (JSON) Patch events.
Register
Use register
to have a host element re-emit regular input
events as patch
events.
import { register } from "@npolar/patch-event/src/host.js";
const host = document.querySelector("form");
const handler = event => console.log(event.detail);
register(host, handler);
<form>
<input path="/foo" />
<input path="/bar" />
</form>
The code above will log a JSON Patch operation for every native input
event, example payload:
{ "op": "replace", "path": "/foo", "value": "bar" }
eventTypes
Specify which events that should be re-sent as patch
events using eventTypes
:
register(host, handler, { eventTypes: ["change"] });
- Modern: Codebase is ECMAScript2019
- Functional: employs a set of pure functions
- Safe: Patches are performed on a deep copy of the original
- Tiny (2Kb gzipped)
Created with the following usage scenarios in mind:
- Form editing with modification history and undo/redo functionality (demo)
- Parameter transformation, ie. convert user input into the shape needed by your application's internals
yarn add https://github.com/npolar/patch-event#v0.0.1
A ES2019 compliant browser; eg. Firefox >= 63, Chrome >= 73, Edge >= 7x
This library builds a non-destructive patch function over chbrown's JSON Pointer and JSON Patch implementation (rfc6902), using Dr. Alex's deepCopy.