@dot-event/version
Version:
dot-event package version operation
57 lines (47 loc) • 1.34 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.phase = phase;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
function phase(events, desc) {
const id = camel(desc);
if (!events.get(`phase.${id}`)) {
events.set(`phase.${id}`, () => ({
count: 0,
title: desc
}));
}
return waitForAll.bind(desc);
}
function waitForAll(_x) {
return _waitForAll.apply(this, arguments);
}
function _waitForAll() {
_waitForAll = (0, _asyncToGenerator2.default)(function* ({
events
}) {
const id = camel(this);
const {
taskCount
} = events.get("task");
yield events.set(`phase.${id}`, ({
get
}) => ({
count: (get(`phase.${id}.count`) || 0) + 1,
title: this
}));
const ok = events.get(`phase.${id}.count`) === taskCount;
if (ok) {
yield events.emit(`${id}.ready`);
} else {
yield events.onceEmitted(`emit.${id}.ready`);
}
});
return _waitForAll.apply(this, arguments);
}
function camel(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, "");
}
//# sourceMappingURL=phase.js.map