nunof07/smalltypes

View on GitHub
src/main/scalar/IsEmptyObject.ts

Summary

Maintainability
A
0 mins
Test Coverage
import {
    Scalar,
    ScalarLike,
    ScalarOf
} from '@main';

/**
 * Determines if scalar or value is an empty object ({}).
 * Null and undefined do not pass as empty object.
 */
export class IsEmptyObject<T> implements Scalar<boolean> {
    /**
     * Scalar.
     */
    private readonly scalar: Scalar<T>;

    /**
     * Ctor.
     * @param value Value.
     */
    constructor(value: ScalarLike<T>) {
        this.scalar = new ScalarOf(value);
    }

    /**
     * Type determinant.
     */
    public isScalar(): true {
        return true;
    }

    /**
     * Get the value.
     */
    public value(): boolean {
        const converted: T = this.scalar.value();

        return converted !== null
            && converted !== undefined
            && Object.keys(converted).length === 0
            && converted.constructor === Object;
    }
}