205 lines
18 KiB
JavaScript
205 lines
18 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||
|
|
||
|
var _cssSyntaxError = require('./css-syntax-error');
|
||
|
|
||
|
var _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);
|
||
|
|
||
|
var _previousMap = require('./previous-map');
|
||
|
|
||
|
var _previousMap2 = _interopRequireDefault(_previousMap);
|
||
|
|
||
|
var _path = require('path');
|
||
|
|
||
|
var _path2 = _interopRequireDefault(_path);
|
||
|
|
||
|
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"); } }
|
||
|
|
||
|
var sequence = 0;
|
||
|
|
||
|
/**
|
||
|
* Represents the source CSS.
|
||
|
*
|
||
|
* @example
|
||
|
* const root = postcss.parse(css, { from: file });
|
||
|
* const input = root.source.input;
|
||
|
*/
|
||
|
|
||
|
var Input = function () {
|
||
|
|
||
|
/**
|
||
|
* @param {string} css - input CSS source
|
||
|
* @param {object} [opts] - {@link Processor#process} options
|
||
|
*/
|
||
|
function Input(css) {
|
||
|
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||
|
|
||
|
_classCallCheck(this, Input);
|
||
|
|
||
|
if (css === null || (typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && !css.toString) {
|
||
|
throw new Error('PostCSS received ' + css + ' instead of CSS string');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @member {string} - input CSS source
|
||
|
*
|
||
|
* @example
|
||
|
* const input = postcss.parse('a{}', { from: file }).input;
|
||
|
* input.css //=> "a{}";
|
||
|
*/
|
||
|
this.css = css.toString();
|
||
|
|
||
|
if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
|
||
|
this.css = this.css.slice(1);
|
||
|
}
|
||
|
|
||
|
if (opts.from) {
|
||
|
if (/^\w+:\/\//.test(opts.from)) {
|
||
|
/**
|
||
|
* @member {string} - The absolute path to the CSS source file
|
||
|
* defined with the `from` option.
|
||
|
*
|
||
|
* @example
|
||
|
* const root = postcss.parse(css, { from: 'a.css' });
|
||
|
* root.source.input.file //=> '/home/ai/a.css'
|
||
|
*/
|
||
|
this.file = opts.from;
|
||
|
} else {
|
||
|
this.file = _path2.default.resolve(opts.from);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var map = new _previousMap2.default(this.css, opts);
|
||
|
if (map.text) {
|
||
|
/**
|
||
|
* @member {PreviousMap} - The input source map passed from
|
||
|
* a compilation step before PostCSS
|
||
|
* (for example, from Sass compiler).
|
||
|
*
|
||
|
* @example
|
||
|
* root.source.input.map.consumer().sources //=> ['a.sass']
|
||
|
*/
|
||
|
this.map = map;
|
||
|
var file = map.consumer().file;
|
||
|
if (!this.file && file) this.file = this.mapResolve(file);
|
||
|
}
|
||
|
|
||
|
if (!this.file) {
|
||
|
sequence += 1;
|
||
|
/**
|
||
|
* @member {string} - The unique ID of the CSS source. It will be
|
||
|
* created if `from` option is not provided
|
||
|
* (because PostCSS does not know the file path).
|
||
|
*
|
||
|
* @example
|
||
|
* const root = postcss.parse(css);
|
||
|
* root.source.input.file //=> undefined
|
||
|
* root.source.input.id //=> "<input css 1>"
|
||
|
*/
|
||
|
this.id = '<input css ' + sequence + '>';
|
||
|
}
|
||
|
if (this.map) this.map.file = this.from;
|
||
|
}
|
||
|
|
||
|
Input.prototype.error = function error(message, line, column) {
|
||
|
var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
||
|
|
||
|
var result = void 0;
|
||
|
var origin = this.origin(line, column);
|
||
|
if (origin) {
|
||
|
result = new _cssSyntaxError2.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);
|
||
|
} else {
|
||
|
result = new _cssSyntaxError2.default(message, line, column, this.css, this.file, opts.plugin);
|
||
|
}
|
||
|
|
||
|
result.input = { line: line, column: column, source: this.css };
|
||
|
if (this.file) result.input.file = this.file;
|
||
|
|
||
|
return result;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Reads the input source map and returns a symbol position
|
||
|
* in the input source (e.g., in a Sass file that was compiled
|
||
|
* to CSS before being passed to PostCSS).
|
||
|
*
|
||
|
* @param {number} line - line in input CSS
|
||
|
* @param {number} column - column in input CSS
|
||
|
*
|
||
|
* @return {filePosition} position in input source
|
||
|
*
|
||
|
* @example
|
||
|
* root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
|
||
|
*/
|
||
|
|
||
|
|
||
|
Input.prototype.origin = function origin(line, column) {
|
||
|
if (!this.map) return false;
|
||
|
var consumer = this.map.consumer();
|
||
|
|
||
|
var from = consumer.originalPositionFor({ line: line, column: column });
|
||
|
if (!from.source) return false;
|
||
|
|
||
|
var result = {
|
||
|
file: this.mapResolve(from.source),
|
||
|
line: from.line,
|
||
|
column: from.column
|
||
|
};
|
||
|
|
||
|
var source = consumer.sourceContentFor(from.source);
|
||
|
if (source) result.source = source;
|
||
|
|
||
|
return result;
|
||
|
};
|
||
|
|
||
|
Input.prototype.mapResolve = function mapResolve(file) {
|
||
|
if (/^\w+:\/\//.test(file)) {
|
||
|
return file;
|
||
|
} else {
|
||
|
return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* The CSS source identifier. Contains {@link Input#file} if the user
|
||
|
* set the `from` option, or {@link Input#id} if they did not.
|
||
|
* @type {string}
|
||
|
*
|
||
|
* @example
|
||
|
* const root = postcss.parse(css, { from: 'a.css' });
|
||
|
* root.source.input.from //=> "/home/ai/a.css"
|
||
|
*
|
||
|
* const root = postcss.parse(css);
|
||
|
* root.source.input.from //=> "<input css 1>"
|
||
|
*/
|
||
|
|
||
|
|
||
|
_createClass(Input, [{
|
||
|
key: 'from',
|
||
|
get: function get() {
|
||
|
return this.file || this.id;
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return Input;
|
||
|
}();
|
||
|
|
||
|
exports.default = Input;
|
||
|
|
||
|
/**
|
||
|
* @typedef {object} filePosition
|
||
|
* @property {string} file - path to file
|
||
|
* @property {number} line - source line in file
|
||
|
* @property {number} column - source column in file
|
||
|
*/
|
||
|
|
||
|
module.exports = exports['default'];
|
||
|
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmVzNiJdLCJuYW1lcyI6WyJzZXF1ZW5jZSIsIklucHV0IiwiY3NzIiwib3B0cyIsInRvU3RyaW5nIiwiRXJyb3IiLCJzbGljZSIsImZyb20iLCJ0ZXN0IiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwibWFwIiwiUHJldmlvdXNNYXAiLCJ0ZXh0IiwiY29uc3VtZXIiLCJtYXBSZXNvbHZlIiwiaWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJsaW5lIiwiY29sdW1uIiwicmVzdWx0Iiwib3JpZ2luIiwiQ3NzU3ludGF4RXJyb3IiLCJzb3VyY2UiLCJwbHVnaW4iLCJpbnB1dCIsIm9yaWdpbmFsUG9zaXRpb25Gb3IiLCJzb3VyY2VDb250ZW50Rm9yIiwic291cmNlUm9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBRUE7Ozs7Ozs7O0FBRUEsSUFBSUEsV0FBVyxDQUFmOztBQUVBOzs7Ozs7OztJQU9NQyxLOztBQUVGOzs7O0FBSUEsbUJBQVlDLEdBQVosRUFBNkI7QUFBQSxZQUFaQyxJQUFZLHVFQUFMLEVBQUs7O0FBQUE7O0FBQ3pCLFlBQUtELFFBQVEsSUFBUixJQUFnQixRQUFPQSxHQUFQLHlDQUFPQSxHQUFQLE9BQWUsUUFBZixJQUEyQixDQUFDQSxJQUFJRSxRQUFyRCxFQUFnRTtBQUM1RCxrQkFBTSxJQUFJQyxLQUFKLHVCQUErQkgsR0FBL0IsNEJBQU47QUFDSDs7QUFFRDs7Ozs7OztBQU9BLGFBQUtBLEdBQUwsR0FBV0EsSUFBSUUsUUFBSixFQUFYOztBQUVBLFlBQUssS0FBS0YsR0FBTCxDQUFTLENBQVQsTUFBZ0IsUUFBaEIsSUFBNEIsS0FBS0EsR0FBTCxDQUFTLENBQVQsTUFBZ0IsUUFBakQsRUFBNEQ7QUFDeEQsaUJBQUtBLEdBQUwsR0FBVyxLQUFLQSxHQUFMLENBQVNJLEtBQVQsQ0FBZSxDQUFmLENBQVg7QUFDSDs7QUFFRCxZQUFLSCxLQUFLSSxJQUFWLEVBQWlCO0FBQ2IsZ0JBQUssWUFBWUMsSUFBWixDQUFpQkwsS0FBS0ksSUFBdEIsQ0FBTCxFQUFtQztBQUMvQjs7Ozs7Ozs7QUFRQSxxQkFBS0UsSUFBTCxHQUFZTixLQUFLSSxJQUFqQjtBQUNILGFBVkQsTUFVTztBQUNILHFCQUFLRSxJQUFMLEdBQVlDLGVBQUtDLE9BQUwsQ0FBYVIsS0FBS0ksSUFBbEIsQ0FBWjtBQUNIO0FBQ0o7O0FBRUQsWUFBSUssTUFBTSxJQUFJQyxxQkFBSixDQUFnQixLQUFLWCxHQUFyQixFQUEwQkMsSUFBMUIsQ0FBVjtBQUNBLFlBQUtTLElBQUlFLElBQVQsRUFBZ0I7QUFDWjs7Ozs7Ozs7QUFRQSxpQkFBS0YsR0FBTCxHQUFXQSxHQUFYO0FBQ0EsZ0JBQUlILE9BQU9HLElBQUlHLFFBQUosR0FBZU4sSUFBMUI7QUFDQSxnQkFBSyxDQUFDLEtBQUtBLElBQU4sSUFBY0EsSUFBbkIsRUFBMEIsS0FBS0EsSUFBTCxHQUFZLEtBQUtPLFVBQUwsQ0FBZ0JQLElBQWhCLENBQVo7QUFDN0I7O0FBRUQsWUFBSyxDQUFDLEtBQUtBLElBQVgsRUFBa0I7QUFDZFQsd0JBQVksQ0FBWjtBQUNBOzs7Ozs7Ozs7O0FBVUEsaUJBQUtpQixFQUFMLEdBQVksZ0JBQWdCakIsUUFBaEIsR0FBMkIsR0FBdkM7QUFDSDtBQUNELFlBQUssS0FBS1ksR0FBVixFQUFnQixLQUFLQSxHQUFMLENBQVNILElBQVQsR0FBZ0IsS0FBS0YsSUFBckI7QUFDbkI7O29CQUVEVyxLLGtCQUFNQyxPLEVBQVNDLEksRUFBTUMsTSxFQUFvQjtBQUFBLFlBQVpsQixJQUFZLHVFQUFMLEVBQUs7O0FBQ3JDLFlBQUltQixlQUFKO0FBQ0EsWUFBSUMsU0FBUyxLQUFLQSxNQUFMLENBQVlILElBQVosRUFBa0JDLE1BQWxCLENBQWI7QUFDQSxZQUFLRSxNQUFMLEVBQWM7QUFDVkQscUJBQVMsSUFBSUUsd0JBQUosQ0FBbUJMLE9BQW5CLEVBQTRCSSxPQUFPSCxJQUFuQyxFQUF5Q0csT0FBT0YsTUFBaEQsRUFDTEUsT0FBT0UsTUFERixFQUNVRixPQUFPZCxJQURqQixFQUN1Qk4sS0FBS3VCLE1BRDVCLENBQVQ7QUFFSCxTQUhELE1BR087QUFDSEoscUJBQVMsSUFBSUUsd0JBQUosQ0FBbUJMLE9BQW5CLEVBQTRCQyxJQUE1QixFQUFrQ0MsTUFBbEMsRUFDTCxLQUFLbkIsR0FEQSxFQUNLLEtBQUtPLElBRFYsRUFDZ0JOLEtBQUt1QixNQURyQixDQUFUO0FBRUg7O0FBRURKLGVBQU9LLEtBQVAsR0FBZSxFQUFFUCxVQUFGLEVBQVFDLGNBQVIsRUFBZ0JJLFFBQVEsS0FBS3ZCLEdBQTdCLEVBQWY7QUFDQSxZQUFLLEtBQUtPLElBQVYsRUFBaUJhLE9BQU9LLEtBQVAsQ0FBYWxCLElBQWIsR0FBb0IsS0FBS0EsSUFBekI7O0FBRWpCLGVBQU9hLE1BQVA7QUFDSCxLOztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7b0JBYUFDLE0sbUJBQU9ILEksRUFBTUMsTSxFQUFRO0FBQ2pCLFlBQUssQ0FBQyxLQUFLVCxHQUFYLEVBQWlCLE9BQU8sS0FBUDtBQUNqQixZQUFJRyxXQUFXLEtBQUtILEdBQUwsQ0FBU0csUUFBVCxFQUFmOztBQUVBLFlBQUlSLE9BQU9RLFNBQVNhLG1CQUFULENBQTZCLEVBQUVSLFVBQUYsRUFBUUMsY0FBUixFQUE3QixDQUFYO0FBQ0EsWUFBSyxDQUFDZCxLQUFLa0IsTUFBWCxFQUFvQixPQUFPLEtBQVA7O0FBRXBCLFlBQUlILFNBQVM7QUFDVGIsa0JBQVEsS0FBS08sVUFBTCxDQUFnQlQsS0FBS2tCLE1BQXJCLENBREM7QUFFVEwsa0JBQVFiLEtBQUthLElBRko7QUFHVEMsb0JBQVFkLEtBQUtjO0FBSEosU0FBYjs7QUFNQSxZQUFJSSxTQUFTVixTQUFTYyxnQkFBVCxDQUEwQnRCLEtBQUtrQixNQUEvQixDQUFiO0FBQ0EsWUFBS0EsTUFBTCxFQUFjSCxPQUFPRyxNQUFQLEdBQWdCQSxNQUFoQjs7QUFFZCxlQUFPSCxNQUFQO0FBQ0gsSzs7b0JBRUROLFUsdUJBQVdQLEksRUFBTTtBQUNiLFlBQUssWUFBWUQsSUFBWixDQUFpQkMsSUFBakIsQ0FBTCxFQUE4QjtBQUMxQixtQkFBT0EsSUFBUDtBQUNILFNBRkQsTUFFTztBQUNILG1CQUFPQyxlQUFLQyxPQUFMLENBQWEsS0FBS0MsR0FBTCxDQUFTRyxRQUFULEdBQW9CZSxVQUFwQixJQUFrQyxHQUEvQyxFQUFvRHJCLElBQXBELENBQVA7QUFDSDtBQUNKLEs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBWVc7QUFDUCxtQkFBTyxLQUFLQSxJQUFMLElBQWEsS0FBS1EsRUFBekI7QUFDSDs7Ozs7O2tCQUlVaEIsSzs7QUFFZiIsImZpbGUiOiJpbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NTeW50YXhFcnJvciBmcm9tICcuL2Nzcy1zeW50YXgtZXJyb3InO1xuaW1wb3J0IFBy
|