Socket
Socket
Sign inDemoInstall

hast-util-to-string

Package Overview
Dependencies
Maintainers
2
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hast-util-to-string - npm Package Compare versions

Comparing version 2.0.0 to 3.0.0

lib/index.d.ts

38

index.d.ts

@@ -1,37 +0,1 @@

/**
* @fileoverview
* Get the plain-text value of a hast node.
* @longdescription
* ## Use
*
* ```js
* import {h} from 'hastscript'
* import {toString} from 'hast-util-to-string'
*
* toString(h('p', 'Alpha'))
* //=> 'Alpha'
* toString(h('div', [h('b', 'Bold'), ' and ', h('i', 'italic'), '.']))
* //=> 'Bold and italic.'
* ```
*
* ## API
*
* ### `toString(node)`
*
* Transform a node to a string.
*/
/**
* @typedef {import('hast').Root} Root
* @typedef {import('hast').Element} Element
* @typedef {Root|Root['children'][number]} Node
*/
/**
* Get the plain-text value of a hast node.
*
* @param {Node} node
* @returns {string}
*/
export function toString(node: Node): string
export type Root = import('hast').Root
export type Element = import('hast').Element
export type Node = Root | Root['children'][number]
export { toString } from "./lib/index.js";
/**
* @fileoverview
* Get the plain-text value of a hast node.
* @longdescription
* ## Use
* hast utility to get the plain-text value of a node.
*
* ```js
* import {h} from 'hastscript'
* import {toString} from 'hast-util-to-string'
* ## What is this?
*
* toString(h('p', 'Alpha'))
* //=> 'Alpha'
* toString(h('div', [h('b', 'Bold'), ' and ', h('i', 'italic'), '.']))
* //=> 'Bold and italic.'
* ```
* This package is a utility to get the plain-text value of a node.
*
* ## API
* ## When should I use this?
*
* ### `toString(node)`
* You can use this package when you want to get the plain text value of a node.
* The algorithm used by this package is like the DOMs `Node#textContent`
* getter.
*
* Transform a node to a string.
*/
/**
* @typedef {import('hast').Root} Root
* @typedef {import('hast').Element} Element
* @typedef {Root|Root['children'][number]} Node
*/
/**
* Get the plain-text value of a hast node.
* To use the DOMs `Node#innerText` algorithm instead, use
* [`hast-util-to-text`](https://github.com/syntax-tree/hast-util-to-text).
* `innerText` is aware of how things are displayed, for example turning hard
* breaks (`<br>`) into line endings.
*
* @param {Node} node
* @returns {string}
* ## Use
*
* ```js
* import {h} from 'hastscript'
* import {toString} from 'hast-util-to-string'
*
* toString(h('p', 'Alpha'))
* //=> 'Alpha'
* toString(h('div', [h('b', 'Bold'), ' and ', h('i', 'italic'), '.']))
* //=> 'Bold and italic.'
* ```
*
* ## API
*
* ### `toString(node)`
*
* Get the plain-text value of a node.
*
* ###### Parameters
*
* * `node` (`Node`) — node to serialize
*
* ###### Returns
*
* Serialized node (`string`).
*/
export function toString(node) {
// “The concatenation of data of all the Text node descendants of the context
// object, in tree order.”
if ('children' in node) {
return all(node)
}
// “Context object’s data.”
return 'value' in node ? node.value : ''
}
/**
* @param {Node} node
* @returns {string}
*/
function one(node) {
if (node.type === 'text') {
return node.value
}
return 'children' in node ? all(node) : ''
}
/**
* @param {Root|Element} node
* @returns {string}
*/
function all(node) {
let index = -1
/** @type {string[]} */
const result = []
while (++index < node.children.length) {
result[index] = one(node.children[index])
}
return result.join('')
}
export {toString} from './lib/index.js'
{
"name": "hast-util-to-string",
"version": "2.0.0",
"version": "3.0.0",
"description": "hast utility to get the plain-text value of a node",
"license": "MIT",
"keywords": [
"unist",
"content",
"hast",
"hast-util",
"util",
"utility",
"html",
"serialize",
"string",
"serialize",
"content",
"stringify",
"text"
"text",
"unist",
"util",
"utility"
],

@@ -31,22 +31,19 @@ "repository": "https://github.com/rehypejs/rehype-minify/tree/main/packages/hast-util-to-string",

"type": "module",
"main": "index.js",
"types": "index.d.ts",
"exports": "./index.js",
"files": [
"index.d.ts",
"index.js"
"index.js",
"lib/"
],
"dependencies": {
"@types/hast": "^2.0.0"
"@types/hast": "^3.0.0"
},
"scripts": {
"build": "rimraf \"*.d.ts\" && tsc && type-coverage",
"test": "node --conditions development test.js"
},
"xo": false,
"scripts": {},
"typeCoverage": {
"atLeast": 100,
"detail": true,
"strict": true,
"ignoreCatch": true
}
"ignoreCatch": true,
"strict": true
},
"xo": false
}

@@ -1,2 +0,2 @@

<!--This file is generated by `build-packages.js`-->
<!--This file is generated-->

@@ -9,15 +9,44 @@ # hast-util-to-string

[![Size][size-badge]][size]
[![Sponsors][sponsors-badge]][collective]
[![Backers][backers-badge]][collective]
[![Sponsors][funding-sponsors-badge]][funding]
[![Backers][funding-backers-badge]][funding]
[![Chat][chat-badge]][chat]
Get the plain-text value of a hast node.
[`hast`][hast] utility to get the plain-text value of a node.
## Contents
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`toString(node)`](#tostringnode)
* [Syntax](#syntax)
* [Syntax tree](#syntax-tree)
* [Types](#types)
* [Compatibility](#compatibility)
* [Security](#security)
* [Contribute](#contribute)
* [License](#license)
## What is this?
This package is a utility to get the plain-text value of a node.
## When should I use this?
You can use this package when you want to get the plain text value of a node.
The algorithm used by this package is like the DOMs `Node#textContent`
getter.
To use the DOMs `Node#innerText` algorithm instead, use
[`hast-util-to-text`](https://github.com/syntax-tree/hast-util-to-text).
`innerText` is aware of how things are displayed, for example turning hard
breaks (`<br>`) into line endings.
## Install
This package is [ESM only][esm]:
Node 12+ is needed to use it and it must be `imported`ed instead of `required`d.
This package is [ESM only][esm].
In Node.js (version 16+), install with [npm][]:
[npm][]:
```sh

@@ -27,6 +56,16 @@ npm install hast-util-to-string

This package exports the following identifiers:
`toString`.
There is no default export.
In Deno with [`esm.sh`][esm-sh]:
```js
import {toString} from 'https://esm.sh/hast-util-to-string@3'
```
In browsers with [`esm.sh`][esm-sh]:
```html
<script type="module">
import {toString} from 'https://esm.sh/hast-util-to-string@3?bundle'
</script>
```
## Use

@@ -46,6 +85,48 @@

This package exports the identifier
`toString`.
There is no default export.
### `toString(node)`
Transform a node to a string.
Get the plain-text value of a node.
###### Parameters
* `node` (`Node`) — node to serialize
###### Returns
Serialized node (`string`).
## Syntax
HTML is parsed according to WHATWG HTML (the living standard), which is also
followed by all browsers.
## Syntax tree
The syntax tree used is [hast][].
## Types
This package is fully typed with [TypeScript][].
## Compatibility
Projects maintained by the unified collective are compatible with maintained
versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line,
`hast-util-to-string@^3`,
compatible with Node.js 16.
## Security
As **rehype** works on HTML and improper use of HTML can open you up to a
[cross-site scripting (XSS)][xss] attack, use of rehype can also be unsafe.
Use [`rehype-sanitize`][rehype-sanitize] to make the tree safe.
## Contribute

@@ -65,42 +146,52 @@

[build-badge]: https://github.com/rehypejs/rehype-minify/workflows/main/badge.svg
[author]: https://wooorm.com
[build]: https://github.com/rehypejs/rehype-minify/actions
[coverage-badge]: https://img.shields.io/codecov/c/github/rehypejs/rehype-minify.svg
[build-badge]: https://github.com/rehypejs/rehype-minify/workflows/main/badge.svg
[chat]: https://github.com/rehypejs/rehype/discussions
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[coc]: https://github.com/rehypejs/.github/blob/main/code-of-conduct.md
[contributing]: https://github.com/rehypejs/.github/blob/main/contributing.md
[coverage]: https://codecov.io/github/rehypejs/rehype-minify
[downloads-badge]: https://img.shields.io/npm/dm/hast-util-to-string.svg
[coverage-badge]: https://img.shields.io/codecov/c/github/rehypejs/rehype-minify.svg
[downloads]: https://www.npmjs.com/package/hast-util-to-string
[size-badge]: https://img.shields.io/bundlephobia/minzip/hast-util-to-string.svg
[downloads-badge]: https://img.shields.io/npm/dm/hast-util-to-string.svg
[size]: https://bundlephobia.com/result?p=hast-util-to-string
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[esm-sh]: https://esm.sh
[backers-badge]: https://opencollective.com/unified/backers/badge.svg
[funding]: https://opencollective.com/unified
[collective]: https://opencollective.com/unified
[funding-backers-badge]: https://opencollective.com/unified/backers/badge.svg
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[funding-sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[chat]: https://github.com/rehypejs/rehype/discussions
[hast]: https://github.com/syntax-tree/hast
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[health]: https://github.com/rehypejs/.github
[license]: https://github.com/rehypejs/rehype-minify/blob/main/license
[npm]: https://docs.npmjs.com/cli/install
[health]: https://github.com/rehypejs/.github
[rehype-sanitize]: https://github.com/rehypejs/rehype-sanitize
[contributing]: https://github.com/rehypejs/.github/blob/main/contributing.md
[size]: https://bundlejs.com/?q=hast-util-to-string
[size-badge]: https://img.shields.io/bundlejs/size/hast-util-to-string
[support]: https://github.com/rehypejs/.github/blob/main/support.md
[coc]: https://github.com/rehypejs/.github/blob/main/code-of-conduct.md
[typescript]: https://www.typescriptlang.org
[license]: https://github.com/rehypejs/rehype-minify/blob/main/license
[author]: https://wooorm.com
[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc