stylehacks
Advanced tools
Comparing version 4.0.0-rc.2 to 4.0.0
@@ -6,7 +6,7 @@ 'use strict'; | ||
}); | ||
var FF_2 = exports.FF_2 = 'firefox 2'; | ||
var IE_5_5 = exports.IE_5_5 = 'ie 5.5'; | ||
var IE_6 = exports.IE_6 = 'ie 6'; | ||
var IE_7 = exports.IE_7 = 'ie 7'; | ||
var IE_8 = exports.IE_8 = 'ie 8'; | ||
var OP_9 = exports.OP_9 = 'opera 9'; | ||
const FF_2 = exports.FF_2 = 'firefox 2'; | ||
const IE_5_5 = exports.IE_5_5 = 'ie 5.5'; | ||
const IE_6 = exports.IE_6 = 'ie 6'; | ||
const IE_7 = exports.IE_7 = 'ie 7'; | ||
const IE_8 = exports.IE_8 = 'ie 8'; | ||
const OP_9 = exports.OP_9 = 'opera 9'; |
@@ -6,5 +6,5 @@ 'use strict'; | ||
}); | ||
var MEDIA_QUERY = exports.MEDIA_QUERY = 'media query'; | ||
var PROPERTY = exports.PROPERTY = 'property'; | ||
var SELECTOR = exports.SELECTOR = 'selector'; | ||
var VALUE = exports.VALUE = 'value'; | ||
const MEDIA_QUERY = exports.MEDIA_QUERY = 'media query'; | ||
const PROPERTY = exports.PROPERTY = 'property'; | ||
const SELECTOR = exports.SELECTOR = 'selector'; | ||
const VALUE = exports.VALUE = 'value'; |
@@ -6,4 +6,4 @@ 'use strict'; | ||
}); | ||
var ATRULE = exports.ATRULE = 'atrule'; | ||
var DECL = exports.DECL = 'decl'; | ||
var RULE = exports.RULE = 'rule'; | ||
const ATRULE = exports.ATRULE = 'atrule'; | ||
const DECL = exports.DECL = 'decl'; | ||
const RULE = exports.RULE = 'rule'; |
@@ -6,3 +6,3 @@ 'use strict'; | ||
}); | ||
var BODY = exports.BODY = 'body'; | ||
var HTML = exports.HTML = 'html'; | ||
const BODY = exports.BODY = 'body'; | ||
const HTML = exports.HTML = 'html'; |
@@ -8,5 +8,5 @@ "use strict"; | ||
function exists(selector, index, value) { | ||
var node = selector.at(index); | ||
const node = selector.at(index); | ||
return node && node.value === value; | ||
} | ||
module.exports = exports["default"]; |
@@ -21,10 +21,6 @@ 'use strict'; | ||
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); } } | ||
var stylehacks = _postcss2.default.plugin('stylehacks', function () { | ||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
return function (css, result) { | ||
var resultOpts = result.opts || {}; | ||
var browsers = (0, _browserslist2.default)(null, { | ||
const stylehacks = _postcss2.default.plugin('stylehacks', (opts = {}) => { | ||
return (css, result) => { | ||
const resultOpts = result.opts || {}; | ||
const browsers = (0, _browserslist2.default)(null, { | ||
stats: resultOpts.stats, | ||
@@ -34,8 +30,6 @@ path: __dirname, | ||
}); | ||
var processors = _plugins2.default.reduce(function (list, Plugin) { | ||
var hack = new Plugin(result); | ||
var applied = browsers.some(function (browser) { | ||
return hack.targets.some(function (target) { | ||
return browser === target; | ||
}); | ||
const processors = _plugins2.default.reduce((list, Plugin) => { | ||
const hack = new Plugin(result); | ||
const applied = browsers.some(browser => { | ||
return hack.targets.some(target => browser === target); | ||
}); | ||
@@ -45,6 +39,6 @@ if (applied) { | ||
} | ||
return [].concat(_toConsumableArray(list), [hack]); | ||
return [...list, hack]; | ||
}, []); | ||
css.walk(function (node) { | ||
processors.forEach(function (proc) { | ||
css.walk(node => { | ||
processors.forEach(proc => { | ||
if (!~proc.nodeTypes.indexOf(node.type)) { | ||
@@ -62,5 +56,5 @@ return; | ||
stylehacks.detect = function (node) { | ||
return _plugins2.default.some(function (Plugin) { | ||
var hack = new Plugin(); | ||
stylehacks.detect = node => { | ||
return _plugins2.default.some(Plugin => { | ||
const hack = new Plugin(); | ||
return hack.any(node); | ||
@@ -67,0 +61,0 @@ }); |
@@ -8,5 +8,4 @@ 'use strict'; | ||
function isMixin(node) { | ||
var selector = node.selector; | ||
const { selector } = node; | ||
// If the selector ends with a ':' it is likely a part of a custom mixin. | ||
if (!selector || selector[selector.length - 1] === ':') { | ||
@@ -13,0 +12,0 @@ return true; |
@@ -6,14 +6,6 @@ "use strict"; | ||
}); | ||
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | ||
exports.default = plugin; | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
function plugin(targets, nodeTypes, detect) { | ||
var Plugin = function () { | ||
function Plugin(result) { | ||
_classCallCheck(this, Plugin); | ||
class Plugin { | ||
constructor(result) { | ||
this.nodes = []; | ||
@@ -25,73 +17,44 @@ this.result = result; | ||
_createClass(Plugin, [{ | ||
key: "push", | ||
value: function push(node, metadata) { | ||
node._stylehacks = Object.assign({}, metadata, { | ||
message: `Bad ${metadata.identifier}: ${metadata.hack}`, | ||
browsers: this.targets | ||
}); | ||
this.nodes.push(node); | ||
} | ||
}, { | ||
key: "any", | ||
value: function any(node) { | ||
if (~this.nodeTypes.indexOf(node.type)) { | ||
detect.apply(this, arguments); | ||
return !!node._stylehacks; | ||
} | ||
return false; | ||
} | ||
}, { | ||
key: "detectAndResolve", | ||
value: function detectAndResolve() { | ||
this.nodes = []; | ||
push(node, metadata) { | ||
node._stylehacks = Object.assign({}, metadata, { | ||
message: `Bad ${metadata.identifier}: ${metadata.hack}`, | ||
browsers: this.targets | ||
}); | ||
this.nodes.push(node); | ||
} | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
detect.apply(this, args); | ||
return this.resolve(); | ||
any(node) { | ||
if (~this.nodeTypes.indexOf(node.type)) { | ||
detect.apply(this, arguments); | ||
return !!node._stylehacks; | ||
} | ||
}, { | ||
key: "detectAndWarn", | ||
value: function detectAndWarn() { | ||
this.nodes = []; | ||
return false; | ||
} | ||
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
args[_key2] = arguments[_key2]; | ||
} | ||
detectAndResolve(...args) { | ||
this.nodes = []; | ||
detect.apply(this, args); | ||
return this.resolve(); | ||
} | ||
detect.apply(this, args); | ||
return this.warn(); | ||
} | ||
}, { | ||
key: "resolve", | ||
value: function resolve() { | ||
return this.nodes.forEach(function (node) { | ||
return node.remove(); | ||
}); | ||
} | ||
}, { | ||
key: "warn", | ||
value: function warn() { | ||
var _this = this; | ||
detectAndWarn(...args) { | ||
this.nodes = []; | ||
detect.apply(this, args); | ||
return this.warn(); | ||
} | ||
return this.nodes.forEach(function (node) { | ||
var _node$_stylehacks = node._stylehacks, | ||
message = _node$_stylehacks.message, | ||
browsers = _node$_stylehacks.browsers, | ||
identifier = _node$_stylehacks.identifier, | ||
hack = _node$_stylehacks.hack; | ||
resolve() { | ||
return this.nodes.forEach(node => node.remove()); | ||
} | ||
return node.warn(_this.result, message, { browsers, identifier, hack }); | ||
}); | ||
} | ||
}]); | ||
warn() { | ||
return this.nodes.forEach(node => { | ||
const { message, browsers, identifier, hack } = node._stylehacks; | ||
return node.warn(this.result, message, { browsers, identifier, hack }); | ||
}); | ||
} | ||
} | ||
return Plugin; | ||
}(); | ||
return Plugin; | ||
} | ||
module.exports = exports["default"]; |
@@ -34,4 +34,4 @@ 'use strict'; | ||
function analyse(ctx, rule) { | ||
return function (selectors) { | ||
selectors.each(function (selector) { | ||
return selectors => { | ||
selectors.each(selector => { | ||
if ((0, _exists2.default)(selector, 0, _tags.BODY) && (0, _exists2.default)(selector, 1, ':empty') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) { | ||
@@ -38,0 +38,0 @@ ctx.push(rule, { |
@@ -34,4 +34,4 @@ 'use strict'; | ||
function analyse(ctx, rule) { | ||
return function (selectors) { | ||
selectors.each(function (selector) { | ||
return selectors => { | ||
selectors.each(selector => { | ||
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)) { | ||
@@ -38,0 +38,0 @@ ctx.push(rule, { |
@@ -34,4 +34,4 @@ 'use strict'; | ||
function analyse(ctx, rule) { | ||
return function (selectors) { | ||
selectors.each(function (selector) { | ||
return selectors => { | ||
selectors.each(selector => { | ||
if ((0, _exists2.default)(selector, 0, _tags.HTML) && (0, _exists2.default)(selector, 1, ':first-child') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) { | ||
@@ -38,0 +38,0 @@ ctx.push(rule, { |
@@ -18,5 +18,5 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.DECL], function (decl) { | ||
var match = decl.value.match(/!\w/); | ||
const match = decl.value.match(/!\w/); | ||
if (match) { | ||
var hack = decl.value.substr(match.index, decl.value.length - 1); | ||
const hack = decl.value.substr(match.index, decl.value.length - 1); | ||
this.push(decl, { | ||
@@ -23,0 +23,0 @@ identifier: '!important', |
@@ -19,13 +19,11 @@ 'use strict'; | ||
var hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_'); | ||
const hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_'); | ||
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE, _postcss.DECL], function (node) { | ||
var _this = this; | ||
if (node.type === _postcss.DECL) { | ||
// some values are not picked up by before, so ensure they are | ||
// at the beginning of the value | ||
hacks.some(function (hack) { | ||
hacks.some(hack => { | ||
if (!node.prop.indexOf(hack)) { | ||
_this.push(node, { | ||
this.push(node, { | ||
identifier: _identifiers.PROPERTY, | ||
@@ -37,10 +35,9 @@ hack: node.prop | ||
}); | ||
var before = node.raws.before; | ||
let { before } = node.raws; | ||
if (!before) { | ||
return; | ||
} | ||
hacks.some(function (hack) { | ||
hacks.some(hack => { | ||
if (~before.indexOf(hack)) { | ||
_this.push(node, { | ||
this.push(node, { | ||
identifier: _identifiers.PROPERTY, | ||
@@ -54,5 +51,4 @@ hack: `${before.trim()}${node.prop}` | ||
// test for the @property: value; hack | ||
var name = node.name; | ||
var len = name.length - 1; | ||
let { name } = node; | ||
let len = name.length - 1; | ||
if (name.lastIndexOf(':') === len) { | ||
@@ -59,0 +55,0 @@ this.push(node, { |
@@ -24,4 +24,3 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_6], [_postcss3.DECL], function (decl) { | ||
var before = decl.raws.before; | ||
const { before } = decl.raws; | ||
if (before && ~before.indexOf('_')) { | ||
@@ -28,0 +27,0 @@ this.push(decl, { |
@@ -20,3 +20,3 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_8], [_postcss.ATRULE], function (rule) { | ||
var params = rule.params.trim(); | ||
const params = rule.params.trim(); | ||
if (params === '\\0screen') { | ||
@@ -23,0 +23,0 @@ this.push(rule, { |
@@ -20,3 +20,3 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7, _browsers.IE_8], [_postcss.ATRULE], function (rule) { | ||
var params = rule.params.trim(); | ||
const params = rule.params.trim(); | ||
if (params === '\\0screen\\,screen\\9') { | ||
@@ -23,0 +23,0 @@ this.push(rule, { |
@@ -20,3 +20,3 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE], function (rule) { | ||
var params = rule.params.trim(); | ||
const params = rule.params.trim(); | ||
if (params === 'screen\\9') { | ||
@@ -23,0 +23,0 @@ this.push(rule, { |
@@ -20,3 +20,3 @@ 'use strict'; | ||
exports.default = (0, _plugin2.default)([_browsers.IE_6, _browsers.IE_7, _browsers.IE_8], [_postcss.DECL], function (decl) { | ||
var v = decl.value; | ||
let v = decl.value; | ||
if (v && v.length > 2 && v.indexOf('\\9') === v.length - 2) { | ||
@@ -23,0 +23,0 @@ this.push(decl, { |
@@ -34,4 +34,4 @@ 'use strict'; | ||
function analyse(ctx, rule) { | ||
return function (selectors) { | ||
selectors.each(function (selector) { | ||
return selectors => { | ||
selectors.each(selector => { | ||
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)) { | ||
@@ -38,0 +38,0 @@ ctx.push(rule, { |
@@ -27,5 +27,4 @@ 'use strict'; | ||
} | ||
var selector = rule.selector; | ||
var trim = selector.trim(); | ||
const { selector } = rule; | ||
const trim = selector.trim(); | ||
if (trim.lastIndexOf(',') === selector.length - 1 || trim.lastIndexOf('\\') === selector.length - 1) { | ||
@@ -32,0 +31,0 @@ this.push(rule, { |
{ | ||
"name": "stylehacks", | ||
"version": "4.0.0-rc.2", | ||
"version": "4.0.0", | ||
"description": "Detect/remove browser hacks from CSS files.", | ||
@@ -26,5 +26,5 @@ "main": "dist/index.js", | ||
"babel-cli": "^6.0.0", | ||
"cross-env": "^3.0.0" | ||
"cross-env": "^5.0.0" | ||
}, | ||
"homepage": "https://github.com/ben-eb/cssnano", | ||
"homepage": "https://github.com/cssnano/cssnano", | ||
"author": { | ||
@@ -35,14 +35,14 @@ "name": "Ben Briggs", | ||
}, | ||
"repository": "ben-eb/cssnano", | ||
"repository": "cssnano/cssnano", | ||
"dependencies": { | ||
"browserslist": "^2.0.0", | ||
"browserslist": "^4.0.0", | ||
"postcss": "^6.0.0", | ||
"postcss-selector-parser": "^3.0.0-rc.0" | ||
"postcss-selector-parser": "^3.0.0" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/ben-eb/cssnano/issues" | ||
"url": "https://github.com/cssnano/cssnano/issues" | ||
}, | ||
"engines": { | ||
"node": ">=4" | ||
"node": ">=6.9.0" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
0
26522
517
1
+ Addedbrowserslist@4.24.0(transitive)
+ Addedescalade@3.2.0(transitive)
+ Addednode-releases@2.0.18(transitive)
+ Addedpicocolors@1.1.0(transitive)
+ Addedupdate-browserslist-db@1.1.1(transitive)
- Removedbrowserslist@2.11.3(transitive)
Updatedbrowserslist@^4.0.0