Skip to content

Commit 2ace23f

Browse files
committed
Fix: node-sass 4.11 doesn't like percent placeholders.
The current replacement strategy is broken in node-sass v4.11 for placeholders which are immediately followed by a percent (%) character. The fix is to simply incorporate the percent char into a new, specifically named, replacement tag.
1 parent 95f4d51 commit 2ace23f

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

index.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@ const path = require('path');
33

44
module.exports = (css, settings) => {
55
const cssWithPlaceholders = css
6+
.replace(/%%styled-jsx-placeholder-(\d+)%%%(\w*\s*[),;!{])/g, (_, id, p1) =>
7+
`styled-jsx-percent-placeholder-${id}-${p1}`
8+
)
69
.replace(/%%styled-jsx-placeholder-(\d+)%%(\w*\s*[),;!{])/g, (_, id, p1) =>
710
`styled-jsx-placeholder-${id}-${p1}`
811
)
12+
.replace(/%%styled-jsx-placeholder-(\d+)%%%/g, (_, id) =>
13+
`/*%%styled-jsx-percent-placeholder-${id}%%*/`
14+
)
915
.replace(/%%styled-jsx-placeholder-(\d+)%%/g, (_, id) =>
1016
`/*%%styled-jsx-placeholder-${id}%%*/`
1117
)
@@ -22,9 +28,15 @@ module.exports = (css, settings) => {
2228
)).css.toString()
2329

2430
return preprocessed
31+
.replace(/styled-jsx-percent-placeholder-(\d+)-(\w*\s*[),;!{])/g, (_, id, p1) =>
32+
`%%styled-jsx-placeholder-${id}%%%${p1}`
33+
)
2534
.replace(/styled-jsx-placeholder-(\d+)-(\w*\s*[),;!{])/g, (_, id, p1) =>
2635
`%%styled-jsx-placeholder-${id}%%${p1}`
2736
)
37+
.replace(/\/\*%%styled-jsx-percent-placeholder-(\d+)%%\*\//g, (_, id) =>
38+
`%%styled-jsx-placeholder-${id}%%%`
39+
)
2840
.replace(/\/\*%%styled-jsx-placeholder-(\d+)%%\*\//g, (_, id) =>
2941
`%%styled-jsx-placeholder-${id}%%`
3042
)

test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ describe('styled-jsx-plugin-sass', () => {
3030
)
3131
})
3232

33+
it("works with percent placeholders", () => {
34+
assert.equal(
35+
plugin('p { width: %%styled-jsx-placeholder-0%%%; }', {}).trim(),
36+
cleanup(`
37+
p {
38+
width: %%styled-jsx-placeholder-0%%%; }
39+
`)
40+
)
41+
})
42+
3343
it("works with placeholders in css functions", () => {
3444
assert.equal(
3545
plugin('div { grid-template-columns: repeat(%%styled-jsx-placeholder-0%%, calc(%%styled-jsx-placeholder-1%%% - %%styled-jsx-placeholder-2%%px)); }', {}).trim(),

0 commit comments

Comments
 (0)