'use strict'; function ready(flagOrFunction) { this._ready = !!this._ready; this._readyCallbacks = this._readyCallbacks || []; if (arguments.length === 0) { // return a promise // support `this.ready().then(onready);` and `yield this.ready()`; return new Promise(function (resolve) { if (this._ready) { return resolve(); } this._readyCallbacks.push(resolve); }.bind(this)); } else if (typeof flagOrFunction === 'function') { this._readyCallbacks.push(flagOrFunction); } else { this._ready = !!flagOrFunction; } if (this._ready) { this._readyCallbacks.splice(0, Infinity).forEach(function(callback) { process.nextTick(callback); }); } } function mixin(object) { object.ready = ready; } module.exports = mixin; module.exports.mixin = mixin;