HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/shahnamag/back-end/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));
}