virtex
Version:
Small, focused virtual dom library.
49 lines (35 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _mapArray = require('@f/map-array');
var _mapArray2 = _interopRequireDefault(_mapArray);
var _util = require('./util');
var _actions = require('./actions');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function create(effect) {
return function (vnode) {
var path = arguments.length <= 1 || arguments[1] === undefined ? 'a' : arguments[1];
var element = arguments[2];
return createRecursive(vnode, path, element);
};
function createRecursive(vnode, path, element) {
vnode.path = path;
if ((0, _util.isThunk)(vnode)) {
var next = effect((0, _actions.createThunk)(vnode));
if (!next) {
throw new Error('Component returned null/undefined. Components must return valid virtual nodes.');
}
return createRecursive(next, (0, _util.createPath)(next, path, 0), element);
}
return effect((0, _actions.createNode)(vnode, (0, _mapArray2.default)(createChild(path, element), vnode.children), element));
}
function createChild(path, element) {
return element ? function (child, i) {
return createRecursive(child, (0, _util.createPath)(child, path, i), element.childNodes[i]);
} : function (child, i) {
return createRecursive(child, (0, _util.createPath)(child, path, i));
};
}
}
exports.default = create;