-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
48 lines (43 loc) · 918 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* 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;
}