postcss-normalize-string 4.0.0-rc.0 → 4.0.2

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.
package/README.md CHANGED
@@ -50,7 +50,7 @@ console.log(postcss(normalize({preferredQuote: 'single'})).process(css).css);
50
50
 
51
51
  ## Contributors
52
52
 
53
- See [CONTRIBUTORS.md](https://github.com/ben-eb/cssnano/blob/master/CONTRIBUTORS.md).
53
+ See [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md).
54
54
 
55
55
  ## License
56
56
 
package/dist/index.js CHANGED
@@ -18,73 +18,68 @@ var _has2 = _interopRequireDefault(_has);
18
18
 
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
 
21
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
22
-
23
21
  /*
24
22
  * Constants (parser usage)
25
23
  */
26
24
 
27
- var SINGLE_QUOTE = '\''.charCodeAt(0);
28
- var DOUBLE_QUOTE = '"'.charCodeAt(0);
29
- var BACKSLASH = '\\'.charCodeAt(0);
30
- var NEWLINE = '\n'.charCodeAt(0);
31
- var SPACE = ' '.charCodeAt(0);
32
- var FEED = '\f'.charCodeAt(0);
33
- var TAB = '\t'.charCodeAt(0);
34
- var CR = '\r'.charCodeAt(0);
25
+ const SINGLE_QUOTE = '\''.charCodeAt(0);
26
+ const DOUBLE_QUOTE = '"'.charCodeAt(0);
27
+ const BACKSLASH = '\\'.charCodeAt(0);
28
+ const NEWLINE = '\n'.charCodeAt(0);
29
+ const SPACE = ' '.charCodeAt(0);
30
+ const FEED = '\f'.charCodeAt(0);
31
+ const TAB = '\t'.charCodeAt(0);
32
+ const CR = '\r'.charCodeAt(0);
35
33
 
36
- var WORD_END = /[ \n\t\r\f'"\\]/g;
34
+ const WORD_END = /[ \n\t\r\f'"\\]/g;
37
35
 
38
36
  /*
39
37
  * Constants (node type strings)
40
38
  */
41
39
 
42
- var C_STRING = 'string';
43
- var C_ESCAPED_SINGLE_QUOTE = 'escapedSingleQuote';
44
- var C_ESCAPED_DOUBLE_QUOTE = 'escapedDoubleQuote';
45
- var C_SINGLE_QUOTE = 'singleQuote';
46
- var C_DOUBLE_QUOTE = 'doubleQuote';
47
- var C_NEWLINE = 'newline';
48
- var C_SINGLE = 'single';
40
+ const C_STRING = 'string';
41
+ const C_ESCAPED_SINGLE_QUOTE = 'escapedSingleQuote';
42
+ const C_ESCAPED_DOUBLE_QUOTE = 'escapedDoubleQuote';
43
+ const C_SINGLE_QUOTE = 'singleQuote';
44
+ const C_DOUBLE_QUOTE = 'doubleQuote';
45
+ const C_NEWLINE = 'newline';
46
+ const C_SINGLE = 'single';
49
47
 
50
48
  /*
51
49
  * Literals
52
50
  */
53
51
 
54
- var L_SINGLE_QUOTE = `'`;
55
- var L_DOUBLE_QUOTE = `"`;
56
- var L_NEWLINE = `\\\n`;
52
+ const L_SINGLE_QUOTE = `'`;
53
+ const L_DOUBLE_QUOTE = `"`;
54
+ const L_NEWLINE = `\\\n`;
57
55
 
58
56
  /*
59
57
  * Parser nodes
60
58
  */
61
59
 
62
- var T_ESCAPED_SINGLE_QUOTE = { type: C_ESCAPED_SINGLE_QUOTE, value: `\\'` };
63
- var T_ESCAPED_DOUBLE_QUOTE = { type: C_ESCAPED_DOUBLE_QUOTE, value: `\\"` };
64
- var T_SINGLE_QUOTE = { type: C_SINGLE_QUOTE, value: L_SINGLE_QUOTE };
65
- var T_DOUBLE_QUOTE = { type: C_DOUBLE_QUOTE, value: L_DOUBLE_QUOTE };
66
- var T_NEWLINE = { type: C_NEWLINE, value: L_NEWLINE };
60
+ const T_ESCAPED_SINGLE_QUOTE = { type: C_ESCAPED_SINGLE_QUOTE, value: `\\'` };
61
+ const T_ESCAPED_DOUBLE_QUOTE = { type: C_ESCAPED_DOUBLE_QUOTE, value: `\\"` };
62
+ const T_SINGLE_QUOTE = { type: C_SINGLE_QUOTE, value: L_SINGLE_QUOTE };
63
+ const T_DOUBLE_QUOTE = { type: C_DOUBLE_QUOTE, value: L_DOUBLE_QUOTE };
64
+ const T_NEWLINE = { type: C_NEWLINE, value: L_NEWLINE };
67
65
 
68
66
  function stringify(ast) {
69
- return ast.nodes.reduce(function (str, _ref) {
70
- var value = _ref.value;
71
-
67
+ return ast.nodes.reduce((str, { value }) => {
72
68
  // Collapse multiple line strings automatically
73
69
  if (value === L_NEWLINE) {
74
70
  return str;
75
71
  }
72
+
76
73
  return str + value;
77
74
  }, '');
78
75
  }
79
76
 
80
77
  function parse(str) {
81
- var code = void 0,
82
- next = void 0,
83
- value = void 0;
84
- var pos = 0;
85
- var len = str.length;
78
+ let code, next, value;
79
+ let pos = 0;
80
+ let len = str.length;
86
81
 
87
- var ast = {
82
+ const ast = {
88
83
  nodes: [],
89
84
  types: {
90
85
  escapedSingleQuote: 0,
@@ -97,12 +92,14 @@ function parse(str) {
97
92
 
98
93
  while (pos < len) {
99
94
  code = str.charCodeAt(pos);
95
+
100
96
  switch (code) {
101
97
  case SPACE:
102
98
  case TAB:
103
99
  case CR:
104
100
  case FEED:
105
101
  next = pos;
102
+
106
103
  do {
107
104
  next += 1;
108
105
  code = str.charCodeAt(next);
@@ -126,6 +123,7 @@ function parse(str) {
126
123
  break;
127
124
  case BACKSLASH:
128
125
  next = pos + 1;
126
+
129
127
  if (str.charCodeAt(next) === SINGLE_QUOTE) {
130
128
  ast.nodes.push(T_ESCAPED_SINGLE_QUOTE);
131
129
  ast.types[C_ESCAPED_SINGLE_QUOTE]++;
@@ -173,7 +171,7 @@ function parse(str) {
173
171
  }
174
172
 
175
173
  function changeWrappingQuotes(node, ast) {
176
- var types = ast.types;
174
+ const { types } = ast;
177
175
 
178
176
  if (types[C_SINGLE_QUOTE] || types[C_DOUBLE_QUOTE]) {
179
177
  return;
@@ -187,14 +185,16 @@ function changeWrappingQuotes(node, ast) {
187
185
  node.quote = L_SINGLE_QUOTE;
188
186
  }
189
187
 
190
- ast.nodes = ast.nodes.reduce(function (newAst, child) {
188
+ ast.nodes = ast.nodes.reduce((newAst, child) => {
191
189
  if (child.type === C_ESCAPED_DOUBLE_QUOTE && node.quote === L_SINGLE_QUOTE) {
192
- return [].concat(_toConsumableArray(newAst), [T_DOUBLE_QUOTE]);
190
+ return [...newAst, T_DOUBLE_QUOTE];
193
191
  }
192
+
194
193
  if (child.type === C_ESCAPED_SINGLE_QUOTE && node.quote === L_DOUBLE_QUOTE) {
195
- return [].concat(_toConsumableArray(newAst), [T_SINGLE_QUOTE]);
194
+ return [...newAst, T_SINGLE_QUOTE];
196
195
  }
197
- return [].concat(_toConsumableArray(newAst), [child]);
196
+
197
+ return [...newAst, child];
198
198
  }, []);
199
199
  }
200
200
 
@@ -202,11 +202,14 @@ function normalize(value, preferredQuote) {
202
202
  if (!value || !value.length) {
203
203
  return value;
204
204
  }
205
- return (0, _postcssValueParser2.default)(value).walk(function (child) {
205
+
206
+ return (0, _postcssValueParser2.default)(value).walk(child => {
206
207
  if (child.type !== C_STRING) {
207
208
  return;
208
209
  }
209
- var ast = parse(child.value);
210
+
211
+ const ast = parse(child.value);
212
+
210
213
  if (ast.quotes) {
211
214
  changeWrappingQuotes(child, ast);
212
215
  } else if (preferredQuote === C_SINGLE) {
@@ -214,29 +217,42 @@ function normalize(value, preferredQuote) {
214
217
  } else {
215
218
  child.quote = L_DOUBLE_QUOTE;
216
219
  }
220
+
217
221
  child.value = stringify(ast);
218
222
  }).toString();
219
223
  }
220
224
 
221
- var params = {
225
+ const params = {
222
226
  rule: 'selector',
223
227
  decl: 'value',
224
228
  atrule: 'params'
225
229
  };
226
230
 
227
- exports.default = _postcss2.default.plugin('postcss-normalize-string', function (opts) {
228
- var _Object$assign = Object.assign({}, {
231
+ exports.default = _postcss2.default.plugin('postcss-normalize-string', opts => {
232
+ const { preferredQuote } = Object.assign({}, {
229
233
  preferredQuote: 'double'
230
- }, opts),
231
- preferredQuote = _Object$assign.preferredQuote;
234
+ }, opts);
232
235
 
233
- return function (css) {
234
- css.walk(function (node) {
235
- var type = node.type;
236
+ return css => {
237
+ const cache = {};
238
+
239
+ css.walk(node => {
240
+ const { type } = node;
236
241
 
237
242
  if ((0, _has2.default)(params, type)) {
238
- var param = params[type];
239
- node[param] = normalize(node[param], preferredQuote);
243
+ const param = params[type];
244
+ const key = node[param] + '|' + preferredQuote;
245
+
246
+ if (cache[key]) {
247
+ node[param] = cache[key];
248
+
249
+ return;
250
+ }
251
+
252
+ const result = normalize(node[param], preferredQuote);
253
+
254
+ node[param] = result;
255
+ cache[key] = result;
240
256
  }
241
257
  });
242
258
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postcss-normalize-string",
3
- "version": "4.0.0-rc.0",
3
+ "version": "4.0.2",
4
4
  "description": "Normalize wrapping quotes for CSS string literals.",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -18,24 +18,24 @@
18
18
  "license": "MIT",
19
19
  "devDependencies": {
20
20
  "babel-cli": "^6.0.0",
21
- "cross-env": "^3.0.0"
21
+ "cross-env": "^5.0.0"
22
22
  },
23
- "homepage": "https://github.com/ben-eb/cssnano",
23
+ "homepage": "https://github.com/cssnano/cssnano",
24
24
  "author": {
25
25
  "name": "Ben Briggs",
26
26
  "email": "beneb.info@gmail.com",
27
27
  "url": "http://beneb.info"
28
28
  },
29
- "repository": "ben-eb/cssnano",
29
+ "repository": "cssnano/cssnano",
30
30
  "dependencies": {
31
31
  "has": "^1.0.0",
32
- "postcss": "^6.0.0",
32
+ "postcss": "^7.0.0",
33
33
  "postcss-value-parser": "^3.0.0"
34
34
  },
35
35
  "bugs": {
36
- "url": "https://github.com/ben-eb/cssnano/issues"
36
+ "url": "https://github.com/cssnano/cssnano/issues"
37
37
  },
38
38
  "engines": {
39
- "node": ">=4"
39
+ "node": ">=6.9.0"
40
40
  }
41
41
  }
package/CHANGELOG.md DELETED
@@ -1,4 +0,0 @@
1
- # 4.0.0-rc.0
2
-
3
- * Initial commit. This module was previously part of other cssnano modules and
4
- has been extracted out.