Releases: cheeriojs/cheerio
v1.1.2
v1.1.1
v1.1.0
What's Changed
- fix(attributes): support
.prop
on document nodes by @fb55 in #4320 - fix(types): fix ExtractedValue type by @ben-tilden in #4334
- Add a field
browser
topackage.json
root by @UNIDY2002 in #4033 - Upgraded dependencies
Doc Improvements
- docs(blog): fix loading documents url by @TonyRL in #4002
- docs: fix function load() link by @ya-luotao in #4013
- docs: correct loadBuffer() name in example by @arichardsmith in #4270
- Update attr setter jsdoc by @thyming in #4469
- docs: use code block for install, mention yarn and bun by @Electroid in #4454
- docs: Replace
.html
with.prop
for outerHTML by @fb55 in #4321
New Contributors
- @TonyRL made their first contribution in #4002
- @ya-luotao made their first contribution in #4013
- @arichardsmith made their first contribution in #4270
- @UNIDY2002 made their first contribution in #4033
- @AzeemSup made their first contribution in #4189
- @ben-tilden made their first contribution in #4334
- @Electroid made their first contribution in #4454
- @thyming made their first contribution in #4469
Full Changelog: v1.0.0...v1.1.0
v1.0.0
Cheerio 1.0 is here! 🎉
Announcement Blog Post
Breaking Changes
-
The minimum NodeJS version is now 18.17 or higher #3959
-
Import paths were simplified. For example, use
cheerio/slim
instead of
cheerio/lib/slim
. #3970 -
The deprecated default Cheerio instance and static methods were removed. #3974
Before, it was possible to write code like this:
import cheerio, { html } from 'cheerio'; html(cheerio('<test></test>')); // ~ '<test></test>' -- NO LONGER WORKS
Make sure to always load documents first:
import * as cheerio from 'cheerio'; cheerio.load('<test></test>').html();
-
Node types previously re-exported by Cheerio must now be imported directly
from (domhandler
)(https://github.com/fb55/domhandler). #3969 -
htmlparser2 options now reside exclusively under the
xml
key (#2916):const $ = cheerio.load('<html>', { xml: { withStartIndices: true, }, });
New Features
- Add functions to load buffers, streams & URLs in NodeJS by @fb55 in #2857
- Add extract method by @fb55 in #2750
Fixes
- Allow imports of
cheerio/utils
by @blixt in #2601 - Allow empty string in
data
, and simplify by @fb55 in #2818 - Make
closest
be able to start from text nodes by @Qualtagh in #2811 - Fix potential github action smells by @ceddy4395 in #3826
Other
- Cheerio has a new website, featuring updated API docs and guides! #2950
Full Changelog: v1.0.0-rc.12...v1.0.0
v1.0.0-rc.12
v1.0.0-rc.11
[email protected]
is hopefully the last RC before the 1.0.0 release of Cheerio. There are two APIs that will be added for the next major release: An exract
method (#2523) and NodeJS specific loader methods (#2051). These are still in flux and I'd appreciate feedback on the proposals.
A big thank you to everyone that contributed to this release! This includes code contributors, as well as the amazing financial support on GitHub Sponsors!
Under the hood, a lot of work for this release went into updating parse5, cheerio's default HTML parser. Have a look at parse5's release notes to see what has changed there.
Breaking
- Cheerio is now a dual CommonJS and ESM module. That means that deep imports will now fail in newer versions of Node. #2508
script
andstyle
contents are added again in.text()
#2509- To keep the old behavior, switch
.text()
to.prop('innerText')
- To keep the old behavior, switch
- The TypeScript types inherited from upstream dependencies have changed. #2503
- Node types are now using tagged unions, which will make consumption a bit easier.
Features
- Relevant options are now forwarded to
cheerio-select
#2511- Custom pseudo classes can now be specified using the
pseudos
option.
- Custom pseudo classes can now be specified using the
- For the
.prop()
method: - Added a
slim
export, which will always use htmlparser2 #1960
Fixes
- Have
text
turn passed values to strings #2047 - Include
undefined
in the return type ofget
by @glen-84 in #2392 - Recognise comments as HTML #2504
- Add missing
undefined
return value #2505 - Export missing static methods #2506
- Have style parsing add malformed fields to previous field #2521
Refactor
- Use
domutils
module directly #1928 - Hand-roll
isHTML
#1935 - Move initialization logic to
load
#1951 - Only return elements in
closest
#2057 - Remove unnecessary code, be more explicit #2279
- Use stricter TS, ESLint configs #2507
- Update exported values #2512
Development Experience
- Migrate husky to v6 by @DavideViolante in #1934
- Update CI by @XhmikosR in #2149
- Set permissions for GitHub actions by @neilnaveen in #2453
Docs
- Update README "is not a web browser" section by @mxschmitt in #2127
New Contributors
- @DavideViolante made their first contribution in #1934
- @mxschmitt made their first contribution in #2127
- @glen-84 made their first contribution in #2392
- @neilnaveen made their first contribution in #2453
Full Changelog: v1.0.0-rc.10...v1.0.0-rc.11
v1.0.0-rc.10
Fixes:
.html(node)
now moves passed nodes (#1923, fixes #940) 258b26b- Boolean attributes are no longer special in xmlMode (#1903, fixes #1805) b393e4a
- Rename parser adapter files (#1873, fixes #1847) 8f55dd8
- Make
filter
work on all collections (#1870, fixes #1867) fb8d31e - Bump cheerio-select (#1922, fixes https://www.npmjs.com/advisories/1754) 5cd2b9c
Documentation:
- Document how to define TS types for Plug-Ins (#1915, fixes #1778) 880fd2c
- Remove obsolete Testing section e0c7cbb
- Remove now-invalid
require
5dfbd35
Refactors:
v1.0.0-rc.9
Port to TypeScript
Cheerio has been ported entirely to TypeScript (in #1816)! This eliminates a lot of edge-cases within Cheerio and will allow you to use Cheerio with confidence. This release also features a new documentation website based on TypeDoc, allowing you to quickly navigate all available methods: https://cheerio.js.org
Breaking change: If you were using the function exported by Cheerio directly instead of first load()
ing a document, you will now have to update the require
to use the default
export.
- const cheerio = require("cheerio");
+ const cheerio = require("cheerio").default;
cheerio('div', dom)
Please note that this way of using Cheerio is deprecated and might be removed in a future version. Please consider updating your code to:
const cheerio = require("cheerio");
const $ = cheerio.load(dom)
$('div')
Note: Cheerio uses template literal types to determine return types. These are available starting with TypeScript 4.1, so you might have to bump your TypeScript version.
For TypeScript types, Cheerio now implements the ArrayLike<T>
interface. That means that Cheerio instances can contain objects of arbitrary types, but not all methods can be called on them.
The TypeScript compiler will figure out what structures you are operating on:
- When calling a loaded Cheerio instance with an HTML string like
$('<div>')
, it will product aCheerio<Node>
type.Node
is the base class for DOM elements and includes eg. comment and text nodes.
- When calling Cheerio with a selector like
$('.foo')
, it will produce aCheerio<Element>
, as onlyElement
s can be part of the result set.Element
is the class representing tags.
- You can still use
$('...').map()
to map to arbitrary values, and will get a compiler error when trying to call method that are not supported.- Eg.
$('.foo').map((i, el) => $(el).text()).attr('test')
will no longer be possible, as.attr
is not allowed to be called on aCheerio<string>
.
- Eg.
This release does not contain other changes to functionality. Feedback is greatly appreciated; if you encounter a problem, please file an issue!
v1.0.0-rc.8
Second botched release. Please use v1.0.0-rc.9
instead.
v1.0.0-rc.7
Published without a lib
directory — please ignore.