'use strict'; const uuid = require('uuid').v4; const log = require('../log')('seq'); /** Object sequence features */ const sequence = {}; sequence._state = { arr: [], active: false, paused: false, frame: false, delay: false, count: 0, stop: null }; sequence._loop = { arr: [], count: 0, max: 0 }; sequence.start = function (options, cb) { if (sequence._state.active) { return false; } sequence._state.active = true; sequence._state.count = 0; if (options.arr) { sequence._state.arr = options.arr; } if (options.loop) { sequence._loop.arr = options.loop; sequence._loop.count = 0; } if (options.maxLoop) { sequence._loop.max = options.maxLoop; } else { sequence._loop.max = 0; } sequence._state.stop = cb; sequence.step(); sequence._state.id = uuid(); return sequence._state.id; }; sequence.setStop = function () { sequence._state.active = false; }; sequence.stop = function () { sequence._state.active = false; sequence._state.count = 0; sequence._state.arr = []; sequence._loop.count = 0; sequence._loop.max = 0; sequence._loop.arr = []; if (sequence._state.stop) sequence._state.stop(); sequence._state.stop = null; }; sequence.pause = function () { sequence._state.paused = true; }; sequence.resume = function () { sequence._state.paused = false; sequence.step(); }; sequence.step = function () { if (sequence._state.active && !sequence._state.paused) { if (sequence._state.arr.length > 0) { if (sequence._state.count > sequence._state.arr.length - 1) { return sequence.stop(); } log.info('step', { count: sequence._state.count, id: sequence._state.id }); return sequence._state.arr[sequence._state.count](() => { sequence._state.count++; sequence.step(); }); } else if (sequence._loop.arr.length > 0) { if (sequence._state.count > sequence._loop.arr.length - 1) { sequence._state.count = 0; sequence._loop.count++; } if (sequence._loop.max > 0 && sequence._loop.count > sequence._loop.max) { return sequence.stop(); } log.info('step', { count: sequence._state.count, id: sequence._state.id }); return sequence._loop.arr[sequence._state.count](() => { sequence._state.count++; sequence.step(); }); } else { return sequence.stop(); } } else if (sequence._state.paused) { log.info('step', 'Sequence paused', { loop: sequence._loop.count, count: sequence._state.count }); } else if (!sequence._state.active) { log.info('step', 'Sequence stopped', { loop: sequence._loop.count, count: sequence._state.count }); } }; module.exports = sequence; //# sourceMappingURL=index.js.map