UNPKG

@httpx/assert

Version:
96 lines (93 loc) 3.45 kB
import { B as BasePlainObject, D as DefaultBasePlainObject, P as PlainObject } from './object.types-UWGd93VB.cjs'; import './internal.types-D5VRBw-5.cjs'; /** * Check if a value is a plain object * * An object is plain if it's created by either {}, new Object(), or Object.create(null). * * @example * ```typescript * import { isPlainObject } from '@httpx/plain-object'; * * // ✅👇 True * * isPlainObject({ key: 'value' }); // ✅ * isPlainObject({ key: new Date() }); // ✅ * isPlainObject(new Object()); // ✅ * isPlainObject(Object.create(null)); // ✅ * isPlainObject({ nested: { key: true} }); // ✅ * isPlainObject(new Proxy({}, {})); // ✅ * isPlainObject({ [Symbol('tag')]: 'A' }); // ✅ * * // ✅👇 (node context, workers, ...) * const runInNewContext = await import('node:vm').then( * (mod) => mod.runInNewContext * ); * isPlainObject(runInNewContext('({})')); // ✅ * * // ❌👇 False * * class Test { }; * isPlainObject(new Test()) // ❌ * isPlainObject(10); // ❌ * isPlainObject(null); // ❌ * isPlainObject('hello'); // ❌ * isPlainObject([]); // ❌ * isPlainObject(new Date()); // ❌ * isPlainObject(Math); // ❌ Static built-in classes * isPlainObject(Promise.resolve({})); // ❌ * isPlainObject(Object.create({})); // ❌ * ``` */ /** * Check if a value is a plain object * * A plain object is a basic JavaScript object, such as {}, { data: [] }, new Object() or Object.create(null). * * @example * ```typescript * import { isPlainObject } from '@httpx/plain-object'; * * // ✅👇 True * * isPlainObject({ }); // ✅ * isPlainObject({ key: 'value' }); // ✅ * isPlainObject({ key: new Date() }); // ✅ * isPlainObject(new Object()); // ✅ * isPlainObject(Object.create(null)); // ✅ * isPlainObject({ nested: { key: true} }); // ✅ * isPlainObject(new Proxy({}, {})); // ✅ * isPlainObject({ [Symbol('tag')]: 'A' }); // ✅ * * // ✅👇 (node context, workers, ...) * const runInNewContext = await import('node:vm').then( * (mod) => mod.runInNewContext * ); * isPlainObject(runInNewContext('({})')); // ✅ * * // ❌👇 False * * class Test { }; * isPlainObject(new Test()) // ❌ * isPlainObject(10); // ❌ * isPlainObject(null); // ❌ * isPlainObject('hello'); // ❌ * isPlainObject([]); // ❌ * isPlainObject(new Date()); // ❌ * isPlainObject(new Uint8Array([1])); // ❌ * isPlainObject(Buffer.from('ABC')); // ❌ * isPlainObject(Promise.resolve({})); // ❌ * isPlainObject(Object.create({})); // ❌ * isPlainObject(new (class Cls {})); // ❌ * isPlainObject(globalThis); // ❌, * ``` * * // ✅👇 Note that static built-in classes are treated as plain objects * // check for `isStaticBuiltInClass` to exclude if needed * * isPlainObject(Math); // ✅ * isPlainObject(JSON); // ✅ * isPlainObject(Atomics); // ✅ */ declare const isPlainObject: <TValue extends BasePlainObject = DefaultBasePlainObject>(v: unknown) => v is TValue extends DefaultBasePlainObject ? BasePlainObject : PlainObject<TValue>; export { isPlainObject };