An issue was discovered in PostCSS before 8.4.31. It affects linters using PostCSS to parse external Cascading Style Sheets (CSS). There may be \r discrepancies, as demonstrated by @font-face{ font:(\r/*);} in a rule.
This vulnerability affects linters using PostCSS to parse external untrusted CSS. An attacker can prepare CSS in such a way that it will contains parts parsed by PostCSS as a CSS comment. After processing by PostCSS, it will be included in the PostCSS output in CSS nodes (rules, properties) despite being originally included in a comment.
postcss/postcss (postcss)
Compare Source
Compare Source
- Improved source map performance (by Romain Menke).
Compare Source
- Fixed
Node#source.offset (by Ido Rosenthal).
- Fixed docs (by Christian Oliff).
Compare Source
- Fixed
Root.source.end for better source map (by Romain Menke).
- Fixed
Result.root types when process() has no parser.
Compare Source
- Fixed
Container clone methods types.
Compare Source
- Fixed clone methods types.
Compare Source
Compare Source
Compare Source
- Fixed warnings in TypeDoc.
Compare Source
- Fixed TypeScript support with
node16 (by Remco Haszing).
Compare Source
- Fixed
Input#error types (by Aleks Hudochenkov).
Compare Source
- Fixed source map generation for childless at-rules like
@layer.
Compare Source
- Fixed whitespace preserving after AST transformations (by Romain Menke).
Compare Source
- Fixed an error on
absolute: true with empty sourceContent (by Rene Haas).
Compare Source
- Fixed
Node.before() unexpected behavior (by Romain Menke).
- Added TOC to docs (by Mikhail Dedov).
Compare Source
- Fixed
Root AST migration.
Compare Source
- Fixed AST normalization after using custom parser with old PostCSS AST.
Compare Source
- Print "old plugin API" warning only if plugin was used (by @zardoy).
Compare Source
- Fixed
append() error after using .parent (by Jordan Pittman).
Compare Source
- Fixed
package.funding to have same value between all PostCSS packages.
Compare Source
- Fixed
Declaration#raws.value type.
Compare Source
- Fixed
package.funding URL format.
Compare Source
- Fixed
package.funding (by Álvaro Mondéjar).
Compare Source
- Fixed end position in empty Custom Properties.
Compare Source
- Fixed
Node#warn() type (by Masafumi Koba).
- Fixed comment removal in values after
,.
Compare Source
- Prevented comment removing when it change meaning of CSS.
- Fixed parsing space in last semicolon-less CSS Custom Properties.
- Fixed comment cleaning in CSS Custom Properties with space.
- Fixed throwing an error on
.root access for plugin-less case.
Compare Source
- Fixed
raws types to make object extendable (by James Garbutt).
- Moved from Yarn 1 to pnpm.
Compare Source
Compare Source
Compare Source
- Fixed
Node#source.offset (by Ido Rosenthal).
- Fixed docs (by Christian Oliff).
Compare Source
- Fixed whitespace preserving after AST transformations (by Romain Menke).
v8.4.0: 8.4 "President Camio"
Compare Source
President Camio seal
PostCSS 8.4 brought ranges for warnings and errors, smaller node_modules size, lazy parsing to avoid PostCSS does nothing warning, and TypeScript fixes.
Thanks to Sponsors
This release was possible thanks to our community.
Sponsored by Tailwind CSS
Sponsored by ThemeIsle
If your company wants to support the sustainability of front-end infrastructure or wants to give some love to PostCSS, you can join our supporters by:
Rages for Errors and Warnings
@adalinesimonian, the author of amazing Stylelint extension for VS Code, added ranges to errors and warnings.
result.warn(msg, { index }) // One character warning at index
result.warn(msg, { endIndex }) // Starts at node start, ends at endIndex
result.warn(msg, { index, endIndex }) // Starts at index, ends at endIndex
result.warn(msg, { start }) // Starts at start, ends at node end
result.warn(msg, { end }) // Starts at node start, ends at end
result.warn(msg, { start, end }) // Starts at start, ends at end
result.warn(msg, { word }) // Starts at word location, ends at word index + length
It will improve DX in the IDE extension.
Lazy Parsing
Previously, we found that many tools run PostCSS even if the developer didn’t pass any PostCSS plugins. Parsing is the most expensive step in CSS processing. It led to a waste of resources without any reason.
We tried to resolve the problem by adding a PostCSS does nothing warning. But it didn’t force tool authors to be more careful with user’s resources.
If PostCSS sees that tool call it without passing plugins (or changing parser/stringifier), PostCSS will not parse CSS (until toll will call Result#root). In 8.4, @bogdan0083 (with the help of @WilhelmYakunin) tries to solve the problem in another way. It allows us to save resources and remove the PostCSS does nothing warning.
// No plugins, we do not parse CSS
let result = await postcss().process(css, { from })
result.css // Is the same string passed to process()
result.map // Special 1-to-1 source map
result.root // CSS will parsed only here
Install Size Reduction
With ≈60M weekly downloads, PostCSS has responsibility for the world’s resource spending.
Together with @7rulnik we reduced source-map-js size. It is transitive dependency of PostCSS.
In 8.4, we moved to a fixed version of source-map-js, which reduced the postcss size in your node_modules from ≈1 MB to 0.3 MB. With the huge popularity of PostCSS, it will free a lot of resources on our CIs.
PostCSS install size reduction
Migration from Jest to uvu
@kimoofey refactored all tests from the popular Jest framework to small and fast uvu.
It will not affect end-users. However, it reduced our node_modules size by 33 MB and made tests twice faster (yarn install & yarn unit: 24 → 13 seconds).
TypeScript Fixes
- Added
Processor types.
- Added
Stringifier types (by @43081j).
- Fixed types
Root and Document in result values (by @43081j).
- Fixed
Node#walkRules() types (by @hudochenkov).
Other Changes
Compare Source
Compare Source
- Fixed
Maximum call stack issue of some source maps (by Yeting Li).
Compare Source
- Replaced
nanocolors to picocolors.
- Reduced package size.
Compare Source
Compare Source
- Replaced
colorette to nanocolors.
- Added bug field to
package.json (by Christian Oliff).
- Improved docs (by Andrew Bruce and Paul Shryock).
Compare Source
- Fixed column in
missed semicolon error (by @Gusted).
Compare Source
- Fixed broken AST detection.
Compare Source
- Fixed broken AST detection.
Compare Source
- Fixed broken AST on
postcss dependency duplication in custom parsers.
Compare Source
Compare Source
v8.3.0: 8.3 "Duke Murmur"
Compare Source
Duke Murmur seal
PostCSS 8.3 improved source map parsing performance, added Node#assign() shortcut, and experimental Document node to AST.
Thanks to Sponsors
This release was possible thanks to our community.
Sponsored by Tailwind CSS
Sponsored by ThemeIsle
If your company wants to support the sustainability of front-end infrastructure or wants to give some love to PostCSS, you can join our supporters by:
Source Map Performance
Because PostCSS needs synchronous API, we can’t move from the old `source-map 0.6 to 0.7 (many other open-source projects too).
@7rulnik forked source-map 0.6 to source-map-js and back-ported performance improvements from 0.7. In 8.3 we switched from source-map to this source-map-js fork.
You map see 4x performance improvements in parsing map from processing step before PostCSS (for instance, Sass).
Document Nodes
Thanks to @gucong3000, PostCSS already parse CSS from HTML and JS files (CSS-in-JS templates and objects).
But his plugin need big updates. @hudochenkov from stylelint team decided to create new parsers for styles inside CSS-in-JS, HTML, and Markdown.
He suggested adding new Document node type to PostCSS AST to keep multiple Root nodes inside and JS/HTML/Markdown code blocks between these style blocks.
const document = htmlParser(
'<html><style>a{color:black}</style><style>b{z-index:2}</style>'
)
document.type //=> 'document'
document.nodes.length //=> 2
document.nodes[0].type //=> 'root'
This is an experimental feature. Some aspects of this node could change within minor or patch version releases.
Node#assign() Shortcut
The creator of famous postcss-preset-env and many other PostCSS tools, @jonathantneal suggested a nice shortcut to change multiple properties in the node:
decl.assign({ prop: 'word-wrap', value: 'break-word' })
Compare Source
- Fixed
list type definitions (by @n19htz).
Compare Source
- Removed
source-map from client-side bundle (by Barak Igal).
Uh oh!
There was an error while loading. Please reload this page.
This PR contains the following updates:
8.2.13->8.4.31GitHub Vulnerability Alerts
CVE-2023-44270
An issue was discovered in PostCSS before 8.4.31. It affects linters using PostCSS to parse external Cascading Style Sheets (CSS). There may be
\rdiscrepancies, as demonstrated by@font-face{ font:(\r/*);}in a rule.This vulnerability affects linters using PostCSS to parse external untrusted CSS. An attacker can prepare CSS in such a way that it will contains parts parsed by PostCSS as a CSS comment. After processing by PostCSS, it will be included in the PostCSS output in CSS nodes (rules, properties) despite being originally included in a comment.
Release Notes
postcss/postcss (postcss)
v8.4.31Compare Source
\rparsing to fix CVE-2023-44270.v8.4.30Compare Source
v8.4.29Compare Source
Node#source.offset(by Ido Rosenthal).v8.4.28Compare Source
Root.source.endfor better source map (by Romain Menke).Result.roottypes whenprocess()has no parser.v8.4.27Compare Source
Containerclone methods types.v8.4.26Compare Source
v8.4.25Compare Source
v8.4.24Compare Source
Plugintypes.v8.4.23Compare Source
v8.4.22Compare Source
node16(by Remco Haszing).v8.4.21Compare Source
Input#errortypes (by Aleks Hudochenkov).v8.4.20Compare Source
@layer.v8.4.19Compare Source
v8.4.18Compare Source
absolute: truewith emptysourceContent(by Rene Haas).v8.4.17Compare Source
Node.before()unexpected behavior (by Romain Menke).v8.4.16Compare Source
RootAST migration.v8.4.15Compare Source
v8.4.14Compare Source
v8.4.13Compare Source
append()error after using.parent(by Jordan Pittman).v8.4.12Compare Source
package.fundingto have same value between all PostCSS packages.v8.4.11Compare Source
Declaration#raws.valuetype.v8.4.10Compare Source
package.fundingURL format.v8.4.9Compare Source
package.funding(by Álvaro Mondéjar).v8.4.8Compare Source
v8.4.7Compare Source
Node#warn()type (by Masafumi Koba).,.v8.4.6Compare Source
.rootaccess for plugin-less case.v8.4.5Compare Source
rawstypes to make object extendable (by James Garbutt).v8.4.4Compare Source
source.offset(by @romainmenke).v8.4.3Compare Source
CssSyntaxErrortypes (by @romainmenke).v8.4.2Compare Source
Node#source.offset(by Ido Rosenthal).v8.4.1Compare Source
v8.4.0: 8.4 "President Camio"Compare Source
President Camio sealPostCSS 8.4 brought ranges for warnings and errors, smaller
node_modulessize, lazy parsing to avoidPostCSS does nothingwarning, and TypeScript fixes.Thanks to Sponsors
This release was possible thanks to our community.
Sponsored by Tailwind CSS Sponsored by ThemeIsleIf your company wants to support the sustainability of front-end infrastructure or wants to give some love to PostCSS, you can join our supporters by:
Rages for Errors and Warnings
@adalinesimonian, the author of amazing Stylelint extension for VS Code, added ranges to errors and warnings.
It will improve DX in the IDE extension.
Lazy Parsing
Previously, we found that many tools run PostCSS even if the developer didn’t pass any PostCSS plugins. Parsing is the most expensive step in CSS processing. It led to a waste of resources without any reason.
We tried to resolve the problem by adding a
PostCSS does nothingwarning. But it didn’t force tool authors to be more careful with user’s resources.If PostCSS sees that tool call it without passing plugins (or changing parser/stringifier), PostCSS will not parse CSS (until toll will call
Result#root). In 8.4, @bogdan0083 (with the help of @WilhelmYakunin) tries to solve the problem in another way. It allows us to save resources and remove thePostCSS does nothingwarning.Install Size Reduction
With ≈60M weekly downloads, PostCSS has responsibility for the world’s resource spending.
Together with @7rulnik we reduced
source-map-jssize. It is transitive dependency of PostCSS.In 8.4, we moved to a fixed version of
PostCSS install size reductionsource-map-js, which reduced thepostcsssize in yournode_modulesfrom ≈1 MB to 0.3 MB. With the huge popularity of PostCSS, it will free a lot of resources on our CIs.Migration from Jest to
uvu@kimoofey refactored all tests from the popular Jest framework to small and fast
uvu.It will not affect end-users. However, it reduced our
node_modulessize by 33 MB and made tests twice faster (yarn install & yarn unit: 24 → 13 seconds).TypeScript Fixes
Processortypes.Stringifiertypes (by @43081j).RootandDocumentin result values (by @43081j).Node#walkRules()types (by @hudochenkov).Other Changes
v8.3.11Compare Source
v8.3.10Compare Source
Maximum call stackissue of some source maps (by Yeting Li).v8.3.9Compare Source
nanocolorstopicocolors.v8.3.8Compare Source
nanocolors.v8.3.7Compare Source
colorettetonanocolors.package.json(by Christian Oliff).v8.3.6Compare Source
missed semicolonerror (by @Gusted).v8.3.5Compare Source
v8.3.4Compare Source
v8.3.3Compare Source
postcssdependency duplication in custom parsers.v8.3.2Compare Source
v8.3.1Compare Source
v8.3.0: 8.3 "Duke Murmur"Compare Source
Duke Murmur sealPostCSS 8.3 improved source map parsing performance, added
Node#assign()shortcut, and experimentalDocumentnode to AST.Thanks to Sponsors
This release was possible thanks to our community.
Sponsored by Tailwind CSS Sponsored by ThemeIsleIf your company wants to support the sustainability of front-end infrastructure or wants to give some love to PostCSS, you can join our supporters by:
Source Map Performance
Because PostCSS needs synchronous API, we can’t move from the old `source-map 0.6 to 0.7 (many other open-source projects too).
@7rulnik forked
source-map0.6 tosource-map-jsand back-ported performance improvements from 0.7. In 8.3 we switched fromsource-mapto thissource-map-jsfork.You map see 4x performance improvements in parsing map from processing step before PostCSS (for instance, Sass).
DocumentNodesThanks to @gucong3000, PostCSS already parse CSS from HTML and JS files (CSS-in-JS templates and objects).
But his plugin need big updates. @hudochenkov from stylelint team decided to create new parsers for styles inside CSS-in-JS, HTML, and Markdown.
He suggested adding new
Documentnode type to PostCSS AST to keep multipleRootnodes inside and JS/HTML/Markdown code blocks between these style blocks.This is an experimental feature. Some aspects of this node could change within minor or patch version releases.
Node#assign()ShortcutThe creator of famous
postcss-preset-envand many other PostCSS tools, @jonathantneal suggested a nice shortcut to change multiple properties in the node:v8.2.15Compare Source
listtype definitions (by @n19htz).v8.2.14Compare Source
source-mapfrom client-side bundle (by Barak Igal).Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.