🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

@rushstack/node-core-library

Package Overview
Dependencies
Maintainers
4
Versions
161
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rushstack/node-core-library - npm Package Compare versions

Comparing version
5.22.0
to
5.23.0
+15
lib-commonjs/objects/isRecord.js
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.isRecord = isRecord;
/**
* Returns `true` if `value` is a non-null, non-array plain object (i.e. assignable to
* `Record<string, unknown>`), narrowing the type accordingly.
*
* @public
*/
function isRecord(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
//# sourceMappingURL=isRecord.js.map
{"version":3,"file":"isRecord.js","sourceRoot":"","sources":["../../src/objects/isRecord.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAQ3D,4BAEC;AARD;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Returns `true` if `value` is a non-null, non-array plain object (i.e. assignable to\n * `Record<string, unknown>`), narrowing the type accordingly.\n *\n * @public\n */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeWith = mergeWith;
const isRecord_1 = require("./isRecord");
/**
* Recursively merges own enumerable string-keyed properties of `source` into `target`, invoking
* `customizer` for each property. Mutates and returns `target`.
*
* @remarks
* For each property in `source`, `customizer` is called with `(targetValue, sourceValue, key)`.
* If the customizer returns a value other than `undefined`, that value is assigned directly.
* Otherwise the default behavior applies: plain objects are merged recursively; all other values
* (arrays, primitives, `null`) overwrite the corresponding target property.
*
* @public
*/
function mergeWith(target, source, customizer) {
const targetRecord = target;
const sourceRecord = source;
for (const [key, srcValue] of Object.entries(sourceRecord)) {
const objValue = targetRecord[key];
const customized = customizer === null || customizer === void 0 ? void 0 : customizer(objValue, srcValue, key);
if (customized !== undefined) {
targetRecord[key] = customized;
}
else if ((0, isRecord_1.isRecord)(srcValue) && (0, isRecord_1.isRecord)(objValue)) {
mergeWith(objValue, srcValue, customizer);
}
else {
targetRecord[key] = srcValue;
}
}
return target;
}
//# sourceMappingURL=mergeWith.js.map
{"version":3,"file":"mergeWith.js","sourceRoot":"","sources":["../../src/objects/mergeWith.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;AAuB3D,8BAoBC;AAzCD,yCAAsC;AAStC;;;;;;;;;;;GAWG;AACH,SAAgB,SAAS,CACvB,MAAe,EACf,MAAe,EACf,UAAgC;IAEhC,MAAM,YAAY,GAA4B,MAA4C,CAAC;IAC3F,MAAM,YAAY,GAA4B,MAA4C,CAAC;IAC3F,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAY,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAY,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;QACjC,CAAC;aAAM,IAAI,IAAA,mBAAQ,EAAC,QAAQ,CAAC,IAAI,IAAA,mBAAQ,EAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { isRecord } from './isRecord';\n\n/**\n * Customizer function for use with `mergeWith`.\n * Return `undefined` to fall back to the default deep-merge behavior for that property.\n * @public\n */\nexport type MergeWithCustomizer = (objValue: unknown, srcValue: unknown, key: string) => unknown;\n\n/**\n * Recursively merges own enumerable string-keyed properties of `source` into `target`, invoking\n * `customizer` for each property. Mutates and returns `target`.\n *\n * @remarks\n * For each property in `source`, `customizer` is called with `(targetValue, sourceValue, key)`.\n * If the customizer returns a value other than `undefined`, that value is assigned directly.\n * Otherwise the default behavior applies: plain objects are merged recursively; all other values\n * (arrays, primitives, `null`) overwrite the corresponding target property.\n *\n * @public\n */\nexport function mergeWith<TTarget extends object, TSource extends object>(\n target: TTarget,\n source: TSource,\n customizer?: MergeWithCustomizer\n): TTarget {\n const targetRecord: Record<string, unknown> = target as unknown as Record<string, unknown>;\n const sourceRecord: Record<string, unknown> = source as unknown as Record<string, unknown>;\n for (const [key, srcValue] of Object.entries(sourceRecord)) {\n const objValue: unknown = targetRecord[key];\n const customized: unknown = customizer?.(objValue, srcValue, key);\n if (customized !== undefined) {\n targetRecord[key] = customized;\n } else if (isRecord(srcValue) && isRecord(objValue)) {\n mergeWith(objValue, srcValue, customizer);\n } else {\n targetRecord[key] = srcValue;\n }\n }\n\n return target;\n}\n"]}
/**
* Returns `true` if `value` is a non-null, non-array plain object (i.e. assignable to
* `Record<string, unknown>`), narrowing the type accordingly.
*
* @public
*/
export declare function isRecord(value: unknown): value is Record<string, unknown>;
//# sourceMappingURL=isRecord.d.ts.map
{"version":3,"file":"isRecord.d.ts","sourceRoot":"","sources":["../../src/objects/isRecord.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
/**
* Customizer function for use with `mergeWith`.
* Return `undefined` to fall back to the default deep-merge behavior for that property.
* @public
*/
export type MergeWithCustomizer = (objValue: unknown, srcValue: unknown, key: string) => unknown;
/**
* Recursively merges own enumerable string-keyed properties of `source` into `target`, invoking
* `customizer` for each property. Mutates and returns `target`.
*
* @remarks
* For each property in `source`, `customizer` is called with `(targetValue, sourceValue, key)`.
* If the customizer returns a value other than `undefined`, that value is assigned directly.
* Otherwise the default behavior applies: plain objects are merged recursively; all other values
* (arrays, primitives, `null`) overwrite the corresponding target property.
*
* @public
*/
export declare function mergeWith<TTarget extends object, TSource extends object>(target: TTarget, source: TSource, customizer?: MergeWithCustomizer): TTarget;
//# sourceMappingURL=mergeWith.d.ts.map
{"version":3,"file":"mergeWith.d.ts","sourceRoot":"","sources":["../../src/objects/mergeWith.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;AAEjG;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EACtE,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,OAAO,EACf,UAAU,CAAC,EAAE,mBAAmB,GAC/B,OAAO,CAgBT"}
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
/**
* Returns `true` if `value` is a non-null, non-array plain object (i.e. assignable to
* `Record<string, unknown>`), narrowing the type accordingly.
*
* @public
*/
export function isRecord(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
//# sourceMappingURL=isRecord.js.map
{"version":3,"file":"isRecord.js","sourceRoot":"","sources":["../../src/objects/isRecord.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n/**\n * Returns `true` if `value` is a non-null, non-array plain object (i.e. assignable to\n * `Record<string, unknown>`), narrowing the type accordingly.\n *\n * @public\n */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n"]}
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
import { isRecord } from './isRecord';
/**
* Recursively merges own enumerable string-keyed properties of `source` into `target`, invoking
* `customizer` for each property. Mutates and returns `target`.
*
* @remarks
* For each property in `source`, `customizer` is called with `(targetValue, sourceValue, key)`.
* If the customizer returns a value other than `undefined`, that value is assigned directly.
* Otherwise the default behavior applies: plain objects are merged recursively; all other values
* (arrays, primitives, `null`) overwrite the corresponding target property.
*
* @public
*/
export function mergeWith(target, source, customizer) {
const targetRecord = target;
const sourceRecord = source;
for (const [key, srcValue] of Object.entries(sourceRecord)) {
const objValue = targetRecord[key];
const customized = customizer === null || customizer === void 0 ? void 0 : customizer(objValue, srcValue, key);
if (customized !== undefined) {
targetRecord[key] = customized;
}
else if (isRecord(srcValue) && isRecord(objValue)) {
mergeWith(objValue, srcValue, customizer);
}
else {
targetRecord[key] = srcValue;
}
}
return target;
}
//# sourceMappingURL=mergeWith.js.map
{"version":3,"file":"mergeWith.js","sourceRoot":"","sources":["../../src/objects/mergeWith.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAStC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CACvB,MAAe,EACf,MAAe,EACf,UAAgC;IAEhC,MAAM,YAAY,GAA4B,MAA4C,CAAC;IAC3F,MAAM,YAAY,GAA4B,MAA4C,CAAC;IAC3F,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAY,YAAY,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAY,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;QACjC,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { isRecord } from './isRecord';\n\n/**\n * Customizer function for use with `mergeWith`.\n * Return `undefined` to fall back to the default deep-merge behavior for that property.\n * @public\n */\nexport type MergeWithCustomizer = (objValue: unknown, srcValue: unknown, key: string) => unknown;\n\n/**\n * Recursively merges own enumerable string-keyed properties of `source` into `target`, invoking\n * `customizer` for each property. Mutates and returns `target`.\n *\n * @remarks\n * For each property in `source`, `customizer` is called with `(targetValue, sourceValue, key)`.\n * If the customizer returns a value other than `undefined`, that value is assigned directly.\n * Otherwise the default behavior applies: plain objects are merged recursively; all other values\n * (arrays, primitives, `null`) overwrite the corresponding target property.\n *\n * @public\n */\nexport function mergeWith<TTarget extends object, TSource extends object>(\n target: TTarget,\n source: TSource,\n customizer?: MergeWithCustomizer\n): TTarget {\n const targetRecord: Record<string, unknown> = target as unknown as Record<string, unknown>;\n const sourceRecord: Record<string, unknown> = source as unknown as Record<string, unknown>;\n for (const [key, srcValue] of Object.entries(sourceRecord)) {\n const objValue: unknown = targetRecord[key];\n const customized: unknown = customizer?.(objValue, srcValue, key);\n if (customized !== undefined) {\n targetRecord[key] = customized;\n } else if (isRecord(srcValue) && isRecord(objValue)) {\n mergeWith(objValue, srcValue, customizer);\n } else {\n targetRecord[key] = srcValue;\n }\n }\n\n return target;\n}\n"]}
+8
-1
# Change Log - @rushstack/node-core-library
This log was last generated on Thu, 09 Apr 2026 00:15:07 GMT and should not be manually modified.
This log was last generated on Fri, 17 Apr 2026 15:14:57 GMT and should not be manually modified.
## 5.23.0
Fri, 17 Apr 2026 15:14:57 GMT
### Minor changes
- Add two new APIs: `Object.isRecord` asserts if an object is a `Record<string, unknown>` object and `Object.mergeWith` is a customizable deep object merge.
## 5.22.0

@@ -6,0 +13,0 @@ Thu, 09 Apr 2026 00:15:07 GMT

+1
-1

@@ -8,5 +8,5 @@ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.

"packageName": "@microsoft/api-extractor",
"packageVersion": "7.57.7"
"packageVersion": "7.58.2"
}
]
}

@@ -5,5 +5,9 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.areDeepEqual = void 0;
exports.mergeWith = exports.isRecord = exports.areDeepEqual = void 0;
var areDeepEqual_1 = require("./areDeepEqual");
Object.defineProperty(exports, "areDeepEqual", { enumerable: true, get: function () { return areDeepEqual_1.areDeepEqual; } });
var isRecord_1 = require("./isRecord");
Object.defineProperty(exports, "isRecord", { enumerable: true, get: function () { return isRecord_1.isRecord; } });
var mergeWith_1 = require("./mergeWith");
Object.defineProperty(exports, "mergeWith", { enumerable: true, get: function () { return mergeWith_1.mergeWith; } });
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,+CAA8C;AAArC,4GAAA,YAAY,OAAA","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport { areDeepEqual } from './areDeepEqual';\n"]}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,yCAAkE;AAA/B,sGAAA,SAAS,OAAA","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport { areDeepEqual } from './areDeepEqual';\nexport { isRecord } from './isRecord';\nexport { type MergeWithCustomizer, mergeWith } from './mergeWith';\n"]}
export { areDeepEqual } from './areDeepEqual';
export { isRecord } from './isRecord';
export { type MergeWithCustomizer, mergeWith } from './mergeWith';
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,mBAAmB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
export { areDeepEqual } from './areDeepEqual';
export { isRecord } from './isRecord';
export { mergeWith } from './mergeWith';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport { areDeepEqual } from './areDeepEqual';\n"]}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,2DAA2D;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAA4B,SAAS,EAAE,MAAM,aAAa,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport { areDeepEqual } from './areDeepEqual';\nexport { isRecord } from './isRecord';\nexport { type MergeWithCustomizer, mergeWith } from './mergeWith';\n"]}
{
"name": "@rushstack/node-core-library",
"version": "5.22.0",
"version": "5.23.0",
"description": "Core libraries that every NodeJS toolchain project should use",

@@ -47,3 +47,3 @@ "main": "./lib-commonjs/index.js",

"devDependencies": {
"@rushstack/heft": "1.2.7",
"@rushstack/heft": "1.2.12",
"@types/fs-extra": "7.0.0",

@@ -54,4 +54,4 @@ "@types/jju": "1.4.1",

"eslint": "~9.37.0",
"@rushstack/problem-matcher": "0.2.1",
"decoupled-local-node-rig": "1.0.0"
"decoupled-local-node-rig": "1.0.0",
"@rushstack/problem-matcher": "0.2.1"
},

@@ -58,0 +58,0 @@ "peerDependencies": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display