node-object-hash
Version:
Node.js object hash library with properties/arrays sorting to provide constant hashes
185 lines • 4.45 kB
TypeScript
import type { Hashable } from './hasher';
/**
* Advanced coerce options
*/
export interface CoerceOptions {
/**
* If `true` converts booleans to string `1` and `0`
* @example
* // coerce.boolean = true
* true === 1;
* false === '0';
* @example
* // coerce.boolean = true
* true !== 1;
* false !== '0'
* @default true
*/
boolean?: boolean;
/**
* If `true` converts numbers to strings
* @example
* // coerce.number = true
* 1 === '1';
* @example
* // coerce.number = false
* 1 !== '1';
* @default true
*/
number?: boolean;
/**
* If `true` converts BigInt to string
* @example
* // coerce.bigint = true
* 1n === '1';
* @example
* // coerce.bigint = false
* 1n !== '1';
* @default true
*/
bigint?: boolean;
/**
* If `true` strings and coerced string will be equal to coerced numbers, booleans, etc
* @example
* // coerce.string = true
* '1' === true
* @example
* // coerce.string = false
* '1' !== 1
* @default true
*/
string?: boolean;
/**
* If `true` undefined will be equal to empty string
* @example
* // coerce.undefined = true
* undefined === ''
* @example
* // coerce.undefined = false
* undefined !== ''
* @default true
*/
undefined?: boolean;
/**
* If `true` null will be equal to empty string
* @example
* // coerce.null = true
* null === ''
* @example
* // coerce.null = false
* null !== ''
* @default true
*/
null?: boolean;
/**
* If `true` all symbols will have eual representation
* @example
* // coerce.symbol = true
* Symbol.for('a') === Symbol.for('b')
* @example
* // coerce.symbol = false
* Symbol.for('a') !== Symbol.for('b')
* @default true
*/
symbol?: boolean;
/**
* If `true` functions may equal the same formatted strings
* @example
* // coerce.function = true
* @example
* // coerce.function = false
* @default true
*/
function?: boolean;
/**
* If `true` dates may equal the same formatted strings
* @example
* // coerce.date = true
* @example
* // coerce.date = false
* @default true
*/
date?: boolean;
/**
* If `true` set will be coerced to array
* @example
* // coerce.set = true
* @example
* // coerce.set = false
* @default true
*/
set?: boolean;
}
/**
* Advanced sort options
*/
export interface SortOptions {
/**
* If `true` sort array entries before hash
*/
array?: boolean;
/**
* If `true` sort TypedArray entries before hash
*/
typedArray?: boolean;
/**
* If `true` sort object entries before hash
*/
object?: boolean;
/**
* If `true` sort set entries before hash
*/
set?: boolean;
/**
* If `true` sort map entries before hash
*/
map?: boolean;
/**
* If `true` sort BigInt entries before hash
*/
bigint?: boolean;
}
/**
* Advanced trim options
*/
export interface TrimOptions {
/**
* If `true` replaces multiple space with one and trims whitespaces in strings
*/
string?: boolean;
/**
* If `true` replaces multiple space with one and trims whitespaces in function body
*/
function?: boolean;
}
/**
* Object sorter options
*/
export interface SorterOptions {
/**
* If `true` enables type coercion.
* Advanced coerce options could be provided as object
* @default true
*/
coerce?: boolean | CoerceOptions | undefined;
/**
* If `true` enables sorting.
* Advanced sorting options could be provided as object
* @default true
*/
sort?: boolean | SortOptions | undefined;
/**
* If `true` enables trimming and multiple whitespace replacement.
* Advanced sorting options could be provided as object.
* @default false
*/
trim?: boolean | TrimOptions | undefined;
}
export type StringifyFn = <T>(obj: Hashable | T) => string;
/**
* Object sorter consturctor
* @param options object transformation options
* @return function that transforms object to strings
*/
export declare const objectSorter: (options?: SorterOptions) => StringifyFn;
//# sourceMappingURL=objectSorter.d.ts.map