foop
Version:
interfaces that describe their intentions.
44 lines (39 loc) • 3.9 kB
JavaScript
/* eslint consistent-this: ["error", "Klass"] */
var ENV_DEBUG = require('../env/debug')
/**
* Static poolers. Several custom versions for each potential number of
* arguments. A completely generic pooler is easy to implement, but would
* require accessing the `arguments` object. In each of these, `this` refers to
* the Class itself, not an instance. If any others are needed, simply add them
* here, or in their own files.
*
* @since 5.0.0
* @memberOf pooler
*
* @param {Object} copyFieldsFrom obj with instance pool (arguments for constructor?)
* @return {Object} instance of Klass
*
* @example
*
* class Eh {}
* addPoolingTo(Eh)
* const eh = Eh.getPooled() //=> oneArgumentPooler(Eh)
* eh.release()
*
*/
module.exports = function oneArgumentPooler(copyFieldsFrom) {
var Klass = this
if (Klass.instancePool.length) {
var instance = Klass.instancePool.pop()
// require('fliplog').quick({Klass, instance, copyFieldsFrom})
// @TODO or a static construct!
// if (Klass.construct) Klass.construct.call(instance, copyFieldsFrom)
if (instance.construct) { instance.construct(copyFieldsFrom) }
else { Klass.call(instance, copyFieldsFrom) }
return instance
}
else {
return new Klass(copyFieldsFrom)
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lQXJndW1lbnRQb29sZXIuanMiLCJzb3VyY2VzIjpbIm9uZUFyZ3VtZW50UG9vbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBjb25zaXN0ZW50LXRoaXM6IFtcImVycm9yXCIsIFwiS2xhc3NcIl0gKi9cblxuY29uc3QgRU5WX0RFQlVHID0gcmVxdWlyZSgnLi4vZW52L2RlYnVnJylcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxuICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICpcbiAqIEBzaW5jZSA1LjAuMFxuICogQG1lbWJlck9mIHBvb2xlclxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gY29weUZpZWxkc0Zyb20gb2JqIHdpdGggaW5zdGFuY2UgcG9vbCAoYXJndW1lbnRzIGZvciBjb25zdHJ1Y3Rvcj8pXG4gKiBAcmV0dXJuIHtPYmplY3R9IGluc3RhbmNlIG9mIEtsYXNzXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBjbGFzcyBFaCB7fVxuICogICAgYWRkUG9vbGluZ1RvKEVoKVxuICogICAgY29uc3QgZWggPSBFaC5nZXRQb29sZWQoKSAvLz0+IG9uZUFyZ3VtZW50UG9vbGVyKEVoKVxuICogICAgZWgucmVsZWFzZSgpXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uZUFyZ3VtZW50UG9vbGVyKGNvcHlGaWVsZHNGcm9tKSB7XG4gIGNvbnN0IEtsYXNzID0gdGhpc1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpXG4gICAgLy8gcmVxdWlyZSgnZmxpcGxvZycpLnF1aWNrKHtLbGFzcywgaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tfSlcblxuICAgIC8vIEBUT0RPIG9yIGEgc3RhdGljIGNvbnN0cnVjdCFcbiAgICAvLyBpZiAoS2xhc3MuY29uc3RydWN0KSBLbGFzcy5jb25zdHJ1Y3QuY2FsbChpbnN0YW5jZSwgY29weUZpZWxkc0Zyb20pXG4gICAgaWYgKGluc3RhbmNlLmNvbnN0cnVjdCkgaW5zdGFuY2UuY29uc3RydWN0KGNvcHlGaWVsZHNGcm9tKVxuICAgIGVsc2UgS2xhc3MuY2FsbChpbnN0YW5jZSwgY29weUZpZWxkc0Zyb20pXG5cbiAgICByZXR1cm4gaW5zdGFuY2VcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKVxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBQSxHQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJ6QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsaUJBQWlCLENBQUMsY0FBYyxFQUFFO0VBQzFEQSxHQUFLLENBQUMsS0FBSyxHQUFHLElBQUk7RUFDbEIsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtJQUM3QkEsR0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTs7Ozs7SUFLekMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBQTtTQUNyRCxFQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFBOztJQUV6QyxPQUFPLFFBQVE7R0FDaEI7T0FDSTtJQUNILE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDO0dBQ2pDO0NBQ0Y7In0=