1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- const chalk = require('chalk');
- const log = require('./log');
- const fs = require('fs');
- const postcss = require('postcss');
- const postcssCalc = require("postcss-calc");
- const postcssImport = require('postcss-import');
- const postcssHeader = require('postcss-header');
- const postcssUrl = require('postcss-url');
- const postcssPresetEnv = require('postcss-preset-env');
- // cspell:ignore pxtorem
- const postcssPixelsToRem = require('postcss-pxtorem');
- const stylelint = require('stylelint');
- module.exports = (filePath, callback) => {
- // Transform the file.
- fs.readFile(filePath, (err, css) => {
- postcss([
- postcssImport({
- plugins: [
- // On import, remove the comments from variables.pcss.css so they don't
- // appear as useless comments at the top files that import these
- // variables.
- postcss.plugin('remove-unwanted-comments-from-variables', (options) => {
- return css => {
- if (css.source.input.file.indexOf('variables.pcss.css') !== -1) {
- css.walk(node => {
- if (node.type === 'comment') {
- node.remove();
- }
- });
- }
- };
- }),
- ],
- }),
- postcssPresetEnv({
- stage: 1,
- preserve: false,
- autoprefixer: {
- cascade: false,
- grid: 'no-autoplace',
- },
- features: {
- 'blank-pseudo-class': false,
- 'focus-visible-pseudo-class': false,
- 'focus-within-pseudo-class': false,
- 'has-pseudo-class': false,
- 'image-set-function': false,
- 'prefers-color-scheme-query': false,
- }
- }),
- postcssCalc,
- postcssPixelsToRem({
- propList: [
- '*',
- '!background-position',
- '!border',
- '!border-width',
- '!box-shadow',
- '!border-top*',
- '!border-right*',
- '!border-bottom*',
- '!border-left*',
- '!border-start*',
- '!border-end*',
- '!outline*',
- ],
- mediaQuery: true,
- minPixelValue: 3,
- }),
- postcssHeader({
- header: `/*\n * DO NOT EDIT THIS FILE.\n * See the following change record for more information,\n * https://www.drupal.org/node/3084859\n * @preserve\n */\n`,
- }),
- postcssUrl({
- filter: '**/*.svg',
- url: 'inline',
- optimizeSvgEncode: true,
- })
- ])
- .process(css, { from: filePath })
- .then(result => {
- return stylelint.lint({
- code: result.css,
- fix: true
- });
- })
- .then(result => {
- callback(result.output);
- })
- .catch(error => {
- log(chalk.red(error));
- process.exitCode = 1;
- });
- });
- };
|