stylehacks 2.3.1 → 2.3.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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.3.2
2
+
3
+ * Resolves an issue where stylehacks would crash on CSS mixins.
4
+
1
5
  # 2.3.1
2
6
 
3
7
  * Upgraded postcss-selector-parser to `v2.0.0`.
package/dist/cli.js CHANGED
@@ -17,12 +17,12 @@ var _minimist = require('minimist');
17
17
 
18
18
  var _minimist2 = _interopRequireDefault(_minimist);
19
19
 
20
+ var _package = require('../package.json');
21
+
20
22
  var _ = require('./');
21
23
 
22
24
  var _2 = _interopRequireDefault(_);
23
25
 
24
- var _package = require('../package.json');
25
-
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
 
28
28
  var opts = (0, _minimist2.default)(process.argv.slice(2), {
@@ -38,34 +38,32 @@ var opts = (0, _minimist2.default)(process.argv.slice(2), {
38
38
  if (opts.version) {
39
39
  console.log(_package.version);
40
40
  } else {
41
- (function () {
42
- var file = opts._[0];
43
- var out = opts._[1];
41
+ var file = opts._[0];
42
+ var out = opts._[1];
44
43
 
45
- if (file === 'help' || opts.help) {
46
- _fs2.default.createReadStream(__dirname + '/../usage.txt').pipe(process.stdout).on('close', function () {
47
- return process.exit(1);
48
- });
49
- } else {
50
- (0, _readFileStdin2.default)(file, function (err, buf) {
51
- if (err) {
52
- throw err;
53
- }
54
- if (file) {
55
- opts.from = file;
44
+ if (file === 'help' || opts.help) {
45
+ _fs2.default.createReadStream(__dirname + '/../usage.txt').pipe(process.stdout).on('close', function () {
46
+ return process.exit(1);
47
+ });
48
+ } else {
49
+ (0, _readFileStdin2.default)(file, function (err, buf) {
50
+ if (err) {
51
+ throw err;
52
+ }
53
+ if (file) {
54
+ opts.from = file;
55
+ }
56
+ if (out) {
57
+ opts.to = out;
58
+ }
59
+ _2.default.process(String(buf), opts).then(function (result) {
60
+ if (result.warnings().length) {
61
+ process.exit(1);
56
62
  }
57
- if (out) {
58
- opts.to = out;
63
+ if (!opts.lint) {
64
+ (0, _writeFileStdout2.default)(result.css);
59
65
  }
60
- _2.default.process(String(buf), opts).then(function (result) {
61
- if (result.warnings().length) {
62
- process.exit(1);
63
- }
64
- if (!opts.lint) {
65
- (0, _writeFileStdout2.default)(result.css);
66
- }
67
- });
68
66
  });
69
- }
70
- })();
67
+ });
68
+ }
71
69
  }
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ var FF_2 = exports.FF_2 = 'firefox 2';
5
+ var IE_5_5 = exports.IE_5_5 = 'ie 5.5';
6
+ var IE_6 = exports.IE_6 = 'ie 6';
7
+ var IE_7 = exports.IE_7 = 'ie 7';
8
+ var IE_8 = exports.IE_8 = 'ie 8';
9
+ var OP_9 = exports.OP_9 = 'opera 9';
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ var MEDIA_QUERY = exports.MEDIA_QUERY = 'media query';
5
+ var PROPERTY = exports.PROPERTY = 'property';
6
+ var SELECTOR = exports.SELECTOR = 'selector';
7
+ var VALUE = exports.VALUE = 'value';
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ var ATRULE = exports.ATRULE = 'atrule';
5
+ var DECL = exports.DECL = 'decl';
6
+ var RULE = exports.RULE = 'rule';
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ var BODY = exports.BODY = 'body';
5
+ var HTML = exports.HTML = 'html';
package/dist/exists.js CHANGED
@@ -6,4 +6,4 @@ function exists(selector, index, value) {
6
6
  var node = selector.at(index);
7
7
  return node && node.value === value;
8
8
  }
9
- module.exports = exports['default'];
9
+ module.exports = exports["default"];
package/dist/formatter.js CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
- var _chalk = require('chalk');
6
-
7
- var _chalk2 = _interopRequireDefault(_chalk);
8
-
9
5
  var _path = require('path');
10
6
 
11
7
  var _path2 = _interopRequireDefault(_path);
12
8
 
9
+ var _chalk = require('chalk');
10
+
11
+ var _chalk2 = _interopRequireDefault(_chalk);
12
+
13
13
  var _textTable = require('text-table');
14
14
 
15
15
  var _textTable2 = _interopRequireDefault(_textTable);
package/dist/index.js CHANGED
@@ -70,26 +70,34 @@ var plugins = [_bodyEmpty2.default, _htmlCombinatorCommentBody2.default, _htmlFi
70
70
 
71
71
 
72
72
  var stylehacks = _postcss2.default.plugin('stylehacks', function () {
73
- var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
73
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
74
74
 
75
75
  var b = opts.browsers;
76
76
  var browsers = b instanceof Array ? b : (0, _browserslist2.default)(b);
77
77
 
78
78
  return function (css, result) {
79
- plugins.forEach(function (Plugin) {
80
- var hack = new Plugin(css, result);
79
+ var processors = plugins.reduce(function (list, Plugin) {
80
+ var hack = new Plugin(result);
81
81
  var applied = browsers.some(function (browser) {
82
82
  return hack.targets.some(function (target) {
83
83
  return browser === target;
84
84
  });
85
85
  });
86
86
  if (applied) {
87
- return;
87
+ return list;
88
88
  }
89
- if (opts.lint) {
90
- return hack.detectAndWarn();
91
- }
92
- return hack.detectAndResolve();
89
+ return [].concat(list, [hack]);
90
+ }, []);
91
+ css.walk(function (node) {
92
+ processors.forEach(function (proc) {
93
+ if (!~proc.nodeTypes.indexOf(node.type)) {
94
+ return;
95
+ }
96
+ if (opts.lint) {
97
+ return proc.detectAndWarn(node);
98
+ }
99
+ return proc.detectAndResolve(node);
100
+ });
93
101
  });
94
102
  };
95
103
  });
@@ -104,7 +112,7 @@ stylehacks.detect = function (node) {
104
112
  };
105
113
 
106
114
  stylehacks.process = function (css) {
107
- var opts = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
115
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
108
116
 
109
117
  opts.reporter = {};
110
118
  opts.reporter.formatter = _formatter2.default;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ exports.__esModule = true;
4
+ exports.default = isMixin;
5
+ function isMixin(node) {
6
+ var selector = node.selector;
7
+ // If the selector ends with a ':' it is likely a part of a custom mixin.
8
+
9
+ if (!selector || selector[selector.length - 1] === ':') {
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ module.exports = exports['default'];
package/dist/plugin.js CHANGED
@@ -2,53 +2,58 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
+ var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
6
+
7
+ exports.default = plugin;
8
+
5
9
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
10
 
7
- function plugin(targets, nodeTypes, _detect) {
11
+ function plugin(targets, nodeTypes, detect) {
8
12
  var Plugin = function () {
9
- function Plugin(css, result) {
13
+ function Plugin(result) {
10
14
  _classCallCheck(this, Plugin);
11
15
 
12
16
  this.nodes = [];
13
- this.css = css;
14
17
  this.result = result;
15
18
  this.targets = targets;
16
19
  this.nodeTypes = nodeTypes;
17
20
  }
18
21
 
19
22
  Plugin.prototype.push = function push(node, metadata) {
20
- metadata.message = "Bad " + metadata.identifier + ": " + metadata.hack;
21
- metadata.browsers = this.targets;
22
- node._stylehacks = metadata;
23
+ node._stylehacks = _extends({}, metadata, {
24
+ message: "Bad " + metadata.identifier + ": " + metadata.hack,
25
+ browsers: this.targets
26
+ });
23
27
  this.nodes.push(node);
24
28
  };
25
29
 
26
30
  Plugin.prototype.any = function any(node) {
27
- var hasHack = false;
28
31
  if (~this.nodeTypes.indexOf(node.type)) {
29
- _detect.apply(this, arguments);
30
- if (node._stylehacks) {
31
- hasHack = true;
32
- }
32
+ detect.apply(this, arguments);
33
+ return !!node._stylehacks;
33
34
  }
34
- return hasHack;
35
- };
36
-
37
- Plugin.prototype.detect = function detect() {
38
- this.css.walk(function (node) {
39
- if (~this.nodeTypes.indexOf(node.type)) {
40
- _detect.apply(this, arguments);
41
- }
42
- }.bind(this));
35
+ return false;
43
36
  };
44
37
 
45
38
  Plugin.prototype.detectAndResolve = function detectAndResolve() {
46
- this.detect();
39
+ this.nodes = [];
40
+
41
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
42
+ args[_key] = arguments[_key];
43
+ }
44
+
45
+ detect.apply(this, args);
47
46
  return this.resolve();
48
47
  };
49
48
 
50
49
  Plugin.prototype.detectAndWarn = function detectAndWarn() {
51
- this.detect();
50
+ this.nodes = [];
51
+
52
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
53
+ args[_key2] = arguments[_key2];
54
+ }
55
+
56
+ detect.apply(this, args);
52
57
  return this.warn();
53
58
  };
54
59
 
@@ -62,11 +67,11 @@ function plugin(targets, nodeTypes, _detect) {
62
67
  var _this = this;
63
68
 
64
69
  return this.nodes.forEach(function (node) {
65
- var _node$_stylehacks = node._stylehacks;
66
- var message = _node$_stylehacks.message;
67
- var browsers = _node$_stylehacks.browsers;
68
- var identifier = _node$_stylehacks.identifier;
69
- var hack = _node$_stylehacks.hack;
70
+ var _node$_stylehacks = node._stylehacks,
71
+ message = _node$_stylehacks.message,
72
+ browsers = _node$_stylehacks.browsers,
73
+ identifier = _node$_stylehacks.identifier,
74
+ hack = _node$_stylehacks.hack;
70
75
 
71
76
  return node.warn(_this.result, message, { browsers: browsers, identifier: identifier, hack: hack });
72
77
  });
@@ -77,5 +82,4 @@ function plugin(targets, nodeTypes, _detect) {
77
82
 
78
83
  return Plugin;
79
84
  }
80
- exports.default = plugin;
81
- module.exports = exports['default'];
85
+ module.exports = exports["default"];
@@ -2,28 +2,38 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
+ var _postcssSelectorParser = require('postcss-selector-parser');
6
+
7
+ var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
8
+
5
9
  var _exists = require('../exists');
6
10
 
7
11
  var _exists2 = _interopRequireDefault(_exists);
8
12
 
13
+ var _isMixin = require('../isMixin');
14
+
15
+ var _isMixin2 = _interopRequireDefault(_isMixin);
16
+
9
17
  var _plugin = require('../plugin');
10
18
 
11
19
  var _plugin2 = _interopRequireDefault(_plugin);
12
20
 
13
- var _postcssSelectorParser = require('postcss-selector-parser');
21
+ var _browsers = require('../dictionary/browsers');
14
22
 
15
- var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
23
+ var _identifiers = require('../dictionary/identifiers');
16
24
 
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ var _postcss = require('../dictionary/postcss');
18
26
 
19
- var targets = ['firefox 2'];
27
+ var _tags = require('../dictionary/tags');
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
30
 
21
31
  function analyse(ctx, rule) {
22
32
  return function (selectors) {
23
33
  selectors.each(function (selector) {
24
- if ((0, _exists2.default)(selector, 0, 'body') && (0, _exists2.default)(selector, 1, ':empty') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
34
+ if ((0, _exists2.default)(selector, 0, _tags.BODY) && (0, _exists2.default)(selector, 1, ':empty') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
25
35
  ctx.push(rule, {
26
- identifier: 'selector',
36
+ identifier: _identifiers.SELECTOR,
27
37
  hack: selector.toString()
28
38
  });
29
39
  }
@@ -31,9 +41,10 @@ function analyse(ctx, rule) {
31
41
  };
32
42
  }
33
43
 
34
- exports.default = (0, _plugin2.default)(targets, ['rule'], function (rule) {
35
- if (rule.selector) {
36
- (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
44
+ exports.default = (0, _plugin2.default)([_browsers.FF_2], [_postcss.RULE], function (rule) {
45
+ if ((0, _isMixin2.default)(rule)) {
46
+ return;
37
47
  }
48
+ (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
38
49
  });
39
50
  module.exports = exports['default'];
@@ -2,28 +2,38 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
+ var _postcssSelectorParser = require('postcss-selector-parser');
6
+
7
+ var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
8
+
5
9
  var _exists = require('../exists');
6
10
 
7
11
  var _exists2 = _interopRequireDefault(_exists);
8
12
 
13
+ var _isMixin = require('../isMixin');
14
+
15
+ var _isMixin2 = _interopRequireDefault(_isMixin);
16
+
9
17
  var _plugin = require('../plugin');
10
18
 
11
19
  var _plugin2 = _interopRequireDefault(_plugin);
12
20
 
13
- var _postcssSelectorParser = require('postcss-selector-parser');
21
+ var _browsers = require('../dictionary/browsers');
14
22
 
15
- var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
23
+ var _identifiers = require('../dictionary/identifiers');
16
24
 
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ var _postcss = require('../dictionary/postcss');
18
26
 
19
- var targets = ['ie 7', 'ie 6', 'ie 5.5'];
27
+ var _tags = require('../dictionary/tags');
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
30
 
21
31
  function analyse(ctx, rule) {
22
32
  return function (selectors) {
23
33
  selectors.each(function (selector) {
24
- if ((0, _exists2.default)(selector, 0, 'html') && ((0, _exists2.default)(selector, 1, '>') || (0, _exists2.default)(selector, 1, '~')) && selector.at(2) && selector.at(2).type === 'comment' && (0, _exists2.default)(selector, 3, ' ') && (0, _exists2.default)(selector, 4, 'body') && (0, _exists2.default)(selector, 5, ' ') && selector.at(6)) {
34
+ if ((0, _exists2.default)(selector, 0, _tags.HTML) && ((0, _exists2.default)(selector, 1, '>') || (0, _exists2.default)(selector, 1, '~')) && selector.at(2) && selector.at(2).type === 'comment' && (0, _exists2.default)(selector, 3, ' ') && (0, _exists2.default)(selector, 4, _tags.BODY) && (0, _exists2.default)(selector, 5, ' ') && selector.at(6)) {
25
35
  ctx.push(rule, {
26
- identifier: 'selector',
36
+ identifier: _identifiers.SELECTOR,
27
37
  hack: selector.toString()
28
38
  });
29
39
  }
@@ -31,8 +41,11 @@ function analyse(ctx, rule) {
31
41
  };
32
42
  }
33
43
 
34
- exports.default = (0, _plugin2.default)(targets, ['rule'], function (rule) {
35
- if (rule.selector && rule.raws.selector && rule.raws.selector.raw) {
44
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.RULE], function (rule) {
45
+ if ((0, _isMixin2.default)(rule)) {
46
+ return;
47
+ }
48
+ if (rule.raws.selector && rule.raws.selector.raw) {
36
49
  (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.raws.selector.raw);
37
50
  }
38
51
  });
@@ -2,28 +2,38 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
+ var _postcssSelectorParser = require('postcss-selector-parser');
6
+
7
+ var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
8
+
5
9
  var _exists = require('../exists');
6
10
 
7
11
  var _exists2 = _interopRequireDefault(_exists);
8
12
 
13
+ var _isMixin = require('../isMixin');
14
+
15
+ var _isMixin2 = _interopRequireDefault(_isMixin);
16
+
9
17
  var _plugin = require('../plugin');
10
18
 
11
19
  var _plugin2 = _interopRequireDefault(_plugin);
12
20
 
13
- var _postcssSelectorParser = require('postcss-selector-parser');
21
+ var _browsers = require('../dictionary/browsers');
14
22
 
15
- var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
23
+ var _identifiers = require('../dictionary/identifiers');
16
24
 
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ var _postcss = require('../dictionary/postcss');
18
26
 
19
- var targets = ['opera 9'];
27
+ var _tags = require('../dictionary/tags');
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
30
 
21
31
  function analyse(ctx, rule) {
22
32
  return function (selectors) {
23
33
  selectors.each(function (selector) {
24
- if ((0, _exists2.default)(selector, 0, 'html') && (0, _exists2.default)(selector, 1, ':first-child') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
34
+ if ((0, _exists2.default)(selector, 0, _tags.HTML) && (0, _exists2.default)(selector, 1, ':first-child') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
25
35
  ctx.push(rule, {
26
- identifier: 'selector',
36
+ identifier: _identifiers.SELECTOR,
27
37
  hack: selector.toString()
28
38
  });
29
39
  }
@@ -31,9 +41,10 @@ function analyse(ctx, rule) {
31
41
  };
32
42
  }
33
43
 
34
- exports.default = (0, _plugin2.default)(targets, ['rule'], function (rule) {
35
- if (rule.selector) {
36
- (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
44
+ exports.default = (0, _plugin2.default)([_browsers.OP_9], [_postcss.RULE], function (rule) {
45
+ if ((0, _isMixin2.default)(rule)) {
46
+ return;
37
47
  }
48
+ (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
38
49
  });
39
50
  module.exports = exports['default'];
@@ -6,17 +6,19 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _postcss = require('../dictionary/postcss');
10
12
 
11
- var targets = ['ie 5.5', 'ie 6', 'ie 7'];
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
14
 
13
- exports.default = (0, _plugin2.default)(targets, ['decl'], function (decl) {
15
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.DECL], function (decl) {
14
16
  var match = decl.value.match(/!\w/);
15
17
  if (match) {
16
- var text = decl.value.substr(match.index, decl.value.length - 1);
18
+ var hack = decl.value.substr(match.index, decl.value.length - 1);
17
19
  this.push(decl, {
18
20
  identifier: '!important',
19
- hack: text
21
+ hack: hack
20
22
  });
21
23
  }
22
24
  });
@@ -2,60 +2,57 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
6
-
7
5
  var _plugin = require('../plugin');
8
6
 
9
7
  var _plugin2 = _interopRequireDefault(_plugin);
10
8
 
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _identifiers = require('../dictionary/identifiers');
12
+
13
+ var _postcss = require('../dictionary/postcss');
14
+
11
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
16
 
13
- var targets = ['ie 5.5', 'ie 6', 'ie 7'];
14
17
  var hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_');
15
18
 
16
- exports.default = (0, _plugin2.default)(targets, ['decl', 'atrule'], function (node) {
19
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE, _postcss.DECL], function (node) {
17
20
  var _this = this;
18
21
 
19
- if (node.type === 'decl') {
20
- var _ret = function () {
21
- // some values are not picked up by before, so ensure they are
22
- // at the beginning of the value
23
- hacks.some(function (hack) {
24
- if (!node.prop.indexOf(hack)) {
25
- _this.push(node, {
26
- identifier: 'property',
27
- hack: node.prop
28
- });
29
- return true;
30
- }
31
- });
32
- var before = node.raws.before;
33
-
34
- if (!before) {
35
- return {
36
- v: void 0
37
- };
22
+ if (node.type === _postcss.DECL) {
23
+ // some values are not picked up by before, so ensure they are
24
+ // at the beginning of the value
25
+ hacks.some(function (hack) {
26
+ if (!node.prop.indexOf(hack)) {
27
+ _this.push(node, {
28
+ identifier: _identifiers.PROPERTY,
29
+ hack: node.prop
30
+ });
31
+ return true;
38
32
  }
39
- hacks.some(function (hack) {
40
- if (~before.indexOf(hack)) {
41
- _this.push(node, {
42
- identifier: 'property',
43
- hack: '' + before.trim() + node.prop
44
- });
45
- return true;
46
- }
47
- });
48
- }();
33
+ });
34
+ var before = node.raws.before;
49
35
 
50
- if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
51
- } else if (node.type === 'atrule') {
36
+ if (!before) {
37
+ return;
38
+ }
39
+ hacks.some(function (hack) {
40
+ if (~before.indexOf(hack)) {
41
+ _this.push(node, {
42
+ identifier: _identifiers.PROPERTY,
43
+ hack: '' + before.trim() + node.prop
44
+ });
45
+ return true;
46
+ }
47
+ });
48
+ } else {
52
49
  // test for the @property: value; hack
53
50
  var name = node.name;
54
51
 
55
52
  var len = name.length - 1;
56
53
  if (name.lastIndexOf(':') === len) {
57
54
  this.push(node, {
58
- identifier: 'property',
55
+ identifier: _identifiers.PROPERTY,
59
56
  hack: '@' + name.substr(0, len)
60
57
  });
61
58
  }
@@ -6,18 +6,23 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _identifiers = require('../dictionary/identifiers');
10
12
 
11
- var targets = ['ie 6'];
13
+ var _postcss = require('../dictionary/postcss');
12
14
 
13
- exports.default = (0, _plugin2.default)(targets, ['decl'], function (decl) {
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+ exports.default = (0, _plugin2.default)([_browsers.IE_6], [_postcss.DECL], function (decl) {
14
18
  var before = decl.raws.before;
19
+
15
20
  if (!before) {
16
21
  return;
17
22
  }
18
23
  if (~before.indexOf('_') || ~before.indexOf('-')) {
19
24
  this.push(decl, {
20
- identifier: 'property',
25
+ identifier: _identifiers.PROPERTY,
21
26
  hack: '' + before.trim() + decl.prop
22
27
  });
23
28
  }
@@ -6,15 +6,19 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _identifiers = require('../dictionary/identifiers');
10
12
 
11
- var targets = ['ie 8'];
13
+ var _postcss = require('../dictionary/postcss');
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
16
 
13
- exports.default = (0, _plugin2.default)(targets, ['atrule'], function (rule) {
17
+ exports.default = (0, _plugin2.default)([_browsers.IE_8], [_postcss.ATRULE], function (rule) {
14
18
  var params = rule.params.trim();
15
19
  if (params === '\\0screen') {
16
20
  this.push(rule, {
17
- identifier: 'media query',
21
+ identifier: _identifiers.MEDIA_QUERY,
18
22
  hack: params
19
23
  });
20
24
  }
@@ -6,15 +6,19 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _identifiers = require('../dictionary/identifiers');
10
12
 
11
- var targets = ['ie 5.5', 'ie 6', 'ie 7'];
13
+ var _postcss = require('../dictionary/postcss');
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
16
 
13
- exports.default = (0, _plugin2.default)(targets, ['atrule'], function (rule) {
17
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE], function (rule) {
14
18
  var params = rule.params.trim();
15
19
  if (params === 'screen\\9') {
16
20
  this.push(rule, {
17
- identifier: 'media query',
21
+ identifier: _identifiers.MEDIA_QUERY,
18
22
  hack: params
19
23
  });
20
24
  }
@@ -6,15 +6,19 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _browsers = require('../dictionary/browsers');
10
+
11
+ var _identifiers = require('../dictionary/identifiers');
10
12
 
11
- var targets = ['ie 8', 'ie 7', 'ie 6'];
13
+ var _postcss = require('../dictionary/postcss');
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
16
 
13
- exports.default = (0, _plugin2.default)(targets, ['decl'], function (decl) {
17
+ exports.default = (0, _plugin2.default)([_browsers.IE_6, _browsers.IE_7, _browsers.IE_8], [_postcss.DECL], function (decl) {
14
18
  var v = decl.value;
15
19
  if (v && v.length > 2 && v.indexOf('\\9') === v.length - 2) {
16
20
  this.push(decl, {
17
- identifier: 'value',
21
+ identifier: _identifiers.VALUE,
18
22
  hack: v
19
23
  });
20
24
  }
@@ -2,28 +2,38 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
 
5
+ var _postcssSelectorParser = require('postcss-selector-parser');
6
+
7
+ var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
8
+
5
9
  var _exists = require('../exists');
6
10
 
7
11
  var _exists2 = _interopRequireDefault(_exists);
8
12
 
13
+ var _isMixin = require('../isMixin');
14
+
15
+ var _isMixin2 = _interopRequireDefault(_isMixin);
16
+
9
17
  var _plugin = require('../plugin');
10
18
 
11
19
  var _plugin2 = _interopRequireDefault(_plugin);
12
20
 
13
- var _postcssSelectorParser = require('postcss-selector-parser');
21
+ var _browsers = require('../dictionary/browsers');
14
22
 
15
- var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
23
+ var _identifiers = require('../dictionary/identifiers');
16
24
 
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ var _postcss = require('../dictionary/postcss');
18
26
 
19
- var targets = ['ie 6', 'ie 5.5'];
27
+ var _tags = require('../dictionary/tags');
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
30
 
21
31
  function analyse(ctx, rule) {
22
32
  return function (selectors) {
23
33
  selectors.each(function (selector) {
24
- if ((0, _exists2.default)(selector, 0, '*') && (0, _exists2.default)(selector, 1, ' ') && (0, _exists2.default)(selector, 2, 'html') && (0, _exists2.default)(selector, 3, ' ') && selector.at(4)) {
34
+ if ((0, _exists2.default)(selector, 0, '*') && (0, _exists2.default)(selector, 1, ' ') && (0, _exists2.default)(selector, 2, _tags.HTML) && (0, _exists2.default)(selector, 3, ' ') && selector.at(4)) {
25
35
  ctx.push(rule, {
26
- identifier: 'selector',
36
+ identifier: _identifiers.SELECTOR,
27
37
  hack: selector.toString()
28
38
  });
29
39
  }
@@ -31,9 +41,10 @@ function analyse(ctx, rule) {
31
41
  };
32
42
  }
33
43
 
34
- exports.default = (0, _plugin2.default)(targets, ['rule'], function (rule) {
35
- if (rule.selector) {
36
- (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
44
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6], [_postcss.RULE], function (rule) {
45
+ if ((0, _isMixin2.default)(rule)) {
46
+ return;
37
47
  }
48
+ (0, _postcssSelectorParser2.default)(analyse(this, rule)).process(rule.selector);
38
49
  });
39
50
  module.exports = exports['default'];
@@ -6,21 +6,30 @@ var _plugin = require('../plugin');
6
6
 
7
7
  var _plugin2 = _interopRequireDefault(_plugin);
8
8
 
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _isMixin = require('../isMixin');
10
+
11
+ var _isMixin2 = _interopRequireDefault(_isMixin);
12
+
13
+ var _browsers = require('../dictionary/browsers');
14
+
15
+ var _identifiers = require('../dictionary/identifiers');
10
16
 
11
- var targets = ['ie 7', 'ie 6', 'ie 5.5'];
17
+ var _postcss = require('../dictionary/postcss');
12
18
 
13
- exports.default = (0, _plugin2.default)(targets, ['rule'], function (rule) {
14
- if (rule.selector) {
15
- var selector = rule.selector;
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+
21
+ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.RULE], function (rule) {
22
+ if ((0, _isMixin2.default)(rule)) {
23
+ return;
24
+ }
25
+ var selector = rule.selector;
16
26
 
17
- var trim = selector.trim();
18
- if (trim.lastIndexOf(',') === selector.length - 1 || trim.lastIndexOf('\\') === selector.length - 1) {
19
- this.push(rule, {
20
- identifier: 'selector',
21
- hack: selector
22
- });
23
- }
27
+ var trim = selector.trim();
28
+ if (trim.lastIndexOf(',') === selector.length - 1 || trim.lastIndexOf('\\') === selector.length - 1) {
29
+ this.push(rule, {
30
+ identifier: _identifiers.SELECTOR,
31
+ hack: selector
32
+ });
24
33
  }
25
34
  });
26
35
  module.exports = exports['default'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stylehacks",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
4
4
  "description": "Detect/remove browser hacks from CSS files.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -14,7 +14,9 @@
14
14
  "scripts": {
15
15
  "pretest": "eslint src",
16
16
  "prepublish": "del-cli dist && BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/",
17
- "test": "ava src/__tests__"
17
+ "report": "nyc report --reporter=html",
18
+ "test": "nyc ava src/__tests__",
19
+ "test-012": "nyc ava src/__tests__"
18
20
  },
19
21
  "keywords": [
20
22
  "browsers",
@@ -28,16 +30,20 @@
28
30
  ],
29
31
  "license": "MIT",
30
32
  "devDependencies": {
31
- "ava": "^0.14.0",
33
+ "ava": "^0.17.0",
32
34
  "babel-cli": "^6.5.1",
33
35
  "babel-core": "^6.5.2",
34
36
  "babel-plugin-add-module-exports": "^0.2.0",
35
37
  "babel-preset-es2015": "^6.5.0",
36
38
  "babel-preset-es2015-loose": "^7.0.0",
37
39
  "babel-preset-stage-0": "^6.5.0",
40
+ "babel-register": "^6.9.0",
38
41
  "del-cli": "^0.2.0",
39
- "eslint": "^2.2.0",
40
- "eslint-config-cssnano": "^2.0.0"
42
+ "eslint": "^3.0.0",
43
+ "eslint-config-cssnano": "^3.0.0",
44
+ "eslint-plugin-babel": "^3.3.0",
45
+ "eslint-plugin-import": "^2.0.1",
46
+ "nyc": "^10.0.0"
41
47
  },
42
48
  "homepage": "https://github.com/ben-eb/stylehacks",
43
49
  "author": {
@@ -63,6 +69,13 @@
63
69
  "extends": "cssnano"
64
70
  },
65
71
  "ava": {
66
- "require": "babel-core/register"
72
+ "require": "babel-register"
73
+ },
74
+ "nyc": {
75
+ "exclude": [
76
+ "dist",
77
+ "node_modules",
78
+ "src/__tests__"
79
+ ]
67
80
  }
68
81
  }