Add .weakRef() (#165)

Co-authored-by: Sindre Sorhus <sindresorhus@gmail.com>
This commit is contained in:
Eric(书生) 2022-06-13 15:05:26 +08:00 committed by GitHub
parent 06d217f70c
commit e503a9ec49
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 2 deletions

View file

@ -198,6 +198,7 @@ is.boundFunction(function () {});
##### .set(value) ##### .set(value)
##### .weakMap(value) ##### .weakMap(value)
##### .weakSet(value) ##### .weakSet(value)
##### .weakRef(value)
#### Typed arrays #### Typed arrays

View file

@ -1,5 +1,5 @@
import type {Buffer} from 'node:buffer'; import type {Buffer} from 'node:buffer';
import type {Class, Falsy, TypedArray, ObservableLike, Primitive} from './types.js'; import type {Class, Falsy, TypedArray, ObservableLike, Primitive, WeakRef} from './types.js';
const typedArrayTypeNames = [ const typedArrayTypeNames = [
'Int8Array', 'Int8Array',
@ -40,6 +40,7 @@ const objectTypeNames = [
'Set', 'Set',
'WeakMap', 'WeakMap',
'WeakSet', 'WeakSet',
'WeakRef',
'ArrayBuffer', 'ArrayBuffer',
'SharedArrayBuffer', 'SharedArrayBuffer',
'DataView', 'DataView',
@ -230,6 +231,8 @@ is.weakMap = <Key extends object = object, Value = unknown>(value: unknown): val
is.weakSet = (value: unknown): value is WeakSet<object> => isObjectOfType<WeakSet<object>>('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types is.weakSet = (value: unknown): value is WeakSet<object> => isObjectOfType<WeakSet<object>>('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types
is.weakRef = (value: unknown): value is WeakRef<object> => isObjectOfType<WeakRef<object>>('WeakRef')(value); // eslint-disable-line @typescript-eslint/ban-types
is.int8Array = isObjectOfType<Int8Array>('Int8Array'); is.int8Array = isObjectOfType<Int8Array>('Int8Array');
is.uint8Array = isObjectOfType<Uint8Array>('Uint8Array'); is.uint8Array = isObjectOfType<Uint8Array>('Uint8Array');
is.uint8ClampedArray = isObjectOfType<Uint8ClampedArray>('Uint8ClampedArray'); is.uint8ClampedArray = isObjectOfType<Uint8ClampedArray>('Uint8ClampedArray');
@ -524,6 +527,7 @@ interface Assert {
set: <T = unknown>(value: unknown) => asserts value is Set<T>; set: <T = unknown>(value: unknown) => asserts value is Set<T>;
weakMap: <Key extends object = object, Value = unknown>(value: unknown) => asserts value is WeakMap<Key, Value>; // eslint-disable-line @typescript-eslint/ban-types weakMap: <Key extends object = object, Value = unknown>(value: unknown) => asserts value is WeakMap<Key, Value>; // eslint-disable-line @typescript-eslint/ban-types
weakSet: <T extends object = object>(value: unknown) => asserts value is WeakSet<T>; // eslint-disable-line @typescript-eslint/ban-types weakSet: <T extends object = object>(value: unknown) => asserts value is WeakSet<T>; // eslint-disable-line @typescript-eslint/ban-types
weakRef: <T extends object = object>(value: unknown) => asserts value is WeakRef<T>; // eslint-disable-line @typescript-eslint/ban-types
int8Array: (value: unknown) => asserts value is Int8Array; int8Array: (value: unknown) => asserts value is Int8Array;
uint8Array: (value: unknown) => asserts value is Uint8Array; uint8Array: (value: unknown) => asserts value is Uint8Array;
uint8ClampedArray: (value: unknown) => asserts value is Uint8ClampedArray; uint8ClampedArray: (value: unknown) => asserts value is Uint8ClampedArray;
@ -629,6 +633,7 @@ export const assert: Assert = {
set: <T = unknown>(value: unknown): asserts value is Set<T> => assertType(is.set(value), 'Set', value), set: <T = unknown>(value: unknown): asserts value is Set<T> => assertType(is.set(value), 'Set', value),
weakMap: <Key extends object = object, Value = unknown>(value: unknown): asserts value is WeakMap<Key, Value> => assertType(is.weakMap(value), 'WeakMap', value), // eslint-disable-line @typescript-eslint/ban-types weakMap: <Key extends object = object, Value = unknown>(value: unknown): asserts value is WeakMap<Key, Value> => assertType(is.weakMap(value), 'WeakMap', value), // eslint-disable-line @typescript-eslint/ban-types
weakSet: <T extends object = object>(value: unknown): asserts value is WeakSet<T> => assertType(is.weakSet(value), 'WeakSet', value), // eslint-disable-line @typescript-eslint/ban-types weakSet: <T extends object = object>(value: unknown): asserts value is WeakSet<T> => assertType(is.weakSet(value), 'WeakSet', value), // eslint-disable-line @typescript-eslint/ban-types
weakRef: <T extends object = object>(value: unknown): asserts value is WeakRef<T> => assertType(is.weakRef(value), 'WeakRef', value), // eslint-disable-line @typescript-eslint/ban-types
int8Array: (value: unknown): asserts value is Int8Array => assertType(is.int8Array(value), 'Int8Array', value), int8Array: (value: unknown): asserts value is Int8Array => assertType(is.int8Array(value), 'Int8Array', value),
uint8Array: (value: unknown): asserts value is Uint8Array => assertType(is.uint8Array(value), 'Uint8Array', value), uint8Array: (value: unknown): asserts value is Uint8Array => assertType(is.uint8Array(value), 'Uint8Array', value),
uint8ClampedArray: (value: unknown): asserts value is Uint8ClampedArray => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value), uint8ClampedArray: (value: unknown): asserts value is Uint8ClampedArray => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),

View file

@ -49,3 +49,8 @@ export interface ObservableLike {
// eslint-disable-next-line @typescript-eslint/ban-types // eslint-disable-next-line @typescript-eslint/ban-types
export type Falsy = false | 0 | 0n | '' | null | undefined; export type Falsy = false | 0 | 0n | '' | null | undefined;
export interface WeakRef<T extends object> { // eslint-disable-line @typescript-eslint/ban-types
readonly [Symbol.toStringTag]: 'WeakRef';
deref(): T | undefined;
}

View file

@ -336,6 +336,12 @@ const types = new Map<string, Test>([
], ],
typename: 'WeakSet', typename: 'WeakSet',
}], }],
['weakRef', {
is: is.weakRef,
assert: assert.weakRef,
fixtures: window.WeakRef ? [new window.WeakRef({})] : [],
typename: 'WeakRef',
}],
['weakMap', { ['weakMap', {
is: is.weakMap, is: is.weakMap,
assert: assert.weakMap, assert: assert.weakMap,
@ -798,6 +804,10 @@ test('is.weakSet', t => {
testType(t, 'weakSet'); testType(t, 'weakSet');
}); });
test('is.weakRef', t => {
testType(t, 'weakRef');
});
test('is.int8Array', t => { test('is.int8Array', t => {
testType(t, 'int8Array'); testType(t, 'int8Array');
}); });
@ -1223,7 +1233,7 @@ test('is.arrayLike', t => {
t.false(is.arrayLike(new Map())); t.false(is.arrayLike(new Map()));
(function () { (function () {
t.notThrows(() => { t.notThrows(function () {
assert.arrayLike(arguments); // eslint-disable-line prefer-rest-params assert.arrayLike(arguments); // eslint-disable-line prefer-rest-params
}); });
})(); })();