From 60d0b876e5ca86adc3e96409ac21b09bc3f5f630 Mon Sep 17 00:00:00 2001 From: Cosmin Popovici Date: Sat, 24 Feb 2024 14:07:21 +0200 Subject: [PATCH 1/2] test: add failing parser test shows it can't work with badly formed css --- test/expected/parser.html | 1 + test/fixtures/parser.html | 1 + test/test.js | 4 ++++ 3 files changed, 6 insertions(+) create mode 100644 test/expected/parser.html create mode 100644 test/fixtures/parser.html diff --git a/test/expected/parser.html b/test/expected/parser.html new file mode 100644 index 0000000..d9b9367 --- /dev/null +++ b/test/expected/parser.html @@ -0,0 +1 @@ +
margin
diff --git a/test/fixtures/parser.html b/test/fixtures/parser.html new file mode 100644 index 0000000..82e7286 --- /dev/null +++ b/test/fixtures/parser.html @@ -0,0 +1 @@ +
margin
diff --git a/test/test.js b/test/test.js index 145c2fa..c737677 100644 --- a/test/test.js +++ b/test/test.js @@ -27,3 +27,7 @@ test('Preserves other properties', t => { test('Works with tags option', t => { return process(t, 'tags', {tags: ['div', 'p']}) }) + +test('Works with bad CSS', t => { + return process(t, 'parser') +}) From 14de8f77b705b51d0a11d0e696da7a94051a1974 Mon Sep 17 00:00:00 2001 From: Cosmin Popovici Date: Sat, 24 Feb 2024 14:08:46 +0200 Subject: [PATCH 2/2] feat: use postcss with safe parser --- lib/index.js | 3 ++- package-lock.json | 32 ++++++++++++++++++++++++++++++++ package.json | 4 +++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index 770b00e..ac5317c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,6 +1,7 @@ 'use strict' const postcss = require('postcss') +const safe = require('postcss-safe-parser') const mergeLonghand = require('postcss-merge-longhand') module.exports = (options = {}) => tree => { @@ -14,7 +15,7 @@ module.exports = (options = {}) => tree => { } if (node.attrs && node.attrs.style) { - const {css} = postcss().use(mergeLonghand).process(`div { ${node.attrs.style} }`) + const {css} = postcss().use(mergeLonghand).process(`div { ${node.attrs.style} }`, {parser: safe}) node.attrs.style = css.replace(/div {\s|\s}$/gm, '') } diff --git a/package-lock.json b/package-lock.json index 0407a65..deeef1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "postcss": "^8.1.10", "postcss-merge-longhand": "^6.0.0", + "postcss-safe-parser": "^7.0.0", "posthtml": "^0.16.4" }, "devDependencies": { @@ -8574,6 +8575,31 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-safe-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.15", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", @@ -17873,6 +17899,12 @@ "stylehacks": "^6.0.2" } }, + "postcss-safe-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", + "requires": {} + }, "postcss-selector-parser": { "version": "6.0.15", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", diff --git a/package.json b/package.json index ea6b6c4..87c7bbc 100644 --- a/package.json +++ b/package.json @@ -23,13 +23,15 @@ "postcss", "inline-styles", "inline-css", - "inline-css", + "merge-styles", + "merge-css", "longhand", "shorthand" ], "dependencies": { "postcss": "^8.1.10", "postcss-merge-longhand": "^6.0.0", + "postcss-safe-parser": "^7.0.0", "posthtml": "^0.16.4" }, "devDependencies": {