@grouparoo/core
Version:
The Grouparoo Core
31 lines (30 loc) • 1.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StateMachine = void 0;
const modelName_1 = require("./modelName");
var StateMachine;
(function (StateMachine) {
async function transition(instance, transitions) {
const klass = (0, modelName_1.modelName)(instance);
const newState = instance["state"];
const oldState = instance["_previousDataValues"]["state"]
? instance["_previousDataValues"]["state"]
: instance.constructor["defaultState"]
? instance.constructor["defaultState"]
: "draft";
if (!newState || newState === oldState)
return;
const transition = findTransition(oldState, newState, transitions);
if (!transition) {
throw new Error(`cannot transition ${klass} state from ${oldState} to ${newState}`);
}
for (const i in transition.checks) {
const check = transition.checks[i];
await check(instance);
}
}
StateMachine.transition = transition;
function findTransition(from, to, transitions) {
return transitions.find((t) => t.from === from && t.to === to);
}
})(StateMachine = exports.StateMachine || (exports.StateMachine = {}));