Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
vivisector
Advanced tools
Author: Matthew T Zito
License: MIT
Vivisector.js is a light-weight Nodejs library that exposes custom event-driven datatypes. Vivisector's Observable types broadcast unique events correlated to specific types of mutations and accessors. As such, one can bind methods to variables and render them event-bound.
Vivisector is flexible, compact, and straightforward; it affords you fine-grained control by allowing you to decide when and what happens when a variable changes.
itemadded
, itemremoved
this
new
keyword, no configuration; Vivisector
types work out-of-the-boxImport Vivisector's caller alias Vx
:
const Vx = require("vivisector");
Create a new Observable - in this example, of type Array
- and register a handler to fire when any new elements are added:
const logAdditions = ({item, index}) => console.log(`Added ${item} at index ${index}.`);
const users = Vx("Array", ["Alice","Bob"]);
users.addEventListener("itemadded", logAdditions);
// every time an item is added to the array, fire `logAdditions`
users.push("Charlie");
// "Added Charlie at index 2."
Have a look at these usage guides for a full overview:
Because Arrays are Objects, you certainly can instantiate an ObservableObject
with Array data. However, you might find some of the Array-specific properties of the decoupled ObservableArray
useful in certain instances.
Full wiki coming soon...
Vivisector
TypesObservableArray
(extends Array
)an Array-like Object
Unique Methods and Props
findIndexAll
Returns an Array of all indices that contain a match to given argument.const users = Vx("Array", ["hello", "world", "world", "hello", "world"]);
console.log(users.findIndexAll("hello"));
// [0, 3]
Event Types
itemadded
A new item has been added to the Array. Callbacks will receive an events
Object consisting of
type
String "itemadded", denoting the event-type that was triggereditem
the new item, now added to the Array,index
the index at which the item was addedFires on: push
, unshift
, splice
itemset
An item in the Array has moved. Callbacks will receive an events
Object consisting of
type
String "itemset", denoting the event-type that was triggereditem
the item set in the Arrayindex
the index to which the item was allocatedFires on: unshift
, using index accessors to set Array items
Note: Shuffling the Array or using methods like unshift
will fire itemset
for each index change
itemremoved
An item has been removed from the Array. Callbacks will receive an events
Object consisting of
type
String "itemremoved", denoting the event-type that was triggereditem
the item removed from the Array,index
the index at which the item was removedFires on: pop
, shift
, splice
mutated
The Array value has been reassigned. Callbacks will receive an events
Object consisting of
type
String "mutated", denoting the event-type that was triggereditem
the new Array value,index
"all", String - all indices will have been affectedFires on: Using the value
accessor to mutate the Array value
ObservableString
(extends String
)a mutable, String-like Object
Unique Methods and Props
reassign
Mutates String value, chainable (returns this
).let str = Vx("String", "Hello, world");
str.reassign("Hello, moon").addEventListener(...
console.log(str);
// Hello, moon
length
Returns String value length; non-configurable.Event Types
mutated
The String value has been reassigned. Callbacks will receive an events
Object consisting of
type
String "mutated", denoting the event-type that was triggeredvalue
the previous String value,mutant
the reassigned String valueObservableObject
(extends Proxy)an extended Object Proxy
Event Types
itemget
An Object property value has been accessed. Callbacks will receive an events
Object consisting of
type
String "itemget", denoting the event-type that was triggeredprop
The name or Symbol of the property being accessedtarget
The target objectvalue
The specific value being accesseditemset
An Object property value has been set. Callbacks will receive an events
Object consisting of
type
String "itemset", denoting the event-type that was triggeredprop
The name or Symbol of the property being settarget
The target objectvalue
The new value that has been set on prop
itemdeleted
An Object property value has been deleted. Callbacks will receive an events
Object consisting of
type
String "itemdeleted", denoting the event-type that was triggeredprop
The name or Symbol of the property being deletedtarget
The stringified target objectvalue
A Boolean value indicating deletion successVivisector
Ubiquitous Methods and Propsvalue
A non-enumerable accessor for getting/setting the core value of a given Observable const users = Vx("Array", ["Alice", "Bob"]);
console.log(users.value);
// ["Alice", "Bob"]
users.value = ["Alexei", "Quinn"]
console.log(users.value);
// ["Alexei", "Quinn"]
identifier
A unique identifier assigned to all Observables. Namespace confined to the Nodejs runtime's global
, or 'module context'. Currently a paused feature.type
The type identifier of a given Observable, e.g. "Array", "Object", "String"addEventListener
Bind a callback to fire whenever a given event-type has been triggered.const logMsg = function(event) {
// every time an item is added to the array, fire this callback
console.log(`Added ${event.item} at index ${event.index}.`);
});
let users = Vx("Array", ["Alice","Bob"]).addEventListener("itemadded", logMsg);
users.push("Charlie");
// "Added Charlie at index 2."
removeEventListener
Remove an existing callback from the respective event-type to which it has been registered.const logMsg = function(event) {
// every time an item is added to the array, fire this callback
console.log(`Added ${event.item} at index ${event.index}.`);
});
let users = Vx("Array", ["Alice","Bob"]).addEventListener("itemadded", logMsg).removeEventListener("itemadded", logMsg);
users.push("Charlie");
// no log - handler was removed ^
How can we listen to changes in an Object or Array, or even a String?
This is the question I set out to answer when I started writing ObservableArrays
. I read about things like Rxjs or the Observer pattern but found in them paradigms far too complex for what I was trying to do: simply fire events when variables had changed (and contingent on what those changes were). And so I continued with the creation of Vivisector.js, a very light-weight (and dependency-free) library for creating 'Observable' datatypes.
For example, we can instantiate a new Observable of type Array
and we will have available to us an Array-like object which extends native Array methods and properties, but is also equipped with the capacity to become event-bound. That is, Vivisector gives you an Array onto which you can bind (and chain) events.
FAQs
subscribe to any object and commit or revert state mutations
The npm package vivisector receives a total of 0 weekly downloads. As such, vivisector popularity was classified as not popular.
We found that vivisector demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.