all files / src/vdom/ component-recycler.js

100% Statements 19/19
100% Branches 6/6
100% Functions 2/2
100% Lines 17/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33            11× 11× 11× 11×         38×     38×     35×    
/** Retains a pool of Components for re-use, keyed on component name.
 *	Note: since component names are not unique or even necessarily available, these are primarily a form of sharding.
 *	@private
 */
"use strict";
 
exports.__esModule = true;
exports.collectComponent = collectComponent;
exports.createComponent = createComponent;
var components = {};
 
function collectComponent(component) {
	var name = component.constructor.name,
	    list = components[name];
	if (list) list.push(component);else components[name] = [component];
}
 
function createComponent(Ctor, props, context) {
	var list = components[Ctor.name],
	    len = list && list.length,
	    c = undefined;
	for (var i = 0; i < len; i++) {
		c = list[i];
		if (c.constructor === Ctor) {
			list.splice(i, 1);
			var inst = new Ctor(props, context);
			inst.nextBase = c.base;
			return inst;
		}
	}
	return new Ctor(props, context);
}