@rushstack/node-core-library
Advanced tools
| "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 |
@@ -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"]} |
+4
-4
| { | ||
| "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
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
2097287
0.77%265
4.74%25216
0.67%