New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

objectools

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

objectools - npm Package Compare versions

Comparing version
3.1.0
to
4.0.0
+69
-57
dist/main.d.ts

@@ -5,12 +5,10 @@ /**

*/
export declare class O<K extends Key, V> {
export declare class O<Obj extends object, K extends Key = keyof Obj, V = Obj[keyof Obj]> {
entries: [K, V][];
constructor(object: {
[P in K]?: V;
});
get o(): { [P in K]: V; };
constructor(object: Obj);
get o(): Obj;
get keys(): Set<K>;
get values(): V[];
get length(): number;
static oFromKeys<K extends Key, V>(keys: K[], value: V | ((key: K, index: number) => V)): O<K, V>;
static oFromKeys<K extends Key, V>(keys: K[], value: V | ((key: K, index: number) => V)): O<{ [P in K]: V; }, K, { [P in K]: V; }[K]>;
static fromKeys<V, K extends Key = string>(keys: K[], value: V | ((key: K, index: number) => V)): { [P in K]: V; };

@@ -21,13 +19,33 @@ /**

*/
oFilter<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): O<P, U>;
oFilter<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): O<{
[K in P]: U;
}>;
oFilter<P extends K = never, U extends V = never>(predicate: (value: V, key: K, index: number) => unknown): O<{
[K in P]: U;
}>;
filter<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): {
[K in P]: U;
};
filter<P extends K = never, U extends V = never>(predicate: (value: V, key: K, index: number) => unknown): {
[K in P]: U;
};
/**
* Filter the object by keys and values.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
* Map the object by keys and values (chainable).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
*/
filter<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): { [P_1 in P]: U; };
oMap<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => U): O<{ [K_1 in P]: U; }, P, { [K_1 in P]: U; }[P]>;
/**
* Map the object by keys and values.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
*/
map<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => U): { [K_1 in P]: U; };
/**
* Map the object by keys and values (chainable).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
*/
oMap<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => U | [P, U]): O<P, U>;
oMapKeyValue<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => [P, U]): O<{ [K_1 in P]: U; }, P, { [K_1 in P]: U; }[P]>;
/**

@@ -37,3 +55,3 @@ * Map the object by keys and values.

*/
map<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => U | [P, U]): { [P_1 in P]: U; };
mapKeyValue<P extends Key = K, U = V>(mapper: (value: V, key: K, index: number) => [P, U]): { [K_1 in P]: U; };
/**

@@ -48,3 +66,3 @@ * `forEach`-loop method for objects.

*/
some(predicateFn: (value: V, key: K, index: number) => unknown): boolean;
some(predicate: (value: V, key: K, index: number) => unknown): boolean;
/**

@@ -54,3 +72,3 @@ * `every` method for objects.

*/
every(predicateFn: (value: V, key: K, index: number) => unknown): boolean;
every(predicate: (value: V, key: K, index: number) => unknown): boolean;
/**

@@ -67,43 +85,37 @@ * `indexOf` method for objects.

lastIndexOf(value: V): number;
find<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): [P, U] | undefined;
find(predicate: (value: V, key: K, index: number) => unknown): [K, V] | undefined;
/**
* Find matched entry (`[key, value]`) in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
*/
find<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): readonly [P, U] | undefined;
/**
* Find matched index in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
*/
findIndex<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): number;
findIndex(predicate: (value: V, key: K, index: number) => unknown): number;
findKey<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): P | undefined;
findKey(predicate: (value: V, key: K, index: number) => unknown): K | undefined;
findValue<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): U | undefined;
findValue(predicate: (value: V, key: K, index: number) => unknown): V | undefined;
findLast<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): [P, U] | undefined;
findLast(predicate: (value: V, key: K, index: number) => unknown): [K, V] | undefined;
/**
* Find matched index in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
*/
findKey<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): K | undefined;
/**
* Similar to `find()` method. But returns only the `value` (instead of `[key, value]`).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
*/
findValue<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): V | undefined;
/**
* Find the last matched entry (`[key, value]`) in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLast
*/
findLast<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): readonly [P, U] | undefined;
/**
* Find the last matched index in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLastIndex
*/
findLastIndex<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): number;
findLastIndex(predicate: (value: V, key: K, index: number) => unknown): number;
findLastKey<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): P | undefined;
findLastKey(predicate: (value: V, key: K, index: number) => unknown): K | undefined;
findLastValue<P extends K, U extends V>(predicate: (value: V, key: K, index: number) => this is O<{
[K in P]: U;
}>): U | undefined;
findLastValue(predicate: (value: V, key: K, index: number) => unknown): V | undefined;
/**
* Find the last matched key in the object.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLastIndex
*/
findLastKey<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): K | undefined;
/**
* Similar to `findLast()` method. But returns only the `value` (instead of `[key, value]`).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLast
*/
findLastValue<P extends K, U extends V>(predicateFn: (value: V, key: K, index: number) => this is O<P, U>): V | undefined;
/**
* NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) sort the object by keys and values (and return a

@@ -119,7 +131,7 @@ * NEW object) (chainable).

*/
sort(compareFn?: (a: [K, V], b: [K, V]) => number): { [P in K]: V; };
sort(compareFn?: (a: [K, V], b: [K, V]) => number): Obj;
/** Filter out given key(s) from the object. */
omit<P extends K>(...keys: P[]): { [Key_1 in Exclude<K, P>]: V; };
omit<P extends K>(...keys: P[]): { [Q in Exclude<K, P>]: V; };
/** Filter out given key(s) from the object. (chainable) */
oOmit<P extends K>(...keys: P[]): O<Exclude<K, P>, V>;
oOmit<P extends K>(...keys: P[]): O<{ [Q in Exclude<K, P>]: V; }, Exclude<K, P>, { [Q in Exclude<K, P>]: V; }[Exclude<K, P>]>;
/**

@@ -134,3 +146,3 @@ * Similar to `oSort()` method. But operates based on the `value`s only (instead of `[key, value]`s).

*/
sortByValues(compareFn?: (v1: V, v2: V) => number): { [P in K]: V; };
sortByValues(compareFn?: (v1: V, v2: V) => number): Obj;
shallowEqual(object: Record<K, any>): boolean;

@@ -142,3 +154,3 @@ /**

*/
oFlip(): O<V extends string ? V : never, K>;
oFlip(): O<{ [K_1 in V extends Key ? V : never]: K_1; }>;
/**

@@ -149,3 +161,3 @@ * Swap (mirror) key-value pairs.

*/
flip(): { [P in V extends string ? V : never]: K; };
flip(): { [K_1 in V extends string | number | symbol ? V : never]: K_1; };
/**

@@ -165,3 +177,3 @@ * NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) reverse the object (and return a NEW object)

*/
reverse(): { [P in K]: V; };
reverse(): Obj;
/**

@@ -180,3 +192,3 @@ * **`O.fromKeys(o(this.values[0]).keys, k1 => O.fromKeys(this.keys, k2 => this.o[k2][k1]))`**

*/
oTranspose(): this | O<V extends object ? keyof V extends string ? keyof V : never : never, Record<K, any>>;
oTranspose(): O<{ [VK in V extends object ? keyof V : never]: { [P in K]: V[keyof V]; }; }, V extends object ? keyof V : never, { [VK in V extends object ? keyof V : never]: { [P in K]: V[keyof V]; }; }[V extends object ? keyof V : never]>;
/**

@@ -193,3 +205,3 @@ * @example

*/
transpose(): { [P in K]: V; } | { [P_1 in V extends object ? keyof V extends string ? keyof V : never : never]: Record<K, any>; };
transpose(): { [VK in V extends object ? keyof V : never]: { [P in K]: V[keyof V]; }; };
}

@@ -208,4 +220,4 @@ /**

*/
declare const o: <K extends string, V>(object: { [P in K]?: V | undefined; }) => O<K, V>;
declare const o: <Obj extends object, K extends Key = keyof Obj, V = Obj[keyof Obj]>(object: Obj) => O<Obj, K, V>;
export default o;
type Key = string;
type Key = keyof any;

@@ -34,8 +34,4 @@ /**

}
/**
* Filter the object by keys and values (chainable).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
*/
oFilter(predicateFn) {
this.entries = this.entries.filter(([k, v], i) => predicateFn(v, k, i));
oFilter(predicate) {
this.entries = this.entries.filter(([k, v], i) => predicate(v, k, i));
return this;

@@ -47,4 +43,4 @@ }

*/
filter(predicateFn) {
return this.oFilter(predicateFn).o;
filter(predicate) {
return this.oFilter(predicate).o;
}

@@ -57,12 +53,4 @@ /**

if (!this.entries.length)
return this;
const [firstKey, firstValue] = this.entries[0];
const testReturnType = mapper(firstValue, firstKey, 0);
// @ts-expect-error
this.entries =
testReturnType instanceof Array &&
testReturnType.length === 2 &&
['string', 'number', 'symbol'].includes(typeof testReturnType[0])
? this.entries.map(([k, v], i) => mapper(v, k, i))
: this.entries.map(([k, v], i) => [k, mapper(v, k, i)]);
return this; // @ts-expect-error
this.entries = this.entries.map(([k, v], i) => [k, mapper(v, k, i)]);
return this;

@@ -78,2 +66,19 @@ }

/**
* Map the object by keys and values (chainable).
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
*/
oMapKeyValue(mapper) {
if (!this.entries.length)
return this; // @ts-expect-error
this.entries = this.entries.map(([k, v], i) => mapper(v, k, i));
return this;
}
/**
* Map the object by keys and values.
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
*/
mapKeyValue(mapper) {
return this.oMapKeyValue(mapper).o;
}
/**
* `forEach`-loop method for objects.

@@ -91,4 +96,4 @@ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

*/
some(predicateFn) {
return this.entries.some(([k, v], i) => predicateFn(v, k, i));
some(predicate) {
return this.entries.some(([k, v], i) => predicate(v, k, i));
}

@@ -99,4 +104,4 @@ /**

*/
every(predicateFn) {
return this.entries.every(([k, v], i) => predicateFn(v, k, i));
every(predicate) {
return this.entries.every(([k, v], i) => predicate(v, k, i));
}

@@ -124,4 +129,4 @@ /**

*/
find(predicateFn) {
const found = this.entries.find(([k, v], i) => predicateFn(v, k, i));
find(predicate) {
const found = this.entries.find(([k, v], i) => predicate(v, k, i));
return found && [found[0], found[1]];

@@ -133,4 +138,4 @@ }

*/
findIndex(predicateFn) {
return this.entries.findIndex(([k, v], i) => predicateFn(v, k, i));
findIndex(predicate) {
return this.entries.findIndex(([k, v], i) => predicate(v, k, i));
}

@@ -141,4 +146,4 @@ /**

*/
findKey(predicateFn) {
return this.entries.find(([k, v], i) => predicateFn(v, k, i))?.[0];
findKey(predicate) {
return this.entries.find(([k, v], i) => predicate(v, k, i))?.[0];
}

@@ -149,4 +154,4 @@ /**

*/
findValue(predicateFn) {
return this.entries.find(([k, v], i) => predicateFn(v, k, i))?.[1];
findValue(predicate) {
return this.entries.find(([k, v], i) => predicate(v, k, i))?.[1];
}

@@ -157,4 +162,4 @@ /**

*/
findLast(predicateFn) {
const found = this.entries.findLast(([k, v], i) => predicateFn(v, k, i));
findLast(predicate) {
const found = this.entries.findLast(([k, v], i) => predicate(v, k, i));
return found && [found[0], found[1]];

@@ -166,4 +171,4 @@ }

*/
findLastIndex(predicateFn) {
return this.entries.findLastIndex(([k, v], i) => predicateFn(v, k, i));
findLastIndex(predicate) {
return this.entries.findLastIndex(([k, v], i) => predicate(v, k, i));
}

@@ -174,4 +179,4 @@ /**

*/
findLastKey(predicateFn) {
return this.entries.findLast(([k, v], i) => predicateFn(v, k, i))?.[0];
findLastKey(predicate) {
return this.entries.findLast(([k, v], i) => predicate(v, k, i))?.[0];
}

@@ -182,4 +187,4 @@ /**

*/
findLastValue(predicateFn) {
return this.entries.findLast(([k, v], i) => predicateFn(v, k, i))?.[1];
findLastValue(predicate) {
return this.entries.findLast(([k, v], i) => predicate(v, k, i))?.[1];
}

@@ -299,3 +304,3 @@ /**

Object.fromEntries(this.entries.map(([key2, value2]) => [
key2,
key2, // The magic:
// @ts-expect-error

@@ -336,1 +341,3 @@ value2[key1], // === `this.o[key2][key1]` (Swap `key1` and `key2`)!

export default o;
const obj = { a: 1, b: 2, c: 3 };
o(obj).filter((value) => value > 1);
{
"name": "objectools",
"version": "3.1.0",
"version": "4.0.0",
"description": "Useful easy-to-use utilities for JavaScript objects",

@@ -45,3 +45,3 @@ "keywords": [

"prettier.format": "prettier --write .",
"build": "tsc --project tsconfig.build.json",
"build": "rm -rf dist tsconfig.tsbuildinfo && tsc --project tsconfig.build.json",
"prepublishOnly": "npm run prettier.format & npm run build",

@@ -58,3 +58,3 @@ "patch-version": "npm version patch --no-git-tag-version",

"@types/node": "^20.5.9",
"typescript": "~5.2.2"
"typescript": "~5.5.4"
},

@@ -61,0 +61,0 @@ "engines": {

@@ -19,3 +19,3 @@ # ObjecTools

- [`.filter()`](#filter)
- [`.map()`](#map)
- [`.map()`, `.mapKeyValue`](#map)
- [`.keys`, `.values`, `.entries`, `.length`](#keys-values-entries-length)

@@ -40,3 +40,3 @@ - [`.find()`, `.findIndex()`, `.findKey()`, `.findValue()`](#find-findindex-findkey-findvalue)

- [`filter()`](#filter)
- [`map()`](#map), `forEach()`
- [`map() & mapKeyValue()`](#map), `forEach()`
- [`find()`](#find-findindex-findkey-findvalue), [`findIndex()`](#find-findindex-findkey-findvalue), [`findLast()`](#findlast-findlastindex-findlastkey-findlastvalue), [`findLastIndex()`](<(#findlast-findlastindex-findlastkey-findlastvalue)>)

@@ -101,3 +101,3 @@ - [`indexOf()`, `lastIndexOf()`, `indexOfKey()`](<(#indexof-lastindexof-indexofkey)>)

o({a: 1, b: 2, c: 3}).map((value) => value * 2) // {a: 2, b: 4, c: 6}
o({a: 1, b: 2, c: 3}).map((value, key) => [key.toUpperCase(), value - 1]) // {A: 0, B: 1, C: 2}
o({a: 1, b: 2, c: 3}).mapKeyValue((value, key) => [key.toUpperCase(), value - 1]) // {A: 0, B: 1, C: 2}
```

@@ -104,0 +104,0 @@