fix(deps): update dependency postcss to v8 [security]
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| postcss (source) | 7.0.36 -> 8.4.31 |
GitHub 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 \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.
Release Notes
postcss/postcss (postcss)
v8.4.31
- Fixed
\rparsing to fix CVE-2023-44270.
v8.4.30
- Improved source map performance (by Romain Menke).
v8.4.29
- Fixed
Node#source.offset(by Ido Rosenthal). - Fixed docs (by Christian Oliff).
v8.4.28
- Fixed
Root.source.endfor better source map (by Romain Menke). - Fixed
Result.roottypes whenprocess()has no parser.
v8.4.27
- Fixed
Containerclone methods types.
v8.4.26
- Fixed clone methods types.
v8.4.25
- Improve stringify performance (by Romain Menke).
- Fixed docs (by @vikaskaliramna07).
v8.4.24
- Fixed
Plugintypes.
v8.4.23
- Fixed warnings in TypeDoc.
v8.4.22
- Fixed TypeScript support with
node16(by Remco Haszing).
v8.4.21
- Fixed
Input#errortypes (by Aleks Hudochenkov).
v8.4.20
- Fixed source map generation for childless at-rules like
@layer.
v8.4.19
- Fixed whitespace preserving after AST transformations (by Romain Menke).
v8.4.18
- Fixed an error on
absolute: truewith emptysourceContent(by Rene Haas).
v8.4.17
- Fixed
Node.before()unexpected behavior (by Romain Menke). - Added TOC to docs (by Mikhail Dedov).
v8.4.16
- Fixed
RootAST migration.
v8.4.15
- Fixed AST normalization after using custom parser with old PostCSS AST.
v8.4.14
- Print “old plugin API” warning only if plugin was used (by @zardoy).
v8.4.13
- Fixed
append()error after using.parent(by Jordan Pittman).
v8.4.12
- Fixed
package.fundingto have same value between all PostCSS packages.
v8.4.11
- Fixed
Declaration#raws.valuetype.
v8.4.10
- Fixed
package.fundingURL format.
v8.4.9
- Fixed
package.funding(by Álvaro Mondéjar).
v8.4.8
- Fixed end position in empty Custom Properties.
v8.4.7
- Fixed
Node#warn()type (by Masafumi Koba). - Fixed comment removal in values after
,.
v8.4.6
- 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
.rootaccess for plugin-less case.
v8.4.5
- Fixed
rawstypes to make object extendable (by James Garbutt). - Moved from Yarn 1 to pnpm.
v8.4.4
- Fixed custom syntax without
source.offset(by @romainmenke).
v8.4.3
- Fixed
CssSyntaxErrortypes (by @romainmenke).
v8.4.2
- Fixed
Node#source.offset(by Ido Rosenthal). - Fixed docs (by Christian Oliff).
v8.4.1
- Fixed whitespace preserving after AST transformations (by Romain Menke).
v8.4.0: 8.4 “President Camio”
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.
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:
- Tidelift with a Spotify-like subscription model supporting all projects from your lock file.
- Direct donations in PostCSS & Autoprefixer Open Collective.
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.
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
Processortypes. - Added
Stringifiertypes (by @43081j). - Fixed types
RootandDocumentin result values (by @43081j). - Fixed
Node#walkRules()types (by @hudochenkov).
Other Changes
- Fixed docs (by @paulshryock).
v8.3.11
- Remove debugging code.
v8.3.10
- Fixed
Maximum call stackissue of some source maps (by Yeting Li).
v8.3.9
- Replaced
nanocolorstopicocolors. - Reduced package size.
v8.3.8
- Update
nanocolors.
v8.3.7
- Replaced
colorettetonanocolors. - Added bug field to
package.json(by Christian Oliff). - Improved docs (by Andrew Bruce and Paul Shryock).
v8.3.6
- Fixed column in
missed semicolonerror (by @Gusted).
v8.3.5
- Fixed broken AST detection.
v8.3.4
- Fixed broken AST detection.
v8.3.3
- Fixed broken AST on
postcssdependency duplication in custom parsers.
v8.3.2
- Update changelog.
v8.3.1
- Remove debugging code.
v8.3.0: 8.3 “Duke Murmur”
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.
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:
- Tidelift with a Spotify-like subscription model supporting all projects from your lock file.
- Direct donations in PostCSS & Autoprefixer Open Collective.
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' })
v8.2.15
- Fixed
listtype definitions (by @n19htz).
v8.2.14
- Removed
source-mapfrom client-side bundle (by Barak Igal).
v8.2.13
- Fixed ReDoS vulnerabilities in source map parsing (by Yeting Li).
v8.2.12
- Fixed
package.jsonexports.
v8.2.11
- Fixed
DEP0148warning in Node.js 16. - Fixed docs (by @semiromid).
v8.2.10
- Fixed ReDoS vulnerabilities in source map parsing.
- Fixed webpack 5 support (by Barak Igal).
- Fixed docs (by Roeland Moors).
v8.2.9
- Exported
NodeErrorOptionstype (by Rouven Weßling).
v8.2.8
- Fixed browser builds in webpack 4 (by Matt Jones).
v8.2.7
- Fixed browser builds in webpack 5 (by Matt Jones).
v8.2.6
- Fixed
Maximum call stack size exceededinNode#toJSON. - Fixed docs (by inokawa).
v8.2.5
- Fixed escaped characters handling in
list.split(by Natalie Weizenbaum).
v8.2.4
- Added plugin name to
postcss.plugin()warning (by Tom Williams). - Fixed docs (by Bill Columbia).
v8.2.3
- Fixed
JSON.stringify(Node[])support (by Niklas Mischkulnig).
v8.2.2
- Fixed CSS-in-JS support (by James Garbutt).
- Fixed plugin types (by Ludovico Fischer).
- Fixed
Result#warn()types.
v8.2.1
- Fixed
listtype definitions (by @n19htz).
v8.2.0: 8.2 “Prince Orobas”
PostCSS 8.2 added a new API to serialize and deserialize CSS AST to JSON.
import { parse, fromJSON } from 'postcss'
let root = parse('a{}', { from: 'input.css' })
let json = root.toJSON()
// save to file, send by network, etc
let root2 = fromJSON(json)
Thanks to @mischnic for his work.
v8.1.14
- Fixed parser performance regression.
v8.1.13
- Fixed broken AST after moving nodes in visitor API.
v8.1.12
- Fixed Autoprefixer regression.
v8.1.11
- Added PostCSS update suggestion on unknown event in plugin.
v8.1.10
- Fixed
LazyResulttype export (by Evan You). - Fixed
LazyResulttype compatibility withPromise(by Anton Kastritskiy).
v8.1.9
- Reduced dependencies number (by Bogdan Chadkin).
v8.1.8
- Fixed
LazyResulttype compatibility withPromise(by Ludovico Fischer). - Fixed HTTPS links in documentation.
v8.1.7
- Fixed
importsupport in TypeScript (by Remco Haszing).
v8.1.6
- Reverted
package.exportsNode.js 15 fix.
v8.1.5
- Fixed Node.js 15 warning (by 沈鸿飞).
v8.1.4
- Fixed TypeScript definition (by Arthur Petrie).
v8.1.3
- Added
package.types.
v8.1.2
- Fixed API docs (by Arthur Petrie).
- Improved plugin guide (by Yunus Gaziev).
- Prepared code base for Deno support (by Oscar Otero).
v8.1.1
- Fixed parser performance regression.
v8.1.0: 8.1 “Duke Gemory”
PostCSS 8.1 fixed the new visitor API from the 8.0 release.
We fixed Root and RootExit re-calling on children's changes. And now visitors will visit the parent again if nested children were changed.
We added Once and OnceExit events, which will not be called again on node changes. You can use them to lint files or collect statistics:
module.exports = {
postcssPlugin: 'postcss-linter',
OnceExit (root) {
lint(root)
}
}
module.exports.postcss = true
We updated Migration guide according to new changes.
v8.0.9
- Replace prototype in PostCSS 7 nodes instead of recreating them.
- Added missed
Transformerto exported types (by Pierre-Marie Dartus).
v8.0.8
- Fix
8.0.7regression on PostCSS 7 nodes converting (by Adam Wathan).
v8.0.7
- Fixed compatibility issue with mixin AST with PostCSS 7 and 8 nodes.
- Added migration guide translation to Chinese to the warning.
v8.0.6
- Fixed child adding methods in
Container.
v8.0.5
- Update changelog.
v8.0.4
- Fixed
Cannot read property 'line' of nullerror. - Fixed source map support for declarations.
v8.0.3
- Fixed client-side bundling support.
v8.0.2
- Fixed plugin packs support.
v8.0.1
- Updated
Processor#version.
v8.0.0: 8.0 “President Ose”
PostCSS 8.0 brings new plugin API, node_modules size reduction, better source map support, and CSS parser improvements.
Check out a day-by-day diary of PostCSS 8.0 development process.
See Migration Guides for end-users and for plugin developers.
Thanks to Sponsors
With more than 100 M downloads per month, it becomes hard to support PostCSS in free time. For instance, getting the 8.0 release ready took 4 months of work.
This release was possible thanks to out community. Tailwind CSS, De Voorhoede, InVision AG, Brainbow, and many individual contributions.
If your company wants to support the sustainability of front-end infrastructure or just wants to give some love to PostCSS, you can join our supporters by:
- Tidelift with a Spotify-like subscription model and supporting all projects from your lock file.
- Direct donations in PostCSS & Autoprefixer Open Collective.
Breaking Changes
We try to avoid any breaking changes for end-users:
- PostCSS 8 dropped Node.js 6.x, 8.x, 11.x, and 13.x versions support. All these versions have no security updates anymore.
- We now serve ES6+ sources in the npm package without Babel compilation. If you are creating tools like CodePen and put PostCSS into the client-side JS bundle, you may need to run Babel on
node_modules/postcssfor old browsers. - We removed rarely used
postcss.vendorAPI.
New Plugin API
The biggest change in PostCSS 8 is a new plugin API. Thanks to @BondarenkoAlex for big help in creating a new API.
module.exports = () => {
return {
postcssPlugin: 'postcss-will-change',
Declaration: {
'will-change': (decl, { Declaration }) => {
decl.cloneBefore(
new Declaration({ prop: 'backface-visibility', value: 'hidden' })
)
}
}
}
}
module.exports.postcss = true
We know that rewriting old plugins will take time, but the new API will improve the end-user’s experience and make life easier for plugin developers:
- With new API, all plugins can share a single scan of the CSS tree. It makes CSS processing up to 20% faster.
- Because npm often duplicates dependencies, you may have many
postcssduplicates in yournode_modules. New API fixes this problem. - Plugins will re-visit changed nodes to reduce compatibility issues between plugins. Now the order of plugins in your PostCSS config will be less important.
- New API is close to Babel’s visitor API.
These resources will help plugin developers in API migration:
- The Migration Guide
- Writing a PostCSS Plugin
- We have a Gitter chat open for all questions related to plugin migration.
PostCSS development guidelines were also changed:
- Now it is prohibited to create own AST on top of PostCSS AST classes since it could lead to painful bugs due to the usage private APIs.
- Plugins and runners must have
postcssinpeerDependencies.
New Website without React
Previously PostCSS used a React-based framework for the project's website. Since we have a static website, we decided to migrate to a React-free framework and got good performance improvements:
- 360 → 20 ms for Max Potential First Input Delay
- 3.3 → 1.5 seconds for First CPU Idle
- 3.3 → 1.5 seconds for Time to Interactive
Check out postcss.org and new API docs that feature the awesome alchemy-inspired design by @okonet.
We also removed Google Analytics tracking scripts and encourage other open source projects to be an example in caring about user’s privacy and performance.
Parser Improvments
Did you know that all examples below are valid CSS?
:root {
--empty: ;
--JSON: [1, "2", {"three": {"a":1}}, [4]];
--javascript: function(rule) { console.log(rule) };
}
@​supports (--element(".minwidth", { "minWidth": 300 })) {
[--self] {
background: greenyellow;
}
}
Now PostCSS parses even those rare edge cases correctly. Thanks to Tailwind CSS and Prettier teams for adding more cases to our CSS parser tests collection.
Note that now --roundMixin: { border-radius: 8px } will be parsed as a Declaration with the { border-radius: 8px } value.
Better Source Map Support
We have added support for two new source map formats: Index map and JSON (data:application/json).
PostCSS 8 is now much closer to the source map spec. Thanks to the Google team for reports:
- We now treat
sourcesin map as URLs instead of file paths. - We now resolve
sourcesrelative to map file, not CSS file.
A few source map APIs were added:
opts.maps.absolute = trueoption for absolute paths in source map.opts.maps.annotation = (file, root) => urlfor a dynamic path to source map.Node#origin()now returnsposition.urlin addition toposition.filefor compatibility with absolute URLs in source map’ssources.
API Changes
We have added ES modules support and now we export all classes from the main entry:
import { CssSyntaxError, parse } from "postcss"
@graberzz added Node#source.offset in addition to line and column.
CSS Custom Properties and Sass-like $-variables now have a special Declaration#variable mark:
const root = parse(`
:root {
--propery: value;
}
$variable: value
`)
root.first.first.variable //=> true
root.last.variable //=> true
TypeScript
PostCSS now has a first-class TypeScript support:
- We moved API docs from JSDoc to TypeDoc. Check out our new API docs.
- We are using check-dts to test types with special unit tests.
- We keep types in separate files for better readability.
- With the new structure and test system, we fixed many small issues in types.
Other Changes
- Fixed calling
replaceWithwith input replaced node (by @josephkaptur). - Reduce dependencies by replacing
chalktocolorette. - Added
Declaration#valueauto-conversion to string to prevent plugin’s bugs. - Fixed building PostCSS with Rollup (by @MapGrid) because of circular dependencies.
- Moved unknown source from counter to random IDs:
<input css 9M4X8l>:10:6. - Removed docs from the npm package.
v7.0.39
- Reduce package size.
- Backport
nanocolorstopicocolorsmigration.
v7.0.38
- Update
Processor#version.
v7.0.37
- Backport
chalktonanocolorsmigration.
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.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.