state
Version:
First-class states
64 lines (50 loc) • 2.08 kB
JavaScript
// Generated by CoffeeScript 1.6.3
(function() {
var GUARD_ACTIONS, O, TRANSITION_EVENT_TYPES, TRANSITION_EXPRESSION_CATEGORIES, TRANSITION_PROPERTIES, TransitionExpression, state,
__hasProp = {}.hasOwnProperty;
state = require('./state-function');
O = state.O, TRANSITION_PROPERTIES = state.TRANSITION_PROPERTIES, TRANSITION_EXPRESSION_CATEGORIES = state.TRANSITION_EXPRESSION_CATEGORIES, TRANSITION_EVENT_TYPES = state.TRANSITION_EVENT_TYPES, GUARD_ACTIONS = state.GUARD_ACTIONS;
module.exports = TransitionExpression = (function() {
var assign, categories, clone, edit, eventTypes, guardActions, interpret, properties;
assign = O.assign, edit = O.edit, clone = O.clone;
properties = assign(TRANSITION_PROPERTIES, null);
categories = assign(TRANSITION_EXPRESSION_CATEGORIES, null);
eventTypes = assign(TRANSITION_EVENT_TYPES);
guardActions = assign(GUARD_ACTIONS);
function TransitionExpression(map) {
if (!(map instanceof TransitionExpression)) {
map = interpret(map);
}
edit('deep all', this, map);
}
interpret = function(map) {
var category, events, item, key, result, value, _ref;
result = assign({}, properties, categories);
for (key in map) {
if (!__hasProp.call(map, key)) continue;
value = map[key];
if (key in properties) {
result[key] = value;
} else if (key in categories) {
result[key] = clone(result[key], value);
} else {
category = key in eventTypes ? 'events' : key in guardActions ? 'guards' : typeof value === 'functions' ? 'methods' : void 0;
if (category) {
item = result[category];
item || (item = result[category] = {});
item[key] = value;
}
}
}
_ref = events = result.events;
for (key in _ref) {
value = _ref[key];
if (typeof value === 'function') {
events[key] = [value];
}
}
return result;
};
return TransitionExpression;
})();
}).call(this);