UNPKG

foop

Version:

interfaces that describe their intentions.

66 lines (59 loc) 5.6 kB
/* eslint consistent-this: ["error", "Klass"] */ var ENV_DEBUG = require('../env/debug') var standardReleaser = require('./standardReleaser') var oneArgumentPooler = require('./oneArgumentPooler') /** * @symb 🎱 * @member pooler * @type {Object} * * {@link https://github.com/atheros/node-advanced-pool node-advanced-pool} * * {@link https://github.com/facebook/react/blob/master/src/renderers/shared/utils/PooledClass.js react-pooler} * @see {@link react-pooler} * * @tests deps/pooler * @types deps.cache.pooler */ var DEFAULT_POOLER = oneArgumentPooler var DEFAULT_POOL_SIZE = 10 /** * Augments `CopyConstructor` to be a poolable class, augmenting only the class * itself (statically) not adding any prototypical fields. Any CopyConstructor * you give this may have a `poolSize` property, and will look for a * prototypical `destructor` on instances. * * @since 5.0.0 * @memberOf pooler * * @param {Function | Object} CopyConstructor Constructor that can be used to reset. * @param {Function} pooler Customizable pooler. * @return {Object} enhanced constructor, decorated with pooler * * @prop {Array} instancePool * @prop {number} poolSize * @prop {Function} release * @prop {Function} getPooled * * @example * * class Eh {} * addPoolingTo(Eh) // can optionally pass in pooler as second arg * //=> Eh.instancePool = [] * //=> Eh.getPooled = pooler || singleArgumentPooler * //=> Eh.poolSize = 10 * //=> Eh.release = standardReleaser * */ function addPoolingTo(CopyConstructor, pooler) { // Casting as any so that flow ignores the actual implementation and trusts // it to match the type we declared var NewKlass = CopyConstructor NewKlass.instancePool = [] NewKlass.getPooled = pooler || DEFAULT_POOLER if (!NewKlass.poolSize) { NewKlass.poolSize = DEFAULT_POOL_SIZE } NewKlass.release = standardReleaser return NewKlass } module.exports = addPoolingTo //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbGVyLmpzIiwic291cmNlcyI6WyJwb29sZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IGNvbnNpc3RlbnQtdGhpczogW1wiZXJyb3JcIiwgXCJLbGFzc1wiXSAqL1xuXG5jb25zdCBFTlZfREVCVUcgPSByZXF1aXJlKCcuLi9lbnYvZGVidWcnKVxuY29uc3Qgc3RhbmRhcmRSZWxlYXNlciA9IHJlcXVpcmUoJy4vc3RhbmRhcmRSZWxlYXNlcicpXG5jb25zdCBvbmVBcmd1bWVudFBvb2xlciA9IHJlcXVpcmUoJy4vb25lQXJndW1lbnRQb29sZXInKVxuXG4vKipcbiAqIEBzeW1iIPCfjrFcbiAqIEBtZW1iZXIgcG9vbGVyXG4gKiBAdHlwZSB7T2JqZWN0fVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXRoZXJvcy9ub2RlLWFkdmFuY2VkLXBvb2wgbm9kZS1hZHZhbmNlZC1wb29sfVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYXN0ZXIvc3JjL3JlbmRlcmVycy9zaGFyZWQvdXRpbHMvUG9vbGVkQ2xhc3MuanMgcmVhY3QtcG9vbGVyfVxuICogQHNlZSB7QGxpbmsgcmVhY3QtcG9vbGVyfVxuICpcbiAqIEB0ZXN0cyBkZXBzL3Bvb2xlclxuICogQHR5cGVzIGRlcHMuY2FjaGUucG9vbGVyXG4gKi9cbmNvbnN0IERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXJcbmNvbnN0IERFRkFVTFRfUE9PTF9TSVpFID0gMTBcblxuLyoqXG4gKiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzXG4gKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3JcbiAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhXG4gKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy5cbiAqXG4gKiBAc2luY2UgNS4wLjBcbiAqIEBtZW1iZXJPZiBwb29sZXJcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9uIHwgT2JqZWN0fSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICogQHJldHVybiB7T2JqZWN0fSBlbmhhbmNlZCBjb25zdHJ1Y3RvciwgZGVjb3JhdGVkIHdpdGggcG9vbGVyXG4gKlxuICogQHByb3Age0FycmF5fSBpbnN0YW5jZVBvb2xcbiAqIEBwcm9wIHtudW1iZXJ9IHBvb2xTaXplXG4gKiBAcHJvcCB7RnVuY3Rpb259IHJlbGVhc2VcbiAqIEBwcm9wIHtGdW5jdGlvbn0gZ2V0UG9vbGVkXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBjbGFzcyBFaCB7fVxuICogICAgYWRkUG9vbGluZ1RvKEVoKSAvLyBjYW4gb3B0aW9uYWxseSBwYXNzIGluIHBvb2xlciBhcyBzZWNvbmQgYXJnXG4gKiAgICAvLz0+IEVoLmluc3RhbmNlUG9vbCA9IFtdXG4gKiAgICAvLz0+IEVoLmdldFBvb2xlZCA9IHBvb2xlciB8fCBzaW5nbGVBcmd1bWVudFBvb2xlclxuICogICAgLy89PiBFaC5wb29sU2l6ZSA9IDEwXG4gKiAgICAvLz0+IEVoLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyXG4gKlxuICovXG5mdW5jdGlvbiBhZGRQb29saW5nVG8oQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHtcbiAgLy8gQ2FzdGluZyBhcyBhbnkgc28gdGhhdCBmbG93IGlnbm9yZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgdHJ1c3RzXG4gIC8vIGl0IHRvIG1hdGNoIHRoZSB0eXBlIHdlIGRlY2xhcmVkXG4gIGNvbnN0IE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yXG5cbiAgTmV3S2xhc3MuaW5zdGFuY2VQb29sID0gW11cbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSXG4gIGlmICghTmV3S2xhc3MucG9vbFNpemUpIE5ld0tsYXNzLnBvb2xTaXplID0gREVGQVVMVF9QT09MX1NJWkVcbiAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFzZXJcblxuICByZXR1cm4gTmV3S2xhc3Ncbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhZGRQb29saW5nVG9cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUFBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN6Q0EsR0FBSyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztBQUN0REEsR0FBSyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZXhEQSxHQUFLLENBQUMsY0FBYyxHQUFHLGlCQUFpQjtBQUN4Q0EsR0FBSyxDQUFDLGlCQUFpQixHQUFHLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCNUIsU0FBUyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRTs7O0VBRzdDQSxHQUFLLENBQUMsUUFBUSxHQUFHLGVBQWU7O0VBRWhDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRTtFQUMxQixRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxjQUFjO0VBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUEsUUFBUSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsRUFBQTtFQUM3RCxRQUFRLENBQUMsT0FBTyxHQUFHLGdCQUFnQjs7RUFFbkMsT0FBTyxRQUFRO0NBQ2hCOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWTsifQ==