react-native-ui-lib
Version:
<p align="center"> <img src="https://user-images.githubusercontent.com/1780255/105469025-56759000-5ca0-11eb-993d-3568c1fd54f4.png" height="250px" style="display:block"/> </p> <p align="center">UI Toolset & Components Library for React Native</p> <p a
57 lines (44 loc) • 1.21 kB
JavaScript
import _ from 'lodash';
function assignProperties(a, b) {
if (a) {
_(b).keys().forEach(key => {
// @ts-ignore
Object.defineProperty(a, key, Object.getOwnPropertyDescriptor(b, key));
});
}
return a;
}
function ensurePath(obj, path) {
let pointer = obj;
const pathArray = path.split('.');
const n = pathArray.length;
for (let i = 0; i < n; i++) {
const segment = pathArray[i];
if (pointer[segment]) {
const descriptor = Object.getOwnPropertyDescriptor(pointer, segment);
if (descriptor?.get) {
Object.defineProperty(pointer, segment, descriptor);
}
} else {
pointer[segment] = pointer[segment] || {};
}
pointer = pointer[segment];
}
return pointer;
}
export class Assets {
loadAssetsGroup(groupName, assets) {
if (!_.isString(groupName)) {
throw new Error('group name should be a string');
}
if (!_.isPlainObject(assets)) {
throw new Error('assets should be a hash map or a function (for lazy access)');
}
if (groupName === '') {
assignProperties(this, assets);
} else {
assignProperties(ensurePath(this, groupName), assets);
}
return this;
}
}