cleverMerge = (first, second) => {
	if (second === undefined) return first;
	if (first === undefined) return second;
	if (typeof second !== "object" || second === null) return second;
	if (typeof first !== "object" || first === null) return first;

	return /** @type {T & O} */ (_cleverMerge(first, second, false));
}
Merges two objects. Objects are deeply clever merged.
Arrays might reference the old value with "...".
Non-object values take preference over object values.
@template T
@template O
@param {T} first first object
@param {O} second second object
@returns {T & O | T | O} merged object of first and second object