HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-172-31-4-197 6.8.0-1036-aws #38~22.04.1-Ubuntu SMP Fri Aug 22 15:44:33 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/api-storage/node_modules/defaults/index.js
// From: https://github.com/sindresorhus/is-plain-obj
const isPlainObject = value => {
	if (typeof value !== 'object' || value === null) {
		return false;
	}

	const prototype = Object.getPrototypeOf(value);
	return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
};

const disallowedKeys = new Set([
	'__proto__',
	'prototype',
	'constructor',
]);

const merge = (destination, source) => {
	if (!isPlainObject(source)) {
		return destination;
	}

	if (!destination) {
		destination = {};
	}

	for (const [sourceKey, sourceValue] of Object.entries(source)) {
		if (disallowedKeys.has(sourceKey)) {
			continue;
		}

		const destinationValue = destination[sourceKey];

		if (isPlainObject(destinationValue) && isPlainObject(sourceValue)) {
			destination[sourceKey] = merge(destinationValue, sourceValue); // Merge plain objects recursively
		} else if (sourceValue === undefined) {
			continue; // Skip undefined values in source
		} else if (isPlainObject(sourceValue)) {
			destination[sourceKey] = merge({}, sourceValue); // Clone plain objects
		} else if (Array.isArray(sourceValue)) {
			destination[sourceKey] = [...sourceValue]; // Clone arrays
		} else {
			destination[sourceKey] = sourceValue; // Assign other types
		}
	}

	return destination;
};

export default function defaults(options = {}, defaultOptions = {}) {
	return merge(structuredClone(defaultOptions), structuredClone(options));
}