From 58abf2a8115489624af8a22715e92026807a89b8 Mon Sep 17 00:00:00 2001 From: eric_wang Date: Wed, 2 Mar 2022 00:11:19 +0800 Subject: [PATCH] feat: add weakRef --- .idea/vcs.xml | 6 +++++ .idea/workspace.xml | 55 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 ++-- readme.md | 1 + source/index.ts | 12 ++++++---- test/test.ts | 10 ++++++++- tsconfig.json | 6 ++--- tsconfig.xo.json | 7 ++++-- 8 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..87e619e --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1645820743983 + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index cc86fc3..7ada82b 100644 --- a/package.json +++ b/package.json @@ -56,11 +56,11 @@ "ava": "^3.3.0", "del-cli": "^2.0.0", "eslint-config-xo-typescript": "^0.26.0", - "jsdom": "^16.0.1", + "jsdom": "^19.0.0", "rxjs": "^6.4.0", "tempy": "^0.4.0", "ts-node": "^8.3.0", - "typescript": "~3.8.2", + "typescript": "^4.6.2", "xo": "^0.26.1", "zen-observable": "^0.8.8" }, diff --git a/readme.md b/readme.md index 05a291a..b816b8a 100644 --- a/readme.md +++ b/readme.md @@ -198,6 +198,7 @@ is.boundFunction(function () {}); ##### .set(value) ##### .weakMap(value) ##### .weakSet(value) +##### .weakRef(value) #### Typed arrays diff --git a/source/index.ts b/source/index.ts index 5ce333d..ce0c313 100644 --- a/source/index.ts +++ b/source/index.ts @@ -43,6 +43,7 @@ const objectTypeNames = [ 'Set', 'WeakMap', 'WeakSet', + 'WeakRef', 'ArrayBuffer', 'SharedArrayBuffer', 'DataView', @@ -216,6 +217,7 @@ is.map = (value: unknown): value is Map(value: unknown): value is Set => isObjectOfType>('Set')(value); is.weakMap = (value: unknown): value is WeakMap => isObjectOfType>('WeakMap')(value); is.weakSet = (value: unknown): value is WeakSet => isObjectOfType>('WeakSet')(value); +is.weakRef = (value: unknown): value is WeakRef => isObjectOfType>('WeakRef')(value); is.int8Array = isObjectOfType('Int8Array'); is.uint8Array = isObjectOfType('Uint8Array'); @@ -306,10 +308,10 @@ const DOM_PROPERTIES_TO_CHECK: Array<(keyof HTMLElement)> = [ is.domElement = (value: unknown): value is HTMLElement => { return is.object(value) && - (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT && - is.string((value as HTMLElement).nodeName) && - !is.plainObject(value) && - DOM_PROPERTIES_TO_CHECK.every(property => property in value); + (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT && + is.string((value as HTMLElement).nodeName) && + !is.plainObject(value) && + DOM_PROPERTIES_TO_CHECK.every(property => property in value); }; is.observable = (value: unknown): value is ObservableLike => { @@ -494,6 +496,7 @@ interface Assert { set: (value: unknown) => asserts value is Set; weakMap: (value: unknown) => asserts value is WeakMap; weakSet: (value: unknown) => asserts value is WeakSet; + weakRef: (value: unknown) => asserts value is WeakRef; int8Array: (value: unknown) => asserts value is Int8Array; uint8Array: (value: unknown) => asserts value is Uint8Array; uint8ClampedArray: (value: unknown) => asserts value is Uint8ClampedArray; @@ -597,6 +600,7 @@ export const assert: Assert = { set: (value: unknown): asserts value is Set => assertType(is.set(value), 'Set', value), weakMap: (value: unknown): asserts value is WeakMap => assertType(is.weakMap(value), 'WeakMap', value), weakSet: (value: unknown): asserts value is WeakSet => assertType(is.weakSet(value), 'WeakSet', value), + weakRef: (value: unknown): asserts value is WeakRef => assertType(is.weakRef(value), 'WeakRef', 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), uint8ClampedArray: (value: unknown): asserts value is Uint8ClampedArray => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value), diff --git a/test/test.ts b/test/test.ts index 71a4a9d..3165d65 100644 --- a/test/test.ts +++ b/test/test.ts @@ -343,6 +343,14 @@ const types = new Map([ ], typename: 'WeakMap' }], + ['weakSet', { + is: is.weakRef, + assert: assert.weakRef, + fixtures: [ + new window.WeakRef({}) + ], + typename: 'WeakRef' + }], ['int8Array', { is: is.int8Array, assert: assert.int8Array, @@ -1203,7 +1211,7 @@ test('is.arrayLike', t => { t.false(is.arrayLike(new Map())); (function () { - t.notThrows(() => { + t.notThrows(function () { assert.arrayLike(arguments); // eslint-disable-line prefer-rest-params }); })(); diff --git a/tsconfig.json b/tsconfig.json index d1f6382..35f624c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,11 +4,11 @@ "outDir": "dist", "target": "es2018", "lib": [ - "es2018", + "ESNext", "dom" - ] + ], }, - "include": [ + "include": [ "source" ] } diff --git a/tsconfig.xo.json b/tsconfig.xo.json index b01049f..0d11d58 100644 --- a/tsconfig.xo.json +++ b/tsconfig.xo.json @@ -1,6 +1,9 @@ { "extends": "./tsconfig.json", + "compilerOptions": { + "downlevelIteration": true + }, "include": [ - "test" - ] + "test" + ] }