postcss-normalize-repeat-style 4.0.1 → 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/dist/index.js CHANGED
@@ -34,56 +34,86 @@ const repeatKeywords = _map2.default.map(mapping => mapping[0]);
34
34
 
35
35
  const getMatch = (0, _cssnanoUtilGetMatch2.default)(_map2.default);
36
36
 
37
- function transform(decl) {
38
- const values = (0, _postcssValueParser2.default)(decl.value);
39
- if (values.nodes.length === 1) {
40
- return;
41
- }
42
- const args = (0, _cssnanoUtilGetArguments2.default)(values);
43
- const relevant = [];
44
- args.forEach(arg => {
45
- relevant.push({
46
- start: null,
47
- end: null
48
- });
49
- arg.forEach((part, index) => {
50
- const isRepeat = ~repeatKeywords.indexOf(part.value.toLowerCase());
51
- const len = relevant.length - 1;
52
- if (relevant[len].start === null && isRepeat) {
53
- relevant[len].start = index;
54
- relevant[len].end = index;
37
+ exports.default = _postcss2.default.plugin('postcss-normalize-repeat-style', () => {
38
+ return css => {
39
+ const cache = {};
40
+
41
+ css.walkDecls(/background(-repeat)?|(-webkit-)?mask-repeat/i, decl => {
42
+ const value = decl.value;
43
+
44
+ if (cache[value]) {
45
+ decl.value = cache[value];
46
+
47
+ return;
48
+ }
49
+
50
+ const parsed = (0, _postcssValueParser2.default)(value);
51
+
52
+ if (parsed.nodes.length === 1) {
53
+ cache[value] = value;
54
+
55
55
  return;
56
56
  }
57
- if (relevant[len].start !== null) {
58
- if (part.type === 'space') {
57
+
58
+ const args = (0, _cssnanoUtilGetArguments2.default)(parsed);
59
+ const relevant = [];
60
+
61
+ args.forEach(arg => {
62
+ relevant.push({
63
+ start: null,
64
+ end: null
65
+ });
66
+
67
+ arg.forEach((part, index) => {
68
+ const isRepeat = ~repeatKeywords.indexOf(part.value.toLowerCase());
69
+ const len = relevant.length - 1;
70
+
71
+ if (relevant[len].start === null && isRepeat) {
72
+ relevant[len].start = index;
73
+ relevant[len].end = index;
74
+
75
+ return;
76
+ }
77
+
78
+ if (relevant[len].start !== null) {
79
+ if (part.type === 'space') {
80
+ return;
81
+ } else if (isRepeat) {
82
+ relevant[len].end = index;
83
+
84
+ return;
85
+ }
86
+
87
+ return;
88
+ }
89
+ });
90
+ });
91
+
92
+ relevant.forEach((range, index) => {
93
+ if (range.start === null) {
59
94
  return;
60
- } else if (isRepeat) {
61
- relevant[len].end = index;
95
+ }
96
+
97
+ const val = args[index].slice(range.start, range.end + 1);
98
+
99
+ if (val.length !== 3) {
62
100
  return;
63
101
  }
64
- return;
65
- }
66
- });
67
- });
68
- relevant.forEach((range, index) => {
69
- if (range.start === null) {
70
- return;
71
- }
72
- const val = args[index].slice(range.start, range.end + 1);
73
- if (val.length !== 3) {
74
- return;
75
- }
76
- const match = getMatch(val.filter(evenValues).map(n => n.value.toLowerCase()));
77
- if (match) {
78
- args[index][range.start].value = match;
79
- args[index][range.start + 1].value = '';
80
- args[index][range.end].value = '';
81
- }
82
- });
83
- decl.value = values.toString();
84
- }
85
102
 
86
- exports.default = _postcss2.default.plugin('postcss-normalize-repeat-style', () => {
87
- return css => css.walkDecls(/background(-repeat)?|(-webkit-)?mask-repeat/i, transform);
103
+ const match = getMatch(val.filter(evenValues).map(n => n.value.toLowerCase()));
104
+
105
+ if (match) {
106
+ args[index][range.start].value = match;
107
+ args[index][range.start + 1].value = '';
108
+ args[index][range.end].value = '';
109
+ }
110
+ });
111
+
112
+ const result = parsed.toString();
113
+
114
+ decl.value = result;
115
+ cache[value] = result;
116
+ });
117
+ };
88
118
  });
89
119
  module.exports = exports['default'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postcss-normalize-repeat-style",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "Convert two value syntax for repeat-style into one value.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
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.