Urara-Blog/node_modules/.pnpm-store/v3/files/a3/3c920ac2090e2e678825588768091a829b73c4f36dccb40c98ac8e1443ebb9285fcfd2f27f13ffb89304239199f0a563075d394a4226cc0385c217ca31644d
2022-08-14 01:14:53 +08:00

194 lines
6.7 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# hast-util-is-element
[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]
[![Sponsors][sponsors-badge]][collective]
[![Backers][backers-badge]][collective]
[![Chat][chat-badge]][chat]
[**hast**][hast] utility to check if a [*node*][node] is a (certain)
[*element*][element].
## Install
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c):
Node 12+ is needed to use it and it must be `import`ed instead of `require`d.
[npm][]:
```sh
npm install hast-util-is-element
```
## Use
```js
import {isElement} from 'hast-util-is-element'
isElement({type: 'text', value: 'foo'}) // => false
isElement({type: 'element', tagName: 'a'}, 'a') // => true
isElement({type: 'element', tagName: 'a'}, ['a', 'area']) // => true
```
## API
This package exports the following identifiers: `isElement`, `convertElement`.
There is no default export.
### `isElement(node[, test[, index, parent[, context]]])`
Check if the given value is a (certain) [*element*][element].
* `node` ([`Node`][node]) — Node to check.
* `test` ([`Function`][test], `string`, or `Array.<Test>`, optional)
— When `array`, checks if any one of the subtests pass.
When `string`, checks that the element has that tag name.
When `function`, see [`test`][test]
* `index` (`number`, optional) — [Index][] of `node` in `parent`
* `parent` ([`Node`][node], optional) — [Parent][] of `node`
* `context` (`*`, optional) — Context object to invoke `test` with
###### Returns
`boolean` — Whether `test` passed *and* `node` is an [`Element`][element].
###### Throws
`Error` — When an incorrect `test`, `index`, or `parent` is given.
A `node` that is not a node, or not an element, does not throw.
#### `function test(element[, index, parent])`
###### Parameters
* `element` ([`Element`][element]) — Element to check
* `index` (`number?`) — [Index][] of `node` in `parent`
* `parent` ([`Node?`][node]) — [Parent][] of `node`
###### Context
`*` — The to `is` given `context`.
###### Returns
`boolean?` — Whether `element` matches.
### `convertElement(test)`
Create a test function from `test`, that can later be called with a `node`,
`index`, and `parent`.
Useful if youre going to test many nodes, for example when creating a utility
where something else passes a compatible test.
The created function is slightly faster because it expects valid input only.
Therefore, passing invalid input, yields unexpected results.
## Security
`hast-util-is-element` does not change the syntax tree so there are no openings
for [cross-site scripting (XSS)][xss] attacks.
## Related
* [`hast-util-has-property`](https://github.com/syntax-tree/hast-util-has-property)
— check if a node has a property
* [`hast-util-is-body-ok-link`](https://github.com/rehypejs/rehype-minify/tree/HEAD/packages/hast-util-is-body-ok-link)
— check if a node is “Body OK” link element
* [`hast-util-is-conditional-comment`](https://github.com/rehypejs/rehype-minify/tree/HEAD/packages/hast-util-is-conditional-comment)
— check if a node is a conditional comment
* [`hast-util-is-css-link`](https://github.com/rehypejs/rehype-minify/tree/HEAD/packages/hast-util-is-css-link)
— check if a node is a CSS link element
* [`hast-util-is-css-style`](https://github.com/rehypejs/rehype-minify/tree/HEAD/packages/hast-util-is-css-style)
— check if a node is a CSS style element
* [`hast-util-embedded`](https://github.com/syntax-tree/hast-util-embedded)
— check if a node is an embedded element
* [`hast-util-heading`](https://github.com/syntax-tree/hast-util-heading)
— check if a node is a heading element
* [`hast-util-interactive`](https://github.com/syntax-tree/hast-util-interactive)
— check if a node is interactive
* [`hast-util-is-javascript`](https://github.com/rehypejs/rehype-minify/tree/HEAD/packages/hast-util-is-javascript)
— check if a node is a JavaScript script element
* [`hast-util-labelable`](https://github.com/syntax-tree/hast-util-labelable)
— check whether a node is labelable
* [`hast-util-phrasing`](https://github.com/syntax-tree/hast-util-phrasing)
— check if a node is phrasing content
* [`hast-util-script-supporting`](https://github.com/syntax-tree/hast-util-script-supporting)
— check if a node is a script-supporting element
* [`hast-util-sectioning`](https://github.com/syntax-tree/hast-util-sectioning)
— check if a node is a sectioning element
* [`hast-util-transparent`](https://github.com/syntax-tree/hast-util-transparent)
— check if a node is a transparent element
* [`hast-util-whitespace`](https://github.com/syntax-tree/hast-util-whitespace)
— check if a node is inter-element whitespace
## Contribute
See [`contributing.md` in `syntax-tree/.github`][contributing] for ways to get
started.
See [`support.md`][support] for ways to get help.
This project has a [code of conduct][coc].
By interacting with this repository, organization, or community you agree to
abide by its terms.
## License
[MIT][license] © [Titus Wormer][author]
<!-- Definition -->
[build-badge]: https://github.com/syntax-tree/hast-util-is-element/workflows/main/badge.svg
[build]: https://github.com/syntax-tree/hast-util-is-element/actions
[coverage-badge]: https://img.shields.io/codecov/c/github/syntax-tree/hast-util-is-element.svg
[coverage]: https://codecov.io/github/syntax-tree/hast-util-is-element
[downloads-badge]: https://img.shields.io/npm/dm/hast-util-is-element.svg
[downloads]: https://www.npmjs.com/package/hast-util-is-element
[size-badge]: https://img.shields.io/bundlephobia/minzip/hast-util-is-element.svg
[size]: https://bundlephobia.com/result?p=hast-util-is-element
[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[backers-badge]: https://opencollective.com/unified/backers/badge.svg
[collective]: https://opencollective.com/unified
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[chat]: https://github.com/syntax-tree/unist/discussions
[npm]: https://docs.npmjs.com/cli/install
[license]: license
[author]: https://wooorm.com
[contributing]: https://github.com/syntax-tree/.github/blob/HEAD/contributing.md
[support]: https://github.com/syntax-tree/.github/blob/HEAD/support.md
[coc]: https://github.com/syntax-tree/.github/blob/HEAD/code-of-conduct.md
[hast]: https://github.com/syntax-tree/hast
[node]: https://github.com/syntax-tree/unist#node
[element]: https://github.com/syntax-tree/hast#element
[parent]: https://github.com/syntax-tree/unist#parent-1
[index]: https://github.com/syntax-tree/unist#index
[test]: #function-testelement-index-parent
[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting