| '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;
 |