241 lines
22 KiB
JavaScript
241 lines
22 KiB
JavaScript
|
'use strict';
|
|||
|
|
|||
|
exports.__esModule = true;
|
|||
|
|
|||
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|||
|
|
|||
|
var _lazyResult = require('./lazy-result');
|
|||
|
|
|||
|
var _lazyResult2 = _interopRequireDefault(_lazyResult);
|
|||
|
|
|||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|||
|
|
|||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|||
|
|
|||
|
/**
|
|||
|
* Contains plugins to process CSS. Create one `Processor` instance,
|
|||
|
* initialize its plugins, and then use that instance on numerous CSS files.
|
|||
|
*
|
|||
|
* @example
|
|||
|
* const processor = postcss([autoprefixer, precss]);
|
|||
|
* processor.process(css1).then(result => console.log(result.css));
|
|||
|
* processor.process(css2).then(result => console.log(result.css));
|
|||
|
*/
|
|||
|
var Processor = function () {
|
|||
|
|
|||
|
/**
|
|||
|
* @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS
|
|||
|
* plugins. See {@link Processor#use} for plugin format.
|
|||
|
*/
|
|||
|
function Processor() {
|
|||
|
var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|||
|
|
|||
|
_classCallCheck(this, Processor);
|
|||
|
|
|||
|
/**
|
|||
|
* @member {string} - Current PostCSS version.
|
|||
|
*
|
|||
|
* @example
|
|||
|
* if ( result.processor.version.split('.')[0] !== '6' ) {
|
|||
|
* throw new Error('This plugin works only with PostCSS 6');
|
|||
|
* }
|
|||
|
*/
|
|||
|
this.version = '6.0.23';
|
|||
|
/**
|
|||
|
* @member {pluginFunction[]} - Plugins added to this processor.
|
|||
|
*
|
|||
|
* @example
|
|||
|
* const processor = postcss([autoprefixer, precss]);
|
|||
|
* processor.plugins.length //=> 2
|
|||
|
*/
|
|||
|
this.plugins = this.normalize(plugins);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Adds a plugin to be used as a CSS processor.
|
|||
|
*
|
|||
|
* PostCSS plugin can be in 4 formats:
|
|||
|
* * A plugin created by {@link postcss.plugin} method.
|
|||
|
* * A function. PostCSS will pass the function a @{link Root}
|
|||
|
* as the first argument and current {@link Result} instance
|
|||
|
* as the second.
|
|||
|
* * An object with a `postcss` method. PostCSS will use that method
|
|||
|
* as described in #2.
|
|||
|
* * Another {@link Processor} instance. PostCSS will copy plugins
|
|||
|
* from that instance into this one.
|
|||
|
*
|
|||
|
* Plugins can also be added by passing them as arguments when creating
|
|||
|
* a `postcss` instance (see [`postcss(plugins)`]).
|
|||
|
*
|
|||
|
* Asynchronous plugins should return a `Promise` instance.
|
|||
|
*
|
|||
|
* @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin
|
|||
|
* or {@link Processor}
|
|||
|
* with plugins
|
|||
|
*
|
|||
|
* @example
|
|||
|
* const processor = postcss()
|
|||
|
* .use(autoprefixer)
|
|||
|
* .use(precss);
|
|||
|
*
|
|||
|
* @return {Processes} current processor to make methods chain
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
Processor.prototype.use = function use(plugin) {
|
|||
|
this.plugins = this.plugins.concat(this.normalize([plugin]));
|
|||
|
return this;
|
|||
|
};
|
|||
|
|
|||
|
/**
|
|||
|
* Parses source CSS and returns a {@link LazyResult} Promise proxy.
|
|||
|
* Because some plugins can be asynchronous it doesn’t make
|
|||
|
* any transformations. Transformations will be applied
|
|||
|
* in the {@link LazyResult} methods.
|
|||
|
*
|
|||
|
* @param {string|toString|Result} css - String with input CSS or
|
|||
|
* any object with a `toString()`
|
|||
|
* method, like a Buffer.
|
|||
|
* Optionally, send a {@link Result}
|
|||
|
* instance and the processor will
|
|||
|
* take the {@link Root} from it.
|
|||
|
* @param {processOptions} [opts] - options
|
|||
|
*
|
|||
|
* @return {LazyResult} Promise proxy
|
|||
|
*
|
|||
|
* @example
|
|||
|
* processor.process(css, { from: 'a.css', to: 'a.out.css' })
|
|||
|
* .then(result => {
|
|||
|
* console.log(result.css);
|
|||
|
* });
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
Processor.prototype.process = function process(css) {
|
|||
|
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|||
|
|
|||
|
return new _lazyResult2.default(this, css, opts);
|
|||
|
};
|
|||
|
|
|||
|
Processor.prototype.normalize = function normalize(plugins) {
|
|||
|
var normalized = [];
|
|||
|
for (var _iterator = plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|||
|
var _ref;
|
|||
|
|
|||
|
if (_isArray) {
|
|||
|
if (_i >= _iterator.length) break;
|
|||
|
_ref = _iterator[_i++];
|
|||
|
} else {
|
|||
|
_i = _iterator.next();
|
|||
|
if (_i.done) break;
|
|||
|
_ref = _i.value;
|
|||
|
}
|
|||
|
|
|||
|
var i = _ref;
|
|||
|
|
|||
|
if (i.postcss) i = i.postcss;
|
|||
|
|
|||
|
if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && Array.isArray(i.plugins)) {
|
|||
|
normalized = normalized.concat(i.plugins);
|
|||
|
} else if (typeof i === 'function') {
|
|||
|
normalized.push(i);
|
|||
|
} else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && (i.parse || i.stringify)) {
|
|||
|
throw new Error('PostCSS syntaxes cannot be used as plugins. ' + 'Instead, please use one of the ' + 'syntax/parser/stringifier options as ' + 'outlined in your PostCSS ' + 'runner documentation.');
|
|||
|
} else {
|
|||
|
throw new Error(i + ' is not a PostCSS plugin');
|
|||
|
}
|
|||
|
}
|
|||
|
return normalized;
|
|||
|
};
|
|||
|
|
|||
|
return Processor;
|
|||
|
}();
|
|||
|
|
|||
|
exports.default = Processor;
|
|||
|
|
|||
|
/**
|
|||
|
* @callback builder
|
|||
|
* @param {string} part - part of generated CSS connected to this node
|
|||
|
* @param {Node} node - AST node
|
|||
|
* @param {"start"|"end"} [type] - node’s part type
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @callback parser
|
|||
|
*
|
|||
|
* @param {string|toString} css - string with input CSS or any object
|
|||
|
* with toString() method, like a Buffer
|
|||
|
* @param {processOptions} [opts] - options with only `from` and `map` keys
|
|||
|
*
|
|||
|
* @return {Root} PostCSS AST
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @callback stringifier
|
|||
|
*
|
|||
|
* @param {Node} node - start node for stringifing. Usually {@link Root}.
|
|||
|
* @param {builder} builder - function to concatenate CSS from node’s parts
|
|||
|
* or generate string and source map
|
|||
|
*
|
|||
|
* @return {void}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @typedef {object} syntax
|
|||
|
* @property {parser} parse - function to generate AST by string
|
|||
|
* @property {stringifier} stringify - function to generate string by AST
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @typedef {object} toString
|
|||
|
* @property {function} toString
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @callback pluginFunction
|
|||
|
* @param {Root} root - parsed input CSS
|
|||
|
* @param {Result} result - result to set warnings or check other plugins
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @typedef {object} Plugin
|
|||
|
* @property {function} postcss - PostCSS plugin function
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @typedef {object} processOptions
|
|||
|
* @property {string} from - the path of the CSS source file.
|
|||
|
* You should always set `from`,
|
|||
|
* because it is used in source map
|
|||
|
* generation and syntax error messages.
|
|||
|
* @property {string} to - the path where you’ll put the output
|
|||
|
* CSS file. You should always set `to`
|
|||
|
* to generate correct source maps.
|
|||
|
* @property {parser} parser - function to generate AST by string
|
|||
|
* @property {stringifier} stringifier - class to generate string by AST
|
|||
|
* @property {syntax} syntax - object with `parse` and `stringify`
|
|||
|
* @property {object} map - source map options
|
|||
|
* @property {boolean} map.inline - does source map should
|
|||
|
* be embedded in the output
|
|||
|
* CSS as a base64-encoded
|
|||
|
* comment
|
|||
|
* @property {string|object|false|function} map.prev - source map content
|
|||
|
* from a previous
|
|||
|
* processing step
|
|||
|
* (for example, Sass).
|
|||
|
* PostCSS will try to find
|
|||
|
* previous map
|
|||
|
* automatically, so you
|
|||
|
* could disable it by
|
|||
|
* `false` value.
|
|||
|
* @property {boolean} map.sourcesContent - does PostCSS should set
|
|||
|
* the origin content to map
|
|||
|
* @property {string|false} map.annotation - does PostCSS should set
|
|||
|
* annotation comment to map
|
|||
|
* @property {string} map.from - override `from` in map’s
|
|||
|
* `sources`
|
|||
|
*/
|
|||
|
|
|||
|
module.exports = exports['default'];
|
|||
|
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByb2Nlc3Nvci5lczYiXSwibmFtZXMiOlsiUHJvY2Vzc29yIiwicGx1Z2lucyIsInZlcnNpb24iLCJub3JtYWxpemUiLCJ1c2UiLCJwbHVnaW4iLCJjb25jYXQiLCJwcm9jZXNzIiwiY3NzIiwib3B0cyIsIkxhenlSZXN1bHQiLCJub3JtYWxpemVkIiwiaSIsInBvc3Rjc3MiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7O0FBRUE7Ozs7Ozs7OztJQVNNQSxTOztBQUVGOzs7O0FBSUEsdUJBQTBCO0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUN0Qjs7Ozs7Ozs7QUFRQSxTQUFLQyxPQUFMLEdBQWUsUUFBZjtBQUNBOzs7Ozs7O0FBT0EsU0FBS0QsT0FBTCxHQUFlLEtBQUtFLFNBQUwsQ0FBZUYsT0FBZixDQUFmO0FBQ0g7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JBNkJBRyxHLGdCQUFJQyxNLEVBQVE7QUFDUixTQUFLSixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhSyxNQUFiLENBQW9CLEtBQUtILFNBQUwsQ0FBZSxDQUFDRSxNQUFELENBQWYsQ0FBcEIsQ0FBZjtBQUNBLFdBQU8sSUFBUDtBQUNILEc7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkFzQkFFLE8sb0JBQVFDLEcsRUFBaUI7QUFBQSxRQUFaQyxJQUFZLHVFQUFMLEVBQUs7O0FBQ3JCLFdBQU8sSUFBSUMsb0JBQUosQ0FBZSxJQUFmLEVBQXFCRixHQUFyQixFQUEwQkMsSUFBMUIsQ0FBUDtBQUNILEc7O3NCQUVETixTLHNCQUFVRixPLEVBQVM7QUFDZixRQUFJVSxhQUFhLEVBQWpCO0FBQ0EseUJBQWVWLE9BQWYsa0hBQXlCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxVQUFmVyxDQUFlOztBQUNyQixVQUFLQSxFQUFFQyxPQUFQLEVBQWlCRCxJQUFJQSxFQUFFQyxPQUFOOztBQUVqQixVQUFLLFFBQU9ELENBQVAseUNBQU9BLENBQVAsT0FBYSxRQUFiLElBQXlCRSxNQUFNQyxPQUFOLENBQWNILEVBQUVYLE9BQWhCLENBQTlCLEVBQXlEO0FBQ3JEVSxxQkFBYUEsV0FBV0wsTUFBWCxDQUFrQk0sRUFBRVgsT0FBcEIsQ0FBYjtBQUNILE9BRkQsTUFFTyxJQUFLLE9BQU9XLENBQVAsS0FBYSxVQUFsQixFQUErQjtBQUNsQ0QsbUJBQVdLLElBQVgsQ0FBZ0JKLENBQWhCO0FBQ0gsT0FGTSxNQUVBLElBQUssUUFBT0EsQ0FBUCx5Q0FBT0EsQ0FBUCxPQUFhLFFBQWIsS0FBMEJBLEVBQUVLLEtBQUYsSUFBV0wsRUFBRU0sU0FBdkMsQ0FBTCxFQUF5RDtBQUM1RCxjQUFNLElBQUlDLEtBQUosQ0FBVSxpREFDQSxpQ0FEQSxHQUVBLHVDQUZBLEdBR0EsMkJBSEEsR0FJQSx1QkFKVixDQUFOO0FBS0gsT0FOTSxNQU1BO0FBQ0gsY0FBTSxJQUFJQSxLQUFKLENBQVVQLElBQUksMEJBQWQsQ0FBTjtBQUNIO0FBQ0o7QUFDRCxXQUFPRCxVQUFQO0FBQ0gsRzs7Ozs7a0JBSVVYLFM7O0FBRWY7Ozs7Ozs7QUFPQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7O0FBVUE7Ozs7OztBQU1BOzs7OztBQUtBOzs7Ozs7QUFNQTs7Ozs7QUFLQSIsImZpbGUiOiJwcm9jZXNzb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTGF6eVJlc3VsdCBmcm9tICcuL2xhenktcmVzdWx0JztcblxuLyoqXG4gKiBDb250YWlucyBwbHVnaW5zIHRvIHByb2Nlc3MgQ1NTLiBDcmVhdGUgb25lIGBQcm9jZXNzb3JgIGluc3RhbmNlLFxuICogaW5pdGlhbGl6ZSBpdHMgcGx1Z2lucywgYW5kIHRoZW4gdXNlIHRoYXQgaW5zdGFuY2Ugb24gbnVtZXJvdXMgQ1NTIGZpbGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9jZXNzb3IgPSBwb3N0Y3NzKFthdXRvcHJlZml4ZXIsIHByZWNzc10pO1xuICogcHJvY2Vzc29yLnByb2Nlc3MoY3NzMSkudGhlbihyZXN1bHQgPT4gY29uc29sZS5sb2cocmVzdWx0LmNzcykpO1xuICogcHJvY2Vzc29yLnByb2Nlc3MoY3NzMikudGhlbihyZXN1bHQgPT4gY29uc29sZS5sb2cocmVzdWx0LmNzcykpO1xuICovXG5jbGFzcyBQcm9jZXNzb3Ige1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtBcnJheS48UGx1Z2lufHBsdWdpbkZ1bmN0aW9uPnxQcm9jZXNzb3J9IHBsdWdpbnMgLSBQb3N0Q1NTXG4gICAgICogICAgICAgIHBsdWdpbnMuIFNlZSB7QGxpbmsgUHJvY2Vzc29yI3VzZX0gZm9yIHBsdWdpbiBmb3JtYXQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGx1Z2lucyA9IFtdKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gQ3VycmVudCBQb3N0Q1NTIHZlcnNpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGlmICggcmVzdWx0LnByb2Nlc3Nvci52ZXJzaW9uLnNwbGl0KCcuJylbMF0gIT09ICc2JyApIHtcbiAgICAgICAgICogICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgcGx1Z2luIHdvcmtzIG9ubHkgd2l0aCBQb3N0Q1NTIDYnKTtcbiAgICAgICAgICogfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gJzYuMC4yMyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtwbHVnaW5GdW5jdGlvbltdfSAtIFBsdWdpbnMgYWRkZWQgdG8gdGhpcyBwcm9jZXNzb3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGNvbnN0IHByb2Nlc3NvciA9IHBvc3Rjc3MoW2F1dG9wcmVmaXhlciwgcHJlY3NzXSk7XG4gICAgICAgICAqIHByb2Nlc3Nvci5wbHVnaW5zLmxlbmd0aCAvLz0+IDJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYmUgdXNlZCBhcyBhIENTUyBwcm9jZXNzb3IuXG4gICAgICpcbiAgICAgKiBQb3N0Q1NTIHBsdWdpbiBjYW4gYmUgaW4gNCBmb3JtYXRzOlxuICAgICAqICogQSBwbHVnaW4gY3JlYXRlZCBieSB7QGxpbmsgcG9zdGNzcy5wbHVnaW59IG1ldGhvZC5cbiAgICAgKiAqIEEgZnVuY3Rpb24uIFBvc3RDU1Mgd2lsbCBwYXNzIHRo
|