UNPKG

@technobuddha/library

Version:
41 lines 2.14 kB
import { isFunction } from "./is-function.js"; import { isPrimitive } from "./is-primitive.js"; /** * Collapses an array of values into a flat array with `null` and `undefined` elements removed. * * Each argument can be: * - `T` * - `null` * - `undefined` * - a function returning `T` or `null` or `undefined` or an array * - An iterable returning `T` or `null` or `undefined` * * The function flattens all arguments, filters out `null`, and `undefined` values, * and returns the resulting array. * @typeParam T - The primitive type that can be collapsed. * @param args - The values to collapse, which may be `T`, generators, iterables, or functions. * @returns An array of `T`, with all `null`, and `undefined` values removed. * @example * ```typescript * collapse( * "hello", * ["world", null, "foo"], * function* () { yield "bar"; yield undefined; yield ["baz"]; }, * () => "qux", * null, * undefined * ); * // Returns: ["hello", "world", "foo", "bar", "baz", "qux"] * ``` * @group Array * @category Operations */ export function collapse(...args) { return args .flatMap((arg) => { const a = isFunction(arg) ? arg() : arg; return isPrimitive(a) ? a : Array.from(a); }) .filter((a) => a != null); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29sbGFwc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWdEaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBMEMsR0FBRyxJQUFzQjtJQUN6RixPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNmLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUV4QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMifQ==