forked from orbit-oss/is
Rename is.domElement() to is.htmlElement() (#196)
This commit is contained in:
parent
ee79af32b6
commit
bcec30d735
3 changed files with 32 additions and 26 deletions
|
|
@ -476,7 +476,7 @@ Check if `value` (number) is in the range of `0` to `upperBound`.
|
||||||
is.inRange(3, 10);
|
is.inRange(3, 10);
|
||||||
```
|
```
|
||||||
|
|
||||||
##### .domElement(value)
|
##### .htmlElement(value)
|
||||||
|
|
||||||
Returns `true` if `value` is an [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement).
|
Returns `true` if `value` is an [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ export type AssertionTypeDescription = typeof assertionTypeDescriptions[number];
|
||||||
const getObjectType = (value: unknown): ObjectTypeName | undefined => {
|
const getObjectType = (value: unknown): ObjectTypeName | undefined => {
|
||||||
const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);
|
const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);
|
||||||
|
|
||||||
if (/HTML\w+Element/.test(objectTypeName) && isDomElement(value)) {
|
if (/HTML\w+Element/.test(objectTypeName) && isHtmlElement(value)) {
|
||||||
return 'HTMLElement';
|
return 'HTMLElement';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -240,7 +240,8 @@ const is = Object.assign(
|
||||||
date: isDate,
|
date: isDate,
|
||||||
detect,
|
detect,
|
||||||
directInstanceOf: isDirectInstanceOf,
|
directInstanceOf: isDirectInstanceOf,
|
||||||
domElement: isDomElement,
|
/** @deprecated Renamed to `htmlElement` */
|
||||||
|
domElement: isHtmlElement,
|
||||||
emptyArray: isEmptyArray,
|
emptyArray: isEmptyArray,
|
||||||
emptyMap: isEmptyMap,
|
emptyMap: isEmptyMap,
|
||||||
emptyObject: isEmptyObject,
|
emptyObject: isEmptyObject,
|
||||||
|
|
@ -259,6 +260,7 @@ const is = Object.assign(
|
||||||
function_: isFunction,
|
function_: isFunction,
|
||||||
generator: isGenerator,
|
generator: isGenerator,
|
||||||
generatorFunction: isGeneratorFunction,
|
generatorFunction: isGeneratorFunction,
|
||||||
|
htmlElement: isHtmlElement,
|
||||||
infinite: isInfinite,
|
infinite: isInfinite,
|
||||||
inRange: isInRange,
|
inRange: isInRange,
|
||||||
int16Array: isInt16Array,
|
int16Array: isInt16Array,
|
||||||
|
|
@ -493,7 +495,7 @@ const DOM_PROPERTIES_TO_CHECK: Array<(keyof HTMLElement)> = [
|
||||||
'nodeValue',
|
'nodeValue',
|
||||||
];
|
];
|
||||||
|
|
||||||
export function isDomElement(value: unknown): value is HTMLElement {
|
export function isHtmlElement(value: unknown): value is HTMLElement {
|
||||||
return isObject(value)
|
return isObject(value)
|
||||||
&& (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT
|
&& (value as HTMLElement).nodeType === NODE_TYPE_ELEMENT
|
||||||
&& isString((value as HTMLElement).nodeName)
|
&& isString((value as HTMLElement).nodeName)
|
||||||
|
|
@ -889,7 +891,9 @@ type Assert = {
|
||||||
typedArray: (value: unknown) => asserts value is TypedArray;
|
typedArray: (value: unknown) => asserts value is TypedArray;
|
||||||
arrayLike: <T = unknown>(value: unknown) => asserts value is ArrayLike<T>;
|
arrayLike: <T = unknown>(value: unknown) => asserts value is ArrayLike<T>;
|
||||||
tupleLike: <T extends Array<TypeGuard<unknown>>>(value: unknown, guards: [...T]) => asserts value is ResolveTypesOfTypeGuardsTuple<T>;
|
tupleLike: <T extends Array<TypeGuard<unknown>>>(value: unknown, guards: [...T]) => asserts value is ResolveTypesOfTypeGuardsTuple<T>;
|
||||||
|
/** @deprecated Renamed to `htmlElement` */
|
||||||
domElement: (value: unknown) => asserts value is HTMLElement;
|
domElement: (value: unknown) => asserts value is HTMLElement;
|
||||||
|
htmlElement: (value: unknown) => asserts value is HTMLElement;
|
||||||
observable: (value: unknown) => asserts value is ObservableLike;
|
observable: (value: unknown) => asserts value is ObservableLike;
|
||||||
nodeStream: (value: unknown) => asserts value is NodeStream;
|
nodeStream: (value: unknown) => asserts value is NodeStream;
|
||||||
infinite: (value: unknown) => asserts value is number;
|
infinite: (value: unknown) => asserts value is number;
|
||||||
|
|
@ -946,7 +950,7 @@ export const assert: Assert = {
|
||||||
dataView: assertDataView,
|
dataView: assertDataView,
|
||||||
date: assertDate,
|
date: assertDate,
|
||||||
directInstanceOf: assertDirectInstanceOf,
|
directInstanceOf: assertDirectInstanceOf,
|
||||||
domElement: assertDomElement,
|
domElement: assertHtmlElement,
|
||||||
emptyArray: assertEmptyArray,
|
emptyArray: assertEmptyArray,
|
||||||
emptyMap: assertEmptyMap,
|
emptyMap: assertEmptyMap,
|
||||||
emptyObject: assertEmptyObject,
|
emptyObject: assertEmptyObject,
|
||||||
|
|
@ -964,6 +968,7 @@ export const assert: Assert = {
|
||||||
function_: assertFunction,
|
function_: assertFunction,
|
||||||
generator: assertGenerator,
|
generator: assertGenerator,
|
||||||
generatorFunction: assertGeneratorFunction,
|
generatorFunction: assertGeneratorFunction,
|
||||||
|
htmlElement: assertHtmlElement,
|
||||||
infinite: assertInfinite,
|
infinite: assertInfinite,
|
||||||
inRange: assertInRange,
|
inRange: assertInRange,
|
||||||
int16Array: assertInt16Array,
|
int16Array: assertInt16Array,
|
||||||
|
|
@ -1038,6 +1043,7 @@ const methodTypeMap = {
|
||||||
isDataView: 'DataView',
|
isDataView: 'DataView',
|
||||||
isDate: 'Date',
|
isDate: 'Date',
|
||||||
isDirectInstanceOf: 'T',
|
isDirectInstanceOf: 'T',
|
||||||
|
/** @deprecated */
|
||||||
isDomElement: 'HTMLElement',
|
isDomElement: 'HTMLElement',
|
||||||
isEmptyArray: 'empty array',
|
isEmptyArray: 'empty array',
|
||||||
isEmptyMap: 'empty map',
|
isEmptyMap: 'empty map',
|
||||||
|
|
@ -1055,6 +1061,7 @@ const methodTypeMap = {
|
||||||
isFunction: 'Function',
|
isFunction: 'Function',
|
||||||
isGenerator: 'Generator',
|
isGenerator: 'Generator',
|
||||||
isGeneratorFunction: 'GeneratorFunction',
|
isGeneratorFunction: 'GeneratorFunction',
|
||||||
|
isHtmlElement: 'HTMLElement',
|
||||||
isInfinite: 'infinite number',
|
isInfinite: 'infinite number',
|
||||||
isInRange: 'in range',
|
isInRange: 'in range',
|
||||||
isInt16Array: 'Int16Array',
|
isInt16Array: 'Int16Array',
|
||||||
|
|
@ -1250,12 +1257,6 @@ export function assertDirectInstanceOf<T>(instance: unknown, class_: Class<T>):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function assertDomElement(value: unknown): asserts value is HTMLElement {
|
|
||||||
if (!isDomElement(value)) {
|
|
||||||
throw new TypeError(typeErrorMessage('HTMLElement', value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function assertEmptyArray(value: unknown): asserts value is never[] {
|
export function assertEmptyArray(value: unknown): asserts value is never[] {
|
||||||
if (!isEmptyArray(value)) {
|
if (!isEmptyArray(value)) {
|
||||||
throw new TypeError(typeErrorMessage('empty array', value));
|
throw new TypeError(typeErrorMessage('empty array', value));
|
||||||
|
|
@ -1353,6 +1354,12 @@ export function assertGeneratorFunction(value: unknown): asserts value is Genera
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function assertHtmlElement(value: unknown): asserts value is HTMLElement {
|
||||||
|
if (!isHtmlElement(value)) {
|
||||||
|
throw new TypeError(typeErrorMessage('HTMLElement', value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function assertInfinite(value: unknown): asserts value is number {
|
export function assertInfinite(value: unknown): asserts value is number {
|
||||||
if (!isInfinite(value)) {
|
if (!isInfinite(value)) {
|
||||||
throw new TypeError(typeErrorMessage('infinite number', value));
|
throw new TypeError(typeErrorMessage('infinite number', value));
|
||||||
|
|
|
||||||
29
test/test.ts
29
test/test.ts
|
|
@ -23,7 +23,6 @@ class ErrorSubclassFixture extends Error {}
|
||||||
|
|
||||||
const {window} = new JSDOM();
|
const {window} = new JSDOM();
|
||||||
const {document} = window;
|
const {document} = window;
|
||||||
const createDomElement = (element: string) => document.createElement(element);
|
|
||||||
|
|
||||||
const structuredClone = globalThis.structuredClone ?? (x => x);
|
const structuredClone = globalThis.structuredClone ?? (x => x);
|
||||||
|
|
||||||
|
|
@ -516,9 +515,9 @@ const types = new Map<string, Test>([
|
||||||
typename: 'number',
|
typename: 'number',
|
||||||
typeDescription: 'integer',
|
typeDescription: 'integer',
|
||||||
}],
|
}],
|
||||||
['domElement', {
|
['htmlElement', {
|
||||||
is: is.domElement,
|
is: is.htmlElement,
|
||||||
assert: assert.domElement,
|
assert: assert.htmlElement,
|
||||||
fixtures: [
|
fixtures: [
|
||||||
'div',
|
'div',
|
||||||
'input',
|
'input',
|
||||||
|
|
@ -527,14 +526,14 @@ const types = new Map<string, Test>([
|
||||||
'canvas',
|
'canvas',
|
||||||
'script',
|
'script',
|
||||||
]
|
]
|
||||||
.map(fixture => createDomElement(fixture)),
|
.map(fixture => document.createElement(fixture)),
|
||||||
typeDescription: 'HTMLElement',
|
typeDescription: 'HTMLElement',
|
||||||
}],
|
}],
|
||||||
['non-domElements', {
|
['non-htmlElement', {
|
||||||
is: value => !is.domElement(value),
|
is: value => !is.htmlElement(value),
|
||||||
assert(value: unknown) {
|
assert(value: unknown) {
|
||||||
invertAssertThrow('HTMLElement', () => {
|
invertAssertThrow('HTMLElement', () => {
|
||||||
assert.domElement(value);
|
assert.htmlElement(value);
|
||||||
}, value);
|
}, value);
|
||||||
},
|
},
|
||||||
fixtures: [
|
fixtures: [
|
||||||
|
|
@ -1622,11 +1621,11 @@ test('is.inRange', t => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('is.domElement', t => {
|
test('is.htmlElement', t => {
|
||||||
testType(t, 'domElement');
|
testType(t, 'htmlElement');
|
||||||
t.false(is.domElement({nodeType: 1, nodeName: 'div'}));
|
t.false(is.htmlElement({nodeType: 1, nodeName: 'div'}));
|
||||||
t.throws(() => {
|
t.throws(() => {
|
||||||
assert.domElement({nodeType: 1, nodeName: 'div'});
|
assert.htmlElement({nodeType: 1, nodeName: 'div'});
|
||||||
});
|
});
|
||||||
|
|
||||||
const tagNames = [
|
const tagNames = [
|
||||||
|
|
@ -1636,11 +1635,11 @@ test('is.domElement', t => {
|
||||||
'img',
|
'img',
|
||||||
'canvas',
|
'canvas',
|
||||||
'script',
|
'script',
|
||||||
];
|
] as const;
|
||||||
|
|
||||||
for (const tagName of tagNames) {
|
for (const tagName of tagNames) {
|
||||||
const domElement = createDomElement(tagName);
|
const element = document.createElement(tagName);
|
||||||
t.is(is(domElement), 'HTMLElement');
|
t.is(is(element), 'HTMLElement');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue