deno.land / std@0.177.1 / node / internal_binding / types.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.//// Adapted from Node.js. Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.
import { core } from "../_core.ts";
// https://tc39.es/ecma262/#sec-object.prototype.tostringconst _toString = Object.prototype.toString;
// https://tc39.es/ecma262/#sec-bigint.prototype.valueofconst _bigIntValueOf = BigInt.prototype.valueOf;
// https://tc39.es/ecma262/#sec-boolean.prototype.valueofconst _booleanValueOf = Boolean.prototype.valueOf;
// https://tc39.es/ecma262/#sec-date.prototype.valueofconst _dateValueOf = Date.prototype.valueOf;
// https://tc39.es/ecma262/#sec-number.prototype.valueofconst _numberValueOf = Number.prototype.valueOf;
// https://tc39.es/ecma262/#sec-string.prototype.valueofconst _stringValueOf = String.prototype.valueOf;
// https://tc39.es/ecma262/#sec-symbol.prototype.valueofconst _symbolValueOf = Symbol.prototype.valueOf;
// https://tc39.es/ecma262/#sec-weakmap.prototype.hasconst _weakMapHas = WeakMap.prototype.has;
// https://tc39.es/ecma262/#sec-weakset.prototype.hasconst _weakSetHas = WeakSet.prototype.has;
// https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.bytelengthconst _getArrayBufferByteLength = Object.getOwnPropertyDescriptor( ArrayBuffer.prototype, "byteLength",)!.get!;
// https://tc39.es/ecma262/#sec-get-sharedarraybuffer.prototype.bytelengthconst _getSharedArrayBufferByteLength = globalThis.SharedArrayBuffer ? Object.getOwnPropertyDescriptor( SharedArrayBuffer.prototype, "byteLength", )!.get! : undefined;
// https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-@@tostringtagconst _getTypedArrayToStringTag = Object.getOwnPropertyDescriptor( Object.getPrototypeOf(Uint8Array).prototype, Symbol.toStringTag,)!.get!;
// https://tc39.es/ecma262/#sec-get-set.prototype.sizeconst _getSetSize = Object.getOwnPropertyDescriptor( Set.prototype, "size",)!.get!;
// https://tc39.es/ecma262/#sec-get-map.prototype.sizeconst _getMapSize = Object.getOwnPropertyDescriptor( Map.prototype, "size",)!.get!;
function isObjectLike( value: unknown,): value is Record<string | number | symbol, unknown> { return value !== null && typeof value === "object";}
export function isAnyArrayBuffer( value: unknown,): value is ArrayBuffer | SharedArrayBuffer { return isArrayBuffer(value) || isSharedArrayBuffer(value);}
export function isArgumentsObject(value: unknown): value is IArguments { return ( isObjectLike(value) && value[Symbol.toStringTag] === undefined && _toString.call(value) === "[object Arguments]" );}
export function isArrayBuffer(value: unknown): value is ArrayBuffer { try { _getArrayBufferByteLength.call(value); return true; } catch { return false; }}
export function isAsyncFunction( value: unknown,): value is (...args: unknown[]) => Promise<unknown> { return ( typeof value === "function" && // @ts-ignore: function is a kind of object value[Symbol.toStringTag] === "AsyncFunction" );}
// deno-lint-ignore ban-typesexport function isBooleanObject(value: unknown): value is Boolean { if (!isObjectLike(value)) { return false; }
try { _booleanValueOf.call(value); return true; } catch { return false; }}
export function isBoxedPrimitive( value: unknown, // deno-lint-ignore ban-types): value is Boolean | String | Number | Symbol | BigInt { return ( isBooleanObject(value) || isStringObject(value) || isNumberObject(value) || isSymbolObject(value) || isBigIntObject(value) );}
export function isDataView(value: unknown): value is DataView { return ( ArrayBuffer.isView(value) && _getTypedArrayToStringTag.call(value) === undefined );}
export function isDate(value: unknown): value is Date { try { _dateValueOf.call(value); return true; } catch { return false; }}
export function isGeneratorFunction( value: unknown,): value is GeneratorFunction { return ( typeof value === "function" && // @ts-ignore: function is a kind of object value[Symbol.toStringTag] === "GeneratorFunction" );}
export function isGeneratorObject(value: unknown): value is Generator { return ( isObjectLike(value) && value[Symbol.toStringTag] === "Generator" );}
export function isMap(value: unknown): value is Map<unknown, unknown> { try { _getMapSize.call(value); return true; } catch { return false; }}
export function isMapIterator( value: unknown,): value is IterableIterator<[unknown, unknown]> { return ( isObjectLike(value) && value[Symbol.toStringTag] === "Map Iterator" );}
export function isModuleNamespaceObject( value: unknown,): value is Record<string | number | symbol, unknown> { return ( isObjectLike(value) && value[Symbol.toStringTag] === "Module" );}
export function isNativeError(value: unknown): value is Error { return ( isObjectLike(value) && value[Symbol.toStringTag] === undefined && _toString.call(value) === "[object Error]" );}
// deno-lint-ignore ban-typesexport function isNumberObject(value: unknown): value is Number { if (!isObjectLike(value)) { return false; }
try { _numberValueOf.call(value); return true; } catch { return false; }}
export function isBigIntObject(value: unknown): value is BigInt { if (!isObjectLike(value)) { return false; }
try { _bigIntValueOf.call(value); return true; } catch { return false; }}
export function isPromise(value: unknown): value is Promise<unknown> { return ( isObjectLike(value) && value[Symbol.toStringTag] === "Promise" );}
export function isProxy( value: unknown,): value is Record<string | number | symbol, unknown> { return core.isProxy(value);}
export function isRegExp(value: unknown): value is RegExp { return ( isObjectLike(value) && value[Symbol.toStringTag] === undefined && _toString.call(value) === "[object RegExp]" );}
export function isSet(value: unknown): value is Set<unknown> { try { _getSetSize.call(value); return true; } catch { return false; }}
export function isSetIterator( value: unknown,): value is IterableIterator<unknown> { return ( isObjectLike(value) && value[Symbol.toStringTag] === "Set Iterator" );}
export function isSharedArrayBuffer( value: unknown,): value is SharedArrayBuffer { // SharedArrayBuffer is not available on this runtime if (_getSharedArrayBufferByteLength === undefined) { return false; }
try { _getSharedArrayBufferByteLength.call(value); return true; } catch { return false; }}
// deno-lint-ignore ban-typesexport function isStringObject(value: unknown): value is String { if (!isObjectLike(value)) { return false; }
try { _stringValueOf.call(value); return true; } catch { return false; }}
// deno-lint-ignore ban-typesexport function isSymbolObject(value: unknown): value is Symbol { if (!isObjectLike(value)) { return false; }
try { _symbolValueOf.call(value); return true; } catch { return false; }}
export function isWeakMap( value: unknown,): value is WeakMap<Record<string | number | symbol, unknown>, unknown> { try { // deno-lint-ignore no-explicit-any _weakMapHas.call(value, null as any); return true; } catch { return false; }}
export function isWeakSet( value: unknown,): value is WeakSet<Record<string | number | symbol, unknown>> { try { // deno-lint-ignore no-explicit-any _weakSetHas.call(value, null as any); return true; } catch { return false; }}
export default { isAsyncFunction, isGeneratorFunction, isAnyArrayBuffer, isArrayBuffer, isArgumentsObject, isBoxedPrimitive, isDataView, // isExternal, isMap, isMapIterator, isModuleNamespaceObject, isNativeError, isPromise, isSet, isSetIterator, isWeakMap, isWeakSet, isRegExp, isDate, isStringObject, isNumberObject, isBooleanObject, isBigIntObject,};
Version Info