retext-stringify
Advanced tools
Comparing version 3.1.0 to 4.0.0
@@ -1,6 +0,14 @@ | ||
// This wrapper exists because JS in TS can’t export a `@type` of a function. | ||
import type {Root} from 'nlcst' | ||
import type {Plugin} from 'unified' | ||
declare const retextStringify: Plugin<void[], Root, string> | ||
/** | ||
* Add support for serializing natural language. | ||
* | ||
* @this | ||
* Unified processor. | ||
* @returns | ||
* Nothing. | ||
*/ | ||
declare const retextStringify: Plugin<[], Root, string> | ||
export default retextStringify |
@@ -1,3 +0,1 @@ | ||
import retextStringify from './lib/index.js' | ||
export default retextStringify | ||
export {default} from './lib/index.js' |
@@ -1,3 +0,8 @@ | ||
/** @type {import('unified').Plugin<void[], Root, string>} */ | ||
export default function retextStringify(): void | ||
export type Root = import('nlcst').Root | ||
/** | ||
* Add support for serializing natural language. | ||
* | ||
* @returns {undefined} | ||
* Nothing. | ||
*/ | ||
export default function retextStringify(): undefined; | ||
export type Root = import('nlcst').Root; |
@@ -7,10 +7,22 @@ /** | ||
/** @type {import('unified').Plugin<void[], Root, string>} */ | ||
/** | ||
* Add support for serializing natural language. | ||
* | ||
* @returns {undefined} | ||
* Nothing. | ||
*/ | ||
export default function retextStringify() { | ||
Object.assign(this, {Compiler}) | ||
// eslint-disable-next-line unicorn/no-this-assignment | ||
const self = | ||
/** @type {import('unified').Processor<undefined, undefined, undefined, Root, string>} */ ( | ||
// @ts-expect-error -- TS in JSDoc doesn’t understand `this`. | ||
this | ||
) | ||
self.compiler = compiler | ||
} | ||
/** @type {import('unified').CompilerFunction<Root, string>} */ | ||
function Compiler(tree) { | ||
/** @type {import('unified').Compiler<Root, string>} */ | ||
function compiler(tree) { | ||
return toString(tree) | ||
} |
{ | ||
"name": "retext-stringify", | ||
"version": "3.1.0", | ||
"version": "4.0.0", | ||
"description": "retext plugin to serialize prose", | ||
"license": "MIT", | ||
"keywords": [ | ||
"unified", | ||
"concrete", | ||
"cst", | ||
"language", | ||
"natural", | ||
"plugin", | ||
"process", | ||
"retext", | ||
"retext-plugin", | ||
"plugin", | ||
"natural", | ||
"language", | ||
"stringify", | ||
"syntax", | ||
"serialize", | ||
"text", | ||
"concrete", | ||
"syntax", | ||
"tree", | ||
"cst", | ||
"stringify", | ||
"serialize", | ||
"compile" | ||
"unified" | ||
], | ||
@@ -35,4 +35,3 @@ "homepage": "https://github.com/retextjs/retext", | ||
"type": "module", | ||
"main": "index.js", | ||
"types": "index.d.ts", | ||
"exports": "./index.js", | ||
"files": [ | ||
@@ -44,10 +43,7 @@ "lib/", | ||
"dependencies": { | ||
"@types/nlcst": "^1.0.0", | ||
"nlcst-to-string": "^3.0.0", | ||
"unified": "^10.0.0" | ||
"@types/nlcst": "^2.0.0", | ||
"nlcst-to-string": "^4.0.0", | ||
"unified": "^11.0.0" | ||
}, | ||
"scripts": { | ||
"build": "rimraf \"lib/**/*.d.ts\" && tsc && type-coverage" | ||
}, | ||
"xo": false, | ||
"scripts": {}, | ||
"typeCoverage": { | ||
@@ -58,3 +54,16 @@ "atLeast": 100, | ||
"ignoreCatch": true | ||
}, | ||
"xo": { | ||
"overrides": [ | ||
{ | ||
"files": [ | ||
"**/*.ts" | ||
], | ||
"rules": { | ||
"@typescript-eslint/ban-types": "off" | ||
} | ||
} | ||
], | ||
"prettier": true | ||
} | ||
} |
249
readme.md
@@ -11,60 +11,38 @@ # retext-stringify | ||
[**retext**][retext] plugin to serialize natural language. | ||
[Compiler][] for [**unified**][unified]. | ||
Serializes [**nlcst**][nlcst] syntax trees. | ||
**[retext][]** plugin to add support for serializing natural language. | ||
## Sponsors | ||
## Contents | ||
Support this effort and give back by sponsoring on [OpenCollective][collective]! | ||
* [What is this?](#what-is-this) | ||
* [When should I use this?](#when-should-i-use-this) | ||
* [Install](#install) | ||
* [Use](#use) | ||
* [API](#api) | ||
* [`unified().use(retextStringify)`](#unifieduseretextstringify) | ||
* [Syntax tree](#syntax-tree) | ||
* [Types](#types) | ||
* [Compatibility](#compatibility) | ||
* [Contribute](#contribute) | ||
* [Sponsor](#sponsor) | ||
* [License](#license) | ||
<!--lint ignore no-html--> | ||
## What is this? | ||
<table> | ||
<tr valign="middle"> | ||
<td width="20%" align="center" colspan="2"> | ||
<a href="https://www.gatsbyjs.org">Gatsby</a> 🥇<br><br> | ||
<a href="https://www.gatsbyjs.org"><img src="https://avatars1.githubusercontent.com/u/12551863?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" colspan="2"> | ||
<a href="https://vercel.com">Vercel</a> 🥇<br><br> | ||
<a href="https://vercel.com"><img src="https://avatars1.githubusercontent.com/u/14985020?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" colspan="2"> | ||
<a href="https://www.netlify.com">Netlify</a><br><br> | ||
<!--OC has a sharper image--> | ||
<a href="https://www.netlify.com"><img src="https://images.opencollective.com/netlify/4087de2/logo/256.png" width="128"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://www.holloway.com">Holloway</a><br><br> | ||
<a href="https://www.holloway.com"><img src="https://avatars1.githubusercontent.com/u/35904294?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://themeisle.com">ThemeIsle</a><br><br> | ||
<a href="https://themeisle.com"><img src="https://avatars1.githubusercontent.com/u/58979018?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://boosthub.io">Boost Hub</a><br><br> | ||
<a href="https://boosthub.io"><img src="https://images.opencollective.com/boosthub/6318083/logo/128.png" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://expo.io">Expo</a><br><br> | ||
<a href="https://expo.io"><img src="https://avatars1.githubusercontent.com/u/12504344?s=128&v=4" width="64"></a> | ||
</td> | ||
</tr> | ||
<tr valign="middle"> | ||
<td width="100%" align="center" colspan="10"> | ||
<br> | ||
<a href="https://opencollective.com/unified"><strong>You?</strong></a> | ||
<br><br> | ||
</td> | ||
</tr> | ||
</table> | ||
This package is a [unified][] ([retext][]) plugin that defines how to take a | ||
syntax tree as input and turn it into serialized natural language. | ||
When it’s used, natural language is serialized as the final result. | ||
See [the monorepo readme][retext] for info on what the retext ecosystem is. | ||
## When should I use this? | ||
This plugin adds support to unified for serializing natural language. | ||
You can alternatively use [`retext`][retext-core] instead, which combines | ||
unified, [`retext-latin`][retext-latin], and this plugin. | ||
## 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. | ||
This package is [ESM only][esm]. | ||
In Node.js (version 16+), install with [npm][]: | ||
[npm][]: | ||
```sh | ||
@@ -74,29 +52,85 @@ npm install retext-stringify | ||
In Deno with [`esm.sh`][esmsh]: | ||
```js | ||
import retextStringify from 'https://esm.sh/retext-stringify@4' | ||
``` | ||
In browsers with [`esm.sh`][esmsh]: | ||
```html | ||
<script type="module"> | ||
import retextStringify from 'https://esm.sh/retext-stringify@4?bundle' | ||
</script> | ||
``` | ||
## Use | ||
```js | ||
import retextEmoji from 'retext-emoji' | ||
import retextLatin from 'retext-latin' | ||
import retextProfanities from 'retext-profanities' | ||
import retextStringify from 'retext-stringify' | ||
import {unified} from 'unified' | ||
import {stream} from 'unified-stream' | ||
import retextEnglish from 'retext-english' | ||
import retextStringify from 'retext-stringify' | ||
import retextEmoji from 'retext-emoji' | ||
import {reporter} from 'vfile-reporter' | ||
const processor = unified() | ||
.use(retextEnglish) | ||
const file = await unified() | ||
.use(retextLatin) | ||
.use(retextProfanities) | ||
.use(retextEmoji, {convert: 'encode'}) | ||
.use(retextStringify) | ||
.process('He’s set on beating your butt for sheriff! :cop:') | ||
process.stdin.pipe(stream(processor)).pipe(process.stdout) | ||
console.log(String(file)) | ||
console.error(reporter(file)) | ||
``` | ||
Yields: | ||
```txt | ||
He’s set on beating your butt for sheriff! 👮 | ||
``` | ||
```txt | ||
1:26-1:30 warning Be careful with `butt`, it’s profane in some cases butt retext-profanities | ||
⚠ 1 warning | ||
``` | ||
## API | ||
This package exports no identifiers. | ||
`retextStringify` is the default export. | ||
The default export is [`retextStringify`][api-retext-stringify]. | ||
### `unified().use(retextStringify)` | ||
Serialize [**nlcst**][nlcst] syntax trees. | ||
There is no configuration. | ||
Add support for serializing natural language. | ||
###### Parameters | ||
There are no parameters. | ||
###### Returns | ||
Nothing (`undefined`). | ||
## Syntax tree | ||
The syntax tree used in retext is [nlcst][]. | ||
## Types | ||
This package is fully typed with [TypeScript][]. | ||
It exports no additional types. | ||
## 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, `retext-stringify@^4`, | ||
compatible with Node.js 16. | ||
## Contribute | ||
@@ -107,7 +141,3 @@ | ||
See [`support.md`][support] for ways to get help. | ||
Ideas for new plugins and tools can be posted in [`retextjs/ideas`][ideas]. | ||
A curated list of awesome retext resources can be found in [**awesome | ||
retext**][awesome]. | ||
This project has a [code of conduct][coc]. | ||
@@ -117,2 +147,73 @@ By interacting with this repository, organization, or community you agree to | ||
## Sponsor | ||
Support this effort and give back by sponsoring on [OpenCollective][collective]! | ||
<table> | ||
<tr valign="middle"> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://vercel.com">Vercel</a><br><br> | ||
<a href="https://vercel.com"><img src="https://avatars1.githubusercontent.com/u/14985020?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://motif.land">Motif</a><br><br> | ||
<a href="https://motif.land"><img src="https://avatars1.githubusercontent.com/u/74457950?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.hashicorp.com">HashiCorp</a><br><br> | ||
<a href="https://www.hashicorp.com"><img src="https://avatars1.githubusercontent.com/u/761456?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.gitbook.com">GitBook</a><br><br> | ||
<a href="https://www.gitbook.com"><img src="https://avatars1.githubusercontent.com/u/7111340?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.gatsbyjs.org">Gatsby</a><br><br> | ||
<a href="https://www.gatsbyjs.org"><img src="https://avatars1.githubusercontent.com/u/12551863?s=256&v=4" width="128"></a> | ||
</td> | ||
</tr> | ||
<tr valign="middle"> | ||
</tr> | ||
<tr valign="middle"> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.netlify.com">Netlify</a><br><br> | ||
<!--OC has a sharper image--> | ||
<a href="https://www.netlify.com"><img src="https://images.opencollective.com/netlify/4087de2/logo/256.png" width="128"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://www.coinbase.com">Coinbase</a><br><br> | ||
<a href="https://www.coinbase.com"><img src="https://avatars1.githubusercontent.com/u/1885080?s=256&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://themeisle.com">ThemeIsle</a><br><br> | ||
<a href="https://themeisle.com"><img src="https://avatars1.githubusercontent.com/u/58979018?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://expo.io">Expo</a><br><br> | ||
<a href="https://expo.io"><img src="https://avatars1.githubusercontent.com/u/12504344?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://boostnote.io">Boost Note</a><br><br> | ||
<a href="https://boostnote.io"><img src="https://images.opencollective.com/boosthub/6318083/logo/128.png" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://markdown.space">Markdown Space</a><br><br> | ||
<a href="https://markdown.space"><img src="https://images.opencollective.com/markdown-space/e1038ed/logo/128.png" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://www.holloway.com">Holloway</a><br><br> | ||
<a href="https://www.holloway.com"><img src="https://avatars1.githubusercontent.com/u/35904294?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%"></td> | ||
<td width="10%"></td> | ||
</tr> | ||
<tr valign="middle"> | ||
<td width="100%" align="center" colspan="8"> | ||
<br> | ||
<a href="https://opencollective.com/unified"><strong>You?</strong></a> | ||
<br><br> | ||
</td> | ||
</tr> | ||
</table> | ||
## License | ||
@@ -158,6 +259,2 @@ | ||
[ideas]: https://github.com/retextjs/ideas | ||
[awesome]: https://github.com/retextjs/awesome-retext | ||
[license]: https://github.com/retextjs/retext/blob/main/license | ||
@@ -169,8 +266,18 @@ | ||
[unified]: https://github.com/unifiedjs/unified | ||
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c | ||
[compiler]: https://github.com/unifiedjs/unified#processorcompiler | ||
[esmsh]: https://esm.sh | ||
[nlcst]: https://github.com/syntax-tree/nlcst | ||
[retext]: https://github.com/retextjs/retext | ||
[nlcst]: https://github.com/syntax-tree/nlcst | ||
[retext-core]: https://github.com/retextjs/retext/tree/main/packages/retext | ||
[retext-latin]: https://github.com/retextjs/retext/tree/main/packages/retext-latin | ||
[typescript]: https://www.typescriptlang.org | ||
[unified]: https://github.com/unifiedjs/unified | ||
[api-retext-stringify]: #unifieduseretextstringify |
10991
44
278
+ Added@types/nlcst@2.0.3(transitive)
+ Added@types/unist@3.0.2(transitive)
+ Addeddequal@2.0.3(transitive)
+ Addeddevlop@1.1.0(transitive)
+ Addednlcst-to-string@4.0.0(transitive)
+ Addedunified@11.0.4(transitive)
+ Addedunist-util-stringify-position@4.0.0(transitive)
+ Addedvfile@6.0.1(transitive)
+ Addedvfile-message@4.0.2(transitive)
- Removed@types/nlcst@1.0.4(transitive)
- Removed@types/unist@2.0.10(transitive)
- Removedis-buffer@2.0.5(transitive)
- Removednlcst-to-string@3.1.1(transitive)
- Removedunified@10.1.2(transitive)
- Removedunist-util-stringify-position@3.0.3(transitive)
- Removedvfile@5.3.7(transitive)
- Removedvfile-message@3.1.4(transitive)
Updated@types/nlcst@^2.0.0
Updatednlcst-to-string@^4.0.0
Updatedunified@^11.0.0