@twobirds/microcomponents
Version:
Micro Components Organization Class
113 lines • 3.7 kB
JavaScript
;
export function isNativeObject(value) {
return value && value['constructor'] && value.constructor === Object;
}
export function sortObject(o) {
let result = {}, keys = [...Object.keys(o)].sort();
keys.forEach((key) => {
if (isNativeObject(o[key])) {
result[key] = sortObject(o[key]);
}
else {
result[key] = o[key];
}
});
return result;
}
export function flattenObject(o, doSort = true) {
let result = {};
[...Object.getOwnPropertyNames(o)].forEach((propName) => {
if (o[propName] &&
o[propName]['constructor'] &&
o[propName].constructor === Object) {
const temp = flattenObject(o[propName], false);
for (const j in temp) {
result[propName + '.' + j] = temp[j];
}
}
else {
result[propName] = o[propName];
}
});
return doSort ? sortObject(result) : result;
}
export function deepEqual(o1, o2) {
return (JSON.stringify(flattenObject(o1)) === JSON.stringify(flattenObject(o2)));
}
export function nameSpace(ns, obj = {}) {
let nsa = ns.constructor === String ? ns.split('.') : ns;
if (!obj || !nsa[0] || !obj[nsa[0]]) {
console.warn('ns', nsa[0], 'not in', obj);
return;
}
if (obj[nsa[0]].constructor === Object && nsa.length > 1) {
return nameSpace(nsa.splice(1), obj[nsa[0]]);
}
return obj[nsa[0]];
}
export function parse(what, parseThis) {
var args = Array.from(arguments);
if (args.length > 2) {
while (args.length > 1) {
args[0] = parse(args[0], args[1]);
args.splice(1, 1);
}
return args[0];
}
if (typeof what === 'string') {
what.match(/\{[^\{\}]*\}/g)?.forEach(function (pPropname) {
var propname = pPropname.substring(1, pPropname.length - 1), value = nameSpace(propname, parseThis);
if (typeof value !== 'undefined') {
what = what.replace(pPropname, value);
}
});
}
else if (isNativeObject(what)) {
switch (what.constructor) {
case Object:
Object.keys(what).forEach(function (pKey) {
if (what.hasOwnProperty(pKey)) {
what[pKey] = parse(what[pKey], parseThis);
}
});
break;
case Array:
what.forEach(function (pValue, pKey, original) {
original[pKey] = parse(what[pKey], parseThis);
});
break;
}
}
return what;
}
export function kebabToPascal(str) {
return str
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join('');
}
export function debounce(func, milliseconds) {
let timeout;
return () => {
clearTimeout(timeout);
timeout = setTimeout(function () {
func(...arguments);
}, milliseconds);
};
}
export function htmlToElements(html) {
let template = document.createElement('template');
html = html.replace(/<([A-Za-z0-9\-]*)([^>\/]*)(\/>)/gi, '<$1$2></$1>');
template.innerHTML = html;
template.content.normalize();
return Array.from(template.content.childNodes);
}
export function copyGettersSetters(source, target) {
const descriptors = Object.getOwnPropertyDescriptors(source);
for (const [key, descriptor] of Object.entries(descriptors)) {
if ('get' in descriptor || 'set' in descriptor) {
Object.defineProperty(target, key, descriptor);
}
}
}
//# sourceMappingURL=helpers.js.map