33 lines
856 B
JavaScript
33 lines
856 B
JavaScript
/**
|
|
* Assign properties from `props` to `obj`
|
|
* @template O, P The obj and props types
|
|
* @param {O} obj The object to copy properties to
|
|
* @param {P} props The object to copy properties from
|
|
* @returns {O & P}
|
|
*/
|
|
export function assign(obj, props) {
|
|
for (let i in props) obj[i] = props[i];
|
|
return /** @type {O & P} */ (obj);
|
|
}
|
|
|
|
/**
|
|
* Check if two objects have a different shape
|
|
* @param {object} a
|
|
* @param {object} b
|
|
* @returns {boolean}
|
|
*/
|
|
export function shallowDiffers(a, b) {
|
|
for (let i in a) if (i !== '__source' && !(i in b)) return true;
|
|
for (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Check if two values are the same value
|
|
* @param {*} x
|
|
* @param {*} y
|
|
* @returns {boolean}
|
|
*/
|
|
export function is(x, y) {
|
|
return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
|
|
}
|