wallet-core/thirdparty/preact/src/util.js

69 lines
1.4 KiB
JavaScript

/** Copy own-properties from `props` onto `obj`.
* @returns obj
* @private
*/
export function extend(obj, props) {
if (props) {
for (let i in props) obj[i] = props[i];
}
return obj;
}
/** Fast clone. Note: does not filter out non-own properties.
* @see https://esbench.com/bench/56baa34f45df6895002e03b6
*/
export function clone(obj) {
return extend({}, obj);
}
/** Get a deep property value from the given object, expressed in dot-notation.
* @private
*/
export function delve(obj, key) {
for (let p=key.split('.'), i=0; i<p.length && obj; i++) {
obj = obj[p[i]];
}
return obj;
}
/** @private is the given object a Function? */
export function isFunction(obj) {
return 'function'===typeof obj;
}
/** @private is the given object a String? */
export function isString(obj) {
return 'string'===typeof obj;
}
/** Convert a hashmap of CSS classes to a space-delimited className string
* @private
*/
export function hashToClassName(c) {
let str = '';
for (let prop in c) {
if (c[prop]) {
if (str) str += ' ';
str += prop;
}
}
return str;
}
/** Just a memoized String#toLowerCase */
let lcCache = {};
export const toLowerCase = s => lcCache[s] || (lcCache[s] = s.toLowerCase());
/** Call a function asynchronously, as soon as possible.
* @param {Function} callback
*/
let resolved = typeof Promise!=='undefined' && Promise.resolve();
export const defer = resolved ? (f => { resolved.then(f); }) : setTimeout;