import { FindOperator } from './FindOperator' import { EqualOperator } from './EqualOperator' export class InstanceChecker { static isFindOperator(obj: unknown): obj is FindOperator { return this.check(obj, 'FindOperator') || this.check(obj, 'EqualOperator') } static isEqualOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'equal' } static isAnyOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'any' } static isContainsOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'contains' } static isEndsWithOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'endsWith' } static isGreaterThanOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'greaterThan' } static isGreaterThanOrEqualOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'greaterOrEqual' } static isLessThanOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'lessThan' } static isLessThanOrEqualOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'lessThanOrEqual' } static isHasOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'has' } static isNotOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'not' } static isOrOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'or' } static isAndOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'and' } static isStartsWithOperator(obj: unknown): obj is EqualOperator { return this.check(obj, 'FindOperator') && (obj as FindOperator).type === 'startsWith' } private static check(obj: unknown, name: string) { return ( typeof obj === 'object' && obj !== null && (obj as { '@instanceof': Symbol })['@instanceof'] === Symbol.for(name) ) } }