define-state
Version:
Define stateful property on an object
49 lines (43 loc) • 966 B
JavaScript
/**
* Define stateful property on an object
*/
module.exports = defineState;
var State = require('st8');
State.ENTER = 'before'
State.EXIT = 'after'
/**
* Define stateful property on a target
*
* @param {object} target Any object
* @param {string} property Property name
* @param {object} descriptor State descriptor
*
* @return {object} target
*/
function defineState (target, property, descriptor, isFn) {
//define accessor on a target
if (isFn) {
target[property] = function () {
if (arguments.length) {
return state.set(arguments[0]);
}
else {
return state.get();
}
};
}
//define setter/getter on a target
else {
Object.defineProperty(target, property, {
set: function (value) {
return state.set(value);
},
get: function () {
return state.get();
}
});
}
//define state controller
var state = new State(descriptor, target);
return target;
}