@nestjs-mod/schematics
Version:
The Nx Plugin for NestJS that contains executors and generators for allowing your workspace to create NestJS-mod applications
50 lines • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.merge = merge;
exports.defaults = defaults;
/* eslint-disable @typescript-eslint/no-explicit-any */
// Copied from https://github.com/sindresorhus/node-defaults/blob/main/index.js
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']);
function 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;
}
function defaults(options = {}, defaultOptions = {}) {
return merge(structuredClone(defaultOptions), structuredClone(options));
}
//# sourceMappingURL=node-defaults.js.map