UNPKG

@softvisio/core

Version:
79 lines (58 loc) 2 kB
export { sleep } from "#lib/timers"; export function getRandomArrayIndex ( array ) { if ( !array.length ) return; return Math.floor( Math.random() * array.length ); } export function getRandomArrayValue ( array ) { if ( !array.length ) return; return array[ Math.floor( Math.random() * array.length ) ]; } export function objectIsPlain ( object ) { return object instanceof Object && object.constructor === Object; } export function freezeObjectRecursively ( object ) { if ( object != null && typeof object === "object" ) { Object.freeze( object ); for ( const value of Object.values( object ) ) { freezeObjectRecursively( value ); } } return object; } // XXX not efficient, remove export function objectIsEmpty ( object ) { for ( const name in object ) return false; return true; } export function objectPick ( object, keys ) { return keys.reduce( ( result, key ) => { if ( key in object ) result[ key ] = object[ key ]; return result; }, {} ); } export function objectOmit ( object, keys ) { object = { ...object }; keys.forEach( key => delete object[ key ] ); return object; } export function mergeObjects ( target, ...objects ) { for ( const object of objects ) { if ( !object ) continue; for ( const property in object ) { if ( objectIsPlain( object[ property ] ) ) { if ( !objectIsPlain( target[ property ] ) ) target[ property ] = {}; mergeObjects( target[ property ], object[ property ] ); } else if ( object[ property ] === undefined ) { delete target[ property ]; } else { target[ property ] = object[ property ]; } } } return target; } export function sortObject ( object ) { return Object.fromEntries( Object.entries( object ).sort( ( [ a ], [ b ] ) => a.localeCompare( b ) ) ); }