Socket
Socket
Sign inDemoInstall

postcss-minify-selectors

Package Overview
Dependencies
Maintainers
2
Versions
67
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

postcss-minify-selectors - npm Package Compare versions

Comparing version 2.0.5 to 2.0.6

7

CHANGELOG.md

@@ -0,1 +1,8 @@

# 2.0.6
* Performance tweaks; now calls `Node#toString()` ~50% less often, removed dead
branches, extracted each node type into a separate transformer function.
* Resolves an issue where extraneous whitespace around a case-insensitive
attribute selector (`[href="foo" i]`) would not be removed.
# 2.0.5

@@ -2,0 +9,0 @@

140

dist/index.js

@@ -7,4 +7,2 @@ 'use strict';

var _postcss2 = _interopRequireDefault(_postcss);
var _alphanumSort = require('alphanum-sort');

@@ -14,2 +12,10 @@

var _has = require('has');
var _has2 = _interopRequireDefault(_has);
var _postcssSelectorParser = require('postcss-selector-parser');
var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
var _unquote = require('./lib/unquote');

@@ -23,6 +29,2 @@

var _postcssSelectorParser = require('postcss-selector-parser');
var _postcssSelectorParser2 = _interopRequireDefault(_postcssSelectorParser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -36,2 +38,67 @@

function attribute(selector) {
if (selector.value) {
// Join selectors that are split over new lines
selector.value = selector.value.replace(/\\\n/g, '').trim();
if ((0, _canUnquote2.default)(selector.value)) {
selector.value = (0, _unquote2.default)(selector.value);
}
selector.operator = selector.operator.trim();
}
if (selector.raws && selector.raws.insensitive) {
selector.raws.insensitive = '';
}
selector.attribute = selector.attribute.trim();
}
function combinator(selector) {
var value = selector.value.trim();
selector.value = value.length ? value : ' ';
}
function pseudo(selector) {
var uniques = [];
selector.walk(function (child) {
if (child.type === 'selector') {
var childStr = String(child);
if (!~uniques.indexOf(childStr)) {
uniques.push(childStr);
} else {
child.remove();
}
}
});
if (~pseudoElements.indexOf(selector.value)) {
selector.value = selector.value.slice(1);
}
}
var tagReplacements = {
from: '0%',
'100%': 'to'
};
function tag(selector) {
var value = selector.value;
if ((0, _has2.default)(tagReplacements, value)) {
selector.value = tagReplacements[value];
}
}
function universal(selector) {
var next = selector.next();
if (next && next.type !== 'combinator') {
selector.remove();
}
}
var reducers = {
attribute: attribute,
combinator: combinator,
pseudo: pseudo,
tag: tag,
universal: universal
};
function optimise(rule) {

@@ -48,43 +115,13 @@ var selector = rule.raws.selector && rule.raws.selector.raw || rule.selector;

selectors.walk(function (sel) {
var toString = String(sel);
var type = sel.type;
// Trim whitespace around the value
sel.spaces.before = sel.spaces.after = '';
if (sel.type === 'attribute') {
if (sel.value) {
// Join selectors that are split over new lines
sel.value = sel.value.replace(/\\\n/g, '').trim();
if ((0, _canUnquote2.default)(sel.value)) {
sel.value = (0, _unquote2.default)(sel.value);
}
sel.operator = sel.operator.trim();
}
if (sel.raw) {
sel.raw.insensitive = '';
}
sel.attribute = sel.attribute.trim();
if ((0, _has2.default)(reducers, type)) {
reducers[type](sel);
return;
}
if (sel.type === 'combinator') {
var value = sel.value.trim();
sel.value = value.length ? value : ' ';
}
if (sel.type === 'pseudo') {
(function () {
var uniques = [];
sel.walk(function (child) {
if (child.type === 'selector') {
var childStr = String(child);
if (! ~uniques.indexOf(childStr)) {
uniques.push(childStr);
} else {
child.remove();
}
}
});
if (~pseudoElements.indexOf(sel.value)) {
sel.value = sel.value.slice(1);
}
})();
}
if (sel.type === 'selector' && sel.parent.type !== 'pseudo') {
if (! ~uniqueSelectors.indexOf(toString)) {
var toString = String(sel);
if (type === 'selector' && sel.parent.type !== 'pseudo') {
if (!~uniqueSelectors.indexOf(toString)) {
uniqueSelectors.push(toString);

@@ -95,15 +132,2 @@ } else {

}
if (sel.type === 'tag') {
if (sel.value === 'from') {
sel.value = '0%';
} else if (sel.value === '100%') {
sel.value = 'to';
}
}
if (sel.type === 'universal') {
var next = sel.next();
if (next && next.type !== 'combinator') {
sel.remove();
}
}
});

@@ -113,3 +137,3 @@ });

exports.default = _postcss2.default.plugin('postcss-minify-selectors', function () {
exports.default = (0, _postcss.plugin)('postcss-minify-selectors', function () {
return function (css) {

@@ -116,0 +140,0 @@ return css.walkRules(optimise);

@@ -25,8 +25,5 @@ 'use strict';

}
if (value) {
value = value.replace(escapes, 'a').replace(/\\./g, 'a');
return !(range.test(value) || /^(?:-?\d|--)/.test(value));
}
return false;
value = value.replace(escapes, 'a').replace(/\\./g, 'a');
return !(range.test(value) || /^(?:-?\d|--)/.test(value));
}
module.exports = exports['default'];
{
"name": "postcss-minify-selectors",
"version": "2.0.5",
"version": "2.0.6",
"description": "Minify selectors with PostCSS.",

@@ -13,3 +13,5 @@ "main": "dist/index.js",

"prepublish": "del-cli dist && BABEL_ENV=publish babel src --out-dir dist --ignore /__tests__/",
"test": "ava src/__tests__"
"report": "nyc report --reporter=html",
"test": "nyc ava",
"test-012": "nyc ava"
},

@@ -26,12 +28,16 @@ "keywords": [

"devDependencies": {
"ava": "^0.14.0",
"babel-cli": "^6.5.1",
"babel-core": "^6.5.1",
"babel-plugin-add-module-exports": "^0.1.2",
"babel-preset-es2015": "^6.5.0",
"ava": "^0.16.0",
"babel-cli": "^6.3.17",
"babel-core": "^6.3.26",
"babel-plugin-add-module-exports": "^0.2.1",
"babel-preset-es2015": "^6.3.13",
"babel-preset-es2015-loose": "^7.0.0",
"babel-preset-stage-0": "^6.5.0",
"babel-preset-stage-0": "^6.3.13",
"babel-register": "^6.9.0",
"del-cli": "^0.2.0",
"eslint": "^2.0.0",
"eslint-config-cssnano": "^2.0.0",
"eslint": "^3.0.0",
"eslint-config-cssnano": "^3.0.0",
"eslint-plugin-babel": "^3.3.0",
"eslint-plugin-import": "^2.0.1",
"nyc": "^8.4.0",
"postcss-font-magician": "^1.4.0"

@@ -48,2 +54,3 @@ },

"alphanum-sort": "^1.0.2",
"has": "^1.0.1",
"postcss": "^5.0.14",

@@ -56,4 +63,4 @@ "postcss-selector-parser": "^2.0.0"

"ava": {
"require": "babel-core/register"
"require": "babel-register"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc