Skip to content

utils

This is a super tiny package which includes a set of well-typed simple utilities, which is just useful for any kind of project or used inside other Reatom packages. A lot of edge cases are missing here, but this is a nice start for any TypeScript project.

included in @reatom/framework

Functions

noop

Just a no-operation function with any types to put it anywhere you want as a plug.

sleep

A promise creation function which relies on the passed timeout in milliseconds.

isObject

Classic typeof value === 'object' && value !== null check with a smart types.

isShallowEqual

Shallow comparison of two values, supports primitives, objects, dates, arrays, maps, and sets.

isDeepEqual

Recursive comparison of two values, supports primitives, objects, dates, arrays, maps, and sets. Cyclic references supported too.

assign

Object.assign with fixed types, equal properties replaced instead of changed to a union type.

merge

assign which set an empty object to the first argument.

keys

Object.keys with fixed types.

entries

Object.entries with fixed types.

pick

Get a new object only with the properties of the passed keys.

omit

Get a new object without the properties of the passed keys.

jsonClone

Typesafe shortcut to JSON.parse(JSON.stringify(value)). UsestructuredClone if your environment supports it.

random

Returns random integer. Parameters (min = 0 and max = Number.MAX_SAFE_INTEGER - 1) should be integers too.

nonNullable

Asserts a non-nullable type of the passed value, and accepts an optional message as the second argument for an error.

toStringKey

This function converts any kind of data to a string. It is like a hash function, but the length of the resulted string is close to JSON.stringify output or a unique string. Map and Set are supported, but rely on the order (as it is a required property of these data structures in the standard), while keys of the plain object are sorted automatically. If the value is a function, symbol, an object with custom constructor, or an object with cyclic references, it is a nominal value which cannot be represented in a readable string and will be saved as a unique string (a kind + random number). The nominal results are memoized by a WeakMap; you can memoize all objects transformations by the optional immutable parameter if you think they will never change.

import { toStringKey } from '@reatom/utils'
toStringKey(new Map([[1, {}]]) === toStringKey(new Map([[1, {}]]) /// true

toAbortError

Parse the passed value to DOMException instance with name = 'AbortError'.

throwIfAborted

Accepts an optional AbortController and throws an error if the signal is aborted. A ponyfil to AbortSignal API: throwIfAborted

isAbort

Do the check value instanceof Error && value.name === 'AbortError'

throwAbort

Convert string message to abort error, abort a controller if passed, throw the error. Useful for correct type inference.

Constants

MAX_SAFE_TIMEOUT

2 ** 31 - 1 - https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value

Types

Plain

Removes named generics and shows just a plain type.

Values

export type Values<T> = T[keyof T]

OmitValues

Omits the object keys for passed values types.

PickValues

Picks the object keys for passed values types.

Assign

The type of assign

AbortError

The missed type of all common environments.