From 31d5c07dc07a40fdffd47d3e3e62d39ff1f6c40f Mon Sep 17 00:00:00 2001 From: Ludovico Fischer <43557+ludofischer@users.noreply.github.com> Date: Tue, 9 Nov 2021 16:03:28 +0100 Subject: [PATCH] refactor: drop one-liner dependencies (#1224) * refactor: remove uniqs Remove uniqs as it's a one-liner. * refactor(postcss-merge-rules): drop vendors dep Remove vendors as it'just a single array that did not change in the last 5 years, and cssnano only uses it once. * refactor(postcss-merge-rules): replace array with regex * refactor(postcss-merge-rules): make vendor prefix regex more accepting * Revert "refactor(postcss-merge-rules): make vendor prefix regex more accepting" This reverts commit c310933dcc313ae7dec3a06b86ca3359f95f25f3. --- packages/postcss-merge-rules/package.json | 3 +-- .../src/lib/ensureCompatibility.js | 11 +++++------ packages/postcss-minify-params/package.json | 3 +-- packages/postcss-minify-params/src/index.js | 11 +++++++---- packages/postcss-unique-selectors/package.json | 3 +-- packages/postcss-unique-selectors/src/index.js | 5 +++-- yarn.lock | 10 ---------- 7 files changed, 18 insertions(+), 28 deletions(-) diff --git a/packages/postcss-merge-rules/package.json b/packages/postcss-merge-rules/package.json index f6e1242bb..fad6f10f2 100644 --- a/packages/postcss-merge-rules/package.json +++ b/packages/postcss-merge-rules/package.json @@ -30,8 +30,7 @@ "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" + "postcss-selector-parser": "^6.0.5" }, "bugs": { "url": "https://github.com/cssnano/cssnano/issues" diff --git a/packages/postcss-merge-rules/src/lib/ensureCompatibility.js b/packages/postcss-merge-rules/src/lib/ensureCompatibility.js index 7e313d74d..93c2d7cbb 100644 --- a/packages/postcss-merge-rules/src/lib/ensureCompatibility.js +++ b/packages/postcss-merge-rules/src/lib/ensureCompatibility.js @@ -1,6 +1,5 @@ import { isSupported } from 'caniuse-api'; import selectorParser from 'postcss-selector-parser'; -import vendors from 'vendors'; const simpleSelectorRe = /^#?[-._a-z0-9 ]+$/i; @@ -12,15 +11,15 @@ const cssFirstLine = 'css-first-line'; const cssInOutOfRange = 'css-in-out-of-range'; const formValidation = 'form-validation'; -/** @type {string[]} */ -const prefixes = vendors.map((v) => `-${v}-`); +const vendorPrefix = + /-(ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)-/; /** * @param {string} selector * @return {string[]} */ -export function filterPrefixes(selector) { - return prefixes.filter((prefix) => selector.indexOf(prefix) !== -1); +function filterPrefixes(selector) { + return selector.match(vendorPrefix); } // Internet Explorer use :-ms-input-placeholder. @@ -42,7 +41,7 @@ export function sameVendor(selectorsA, selectorsB) { * @return {boolean} */ export function noVendor(selector) { - return !filterPrefixes(selector).length; + return !vendorPrefix.test(selector); } export const pseudoElements = { diff --git a/packages/postcss-minify-params/package.json b/packages/postcss-minify-params/package.json index d4c29152d..614876839 100644 --- a/packages/postcss-minify-params/package.json +++ b/packages/postcss-minify-params/package.json @@ -25,8 +25,7 @@ "alphanum-sort": "^1.0.2", "browserslist": "^4.16.6", "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "postcss-value-parser": "^4.1.0" }, "scripts": { "prebuild": "rimraf dist", diff --git a/packages/postcss-minify-params/src/index.js b/packages/postcss-minify-params/src/index.js index 9903fe3e7..fca6779d7 100644 --- a/packages/postcss-minify-params/src/index.js +++ b/packages/postcss-minify-params/src/index.js @@ -1,7 +1,6 @@ import browserslist from 'browserslist'; import valueParser, { stringify } from 'postcss-value-parser'; import sort from 'alphanum-sort'; -import uniqs from 'uniqs'; import { getArguments } from 'cssnano-utils'; /** @@ -28,6 +27,12 @@ function removeNode(node) { node.type = 'word'; } +function sortAndDedupe(items) { + return sort([...new Set(items)], { + insensitive: true, + }).join(); +} + function transform(legacy, rule) { const ruleName = rule.name.toLowerCase(); @@ -80,9 +85,7 @@ function transform(legacy, rule) { } }, true); - rule.params = sort(uniqs(getArguments(params).map(split)), { - insensitive: true, - }).join(); + rule.params = sortAndDedupe(getArguments(params).map(split)); if (!rule.params.length) { rule.raws.afterName = ''; diff --git a/packages/postcss-unique-selectors/package.json b/packages/postcss-unique-selectors/package.json index e7af91abb..787856677 100644 --- a/packages/postcss-unique-selectors/package.json +++ b/packages/postcss-unique-selectors/package.json @@ -27,8 +27,7 @@ "repository": "cssnano/cssnano", "dependencies": { "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" }, "bugs": { "url": "https://github.com/cssnano/cssnano/issues" diff --git a/packages/postcss-unique-selectors/src/index.js b/packages/postcss-unique-selectors/src/index.js index c4a61b5f7..d0c06bd76 100644 --- a/packages/postcss-unique-selectors/src/index.js +++ b/packages/postcss-unique-selectors/src/index.js @@ -1,5 +1,4 @@ import sort from 'alphanum-sort'; -import uniqs from 'uniqs'; import selectorParser from 'postcss-selector-parser'; function parseSelectors(selectors, callback) { @@ -7,7 +6,9 @@ function parseSelectors(selectors, callback) { } function unique(rule) { - rule.selector = sort(uniqs(rule.selectors), { insensitive: true }).join(); + rule.selector = sort([...new Set(rule.selectors)], { + insensitive: true, + }).join(); } function pluginCreator() { diff --git a/yarn.lock b/yarn.lock index 701a0d041..6afa358ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8124,11 +8124,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -8221,11 +8216,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -vendors@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"