feat: add weakRef

This commit is contained in:
eric_wang 2022-03-02 00:11:19 +08:00
parent 587afcfd42
commit 58abf2a811
8 changed files with 89 additions and 12 deletions

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

55
.idea/workspace.xml generated Normal file
View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="df737647-19a6-4a5f-88a0-8ce9d29a36c8" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/source/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/source/index.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/test/test.ts" beforeDir="false" afterPath="$PROJECT_DIR$/test/test.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tsconfig.json" beforeDir="false" afterPath="$PROJECT_DIR$/tsconfig.json" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MacroExpansionManager">
<option name="directoryName" value="hl7nkx35" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="25cK4TvoIxGKxbzN8247wytmhpC" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.JavaScript" />
<property name="ts.external.directory.path" value="$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="df737647-19a6-4a5f-88a0-8ce9d29a36c8" name="Changes" comment="" />
<created>1645820743983</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1645820743983</updated>
<workItem from="1645820745885" duration="3571000" />
<workItem from="1645962952689" duration="7278000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

View file

@ -56,11 +56,11 @@
"ava": "^3.3.0", "ava": "^3.3.0",
"del-cli": "^2.0.0", "del-cli": "^2.0.0",
"eslint-config-xo-typescript": "^0.26.0", "eslint-config-xo-typescript": "^0.26.0",
"jsdom": "^16.0.1", "jsdom": "^19.0.0",
"rxjs": "^6.4.0", "rxjs": "^6.4.0",
"tempy": "^0.4.0", "tempy": "^0.4.0",
"ts-node": "^8.3.0", "ts-node": "^8.3.0",
"typescript": "~3.8.2", "typescript": "^4.6.2",
"xo": "^0.26.1", "xo": "^0.26.1",
"zen-observable": "^0.8.8" "zen-observable": "^0.8.8"
}, },

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

@ -43,6 +43,7 @@ const objectTypeNames = [
'Set', 'Set',
'WeakMap', 'WeakMap',
'WeakSet', 'WeakSet',
'WeakRef',
'ArrayBuffer', 'ArrayBuffer',
'SharedArrayBuffer', 'SharedArrayBuffer',
'DataView', 'DataView',
@ -216,6 +217,7 @@ is.map = <Key = unknown, Value = unknown>(value: unknown): value is Map<Key, Val
is.set = <T = unknown>(value: unknown): value is Set<T> => isObjectOfType<Set<T>>('Set')(value); is.set = <T = unknown>(value: unknown): value is Set<T> => isObjectOfType<Set<T>>('Set')(value);
is.weakMap = <Key extends object = object, Value = unknown>(value: unknown): value is WeakMap<Key, Value> => isObjectOfType<WeakMap<Key, Value>>('WeakMap')(value); is.weakMap = <Key extends object = object, Value = unknown>(value: unknown): value is WeakMap<Key, Value> => isObjectOfType<WeakMap<Key, Value>>('WeakMap')(value);
is.weakSet = (value: unknown): value is WeakSet<object> => isObjectOfType<WeakSet<object>>('WeakSet')(value); is.weakSet = (value: unknown): value is WeakSet<object> => isObjectOfType<WeakSet<object>>('WeakSet')(value);
is.weakRef = (value: unknown): value is WeakRef<object> => isObjectOfType<WeakRef<object>>('WeakRef')(value);
is.int8Array = isObjectOfType<Int8Array>('Int8Array'); is.int8Array = isObjectOfType<Int8Array>('Int8Array');
is.uint8Array = isObjectOfType<Uint8Array>('Uint8Array'); is.uint8Array = isObjectOfType<Uint8Array>('Uint8Array');
@ -306,10 +308,10 @@ const DOM_PROPERTIES_TO_CHECK: Array<(keyof HTMLElement)> = [
is.domElement = (value: unknown): value is HTMLElement => { is.domElement = (value: unknown): value is HTMLElement => {
return is.object(value) && return is.object(value) &&
(value as HTMLElement).nodeType === NODE_TYPE_ELEMENT && (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT &&
is.string((value as HTMLElement).nodeName) && is.string((value as HTMLElement).nodeName) &&
!is.plainObject(value) && !is.plainObject(value) &&
DOM_PROPERTIES_TO_CHECK.every(property => property in value); DOM_PROPERTIES_TO_CHECK.every(property => property in value);
}; };
is.observable = (value: unknown): value is ObservableLike => { is.observable = (value: unknown): value is ObservableLike => {
@ -494,6 +496,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>; weakMap: <Key extends object = object, Value = unknown>(value: unknown) => asserts value is WeakMap<Key, Value>;
weakSet: <T extends object = object>(value: unknown) => asserts value is WeakSet<T>; weakSet: <T extends object = object>(value: unknown) => asserts value is WeakSet<T>;
weakRef: <T extends object = object>(value: unknown) => asserts value is WeakRef<T>;
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;
@ -597,6 +600,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), weakMap: <Key extends object = object, Value = unknown>(value: unknown): asserts value is WeakMap<Key, Value> => assertType(is.weakMap(value), 'WeakMap', value),
weakSet: <T extends object = object>(value: unknown): asserts value is WeakSet<T> => assertType(is.weakSet(value), 'WeakSet', value), weakSet: <T extends object = object>(value: unknown): asserts value is WeakSet<T> => assertType(is.weakSet(value), 'WeakSet', value),
weakRef: <T extends object = object>(value: unknown): asserts value is WeakRef<T> => assertType(is.weakRef(value), 'WeakRef', value),
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

@ -343,6 +343,14 @@ const types = new Map<string, Test>([
], ],
typename: 'WeakMap' typename: 'WeakMap'
}], }],
['weakSet', {
is: is.weakRef,
assert: assert.weakRef,
fixtures: [
new window.WeakRef({})
],
typename: 'WeakRef'
}],
['int8Array', { ['int8Array', {
is: is.int8Array, is: is.int8Array,
assert: assert.int8Array, assert: assert.int8Array,
@ -1203,7 +1211,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
}); });
})(); })();

View file

@ -4,11 +4,11 @@
"outDir": "dist", "outDir": "dist",
"target": "es2018", "target": "es2018",
"lib": [ "lib": [
"es2018", "ESNext",
"dom" "dom"
] ],
}, },
"include": [ "include": [
"source" "source"
] ]
} }

View file

@ -1,6 +1,9 @@
{ {
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": {
"downlevelIteration": true
},
"include": [ "include": [
"test" "test"
] ]
} }