UNPKG

@oxog/kindof

Version:

Zero-dependency advanced type detection library with TypeScript support, plugin system, and 100% test coverage

1 lines 50.4 kB
{"version":3,"file":"index.mjs","sources":["../../src/guards/primitives.ts","../../src/guards/objects.ts","../../src/guards/collections.ts","../../src/core/constants.ts","../../src/core/native-types.ts","../../src/core/modern-types.ts","../../src/core/kind-of.ts","../../src/guards/index.ts"],"sourcesContent":["export function isUndefined(value: unknown): value is undefined {\n  return value === undefined;\n}\n\nexport function isNull(value: unknown): value is null {\n  return value === null;\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean';\n}\n\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number';\n}\n\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string';\n}\n\nexport function isSymbol(value: unknown): value is symbol {\n  return typeof value === 'symbol';\n}\n\nexport function isBigInt(value: unknown): value is bigint {\n  return typeof value === 'bigint';\n}\n\nexport function isPrimitive(value: unknown): value is undefined | null | boolean | number | string | symbol | bigint {\n  return value === null || (typeof value !== 'object' && typeof value !== 'function');\n}\n\nexport function isNullish(value: unknown): value is undefined | null {\n  return value === null || value === undefined;\n}\n\nexport function isFalsy(value: unknown): value is false | 0   | 0n | '' | null | undefined {\n  return !value;\n}\n\nexport function isTruthy<T>(value: T): value is Exclude<T, false | 0   | 0n | '' | null | undefined> {\n  return !!value;\n}\n\nexport function isInteger(value: unknown): value is number {\n  return typeof value === 'number' && Number.isInteger(value);\n}\n\nexport function isSafeInteger(value: unknown): value is number {\n  return typeof value === 'number' && Number.isSafeInteger(value);\n}\n\nexport function isFinite(value: unknown): value is number {\n  return typeof value === 'number' && Number.isFinite(value);\n}\n\nexport function isNaN(value: unknown): value is number {\n  return typeof value === 'number' && Number.isNaN(value);\n}\n\nexport function isInfinity(value: unknown): value is number {\n  return value === Infinity || value === -Infinity;\n}\n\nexport function isEmptyString(value: unknown): value is '' {\n  return value === '';\n}\n\nexport function isNumericString(value: unknown): value is string {\n  if (typeof value !== 'string') return false;\n  if (value === '') return false;\n  return !isNaN(Number(value)) && !isNaN(parseFloat(value));\n}\n\nexport function isJsonString(value: unknown): value is string {\n  if (typeof value !== 'string') return false;\n  try {\n    JSON.parse(value);\n    return true;\n  } catch {\n    return false;\n  }\n}","export function isObject(value: unknown): value is object {\n  return value !== null && typeof value === 'object';\n}\n\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  return Array.isArray(value);\n}\n\nexport function isFunction(value: unknown): value is (...args: any[]) => any {\n  return typeof value === 'function';\n}\n\nexport function isDate(value: unknown): value is Date {\n  return value instanceof Date;\n}\n\nexport function isRegExp(value: unknown): value is RegExp {\n  return value instanceof RegExp;\n}\n\nexport function isError(value: unknown): value is Error {\n  return value instanceof Error ||\n    (value !== null &&\n      typeof value === 'object' &&\n      'name' in value &&\n      'message' in value &&\n      'stack' in value);\n}\n\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n  return value instanceof Promise ||\n    (value !== null &&\n      typeof value === 'object' &&\n      'then' in value &&\n      typeof (value as { then?: unknown }).then === 'function');\n}\n\nexport function isArguments(value: unknown): value is IArguments {\n  return Object.prototype.toString.call(value) === '[object Arguments]';\n}\n\nexport function isBuffer(value: unknown): value is Buffer {\n  return typeof Buffer !== 'undefined' &&\n    value !== null &&\n    typeof value === 'object' &&\n    'isBuffer' in Buffer &&\n    (Buffer as typeof Buffer & { isBuffer: (obj: unknown) => boolean }).isBuffer(value);\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (!isObject(value)) return false;\n  \n  const proto = Object.getPrototypeOf(value);\n  if (proto === null) return true;\n  \n  const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor === 'function' &&\n    Ctor instanceof Ctor &&\n    Function.prototype.toString.call(Ctor) === Function.prototype.toString.call(Object);\n}\n\nexport function isEmpty(value: unknown): boolean {\n  if (value === null || value === undefined) return true;\n  if (typeof value === 'string' || Array.isArray(value)) return value.length === 0;\n  if (value instanceof Map || value instanceof Set) return value.size === 0;\n  if (isPlainObject(value)) return Object.keys(value).length === 0;\n  return false;\n}\n\nexport function isEmptyArray(value: unknown): value is [] {\n  return Array.isArray(value) && value.length === 0;\n}\n\nexport function isEmptyObject(value: unknown): value is Record<string, never> {\n  return isPlainObject(value) && Object.keys(value).length === 0;\n}\n\nexport function hasLength(value: unknown): value is { length: number } {\n  return value !== null &&\n    value !== undefined &&\n    (typeof value === 'object' || typeof value === 'string') &&\n    (typeof value === 'string' || 'length' in value) &&\n    typeof (value as any).length === 'number';\n}\n\nexport function hasSize(value: unknown): value is { size: number } {\n  return value !== null &&\n    value !== undefined &&\n    typeof value === 'object' &&\n    'size' in value &&\n    typeof (value as any).size === 'number';\n}\n\nexport function isArrayLike<T = unknown>(value: unknown): value is ArrayLike<T> {\n  return value !== null &&\n    value !== undefined &&\n    typeof value !== 'function' &&\n    hasLength(value) &&\n    (value as any).length >= 0 &&\n    (value as any).length <= Number.MAX_SAFE_INTEGER;\n}\n\nexport function isIterable<T = unknown>(value: unknown): value is Iterable<T> {\n  return value !== null &&\n    value !== undefined &&\n    typeof (value as any)[Symbol.iterator] === 'function';\n}\n\nexport function isAsyncIterable<T = unknown>(value: unknown): value is AsyncIterable<T> {\n  return value !== null &&\n    value !== undefined &&\n    typeof (value as any)[Symbol.asyncIterator] === 'function';\n}\n\nexport function isConstructor(value: unknown): value is new (...args: any[]) => any {\n  if (typeof value !== 'function') return false;\n  \n  try {\n    const testObj = {};\n    const BoundTest = value.bind(testObj);\n    new BoundTest();\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function isThenable<T = unknown>(value: unknown): value is PromiseLike<T> {\n  return value !== null &&\n    (typeof value === 'object' || typeof value === 'function') &&\n    'then' in value &&\n    typeof (value as any).then === 'function';\n}\n\nexport function isObservable(value: unknown): value is { subscribe: (...args: any[]) => any } {\n  return value !== null &&\n    typeof value === 'object' &&\n    'subscribe' in value &&\n    typeof (value as any).subscribe === 'function';\n}\n\nexport function isGenerator(value: unknown): value is Generator {\n  return value !== null &&\n    typeof value === 'object' &&\n    typeof (value as any).next === 'function' &&\n    typeof (value as any).throw === 'function' &&\n    typeof (value as any).return === 'function';\n}\n\nexport function isAsyncGenerator(value: unknown): value is AsyncGenerator {\n  return value !== null &&\n    typeof value === 'object' &&\n    typeof (value as any).next === 'function' &&\n    typeof (value as any).throw === 'function' &&\n    typeof (value as any).return === 'function' &&\n    isAsyncIterable(value);\n}\n\nexport function isGeneratorFunction(value: unknown): value is GeneratorFunction {\n  if (typeof value !== 'function') return false;\n  const name = value.constructor?.name;\n  return name === 'GeneratorFunction' || /^function\\s*\\*/.test(value.toString());\n}\n\nexport function isAsyncFunction(value: unknown): value is (...args: any[]) => Promise<unknown> {\n  if (typeof value !== 'function') return false;\n  const name = value.constructor?.name;\n  return name === 'AsyncFunction' || /^async\\s/.test(value.toString());\n}\n\nexport function isAsyncGeneratorFunction(value: unknown): value is (...args: any[]) => AsyncGenerator {\n  if (typeof value !== 'function') return false;\n  const name = value.constructor?.name;\n  return name === 'AsyncGeneratorFunction' || /^async\\s*function\\s*\\*/.test(value.toString());\n}\n\nexport function isProxy(value: unknown): value is object {\n  try {\n    if (typeof value !== 'object' && typeof value !== 'function') return false;\n    if (value === null) return false;\n    \n    // Attempt to use proxy-specific behavior\n    const testHandler: ProxyHandler<object> = {\n      get() {\n        throw new Error('proxy trap');\n      }\n    };\n    \n    const proxy = new Proxy({}, testHandler);\n    const isProxyLike = Object.prototype.toString.call(value) === Object.prototype.toString.call(proxy);\n    \n    return isProxyLike;\n  } catch {\n    return false;\n  }\n}\n\n// Error type guards\nexport function isTypeError(value: unknown): value is TypeError {\n  return value instanceof TypeError;\n}\n\nexport function isRangeError(value: unknown): value is RangeError {\n  return value instanceof RangeError;\n}\n\nexport function isSyntaxError(value: unknown): value is SyntaxError {\n  return value instanceof SyntaxError;\n}\n\nexport function isReferenceError(value: unknown): value is ReferenceError {\n  return value instanceof ReferenceError;\n}\n\nexport function isEvalError(value: unknown): value is EvalError {\n  return value instanceof EvalError;\n}\n\nexport function isURIError(value: unknown): value is URIError {\n  return value instanceof URIError;\n}\n\n// Node.js specific guards\nexport function isStream(value: unknown): value is NodeJS.ReadableStream | NodeJS.WritableStream {\n  return value !== null &&\n    typeof value === 'object' &&\n    typeof (value as any).pipe === 'function';\n}\n\nexport function isEventEmitter(value: unknown): value is NodeJS.EventEmitter {\n  return value !== null &&\n    typeof value === 'object' &&\n    typeof (value as any).on === 'function' &&\n    typeof (value as any).emit === 'function' &&\n    typeof (value as any).removeListener === 'function';\n}\n\n// DOM specific guards\nexport function isElement(value: unknown): value is Element {\n  return typeof Element !== 'undefined' && value instanceof Element;\n}\n\nexport function isNode(value: unknown): value is Node {\n  return typeof Node !== 'undefined' && value instanceof Node;\n}\n\nexport function isWindow(value: unknown): value is Window {\n  return typeof Window !== 'undefined' && value instanceof Window;\n}\n\nexport function isDocument(value: unknown): value is Document {\n  return typeof Document !== 'undefined' && value instanceof Document;\n}\n\nexport function isGlobal(value: unknown): value is typeof globalThis {\n  if (typeof globalThis !== 'undefined' && value === globalThis) return true;\n  if (typeof global !== 'undefined' && value === global) return true;\n  if (typeof window !== 'undefined' && value === window) return true;\n  if (typeof self !== 'undefined' && value === self) return true;\n  return false;\n}","export function isMap<K = any, V = any>(value: unknown): value is Map<K, V> {\n  return value instanceof Map;\n}\n\nexport function isSet<T = any>(value: unknown): value is Set<T> {\n  return value instanceof Set;\n}\n\nexport function isWeakMap<K extends object = object, V = any>(value: unknown): value is WeakMap<K, V> {\n  return value instanceof WeakMap;\n}\n\nexport function isWeakSet<T extends object = object>(value: unknown): value is WeakSet<T> {\n  return value instanceof WeakSet;\n}\n\nexport function isDataView(value: unknown): value is DataView {\n  return value instanceof DataView;\n}\n\nexport function isArrayBuffer(value: unknown): value is ArrayBuffer {\n  return value instanceof ArrayBuffer;\n}\n\nexport function isSharedArrayBuffer(value: unknown): value is SharedArrayBuffer {\n  return typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer;\n}\n\nexport function isTypedArray(value: unknown): value is TypedArray {\n  return ArrayBuffer.isView(value) && !(value instanceof DataView);\n}\n\nexport function isInt8Array(value: unknown): value is Int8Array {\n  return value instanceof Int8Array;\n}\n\nexport function isUint8Array(value: unknown): value is Uint8Array {\n  return value instanceof Uint8Array;\n}\n\nexport function isUint8ClampedArray(value: unknown): value is Uint8ClampedArray {\n  return value instanceof Uint8ClampedArray;\n}\n\nexport function isInt16Array(value: unknown): value is Int16Array {\n  return value instanceof Int16Array;\n}\n\nexport function isUint16Array(value: unknown): value is Uint16Array {\n  return value instanceof Uint16Array;\n}\n\nexport function isInt32Array(value: unknown): value is Int32Array {\n  return value instanceof Int32Array;\n}\n\nexport function isUint32Array(value: unknown): value is Uint32Array {\n  return value instanceof Uint32Array;\n}\n\nexport function isFloat32Array(value: unknown): value is Float32Array {\n  return value instanceof Float32Array;\n}\n\nexport function isFloat64Array(value: unknown): value is Float64Array {\n  return value instanceof Float64Array;\n}\n\nexport function isBigInt64Array(value: unknown): value is BigInt64Array {\n  return typeof BigInt64Array !== 'undefined' && value instanceof BigInt64Array;\n}\n\nexport function isBigUint64Array(value: unknown): value is BigUint64Array {\n  return typeof BigUint64Array !== 'undefined' && value instanceof BigUint64Array;\n}\n\n// Helper type definition\ntype TypedArray = \n  | Int8Array \n  | Uint8Array \n  | Uint8ClampedArray \n  | Int16Array \n  | Uint16Array \n  | Int32Array \n  | Uint32Array \n  | Float32Array \n  | Float64Array \n  | BigInt64Array \n  | BigUint64Array;","export const PRIMITIVE_TYPES = [\n  'undefined',\n  'null',\n  'boolean',\n  'number',\n  'string',\n  'symbol',\n  'bigint',\n] as const;\n\nexport const OBJECT_TYPES = [\n  'object',\n  'array',\n  'function',\n  'date',\n  'regexp',\n  'error',\n] as const;\n\nexport const COLLECTION_TYPES = [\n  'map',\n  'set',\n  'weakmap',\n  'weakset',\n] as const;\n\nexport const TYPED_ARRAY_TYPES = [\n  'int8array',\n  'uint8array',\n  'uint8clampedarray',\n  'int16array',\n  'uint16array',\n  'int32array',\n  'uint32array',\n  'float32array',\n  'float64array',\n  'bigint64array',\n  'biguint64array',\n] as const;\n\nexport const MODERN_TYPES = [\n  'promise',\n  'generatorfunction',\n  'asyncfunction',\n  'asyncgeneratorfunction',\n  'proxy',\n  'dataview',\n  'arraybuffer',\n  'sharedarraybuffer',\n] as const;\n\nexport const NODE_TYPES = [\n  'buffer',\n  'stream',\n  'eventemitter',\n] as const;\n\nexport const DOM_TYPES = [\n  'element',\n  'node',\n  'window',\n  'document',\n] as const;\n\nexport const SPECIAL_TYPES = [\n  'arguments',\n  'global',\n] as const;\n\nexport const ALL_TYPES = [\n  ...PRIMITIVE_TYPES,\n  ...OBJECT_TYPES,\n  ...COLLECTION_TYPES,\n  ...TYPED_ARRAY_TYPES,\n  ...MODERN_TYPES,\n  ...NODE_TYPES,\n  ...DOM_TYPES,\n  ...SPECIAL_TYPES,\n] as const;\n\nexport type PrimitiveType = typeof PRIMITIVE_TYPES[number];\nexport type ObjectType = typeof OBJECT_TYPES[number];\nexport type CollectionType = typeof COLLECTION_TYPES[number];\nexport type TypedArrayType = typeof TYPED_ARRAY_TYPES[number];\nexport type ModernType = typeof MODERN_TYPES[number];\nexport type NodeType = typeof NODE_TYPES[number];\nexport type DOMType = typeof DOM_TYPES[number];\nexport type SpecialType = typeof SPECIAL_TYPES[number];\nexport type TypeName = typeof ALL_TYPES[number];\n\nexport const TYPE_TAG_MAP: Record<string, TypeName> = {\n  '[object Arguments]': 'arguments',\n  '[object Array]': 'array',\n  '[object ArrayBuffer]': 'arraybuffer',\n  '[object AsyncFunction]': 'asyncfunction',\n  '[object AsyncGeneratorFunction]': 'asyncgeneratorfunction',\n  '[object BigInt]': 'bigint',\n  '[object BigInt64Array]': 'bigint64array',\n  '[object BigUint64Array]': 'biguint64array',\n  '[object Boolean]': 'boolean',\n  '[object DataView]': 'dataview',\n  '[object Date]': 'date',\n  '[object Error]': 'error',\n  '[object Float32Array]': 'float32array',\n  '[object Float64Array]': 'float64array',\n  '[object Function]': 'function',\n  '[object GeneratorFunction]': 'generatorfunction',\n  '[object Int8Array]': 'int8array',\n  '[object Int16Array]': 'int16array',\n  '[object Int32Array]': 'int32array',\n  '[object Map]': 'map',\n  '[object Number]': 'number',\n  '[object Object]': 'object',\n  '[object Promise]': 'promise',\n  '[object Proxy]': 'proxy',\n  '[object RegExp]': 'regexp',\n  '[object Set]': 'set',\n  '[object SharedArrayBuffer]': 'sharedarraybuffer',\n  '[object String]': 'string',\n  '[object Symbol]': 'symbol',\n  '[object Uint8Array]': 'uint8array',\n  '[object Uint8ClampedArray]': 'uint8clampedarray',\n  '[object Uint16Array]': 'uint16array',\n  '[object Uint32Array]': 'uint32array',\n  '[object WeakMap]': 'weakmap',\n  '[object WeakSet]': 'weakset',\n  '[object Window]': 'window',\n  '[object HTMLDocument]': 'document',\n  '[object Document]': 'document',\n  '[object Null]': 'null',\n  '[object Undefined]': 'undefined',\n};","import type { TypeName } from './constants';\nimport { TYPE_TAG_MAP } from './constants';\n\nconst toString = Object.prototype.toString;\nconst toStringTag = Symbol.toStringTag;\n\nexport function getNativeType(value: unknown): TypeName | null {\n  if (value === undefined) return 'undefined';\n  if (value === null) return 'null';\n\n  const primitiveType = typeof value;\n  \n  switch (primitiveType) {\n    case 'boolean': return 'boolean';\n    case 'number': return 'number';\n    case 'string': return 'string';\n    case 'symbol': return 'symbol';\n    case 'bigint': return 'bigint';\n    case 'function': return getFunctionType(value as (...args: any[]) => any);\n    case 'object': return getObjectType(value as object);\n    default: return null;\n  }\n}\n\nfunction getFunctionType(fn: (...args: any[]) => any): TypeName {\n  const fnString = fn.toString();\n  \n  if (/^class\\s/.test(fnString)) {\n    return 'function';\n  }\n  \n  if (/^async\\s*function\\s*\\*/.test(fnString) || /^async\\s*\\*/.test(fnString)) {\n    return 'asyncgeneratorfunction';\n  }\n  \n  if (/^async\\s/.test(fnString)) {\n    return 'asyncfunction';\n  }\n  \n  if (/^function\\s*\\*/.test(fnString) || /^\\*/.test(fnString)) {\n    return 'generatorfunction';\n  }\n  \n  const ctorName = fn.constructor?.name;\n  if (ctorName === 'AsyncFunction') return 'asyncfunction';\n  if (ctorName === 'GeneratorFunction') return 'generatorfunction';\n  if (ctorName === 'AsyncGeneratorFunction') return 'asyncgeneratorfunction';\n  \n  return 'function';\n}\n\nfunction getObjectType(obj: object): TypeName {\n  const tag = toString.call(obj);\n  const mappedType = TYPE_TAG_MAP[tag];\n  \n  if (mappedType) {\n    return mappedType;\n  }\n  \n  // Check for special types first, before processing [object Object]\n  if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(obj)) {\n    return 'buffer';\n  }\n  \n  if (typeof obj === 'object' && 'callee' in obj && typeof obj.callee === 'function') {\n    return 'arguments';\n  }\n  \n  if (isStream(obj)) {\n    return 'stream';\n  }\n  \n  if (isEventEmitter(obj)) {\n    return 'eventemitter';\n  }\n  \n  if (tag === '[object Object]') {\n    const customTag = (obj as any)[toStringTag];\n    if (typeof customTag === 'string') {\n      return customTag.toLowerCase() as TypeName;\n    }\n    \n    const ctor = obj.constructor;\n    if (ctor && ctor !== Object) {\n      const ctorName = ctor.name;\n      if (ctorName && ctorName !== 'Object') {\n        return ctorName.toLowerCase() as TypeName;\n      }\n    }\n    // Don't return 'object' here - continue to check for other types\n  }\n  \n  if (isDOMElement(obj)) {\n    return 'element';\n  }\n  \n  if (isDOMNode(obj)) {\n    return 'node';\n  }\n  \n  if (isGlobal(obj)) {\n    return 'global';\n  }\n  \n  return 'object';\n}\n\nfunction isStream(obj: any): boolean {\n  return obj !== null &&\n    typeof obj === 'object' &&\n    typeof obj.pipe === 'function';\n}\n\nfunction isEventEmitter(obj: any): boolean {\n  return obj !== null &&\n    typeof obj === 'object' &&\n    typeof obj.on === 'function' &&\n    typeof obj.emit === 'function' &&\n    typeof obj.removeListener === 'function';\n}\n\nfunction isDOMElement(obj: any): boolean {\n  if (typeof HTMLElement === 'undefined') return false;\n  return obj instanceof HTMLElement;\n}\n\nfunction isDOMNode(obj: any): boolean {\n  if (typeof Node === 'undefined') return false;\n  return obj instanceof Node;\n}\n\nfunction isGlobal(obj: any): boolean {\n  if (typeof globalThis !== 'undefined' && obj === globalThis) return true;\n  if (typeof global !== 'undefined' && obj === global) return true;\n  if (typeof window !== 'undefined' && obj === window) return true;\n  if (typeof self !== 'undefined' && obj === self) return true;\n  return false;\n}","import type { TypeName } from './constants';\n\nconst WeakMapPrototype = WeakMap.prototype;\nconst WeakSetPrototype = WeakSet.prototype;\nconst MapPrototype = Map.prototype;\nconst SetPrototype = Set.prototype;\nconst ArrayBufferPrototype = ArrayBuffer.prototype;\nconst DataViewPrototype = DataView.prototype;\nconst SharedArrayBufferPrototype = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer.prototype : null;\n\nexport function checkModernType(value: unknown): TypeName | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  try {\n    if (value instanceof Promise || isThenable(value)) {\n      return 'promise';\n    }\n\n    if (value instanceof Map || (value as any).__proto__ === MapPrototype) {\n      return 'map';\n    }\n\n    if (value instanceof Set || (value as any).__proto__ === SetPrototype) {\n      return 'set';\n    }\n\n    if (value instanceof WeakMap || (value as any).__proto__ === WeakMapPrototype) {\n      return 'weakmap';\n    }\n\n    if (value instanceof WeakSet || (value as any).__proto__ === WeakSetPrototype) {\n      return 'weakset';\n    }\n\n    if (value instanceof ArrayBuffer || (value as any).__proto__ === ArrayBufferPrototype) {\n      return 'arraybuffer';\n    }\n\n    if (SharedArrayBufferPrototype && (value instanceof SharedArrayBuffer || (value as any).__proto__ === SharedArrayBufferPrototype)) {\n      return 'sharedarraybuffer';\n    }\n\n    if (value instanceof DataView || (value as any).__proto__ === DataViewPrototype) {\n      return 'dataview';\n    }\n\n    if (isProxy(value)) {\n      return 'proxy';\n    }\n  } catch {\n    // Cross-realm objects might throw\n  }\n\n  return null;\n}\n\nfunction isThenable(value: any): boolean {\n  return value !== null &&\n    (typeof value === 'object' || typeof value === 'function') &&\n    typeof value.then === 'function';\n}\n\nfunction isProxy(value: any): boolean {\n  try {\n    // Proxies are detected by checking if they trigger proxy traps\n    // when used with certain operations\n    if (typeof value !== 'object' && typeof value !== 'function') {\n      return false;\n    }\n\n    // Try to create a proxy with the value as handler\n    // If it's already a proxy, this might throw or behave differently\n    new Proxy({}, value as ProxyHandler<any>);\n    \n    // Additional check: see if common proxy behaviors are present\n    // This is a heuristic and might not catch all proxies\n    const descriptor = Object.getOwnPropertyDescriptor(value, Symbol.toStringTag);\n    if (descriptor && !descriptor.configurable && descriptor.value === 'Proxy') {\n      return true;\n    }\n\n    return false;\n  } catch {\n    // Some proxy operations might throw\n    return false;\n  }\n}\n\nexport function getTypedArrayType(value: any): TypeName | null {\n  if (!ArrayBuffer.isView(value)) {\n    return null;\n  }\n\n  const proto = Object.getPrototypeOf(value);\n  const ctorName = proto?.constructor?.name;\n\n  switch (ctorName) {\n    case 'Int8Array': return 'int8array';\n    case 'Uint8Array': return 'uint8array';\n    case 'Uint8ClampedArray': return 'uint8clampedarray';\n    case 'Int16Array': return 'int16array';\n    case 'Uint16Array': return 'uint16array';\n    case 'Int32Array': return 'int32array';\n    case 'Uint32Array': return 'uint32array';\n    case 'Float32Array': return 'float32array';\n    case 'Float64Array': return 'float64array';\n    case 'BigInt64Array': return 'bigint64array';\n    case 'BigUint64Array': return 'biguint64array';\n    default: return null;\n  }\n}","import type { TypeName } from './constants';\nexport type { TypeName } from './constants';\nimport { getNativeType } from './native-types';\nimport { checkModernType, getTypedArrayType } from './modern-types';\n\n\nexport interface DetailedType {\n  type: string;\n  constructor: string | null;\n  prototype: string | null;\n  isPrimitive: boolean;\n  isBuiltIn: boolean;\n  isNullish: boolean;\n  isIterable: boolean;\n  isAsync: boolean;\n  customType: string | null;\n  metadata?: Record<string, any> | undefined;\n}\n\nlet typeCache: WeakMap<object, string> | null = null;\nlet cacheEnabled = true;\n\nexport function kindOfCore(value: unknown): string {\n  if (value === undefined) return 'undefined';\n  if (value === null) return 'null';\n\n  const primitiveType = getPrimitiveType(value);\n  if (primitiveType) return primitiveType;\n\n  if (typeof value === 'object' && cacheEnabled && typeCache) {\n    const cached = typeCache.get(value);\n    if (cached) return cached;\n  }\n\n  let type = getNativeType(value);\n  \n  if (!type || type === 'object') {\n    const modernType = checkModernType(value);\n    if (modernType) {\n      type = modernType;\n    } else {\n      const arrayType = getTypedArrayType(value);\n      if (arrayType) {\n        type = arrayType;\n      } else {\n        type = getCustomType(value) || type || ('object' as TypeName);\n      }\n    }\n  }\n\n  if (typeof value === 'object' && cacheEnabled && type) {\n    if (!typeCache) typeCache = new WeakMap();\n    typeCache.set(value, type);\n  }\n\n  return type || 'object';\n}\n\nexport function fastKindOf(value: unknown): string {\n  if (value === undefined) return 'undefined';\n  if (value === null) return 'null';\n\n  const primitiveType = typeof value;\n  if (primitiveType !== 'object' && primitiveType !== 'function') {\n    return primitiveType;\n  }\n\n  if (Array.isArray(value)) return 'array';\n  if (value instanceof Date) return 'date';\n  if (value instanceof RegExp) return 'regexp';\n  if (value instanceof Error) return 'error';\n\n  return 'object';\n}\n\nexport function kindOfMany(values: unknown[]): string[] {\n  const results: string[] = new Array(values.length);\n  for (let i = 0; i < values.length; i++) {\n    results[i] = kindOfCore(values[i]);\n  }\n  return results;\n}\n\nexport function getDetailedType(value: unknown): DetailedType {\n  const type = kindOfCore(value);\n  const isPrimitive = value === null || (typeof value !== 'object' && typeof value !== 'function');\n  \n  let constructor: string | null = null;\n  let prototype: string | null = null;\n  let isIterable = false;\n  let isAsync = false;\n  let customType: string | null = null;\n  const metadata: Record<string, any> = {};\n\n  if (!isPrimitive && value !== null) {\n    const obj = value as any;\n    \n    if (obj.constructor) {\n      constructor = obj.constructor.name || null;\n    }\n    \n    const proto = Object.getPrototypeOf(obj);\n    if (proto && proto.constructor) {\n      prototype = proto.constructor.name || null;\n    }\n    \n    isIterable = typeof obj[Symbol.iterator] === 'function';\n    isAsync = typeof obj[Symbol.asyncIterator] === 'function' || \n              type === 'promise' || \n              type === 'asyncfunction' || \n              type === 'asyncgeneratorfunction';\n    \n    if (obj[Symbol.toStringTag]) {\n      customType = String(obj[Symbol.toStringTag]);\n    }\n    \n    if (type === 'array') {\n      metadata['length'] = (obj).length;\n    } else if (type === 'map' || type === 'set') {\n      metadata['size'] = (obj).size;\n    } else if (type === 'arraybuffer' || type === 'sharedarraybuffer') {\n      metadata['byteLength'] = (obj).byteLength;\n    } else if (type.includes('array') && (obj).buffer) {\n      metadata['byteLength'] = (obj).byteLength;\n      metadata['length'] = (obj).length;\n    }\n  }\n\n  return {\n    type,\n    constructor,\n    prototype,\n    isPrimitive,\n    isBuiltIn: isBuiltInType(type),\n    isNullish: value === null || value === undefined,\n    isIterable,\n    isAsync,\n    customType,\n    metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n  };\n}\n\nfunction getPrimitiveType(value: unknown): string | null {\n  const type = typeof value;\n  switch (type) {\n    case 'boolean':\n    case 'number':\n    case 'string':\n    case 'symbol':\n    case 'bigint':\n      return type;\n    default:\n      return null;\n  }\n}\n\nfunction getCustomType(value: any): TypeName | null {\n  try {\n    const toStringTag = value[Symbol.toStringTag];\n    if (typeof toStringTag === 'string') {\n      return toStringTag.toLowerCase() as TypeName;\n    }\n\n    if (value.constructor && value.constructor !== Object) {\n      const ctorName = value.constructor.name;\n      if (ctorName && ctorName !== 'Object') {\n        return ctorName.toLowerCase() as TypeName;\n      }\n    }\n  } catch {\n    // Ignore errors from accessing properties\n  }\n\n  return null;\n}\n\nfunction isBuiltInType(type: string): boolean {\n  const builtInTypes = new Set([\n    'undefined', 'null', 'boolean', 'number', 'string', 'symbol', 'bigint',\n    'object', 'array', 'function', 'date', 'regexp', 'error',\n    'map', 'set', 'weakmap', 'weakset',\n    'int8array', 'uint8array', 'uint8clampedarray', 'int16array', 'uint16array',\n    'int32array', 'uint32array', 'float32array', 'float64array',\n    'bigint64array', 'biguint64array',\n    'promise', 'generatorfunction', 'asyncfunction', 'asyncgeneratorfunction',\n    'proxy', 'dataview', 'arraybuffer', 'sharedarraybuffer',\n    'arguments'\n  ]);\n  \n  return builtInTypes.has(type);\n}\n\nexport function enableCache(): void {\n  cacheEnabled = true;\n  if (!typeCache) typeCache = new WeakMap();\n}\n\nexport function disableCache(): void {\n  cacheEnabled = false;\n  typeCache = null;\n}\n\nexport function clearCache(): void {\n  if (typeCache) {\n    typeCache = new WeakMap();\n  }\n}","export * from './primitives';\nexport * from './objects';\nexport * from './collections';\n\nimport { kindOfCore } from '../core/kind-of';\nimport type { TypeMap, TypeName } from '../types';\n\nexport function isType<T extends TypeName>(value: unknown, type: T): value is TypeMap[T] {\n  return kindOfCore(value) === type;\n}\n\nexport function assertType<T extends TypeName>(value: unknown, type: T): asserts value is TypeMap[T] {\n  if (kindOfCore(value) !== type) {\n    throw new TypeError(`Expected type \"${type}\" but got \"${kindOfCore(value)}\"`);\n  }\n}\n\nexport function ensureType<T extends TypeName>(\n  value: unknown,\n  type: T,\n  defaultValue: TypeMap[T]\n): TypeMap[T] {\n  return isType(value, type) ? value : defaultValue;\n}"],"names":["isThenable","isProxy","isStream","isEventEmitter","isGlobal"],"mappings":"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"}