object-array-utils
Advanced tools
+2
-1
@@ -47,2 +47,3 @@ export declare type ObjectLiteral<T = unknown> = Record<string, T>; | ||
| declare function isPrimitive(value: unknown): boolean; | ||
| declare function cloneShape<T = unknown>(value: T): T; | ||
| declare function deepFreeze(o: unknown[] | ObjectInstance | ObjectLiteral): Readonly<ObjectInstance<unknown> | ObjectLiteral<unknown> | unknown[]>; | ||
@@ -74,2 +75,2 @@ declare function sortProperties(o: ObjectLiteral): { | ||
| declare function unique<T>(a: T[], fun?: (val: T) => unknown): T[]; | ||
| export { areArraysEqual, areObjectsEqual, areValuesEqual, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperty, hasProperties, isArray, isArrayOfObjects, isArrayOfObjectLiterals, isArrayOfPrimitives, isArrayOfType, isArraySubset, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isNullOrUndefined, isObject, isObjectInstance, isObjectLiteral, isObjectLiteralWhereEvery, isObjectSubset, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique }; | ||
| export { areArraysEqual, areObjectsEqual, areValuesEqual, cloneShape, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperty, hasProperties, isArray, isArrayOfObjects, isArrayOfObjectLiterals, isArrayOfPrimitives, isArrayOfType, isArraySubset, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isNullOrUndefined, isObject, isObjectInstance, isObjectLiteral, isObjectLiteralWhereEvery, isObjectSubset, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique }; |
+16
-1
@@ -382,2 +382,17 @@ function isNullOrUndefined(v) { | ||
| } | ||
| function cloneShape(value) { | ||
| if (isObjectLiteral(value)) { | ||
| return cloneShapeOfObjectLiteral(value); | ||
| } | ||
| if (isArray(value)) { | ||
| return cloneShapeOfArray(value); | ||
| } | ||
| return value; | ||
| } | ||
| function cloneShapeOfObjectLiteral(o) { | ||
| return Object.fromEntries(Object.entries(o).map(([key, val]) => [key, cloneShape(val)])); | ||
| } | ||
| function cloneShapeOfArray(a) { | ||
| return a.map((e) => cloneShape(e)); | ||
| } | ||
| function deepFreeze(o) { | ||
@@ -435,2 +450,2 @@ if (!isObject(o) && !isArray(o)) { | ||
| } | ||
| export { areArraysEqual, areObjectsEqual, areValuesEqual, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperty, hasProperties, isArray, isArrayOfObjects, isArrayOfObjectLiterals, isArrayOfPrimitives, isArrayOfType, isArraySubset, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isNullOrUndefined, isObject, isObjectInstance, isObjectLiteral, isObjectLiteralWhereEvery, isObjectSubset, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique }; | ||
| export { areArraysEqual, areObjectsEqual, areValuesEqual, cloneShape, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperty, hasProperties, isArray, isArrayOfObjects, isArrayOfObjectLiterals, isArrayOfPrimitives, isArrayOfType, isArraySubset, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isNullOrUndefined, isObject, isObjectInstance, isObjectLiteral, isObjectLiteralWhereEvery, isObjectSubset, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique }; |
+17
-1
| import { expect, test } from 'vitest'; | ||
| import { areArraysEqual, areObjectsEqual, areValuesEqual, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperties, isArrayOfPrimitives, isArrayOfType, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isObjectLiteral, isObjectLiteralWhereEvery, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique } from './index'; | ||
| import { areArraysEqual, areObjectsEqual, areValuesEqual, cloneShape, deepFreeze, differenceArraysOfPrimitives, duplicate, filterProperties, hasProperties, isArrayOfPrimitives, isArrayOfType, isArrayWhereEvery, isEmptyArray, isEmptyObjectLiteral, isObjectLiteral, isObjectLiteralWhereEvery, isPrimitive, range, rejectProperties, removeArrayElement, removeArrayElementByIndex, removeArrayElements, sortProperties, takeProperties, unique } from './index'; | ||
| test('areValuesEqual', () => { | ||
@@ -181,1 +181,17 @@ expect(areValuesEqual(null, null)).toBeTruthy(); | ||
| }); | ||
| test('cloneShape', () => { | ||
| expect(cloneShape(null)).toEqual(null); | ||
| expect(cloneShape('foo')).toEqual('foo'); | ||
| const o = [1, { b: null, c: { d: [2, 5, 1, 0, { c: 3, d: 4 }], e: "world" }, a: "foo" }]; | ||
| const clonedO = cloneShape(o); | ||
| expect(o[1].b).toBe(null); | ||
| expect(clonedO[1].b).toBe(null); | ||
| expect(o[1].a).toBe('foo'); | ||
| expect(clonedO[1].a).toBe('foo'); | ||
| expect(o[1].c).toEqual({ d: [2, 5, 1, 0, { c: 3, d: 4 }], e: "world" }); | ||
| expect(clonedO[1].c).toEqual({ d: [2, 5, 1, 0, { c: 3, d: 4 }], e: "world" }); | ||
| expect(o === clonedO).toBeFalsy(); | ||
| expect(o[1] === clonedO[1]).toBeFalsy(); | ||
| expect(o[1].c === clonedO[1].c).toBeFalsy(); | ||
| expect(o[1].c.d === clonedO[1].c.d).toBeFalsy(); | ||
| }); |
+1
-1
| { | ||
| "name": "object-array-utils", | ||
| "version": "3.2.0", | ||
| "version": "3.3.0", | ||
| "description": "Utilities for working with arrays and objects", | ||
@@ -5,0 +5,0 @@ "funding": "https://github.com/mathieuprog/object-array-utils?sponsor=1", |
50948
2.57%725
4.62%