UNPKG

typedash

Version:

modern, type-safe collection of utility functions

1 lines 5.26 kB
{"version":3,"sources":["../../src/functions/isArray/isArray.ts","../../src/functions/isEmpty/isEmpty.ts"],"names":[],"mappings":";AAGO,IAAM,UAAmB,MAAM;;;AC+F/B,SAAS,QAAW,OAA0B;AACnD,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,KAAK,KAAK,OAAO,UAAU,UAAU;AAC/C,WAAO,MAAM,WAAW;AAAA,EAC1B;AAEA,MAAI,iBAAiB,OAAO,iBAAiB,KAAK;AAChD,WAAO,MAAM,SAAS;AAAA,EACxB;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,OAAO,KAAK,KAAK,EAAE,WAAW;AAAA,EACvC;AAEA,SAAO;AACT","sourcesContent":["import { Many, Maybe } from '../../types';\n\n// eslint-disable-next-line prefer-destructuring\nexport const isArray: IsArray = Array.isArray;\n\ninterface IsArray {\n /**\n * The same as `Array.isArray` but with a better type guard.\n * @param value The value to check.\n * @returns `true` if the value is an array, `false` otherwise.\n * @example\n * ```ts\n * isArray([1, 2, 3]) // true\n * isArray('foo') // false\n * ```\n */\n <T>(value: Maybe<Array<ArrayElement<T>>>): value is NonNullable<typeof value>;\n /**\n * The same as `Array.isArray` but with a better type guard.\n * @param value The value to check.\n * @returns `true` if the value is an array, `false` otherwise.\n * @example\n * ```ts\n * isArray([1, 2, 3]) // true\n * isArray('foo') // false\n * ```\n */\n <T>(\n value: Maybe<ReadonlyArray<ArrayElement<T>>>\n ): value is NonNullable<typeof value>;\n\n /**\n * The same as `Array.isArray` but with a better type guard.\n * @param value The value to check.\n * @returns `true` if the value is an array, `false` otherwise.\n * @example\n * ```ts\n * isArray([1, 2, 3]) // true\n * isArray('foo') // false\n * ```\n */\n <T>(value: Maybe<Many<T>>): value is NonNullable<readonly T[]>;\n /**\n * The same as `Array.isArray` but with a better type guard.\n * @param value The value to check.\n * @returns `true` if the value is an array, `false` otherwise.\n * @example\n * ```ts\n * isArray([1, 2, 3]) // true\n * isArray('foo') // false\n * ```\n */\n <T>(value: unknown): value is readonly T[];\n}\n\ntype ArrayElement<T> = T extends ReadonlyArray<infer U> ? U : never;\n","import { EmptyObject, Maybe } from '../../types';\nimport { isArray } from '../isArray';\n\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty('') // true\n * isEmpty('abc') // false\n * ```\n */\nexport function isEmpty(value: string): value is '';\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty(0) // true\n * isEmpty(1) // false\n * ```\n */\nexport function isEmpty(value: number): value is number;\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty(new Map()) // true\n * isEmpty(new Map([['a', 1]])) // false\n *\n * isEmpty(new Set()) // true\n * isEmpty(new Set([1])) // false\n * ```\n */\nexport function isEmpty(\n value: Maybe<ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>>\n): boolean;\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty([]) // true\n * isEmpty([1]) // false\n * ```\n */\nexport function isEmpty<T extends readonly unknown[] | EmptyArray>(\n value: Maybe<T>\n): value is Maybe<T & EmptyArray>;\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty({}) // true\n * isEmpty({ a: 1 }) // false\n * ```\n */\nexport function isEmpty<T extends object>(\n value: Maybe<EmptyObject<T> | T>\n): value is T & Record<string, never>;\n/**\n * Returns whether the input value is empty.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n * @example\n * ```ts\n * isEmpty(null) // true\n * isEmpty(undefined) // true\n * isEmpty(0) // true\n * isEmpty('') // true\n * isEmpty([]) // true\n * isEmpty({}) // true\n * isEmpty(new Map()) // true\n * isEmpty(new Set()) // true\n * isEmpty(false) // true\n *\n * isEmpty(true) // false\n * isEmpty(1) // false\n * isEmpty('abc') // false\n * isEmpty([1]) // false\n * isEmpty({ a: 1 }) // false\n * isEmpty(new Map([['a', 1]])) // false\n * isEmpty(new Set([1])) // false\n * ```\n */\nexport function isEmpty<T>(value: Maybe<T>): boolean;\n/**\n * Implementation for all overloads.\n * @param value The value to check.\n * @returns Whether the input value is empty.\n */\nexport function isEmpty<T>(value: Maybe<T>): boolean {\n if (value == null) {\n return true;\n }\n\n if (isArray(value) || typeof value === 'string') {\n return value.length === 0;\n }\n\n if (value instanceof Map || value instanceof Set) {\n return value.size === 0;\n }\n\n if (typeof value === 'number') {\n return !value;\n }\n\n if (typeof value === 'object') {\n return Object.keys(value).length === 0;\n }\n\n return false;\n}\n\ntype EmptyArray = [];\n"]}