"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrimitivePrototype = exports.IterResult = void 0; exports.isObject = isObject; exports.isPlainObject = isPlainObject; exports.isFunction = isFunction; exports.isIterable = isIterable; exports.isString = isString; exports.isNumber = isNumber; exports.Null = Null; exports.type = type; function isObject(value) { return typeof value === 'object' && !Array.isArray(value); } function isPlainObject(value) { return Object.getPrototypeOf(value) === Object.prototype; } function isFunction(value) { return value != null && typeof value === 'function'; } function isIterable(value) { return isFunction(value[Symbol.iterator]); } function isString(value) { return typeof value === 'string'; } function isNumber(value) { return !isNaN(value); } class IterResult { static Next(value) { return { done: false, value }; } static Done() { return { done: true, value: undefined }; } } exports.IterResult = IterResult; function Null(...args) { return null; } exports.PrimitivePrototype = Object.freeze({ undefined: Null, boolean: Boolean, number: Number, bigint: BigInt, string: String, symbol: Symbol, object: Object, function: Function }); function type(value) { switch (true) { case Array.isArray(value): return Array; case isPlainObject(value): return Object; case isObject(value): return value.constructor; default: return exports.PrimitivePrototype[typeof value]; } }