@web-native-js/reflex
Version:
Reflex is a reactivity library.
37 lines (34 loc) • 851 B
JavaScript
/**
* @imports
*/
import _isTypeObject from '@web-native-js/commons/js/isTypeObject.js';
import init from './init.js';
import reflexKeys from './keys.js';
import reflexGet from './get.js';
import link from './link.js';
/**
* Recursively "connects" an object's members to the object
* for reflex actions.
*
* @param array|object target
* @param bool _init
*
* @return void
*/
export default function build(target, _init = false) {
if (!target || !_isTypeObject(target)) {
throw new Error('Target must be of type object!');
}
// ---------------------------------
var keys = reflexKeys(target);
keys.forEach(key => {
var value = reflexGet(target, key);
if (_isTypeObject(value) && value) {
link(target, key, value);
build(value, _init);
}
});
if (_init) {
init(target, keys);
}
}