1/5/1404
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
function isPlainObject(value) {
|
||||
if (value === null || typeof value !== "object") {
|
||||
return false;
|
||||
}
|
||||
const prototype = Object.getPrototypeOf(value);
|
||||
if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {
|
||||
return false;
|
||||
}
|
||||
if (Symbol.iterator in value) {
|
||||
return false;
|
||||
}
|
||||
if (Symbol.toStringTag in value) {
|
||||
return Object.prototype.toString.call(value) === "[object Module]";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function _defu(baseObject, defaults, namespace = ".", merger) {
|
||||
if (!isPlainObject(defaults)) {
|
||||
return _defu(baseObject, {}, namespace, merger);
|
||||
}
|
||||
const object = Object.assign({}, defaults);
|
||||
for (const key in baseObject) {
|
||||
if (key === "__proto__" || key === "constructor") {
|
||||
continue;
|
||||
}
|
||||
const value = baseObject[key];
|
||||
if (value === null || value === void 0) {
|
||||
continue;
|
||||
}
|
||||
if (merger && merger(object, key, value, namespace)) {
|
||||
continue;
|
||||
}
|
||||
if (Array.isArray(value) && Array.isArray(object[key])) {
|
||||
object[key] = [...value, ...object[key]];
|
||||
} else if (isPlainObject(value) && isPlainObject(object[key])) {
|
||||
object[key] = _defu(
|
||||
value,
|
||||
object[key],
|
||||
(namespace ? `${namespace}.` : "") + key.toString(),
|
||||
merger
|
||||
);
|
||||
} else {
|
||||
object[key] = value;
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
function createDefu(merger) {
|
||||
return (...arguments_) => (
|
||||
// eslint-disable-next-line unicorn/no-array-reduce
|
||||
arguments_.reduce((p, c) => _defu(p, c, "", merger), {})
|
||||
);
|
||||
}
|
||||
const defu = createDefu();
|
||||
const defuFn = createDefu((object, key, currentValue) => {
|
||||
if (object[key] !== void 0 && typeof currentValue === "function") {
|
||||
object[key] = currentValue(object[key]);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
const defuArrayFn = createDefu((object, key, currentValue) => {
|
||||
if (Array.isArray(object[key]) && typeof currentValue === "function") {
|
||||
object[key] = currentValue(object[key]);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
export { createDefu, defu as default, defu, defuArrayFn, defuFn };
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "defu",
|
||||
"version": "6.1.4",
|
||||
"description": "Recursively assign default properties. Lightweight and Fast!",
|
||||
"repository": "unjs/defu",
|
||||
"license": "MIT",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./dist/defu.d.ts",
|
||||
"import": "./dist/defu.mjs",
|
||||
"require": "./lib/defu.cjs"
|
||||
}
|
||||
},
|
||||
"main": "./lib/defu.cjs",
|
||||
"module": "./dist/defu.mjs",
|
||||
"types": "./dist/defu.d.ts",
|
||||
"files": [
|
||||
"dist",
|
||||
"lib"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.10.6",
|
||||
"@vitest/coverage-v8": "^1.1.3",
|
||||
"changelogen": "^0.5.5",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-unjs": "^0.2.1",
|
||||
"expect-type": "^0.17.3",
|
||||
"prettier": "^3.1.1",
|
||||
"typescript": "^5.3.3",
|
||||
"unbuild": "^2.0.0",
|
||||
"vitest": "^1.1.3"
|
||||
},
|
||||
"packageManager": "pnpm@8.10.2",
|
||||
"scripts": {
|
||||
"build": "unbuild",
|
||||
"dev": "vitest",
|
||||
"lint": "eslint --ext .ts src && prettier -c src test",
|
||||
"lint:fix": "eslint --ext .ts src --fix && prettier -w src test",
|
||||
"release": "pnpm test && changelogen --release && git push --follow-tags && pnpm publish",
|
||||
"test": "pnpm lint && pnpm vitest run",
|
||||
"test:types": "tsc --noEmit"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user