postcss 8.2.0 → 8.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of postcss might be problematic. Click here for more details.
- package/CHANGELOG.md +16 -1
- package/README.md +5 -3
- package/lib/container.d.ts +23 -28
- package/lib/css-syntax-error.d.ts +1 -1
- package/lib/fromJSON.js +29 -22
- package/lib/node.js +20 -6
- package/lib/postcss.d.ts +2 -1
- package/lib/postcss.js +5 -3
- package/lib/processor.js +1 -1
- package/lib/result.d.ts +1 -1
- package/lib/root.d.ts +0 -5
- package/lib/stringifier.js +9 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,8 +1,23 @@
|
|
1
1
|
# Change Log
|
2
2
|
This project adheres to [Semantic Versioning](https://semver.org/).
|
3
3
|
|
4
|
+
## 8.2.4
|
5
|
+
* Added plugin name to `postcss.plugin()` warning (by Tom Williams).
|
6
|
+
* Fixed docs (by Bill Columbia).
|
7
|
+
|
8
|
+
## 8.2.3
|
9
|
+
* Fixed `JSON.stringify(Node[])` support (by Niklas Mischkulnig).
|
10
|
+
|
11
|
+
## 8.2.2
|
12
|
+
* Fixed CSS-in-JS support (by James Garbutt).
|
13
|
+
* Fixed plugin types (by Ludovico Fischer).
|
14
|
+
* Fixed `Result#warn()` types.
|
15
|
+
|
16
|
+
## 8.2.1
|
17
|
+
* Fixed `Node#toJSON()` and `postcss.fromJSON()` (by Niklas Mischkulnig).
|
18
|
+
|
4
19
|
## 8.2 “Prince Orobas”
|
5
|
-
*
|
20
|
+
* Added `Node#toJSON()` and `postcss.fromJSON()` (by Niklas Mischkulnig).
|
6
21
|
|
7
22
|
## 8.1.14
|
8
23
|
* Fixed parser performance regression.
|
package/README.md
CHANGED
@@ -100,7 +100,8 @@ If you have any new ideas, [PostCSS plugin development] is really easy.
|
|
100
100
|
* [`font-magician`] generates all the `@font-face` rules needed in CSS.
|
101
101
|
* [`postcss-inline-svg`] allows you to inline SVG and customize its styles.
|
102
102
|
* [`postcss-write-svg`] allows you to write simple SVG directly in your CSS.
|
103
|
-
|
103
|
+
* [`webp-in-css`] to use WebP image format in CSS background.
|
104
|
+
* [`avif-in-css`] to use AVIF image format in CSS background.
|
104
105
|
|
105
106
|
### Linters
|
106
107
|
|
@@ -136,6 +137,8 @@ If you have any new ideas, [PostCSS plugin development] is really easy.
|
|
136
137
|
[`postcss-rtl`]: https://github.com/vkalinichev/postcss-rtl
|
137
138
|
[`postcss-use`]: https://github.com/postcss/postcss-use
|
138
139
|
[`css-modules`]: https://github.com/css-modules/css-modules
|
140
|
+
[`webp-in-css`]: https://github.com/ai/webp-in-css
|
141
|
+
[`avif-in-css`]: https://github.com/nucliweb/avif-in-css
|
139
142
|
[`colorguard`]: https://github.com/SlexAxton/css-colorguard
|
140
143
|
[`stylelint`]: https://github.com/stylelint/stylelint
|
141
144
|
[`stylefmt`]: https://github.com/morishitter/stylefmt
|
@@ -146,7 +149,6 @@ If you have any new ideas, [PostCSS plugin development] is really easy.
|
|
146
149
|
[`short`]: https://github.com/jonathantneal/postcss-short
|
147
150
|
[`lost`]: https://github.com/peterramsing/lost
|
148
151
|
|
149
|
-
|
150
152
|
## Syntaxes
|
151
153
|
|
152
154
|
PostCSS can transform styles in any syntax, not just CSS.
|
@@ -414,7 +416,7 @@ fs.readFile('src/app.css', (err, css) => {
|
|
414
416
|
.then(result => {
|
415
417
|
fs.writeFile('dest/app.css', result.css, () => true)
|
416
418
|
if ( result.map ) {
|
417
|
-
fs.writeFile('dest/app.css.map', result.map, () => true)
|
419
|
+
fs.writeFile('dest/app.css.map', result.map.toString(), () => true)
|
418
420
|
}
|
419
421
|
})
|
420
422
|
})
|
package/lib/container.d.ts
CHANGED
@@ -91,8 +91,9 @@ export default abstract class Container extends Node {
|
|
91
91
|
* @param callback Iterator receives each node and index.
|
92
92
|
* @return Returns `false` if iteration was broke.
|
93
93
|
*/
|
94
|
-
each (
|
95
|
-
|
94
|
+
each (
|
95
|
+
callback: (node: ChildNode, index: number) => false | void
|
96
|
+
): false | undefined
|
96
97
|
|
97
98
|
/**
|
98
99
|
* Traverses the container’s descendant nodes, calling callback
|
@@ -113,8 +114,9 @@ export default abstract class Container extends Node {
|
|
113
114
|
* @param callback Iterator receives each node and index.
|
114
115
|
* @return Returns `false` if iteration was broke.
|
115
116
|
*/
|
116
|
-
walk (
|
117
|
-
|
117
|
+
walk (
|
118
|
+
callback: (node: ChildNode, index: number) => false | void
|
119
|
+
): false | undefined
|
118
120
|
|
119
121
|
/**
|
120
122
|
* Traverses the container’s descendant nodes, calling callback
|
@@ -147,14 +149,11 @@ export default abstract class Container extends Node {
|
|
147
149
|
*/
|
148
150
|
walkDecls (
|
149
151
|
propFilter: string | RegExp,
|
150
|
-
callback: (decl: Declaration, index: number) => void
|
151
|
-
):
|
152
|
-
walkDecls (callback: (decl: Declaration, index: number) => void): void
|
152
|
+
callback: (decl: Declaration, index: number) => false | void
|
153
|
+
): false | undefined
|
153
154
|
walkDecls (
|
154
|
-
|
155
|
-
|
156
|
-
): false
|
157
|
-
walkDecls (callback: (decl: Declaration, index: number) => false): false
|
155
|
+
callback: (decl: Declaration, index: number) => false | void
|
156
|
+
): false | undefined
|
158
157
|
|
159
158
|
/**
|
160
159
|
* Traverses the container’s descendant nodes, calling callback
|
@@ -180,14 +179,11 @@ export default abstract class Container extends Node {
|
|
180
179
|
*/
|
181
180
|
walkRules (
|
182
181
|
selectorFilter: string | RegExp,
|
183
|
-
callback: (atRule: Rule, index: number) => void
|
184
|
-
):
|
185
|
-
walkRules (callback: (atRule: Rule, index: number) => void): void
|
182
|
+
callback: (atRule: Rule, index: number) => false | void
|
183
|
+
): false | undefined
|
186
184
|
walkRules (
|
187
|
-
|
188
|
-
|
189
|
-
): false
|
190
|
-
walkRules (callback: (atRule: Rule, index: number) => false): false
|
185
|
+
callback: (atRule: Rule, index: number) => false | void
|
186
|
+
): false | undefined
|
191
187
|
|
192
188
|
/**
|
193
189
|
* Traverses the container’s descendant nodes, calling callback
|
@@ -220,14 +216,11 @@ export default abstract class Container extends Node {
|
|
220
216
|
*/
|
221
217
|
walkAtRules (
|
222
218
|
nameFilter: string | RegExp,
|
223
|
-
callback: (atRule: AtRule, index: number) => void
|
224
|
-
):
|
225
|
-
walkAtRules (callback: (atRule: AtRule, index: number) => void): void
|
219
|
+
callback: (atRule: AtRule, index: number) => false | void
|
220
|
+
): false | undefined
|
226
221
|
walkAtRules (
|
227
|
-
|
228
|
-
|
229
|
-
): false
|
230
|
-
walkAtRules (callback: (atRule: AtRule, index: number) => false): false
|
222
|
+
callback: (atRule: AtRule, index: number) => false | void
|
223
|
+
): false | undefined
|
231
224
|
|
232
225
|
/**
|
233
226
|
* Traverses the container’s descendant nodes, calling callback
|
@@ -246,10 +239,12 @@ export default abstract class Container extends Node {
|
|
246
239
|
* @return Returns `false` if iteration was broke.
|
247
240
|
*/
|
248
241
|
|
249
|
-
walkComments (callback: (comment: Comment, indexed: number) => void): void
|
250
242
|
walkComments (
|
251
|
-
callback: (comment: Comment, indexed: number) =>
|
252
|
-
):
|
243
|
+
callback: (comment: Comment, indexed: number) => false | void
|
244
|
+
): false | undefined
|
245
|
+
walkComments (
|
246
|
+
callback: (comment: Comment, indexed: number) => false | void
|
247
|
+
): false | undefined
|
253
248
|
|
254
249
|
/**
|
255
250
|
* Inserts new nodes to the end of the container.
|
package/lib/fromJSON.js
CHANGED
@@ -8,35 +8,42 @@ let Input = require('./input')
|
|
8
8
|
let Root = require('./root')
|
9
9
|
let Rule = require('./rule')
|
10
10
|
|
11
|
-
function fromJSON (json) {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
if (
|
20
|
-
|
21
|
-
...
|
22
|
-
__proto__:
|
23
|
-
}
|
24
|
-
if (defaults.source.input.map) {
|
25
|
-
defaults.source.input.map = {
|
26
|
-
...defaults.source.input.map,
|
27
|
-
__proto__: PreviousMap.prototype
|
28
|
-
}
|
11
|
+
function fromJSON (json, inputs) {
|
12
|
+
if (Array.isArray(json)) return json.map(n => fromJSON(n))
|
13
|
+
|
14
|
+
let { inputs: ownInputs, ...defaults } = json
|
15
|
+
if (ownInputs) {
|
16
|
+
inputs = []
|
17
|
+
for (let input of ownInputs) {
|
18
|
+
let inputHydrated = { ...input, __proto__: Input.prototype }
|
19
|
+
if (inputHydrated.map) {
|
20
|
+
inputHydrated.map = {
|
21
|
+
...inputHydrated.map,
|
22
|
+
__proto__: PreviousMap.prototype
|
29
23
|
}
|
30
24
|
}
|
25
|
+
inputs.push(inputHydrated)
|
31
26
|
}
|
27
|
+
}
|
28
|
+
if (defaults.nodes) {
|
29
|
+
defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))
|
30
|
+
}
|
31
|
+
if (defaults.source) {
|
32
|
+
let { inputId, ...source } = defaults.source
|
33
|
+
defaults.source = source
|
34
|
+
if (inputId != null) {
|
35
|
+
defaults.source.input = inputs[inputId]
|
36
|
+
}
|
37
|
+
}
|
38
|
+
if (defaults.type === 'root') {
|
32
39
|
return new Root(defaults)
|
33
|
-
} else if (
|
40
|
+
} else if (defaults.type === 'decl') {
|
34
41
|
return new Declaration(defaults)
|
35
|
-
} else if (
|
42
|
+
} else if (defaults.type === 'rule') {
|
36
43
|
return new Rule(defaults)
|
37
|
-
} else if (
|
44
|
+
} else if (defaults.type === 'comment') {
|
38
45
|
return new Comment(defaults)
|
39
|
-
} else if (
|
46
|
+
} else if (defaults.type === 'atrule') {
|
40
47
|
return new AtRule(defaults)
|
41
48
|
} else {
|
42
49
|
throw new Error('Unknown node type: ' + json.type)
|
package/lib/node.js
CHANGED
@@ -166,8 +166,11 @@ class Node {
|
|
166
166
|
if (!keepBetween) delete this.raws.between
|
167
167
|
}
|
168
168
|
|
169
|
-
toJSON () {
|
169
|
+
toJSON (_, inputs) {
|
170
170
|
let fixed = {}
|
171
|
+
let emitInputs = inputs == null
|
172
|
+
inputs = inputs || new Map()
|
173
|
+
let inputsNextIndex = 0
|
171
174
|
|
172
175
|
for (let name in this) {
|
173
176
|
if (!Object.prototype.hasOwnProperty.call(this, name)) {
|
@@ -180,23 +183,34 @@ class Node {
|
|
180
183
|
if (Array.isArray(value)) {
|
181
184
|
fixed[name] = value.map(i => {
|
182
185
|
if (typeof i === 'object' && i.toJSON) {
|
183
|
-
return i.toJSON()
|
186
|
+
return i.toJSON(null, inputs)
|
184
187
|
} else {
|
185
188
|
return i
|
186
189
|
}
|
187
190
|
})
|
188
191
|
} else if (typeof value === 'object' && value.toJSON) {
|
189
|
-
fixed[name] = value.toJSON()
|
190
|
-
} else if (
|
192
|
+
fixed[name] = value.toJSON(null, inputs)
|
193
|
+
} else if (name === 'source') {
|
194
|
+
let inputId = inputs.get(value.input)
|
195
|
+
if (inputId == null) {
|
196
|
+
inputId = inputsNextIndex
|
197
|
+
inputs.set(value.input, inputsNextIndex)
|
198
|
+
inputsNextIndex++
|
199
|
+
}
|
191
200
|
fixed[name] = {
|
192
|
-
|
193
|
-
start: value.start
|
201
|
+
inputId,
|
202
|
+
start: value.start,
|
203
|
+
end: value.end
|
194
204
|
}
|
195
205
|
} else {
|
196
206
|
fixed[name] = value
|
197
207
|
}
|
198
208
|
}
|
199
209
|
|
210
|
+
if (emitInputs) {
|
211
|
+
fixed.inputs = [...inputs.keys()].map(input => input.toJSON())
|
212
|
+
}
|
213
|
+
|
200
214
|
return fixed
|
201
215
|
}
|
202
216
|
|
package/lib/postcss.d.ts
CHANGED
@@ -170,7 +170,7 @@ export interface Plugin extends Processors {
|
|
170
170
|
}
|
171
171
|
|
172
172
|
export interface PluginCreator<PluginOptions> {
|
173
|
-
(opts?: PluginOptions): Plugin
|
173
|
+
(opts?: PluginOptions): Plugin | Processor
|
174
174
|
postcss: true
|
175
175
|
}
|
176
176
|
|
@@ -214,6 +214,7 @@ export interface Stringifier {
|
|
214
214
|
}
|
215
215
|
|
216
216
|
export interface JSONHydrator {
|
217
|
+
(data: object[]): Node[]
|
217
218
|
(data: object): Node
|
218
219
|
}
|
219
220
|
|
package/lib/postcss.js
CHANGED
@@ -22,19 +22,21 @@ function postcss (...plugins) {
|
|
22
22
|
if (plugins.length === 1 && Array.isArray(plugins[0])) {
|
23
23
|
plugins = plugins[0]
|
24
24
|
}
|
25
|
-
return new Processor(plugins
|
25
|
+
return new Processor(plugins)
|
26
26
|
}
|
27
27
|
|
28
28
|
postcss.plugin = function plugin (name, initializer) {
|
29
29
|
if (console && console.warn) {
|
30
30
|
console.warn(
|
31
|
-
|
31
|
+
name +
|
32
|
+
': postcss.plugin was deprecated. Migration guide:\n' +
|
32
33
|
'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
|
33
34
|
)
|
34
35
|
if (process.env.LANG && process.env.LANG.startsWith('cn')) {
|
35
36
|
// istanbul ignore next
|
36
37
|
console.warn(
|
37
|
-
|
38
|
+
name +
|
39
|
+
': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
|
38
40
|
'https://www.w3ctech.com/topic/2226'
|
39
41
|
)
|
40
42
|
}
|
package/lib/processor.js
CHANGED
package/lib/result.d.ts
CHANGED
@@ -177,7 +177,7 @@ export default class Result {
|
|
177
177
|
* @param opts Warning options.
|
178
178
|
* @return Created warning.
|
179
179
|
*/
|
180
|
-
warn (message: string, options?: WarningOptions):
|
180
|
+
warn (message: string, options?: WarningOptions): Warning
|
181
181
|
|
182
182
|
/**
|
183
183
|
* Returns warnings from plugins. Filters `Warning` instances
|
package/lib/root.d.ts
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
import Container, { ContainerProps } from './container.js'
|
2
2
|
import { ProcessOptions } from './postcss.js'
|
3
|
-
import { ChildNode } from './node.js'
|
4
|
-
import Declaration from './declaration.js'
|
5
|
-
import Comment from './comment.js'
|
6
|
-
import AtRule from './at-rule.js'
|
7
3
|
import Result from './result.js'
|
8
|
-
import Rule from './rule.js'
|
9
4
|
|
10
5
|
interface RootRaws {
|
11
6
|
/**
|
package/lib/stringifier.js
CHANGED
@@ -25,11 +25,19 @@ class Stringifier {
|
|
25
25
|
}
|
26
26
|
|
27
27
|
stringify (node, semicolon) {
|
28
|
+
/* istanbul ignore if */
|
29
|
+
if (!this[node.type]) {
|
30
|
+
throw new Error(
|
31
|
+
'Unknown AST node type ' +
|
32
|
+
node.type +
|
33
|
+
'. ' +
|
34
|
+
'Maybe you need to change PostCSS stringifier.'
|
35
|
+
)
|
36
|
+
}
|
28
37
|
this[node.type](node, semicolon)
|
29
38
|
}
|
30
39
|
|
31
40
|
root (node) {
|
32
|
-
this.root = node
|
33
41
|
this.body(node)
|
34
42
|
if (node.raws.after) this.builder(node.raws.after)
|
35
43
|
}
|