From 2da8782e805fd593235979312056c2496b464c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Nikoli=C4=87?= Date: Fri, 23 Oct 2020 10:35:24 +0200 Subject: [PATCH] Add support for PostCSS 8 Closes #147. --- .gitignore | 1 + README.md | 2 +- package-lock.json | 89 +++++++++++++++++++++++++++++++++++++++++------ package.json | 5 ++- src/index.js | 34 +++++++++--------- test/setup.js | 8 ++--- 6 files changed, 107 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index c26b128..750ecd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules test/fixtures/*.actual.css test/fixtures/build +test/fixtures/test .idea diff --git a/README.md b/README.md index 0f3d8f8..8c2789c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ## Installation ```console -$ npm install postcss-url +$ npm install postcss postcss-url ``` ## Basic example - rebase diff --git a/package-lock.json b/package-lock.json index bcb48b7..4bd7aed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -98,6 +98,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -194,6 +195,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -237,6 +239,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -244,7 +247,14 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true }, "commander": { "version": "2.15.1", @@ -339,7 +349,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { "version": "5.16.0", @@ -708,7 +719,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "he": { "version": "1.1.1", @@ -825,12 +837,27 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -887,6 +914,16 @@ "type-check": "~0.3.2" } }, + "line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=", + "dev": true, + "requires": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -1034,6 +1071,12 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "nanoid": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -1244,13 +1287,15 @@ } }, "postcss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", - "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.2.tgz", + "integrity": "sha512-mToqEVFq8jF9TFhlIK4HhE34zknFJuNTgqtsr60vUvrWn+9TIYugCwiV1JZRxCuOrej2jjstun1bn4Bc7/1HkA==", + "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "colorette": "^1.2.1", + "line-column": "^1.0.2", + "nanoid": "^3.1.12", + "source-map": "^0.6.1" } }, "postcss-import": { @@ -1263,6 +1308,28 @@ "postcss-value-parser": "^3.2.3", "read-cache": "^1.0.0", "resolve": "^1.1.7" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-value-parser": { @@ -1434,7 +1501,8 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "sprintf-js": { "version": "1.0.3", @@ -1477,6 +1545,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } diff --git a/package.json b/package.json index ea87a48..932804a 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "mime": "2.3.1", "minimatch": "3.0.4", "mkdirp": "0.5.0", - "postcss": "7.0.2", "xxhashjs": "0.2.1" }, "devDependencies": { @@ -34,8 +33,12 @@ "eslint": "5.16.0", "mocha": "5.2.0", "npmpub": "4.1.0", + "postcss": "8.1.2", "postcss-import": "12.0.0" }, + "peerDependencies": { + "postcss": "8.1.2" + }, "scripts": { "lint": "eslint --fix .", "tests": "mocha", diff --git a/src/index.js b/src/index.js index 402705e..bf21c24 100644 --- a/src/index.js +++ b/src/index.js @@ -1,30 +1,32 @@ 'use strict'; const path = require('path'); -const postcss = require('postcss'); const declProcessor = require('./lib/decl-processor').declProcessor; -/** - * - * @type {Plugin} - */ -module.exports = postcss.plugin('postcss-url', (options) => { +const plugin = (options) => { options = options || {}; - return function(styles, result) { - const promises = []; - const opts = result.opts; - const from = opts.from ? path.dirname(opts.from) : '.'; - const to = opts.to ? path.dirname(opts.to) : from; + return { + postcssPlugin: 'postcss-url', + Once(styles, { result }) { + const promises = []; + const opts = result.opts; + const from = opts.from ? path.dirname(opts.from) : '.'; + const to = opts.to ? path.dirname(opts.to) : from; - styles.walkDecls((decl) => - promises.push(declProcessor(from, to, options, result, decl)) - ); + styles.walkDecls((decl) => + promises.push(declProcessor(from, to, options, result, decl)) + ); - return Promise.all(promises); + return Promise.all(promises); + } }; -}); +}; + +plugin.postcss = true; + +module.exports = plugin; /** * @callback PostcssUrl~UrlProcessor diff --git a/test/setup.js b/test/setup.js index 47e5a6d..7395325 100644 --- a/test/setup.js +++ b/test/setup.js @@ -13,15 +13,15 @@ global.postcssUrl = url; function compareFixtures(name, msg, opts, postcssOpts, plugin) { it(msg, () => { opts = opts || {}; - const pcss = postcss(); + const plugins = []; if (plugin) { - pcss.use(plugin()); + plugins.push(plugin()); } - pcss.use(url(opts)); + plugins.push(url(opts)); - return pcss.process(read(`fixtures/${name}`), postcssOpts) + return postcss(plugins).process(read(`fixtures/${name}`), postcssOpts) .then((result) => { const actual = result.css; const expected = read(`fixtures/${name}.expected`);