empty-php
Version:
Exact replica of the PHP empty function in for JavaScript and TypeScript
91 lines (78 loc) • 3.05 kB
text/typescript
import type {Empty, EmptyArray, EmptyBoolean, EmptyNumber, EmptyObject, EmptyString, Undefined} from "./types";
/**
* Determines if a boolean is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: boolean | Undefined): value is EmptyBoolean;
/**
* Determines if a string is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: string | Undefined): value is EmptyString;
/**
* Determines if a number is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: number | Undefined): value is EmptyNumber;
/**
* Determines if an array is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: unknown[] | Undefined): value is EmptyArray;
/**
* Determines if a complex object is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty<T extends object>(value?: T | Undefined): value is Undefined;
/**
* Determines if an object is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: object | Undefined): value is EmptyObject;
/**
* Determines if the input value is empty
* @param value The value to determine if empty
* @returns true if the value is empty, false otherwise
* @see https://www.php.net/manual/en/function.empty.php
*/
export function empty(value?: unknown): value is Empty {
// If value is null on undefined:
if (value == null) return true;
// By types:
if ('boolean' == typeof value) return !value;
if ('number' == typeof value) return value === 0;
if ('string' == typeof value) return value === '0' || value.length === 0;
// Empty arrays:
if (Array.isArray(value)) return value.length === 0;
// Empty objects:
if (value.toString == Object.prototype.toString) {
switch (value.toString()) {
case '[object File]':
case '[object Map]':
case '[object Set]': {
// @ts-expect-error Artifact from TS migration
return value.size === 0
}
case '[object Object]': {
for (let key in value) {
if (Object.prototype.hasOwnProperty.call(value, key)) return false
}
return true
}
}
}
// Everything else...
return false
}