/** * Created on 1401/6/11 (2022/9/2). * @author {@link https://mirismaili.github.io S. Mahdi Mir-Ismaili} */ export declare class O { entries: [K, V][]; constructor(object: Obj); get o(): Obj; get keys(): Set; get values(): V[]; get length(): number; static oFromKeys(keys: K[], value: V | ((key: K, index: number) => V)): O<{ [P in K]: V; }, K, { [P in K]: V; }[K]>; static fromKeys(keys: K[], value: V | ((key: K, index: number) => V)): { [P in K]: V; }; /** * Filter the object by keys and values (chainable). * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter */ oFilter

(predicate: (value: V, key: K, index: number) => this is O<{ [K in P]: U; }>): O<{ [K in P]: U; }>; oFilter

(predicate: (value: V, key: K, index: number) => unknown): O<{ [K in P]: U; }>; filter

(predicate: (value: V, key: K, index: number) => this is O<{ [K in P]: U; }>): { [K in P]: U; }; filter

(predicate: (value: V, key: K, index: number) => unknown): { [K 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

(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

(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 */ oMapKeyValue

(mapper: (value: V, key: K, index: number) => [P, 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 */ mapKeyValue

(mapper: (value: V, key: K, index: number) => [P, U]): { [K_1 in P]: U; }; /** * `forEach`-loop method for objects. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach */ forEach(callback: (value: V, key: K, index: number) => void): void; /** * `some` method for objects. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some */ some(predicate: (value: V, key: K, index: number) => unknown): boolean; /** * `every` method for objects. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every */ every(predicate: (value: V, key: K, index: number) => unknown): boolean; /** * `indexOf` method for objects. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf */ indexOf(value: V): number; indexOfKey(key: K): number; /** * `lastIndexOf` method for objects. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf */ lastIndexOf(value: V): number; find

(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 index in the object. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex */ findIndex(predicate: (value: V, key: K, index: number) => unknown): number; findKey

(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

(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

(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 the last matched index in the object. * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLastIndex */ findLastIndex(predicate: (value: V, key: K, index: number) => unknown): number; findLastKey

(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

(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; /** * NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) sort the object by keys and values (and return a * NEW object) (chainable). * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted */ oSort(compareFn?: (a: [K, V], b: [K, V]) => number): this; /** * NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) sort the object by keys and values (and return a * NEW object). * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted */ sort(compareFn?: (a: [K, V], b: [K, V]) => number): Obj; /** Filter out given key(s) from the object. */ omit

(...keys: P[]): { [Q in Exclude]: V; }; /** Filter out given key(s) from the object. (chainable) */ oOmit

(...keys: P[]): O<{ [Q in Exclude]: V; }, Exclude, { [Q in Exclude]: V; }[Exclude]>; /** * Similar to `oSort()` method. But operates based on the `value`s only (instead of `[key, value]`s). * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted */ oSortByValues(compareFn?: (v1: V, v2: V) => number): this; /** * Similar to `sort()` method. But operates based on the `value`s only (instead of `[key, value]`s). * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted */ sortByValues(compareFn?: (v1: V, v2: V) => number): Obj; shallowEqual(object: Record): boolean; /** * Swap (mirror) key-value pairs. * @example * {a: 'x', b: 'y'} --> {x: 'a', y: 'b'} */ oFlip(): O<{ [K_1 in V extends Key ? V : never]: K_1; }>; /** * Swap (mirror) key-value pairs. * @example * {a: 'x', b: 'y'} --> {x: 'a', y: 'b'} */ flip(): { [K_1 in V extends string | number | symbol ? V : never]: K_1; }; /** * NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) reverse the object (and return a NEW object) * (chainable). * @example * {a: 'x', b: 'y'} --> {b: 'y', a: 'x'} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed */ oReverse(): this; /** * NOT [IN-PLACE](https://en.wikipedia.org/wiki/In-place_algorithm) reverse the object (and return a NEW object). * @example * {a: 'b', c: 'd'} --> {b: 'y', a: 'x'} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed */ reverse(): Obj; /** * **`O.fromKeys(o(this.values[0]).keys, k1 => O.fromKeys(this.keys, k2 => this.o[k2][k1]))`** *
*(except error handling, etc.)* * @example * { * x: {a: 1, b: 2}, * y: {a: 3, b: 4}, * z: {a: 5, b: 6}, * } --> { * a: {x: 1, y: 3, z: 5}, * b: {x: 2, y: 4, z: 6}, * } */ 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]>; /** * @example * { * x: {a: 1, b: 2}, * y: {a: 3, b: 4}, * z: {a: 5, b: 6}, * } --> { * a: {x: 1, y: 3, z: 5}, * b: {x: 2, y: 4, z: 6}, * } */ transpose(): { [VK in V extends object ? keyof V : never]: { [P in K]: V[keyof V]; }; }; } /** * Provide (chainable) useful utilities (`map`, `filter`, ...) for javascript **`Object`**s (like **`Array`**s). * @example * // Map values (and/or keys): * const newObject = o(myObject).map(...) // => an `Object` * // Chain methods (`map` then `filter`): * const anotherObject = o(myObject).oMap(...).filter(...) // => an `Object` * // Filter then access keys/values: * const filteredKeys = o(myObject).oFilter(...).keys // or `.values` // => an `Array` * // Access `length`: * const length = o(myObject).length // => a `number` */ declare const o: (object: Obj) => O; export default o; type Key = keyof any;