convex-helpers
Version:
A collection of useful code to complement the official convex package.
104 lines (103 loc) • 3.75 kB
TypeScript
/**
* asyncMap returns the results of applying an async function over an list.
*
* The list can even be a promise, or an iterable like a Set.
* @param list - Iterable object of items, e.g. an Array, Set, Object.keys
* @param asyncTransform
* @returns
*/
export declare function asyncMap<FromType, ToType>(list: Iterable<FromType> | Promise<Iterable<FromType>>, asyncTransform: (item: FromType, index: number) => Promise<ToType>): Promise<ToType[]>;
/**
* Filters out null elements from an array.
* @param list List of elements that might be null.
* @returns List of elements with nulls removed.
*/
export declare function pruneNull<T>(list: (T | null)[]): T[];
export declare class NullDocumentError extends Error {
}
/**
* Throws if there is a null element in the array.
* @param list List of elements that might have a null element.
* @returns Same list of elements with a refined type.
*/
export declare function nullThrows<T>(doc: T | null, message?: string): T;
/**
* pick helps you pick keys from an object more concisely.
*
* e.g. `pick({a: v.string(), b: v.number()}, ["a"])` is equivalent to
* `{a: v.string()}`
* The alternative could be something like:
* ```js
* const obj = { a: v.string(), b: v.number() };
* // pick does the following
* const { a } = obj;
* const onlyA = { a };
* ```
*
* @param obj The object to pick from. Often like { a: v.string() }
* @param keys The keys to pick from the object.
* @returns A new object with only the keys you picked and their values.
*/
export declare const pick: <T extends Record<string, any>, Keys extends (keyof T)[]>(obj: T, keys: Keys) => { [K in Keys[number]]: T[K]; };
/**
* omit helps you omit keys from an object more concisely.
*
* e.g. `omit({a: v.string(), b: v.number()}, ["a"])` is equivalent to
* `{b: v.number()}`
*
* The alternative could be something like:
* ```js
* const obj = { a: v.string(), b: v.number() };
* // omit does the following
* const { a, ...rest } = obj;
* const withoutA = rest;
* ```
*
* @param obj The object to return a copy of without the specified keys.
* @param keys The keys to omit from the object.
* @returns A new object with the keys you omitted removed.
*/
export declare const omit: <T extends Record<string, any>, Keys extends (keyof T)[]>(obj: T, keys: Keys) => BetterOmit<T, Keys[number]>;
declare const error: unique symbol;
export type Error<Reason extends string> = Reason & {
__error: typeof error;
};
export type EmptyObject = Record<string, never>;
/**
* An `Omit<>` type that:
* 1. Applies to each element of a union.
* 2. Preserves the index signature of the underlying type.
*/
export type BetterOmit<T, K extends keyof T> = {
[Property in keyof T as Property extends K ? never : Property]: T[Property];
};
/**
* Hack! This type causes TypeScript to simplify how it renders object types.
*
* It is functionally the identity for object types, but in practice it can
* simplify expressions like `A & B`.
*/
export type Expand<ObjectType extends Record<any, any>> = ObjectType extends Record<any, any> ? {
[Key in keyof ObjectType]: ObjectType[Key];
} : never;
/**
* TESTS
*/
/**
* Tests if two types are exactly the same.
* Taken from https://github.com/Microsoft/TypeScript/issues/27024#issuecomment-421529650
* (Apache Version 2.0, January 2004)
*/
export type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
/**
* A utility for both compile-time type assertions and runtime assertions.
*
* @example
* ```ts
* // Compile-time assertion
* assert<Equals<1, 1>>();
* ```
* @param arg A value to assert the truthiness of.
*/
export declare function assert<T extends true>(arg?: T): void;
export {};