Skip to content

Commit d75953d

Browse files
authored
Merge pull request #2084 from 43081j/raw-raws-rawing
fix: always call `raw` to retrieve raw values
2 parents af58cf1 + 68bd213 commit d75953d

2 files changed

Lines changed: 42 additions & 28 deletions

File tree

lib/stringifier.js

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,15 @@ class Stringifier {
8585
}
8686

8787
block(node, start) {
88-
let raws = node.raws
89-
let between =
90-
typeof raws.between !== 'undefined'
91-
? raws.between
92-
: this.raw(node, 'between', 'beforeOpen')
88+
let between = this.raw(node, 'between', 'beforeOpen')
9389
this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start')
9490

9591
let after
9692
if (node.nodes && node.nodes.length) {
9793
this.body(node)
98-
after =
99-
typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after')
94+
after = this.raw(node, 'after')
10095
} else {
101-
after =
102-
typeof raws.after !== 'undefined'
103-
? raws.after
104-
: this.raw(node, 'after', 'emptyBody')
96+
after = this.raw(node, 'after', 'emptyBody')
10597
}
10698

10799
if (after) this.builder(escapeHTMLInCSS(after))
@@ -120,34 +112,21 @@ class Stringifier {
120112
let isDocument = node.type === 'document'
121113
for (let i = 0; i < nodes.length; i++) {
122114
let child = nodes[i]
123-
let before = child.raws.before
124-
if (typeof before === 'undefined') {
125-
before = this.raw(child, 'before')
126-
}
115+
let before = this.raw(child, 'before')
127116
if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before))
128117
this.stringify(child, last !== i || semicolon)
129118
}
130119
}
131120

132121
comment(node) {
133-
let raws = node.raws
134-
let left =
135-
typeof raws.left !== 'undefined'
136-
? raws.left
137-
: this.raw(node, 'left', 'commentLeft')
138-
let right =
139-
typeof raws.right !== 'undefined'
140-
? raws.right
141-
: this.raw(node, 'right', 'commentRight')
122+
let left = this.raw(node, 'left', 'commentLeft')
123+
let right = this.raw(node, 'right', 'commentRight')
142124
this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node)
143125
}
144126

145127
decl(node, semicolon) {
146128
let raws = node.raws
147-
let between =
148-
typeof raws.between !== 'undefined'
149-
? raws.between
150-
: this.raw(node, 'between', 'colon')
129+
let between = this.raw(node, 'between', 'colon')
151130

152131
let string = node.prop + between + this.rawValue(node, 'value')
153132

test/stringifier.test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,4 +320,39 @@ test('does not escape Document raws', () => {
320320
is(document.toString(), 'a {}</style>b {}</style>')
321321
})
322322

323+
test('always calls raw to retrieve raws', () => {
324+
class CustomStringifier extends Stringifier {
325+
raw(node, own, detect) {
326+
return `\nRAW(${node.type}, ${own}, ${detect})\n`
327+
}
328+
}
329+
let root = new Root()
330+
let rootRule = new Rule({ selector: 'a' })
331+
let decl = new Declaration({ prop: 'color', value: 'black' })
332+
decl.raws.before = 'BEFORE'
333+
decl.raws.between = 'BETWEEN'
334+
decl.raws.after = 'AFTER'
335+
root.append(rootRule)
336+
rootRule.append(decl)
337+
338+
let stringify = (node, builder) => {
339+
let customStringifier = new CustomStringifier(builder)
340+
customStringifier.stringify(node)
341+
}
342+
let result = root.toString(stringify)
343+
is(result, [
344+
'',
345+
'RAW(rule, before, undefined)',
346+
'a',
347+
'RAW(rule, between, beforeOpen)',
348+
'{',
349+
'RAW(decl, before, undefined)',
350+
'color',
351+
'RAW(decl, between, colon)',
352+
'black;',
353+
'RAW(rule, after, undefined)',
354+
'}'
355+
].join('\n'))
356+
})
357+
323358
test.run()

0 commit comments

Comments
 (0)