@eggjs/extend2
Advanced tools
+4
-2
@@ -1,2 +0,4 @@ | ||
| export declare function extend<T = Record<string, any>>(deepOrTarget?: unknown, ...objects: unknown[]): T; | ||
| export default extend; | ||
| //#region src/index.d.ts | ||
| declare function extend<T = Record<string, any>>(deepOrTarget?: unknown, ...objects: unknown[]): T; | ||
| //#endregion | ||
| export { extend as default, extend }; |
+37
-65
@@ -0,70 +1,42 @@ | ||
| //#region src/index.ts | ||
| const hasOwn = Object.prototype.hasOwnProperty; | ||
| const toStr = Object.prototype.toString; | ||
| function isPlainObject(obj) { | ||
| if (!obj || toStr.call(obj) !== '[object Object]') { | ||
| return false; | ||
| } | ||
| const hasOwnConstructor = hasOwn.call(obj, 'constructor'); | ||
| const hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); | ||
| // Not own constructor property must be Object | ||
| if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { | ||
| return false; | ||
| } | ||
| // Own properties are enumerated firstly, so to speed up, | ||
| // if last one is own, then all properties are own. | ||
| let key; | ||
| for (key in obj) { | ||
| /**/ | ||
| } | ||
| return typeof key === 'undefined' || hasOwn.call(obj, key); | ||
| if (!obj || toStr.call(obj) !== "[object Object]") return false; | ||
| const hasOwnConstructor = hasOwn.call(obj, "constructor"); | ||
| const hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf"); | ||
| if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) return false; | ||
| let key; | ||
| for (key in obj); | ||
| return typeof key === "undefined" || hasOwn.call(obj, key); | ||
| } | ||
| export function extend(deepOrTarget, ...objects) { | ||
| // extend(deep, target, obj1, obj2, ...) | ||
| // extend(target, obj1, obj2, ...) | ||
| let target = deepOrTarget; | ||
| let i = 0; | ||
| const length = objects.length; | ||
| let deep = false; | ||
| // Handle a deep copy situation | ||
| if (typeof target === 'boolean') { | ||
| // extend(deep, target, obj1, obj2, ...) | ||
| deep = target; | ||
| target = objects[0] || {}; | ||
| // skip the boolean and the target | ||
| i = 1; | ||
| } | ||
| else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) { | ||
| // extend(null, obj1, obj2, ...) | ||
| target = {}; | ||
| } | ||
| for (; i < length; ++i) { | ||
| const options = objects[i]; | ||
| // Only deal with non-null/undefined values | ||
| if (options === null || options === undefined) | ||
| continue; | ||
| // Extend the base object | ||
| for (const name in options) { | ||
| if (name === '__proto__') | ||
| continue; | ||
| const src = target[name]; | ||
| const copy = options[name]; | ||
| // Prevent never-ending loop | ||
| if (target === copy) | ||
| continue; | ||
| // Recurse if we're merging plain objects | ||
| if (deep && copy && isPlainObject(copy)) { | ||
| const clone = src && isPlainObject(src) ? src : {}; | ||
| // Never move original objects, clone them | ||
| target[name] = extend(deep, clone, copy); | ||
| // Don't bring in undefined values | ||
| } | ||
| else if (typeof copy !== 'undefined') { | ||
| target[name] = copy; | ||
| } | ||
| } | ||
| } | ||
| // Return the modified object | ||
| return target; | ||
| function extend(deepOrTarget, ...objects) { | ||
| let target = deepOrTarget; | ||
| let i = 0; | ||
| const length = objects.length; | ||
| let deep = false; | ||
| if (typeof target === "boolean") { | ||
| deep = target; | ||
| target = objects[0] || {}; | ||
| i = 1; | ||
| } else if (typeof target !== "object" && typeof target !== "function" || target == null) target = {}; | ||
| for (; i < length; ++i) { | ||
| const options = objects[i]; | ||
| if (options === null || options === void 0) continue; | ||
| for (const name in options) { | ||
| if (name === "__proto__") continue; | ||
| const src = target[name]; | ||
| const copy = options[name]; | ||
| if (target === copy) continue; | ||
| if (deep && copy && isPlainObject(copy)) { | ||
| const clone = src && isPlainObject(src) ? src : {}; | ||
| target[name] = extend(deep, clone, copy); | ||
| } else if (typeof copy !== "undefined") target[name] = copy; | ||
| } | ||
| } | ||
| return target; | ||
| } | ||
| export default extend; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFFeEMsU0FBUyxhQUFhLENBQUMsR0FBWTtJQUNqQyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzFELE1BQU0sZ0JBQWdCLEdBQ3BCLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMxRyw4Q0FBOEM7SUFDOUMsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9ELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxtREFBbUQ7SUFDbkQsSUFBSSxHQUF1QixDQUFDO0lBQzVCLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUk7SUFDTixDQUFDO0lBRUQsT0FBTyxPQUFPLEdBQUcsS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQTBCLFlBQXNCLEVBQUUsR0FBRyxPQUFrQjtJQUMzRix3Q0FBd0M7SUFDeEMsa0NBQWtDO0lBQ2xDLElBQUksTUFBTSxHQUFHLFlBQW1CLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7SUFFakIsK0JBQStCO0lBQy9CLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEMsd0NBQXdDO1FBQ3hDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixrQ0FBa0M7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNSLENBQUM7U0FBTSxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxRixnQ0FBZ0M7UUFDaEMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFRLENBQUM7UUFDbEMsMkNBQTJDO1FBQzNDLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUztZQUFFLFNBQVM7UUFFeEQseUJBQXlCO1FBQ3pCLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLEtBQUssV0FBVztnQkFBRSxTQUFTO1lBRW5DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0IsNEJBQTRCO1lBQzVCLElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQUUsU0FBUztZQUU5Qix5Q0FBeUM7WUFDekMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsMENBQTBDO2dCQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRXpDLGtDQUFrQztZQUNwQyxDQUFDO2lCQUFNLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLE9BQU8sTUFBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxlQUFlLE1BQU0sQ0FBQyJ9 | ||
| var src_default = extend; | ||
| //#endregion | ||
| export { src_default as default, extend }; |
+19
-25
| { | ||
| "name": "@eggjs/extend2", | ||
| "author": "popomore <sakura9515@gmail.com>", | ||
| "version": "5.0.0-beta.35", | ||
| "engines": { | ||
| "node": ">=22.18.0" | ||
| }, | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "version": "5.0.0-beta.36", | ||
| "description": "Port of jQuery.extend for Node.js", | ||
| "keywords": [ | ||
| "clone", | ||
| "extend", | ||
| "clone", | ||
| "merge" | ||
| ], | ||
| "homepage": "https://github.com/eggjs/egg/tree/next/packages/extend2", | ||
| "license": "MIT", | ||
| "author": "popomore <sakura9515@gmail.com>", | ||
| "repository": { | ||
@@ -22,11 +18,2 @@ "type": "git", | ||
| }, | ||
| "homepage": "https://github.com/eggjs/egg/tree/next/packages/extend2", | ||
| "devDependencies": { | ||
| "oxlint": "^1.31.0", | ||
| "tsdown": "^0.17.0", | ||
| "typescript": "^5.9.3", | ||
| "vitest": "^4.0.15", | ||
| "@eggjs/tsconfig": "3.1.0-beta.35" | ||
| }, | ||
| "license": "MIT", | ||
| "files": [ | ||
@@ -36,2 +23,5 @@ "dist" | ||
| "type": "module", | ||
| "main": "./dist/index.js", | ||
| "module": "./dist/index.js", | ||
| "types": "./dist/index.d.ts", | ||
| "exports": { | ||
@@ -41,11 +31,15 @@ ".": "./dist/index.js", | ||
| }, | ||
| "main": "./dist/index.js", | ||
| "types": "./dist/index.d.ts", | ||
| "module": "./dist/index.js", | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "devDependencies": { | ||
| "typescript": "^5.9.3", | ||
| "@eggjs/tsconfig": "3.1.0-beta.36" | ||
| }, | ||
| "engines": { | ||
| "node": ">=22.18.0" | ||
| }, | ||
| "scripts": { | ||
| "build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json", | ||
| "typecheck": "tsc --noEmit", | ||
| "lint": "oxlint", | ||
| "test": "vitest run" | ||
| "typecheck": "tsgo --noEmit" | ||
| } | ||
| } |
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
2
-60%4986
-45.87%43
-39.44%2
100%