root.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _container = require('./container');
  4. var _container2 = _interopRequireDefault(_container);
  5. var _warnOnce = require('./warn-once');
  6. var _warnOnce2 = _interopRequireDefault(_warnOnce);
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  9. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  10. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  11. /**
  12. * Represents a CSS file and contains all its parsed nodes.
  13. *
  14. * @extends Container
  15. *
  16. * @example
  17. * const root = postcss.parse('a{color:black} b{z-index:2}');
  18. * root.type //=> 'root'
  19. * root.nodes.length //=> 2
  20. */
  21. var Root = function (_Container) {
  22. _inherits(Root, _Container);
  23. function Root(defaults) {
  24. _classCallCheck(this, Root);
  25. var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));
  26. _this.type = 'root';
  27. if (!_this.nodes) _this.nodes = [];
  28. return _this;
  29. }
  30. Root.prototype.removeChild = function removeChild(child) {
  31. child = this.index(child);
  32. if (child === 0 && this.nodes.length > 1) {
  33. this.nodes[1].raws.before = this.nodes[child].raws.before;
  34. }
  35. return _Container.prototype.removeChild.call(this, child);
  36. };
  37. Root.prototype.normalize = function normalize(child, sample, type) {
  38. var nodes = _Container.prototype.normalize.call(this, child);
  39. if (sample) {
  40. if (type === 'prepend') {
  41. if (this.nodes.length > 1) {
  42. sample.raws.before = this.nodes[1].raws.before;
  43. } else {
  44. delete sample.raws.before;
  45. }
  46. } else if (this.first !== sample) {
  47. for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
  48. var _ref;
  49. if (_isArray) {
  50. if (_i >= _iterator.length) break;
  51. _ref = _iterator[_i++];
  52. } else {
  53. _i = _iterator.next();
  54. if (_i.done) break;
  55. _ref = _i.value;
  56. }
  57. var node = _ref;
  58. node.raws.before = sample.raws.before;
  59. }
  60. }
  61. }
  62. return nodes;
  63. };
  64. /**
  65. * Returns a {@link Result} instance representing the root’s CSS.
  66. *
  67. * @param {processOptions} [opts] - options with only `to` and `map` keys
  68. *
  69. * @return {Result} result with current root’s CSS
  70. *
  71. * @example
  72. * const root1 = postcss.parse(css1, { from: 'a.css' });
  73. * const root2 = postcss.parse(css2, { from: 'b.css' });
  74. * root1.append(root2);
  75. * const result = root1.toResult({ to: 'all.css', map: true });
  76. */
  77. Root.prototype.toResult = function toResult() {
  78. var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  79. var LazyResult = require('./lazy-result');
  80. var Processor = require('./processor');
  81. var lazy = new LazyResult(new Processor(), this, opts);
  82. return lazy.stringify();
  83. };
  84. Root.prototype.remove = function remove(child) {
  85. (0, _warnOnce2.default)('Root#remove is deprecated. Use Root#removeChild');
  86. this.removeChild(child);
  87. };
  88. Root.prototype.prevMap = function prevMap() {
  89. (0, _warnOnce2.default)('Root#prevMap is deprecated. Use Root#source.input.map');
  90. return this.source.input.map;
  91. };
  92. /**
  93. * @memberof Root#
  94. * @member {object} raws - Information to generate byte-to-byte equal
  95. * node string as it was in the origin input.
  96. *
  97. * Every parser saves its own properties,
  98. * but the default CSS parser uses:
  99. *
  100. * * `after`: the space symbols after the last child to the end of file.
  101. * * `semicolon`: is the last child has an (optional) semicolon.
  102. *
  103. * @example
  104. * postcss.parse('a {}\n').raws //=> { after: '\n' }
  105. * postcss.parse('a {}').raws //=> { after: '' }
  106. */
  107. return Root;
  108. }(_container2.default);
  109. exports.default = Root;
  110. module.exports = exports['default'];
  111. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9saWIvcm9vdC5lczYiXSwibmFtZXMiOlsiUm9vdCIsImRlZmF1bHRzIiwidHlwZSIsIm5vZGVzIiwicmVtb3ZlQ2hpbGQiLCJjaGlsZCIsImluZGV4IiwibGVuZ3RoIiwicmF3cyIsImJlZm9yZSIsIm5vcm1hbGl6ZSIsInNhbXBsZSIsImZpcnN0Iiwibm9kZSIsInRvUmVzdWx0Iiwib3B0cyIsIkxhenlSZXN1bHQiLCJyZXF1aXJlIiwiUHJvY2Vzc29yIiwibGF6eSIsInN0cmluZ2lmeSIsInJlbW92ZSIsInByZXZNYXAiLCJzb3VyY2UiLCJpbnB1dCIsIm1hcCJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7O0lBVU1BLEk7OztBQUVGLGtCQUFZQyxRQUFaLEVBQXNCO0FBQUE7O0FBQUEscURBQ2xCLHNCQUFNQSxRQUFOLENBRGtCOztBQUVsQixjQUFLQyxJQUFMLEdBQVksTUFBWjtBQUNBLFlBQUssQ0FBQyxNQUFLQyxLQUFYLEVBQW1CLE1BQUtBLEtBQUwsR0FBYSxFQUFiO0FBSEQ7QUFJckI7O21CQUVEQyxXLHdCQUFZQyxLLEVBQU87QUFDZkEsZ0JBQVEsS0FBS0MsS0FBTCxDQUFXRCxLQUFYLENBQVI7O0FBRUEsWUFBS0EsVUFBVSxDQUFWLElBQWUsS0FBS0YsS0FBTCxDQUFXSSxNQUFYLEdBQW9CLENBQXhDLEVBQTRDO0FBQ3hDLGlCQUFLSixLQUFMLENBQVcsQ0FBWCxFQUFjSyxJQUFkLENBQW1CQyxNQUFuQixHQUE0QixLQUFLTixLQUFMLENBQVdFLEtBQVgsRUFBa0JHLElBQWxCLENBQXVCQyxNQUFuRDtBQUNIOztBQUVELGVBQU8scUJBQU1MLFdBQU4sWUFBa0JDLEtBQWxCLENBQVA7QUFDSCxLOzttQkFFREssUyxzQkFBVUwsSyxFQUFPTSxNLEVBQVFULEksRUFBTTtBQUMzQixZQUFJQyxRQUFRLHFCQUFNTyxTQUFOLFlBQWdCTCxLQUFoQixDQUFaOztBQUVBLFlBQUtNLE1BQUwsRUFBYztBQUNWLGdCQUFLVCxTQUFTLFNBQWQsRUFBMEI7QUFDdEIsb0JBQUssS0FBS0MsS0FBTCxDQUFXSSxNQUFYLEdBQW9CLENBQXpCLEVBQTZCO0FBQ3pCSSwyQkFBT0gsSUFBUCxDQUFZQyxNQUFaLEdBQXFCLEtBQUtOLEtBQUwsQ0FBVyxDQUFYLEVBQWNLLElBQWQsQ0FBbUJDLE1BQXhDO0FBQ0gsaUJBRkQsTUFFTztBQUNILDJCQUFPRSxPQUFPSCxJQUFQLENBQVlDLE1BQW5CO0FBQ0g7QUFDSixhQU5ELE1BTU8sSUFBSyxLQUFLRyxLQUFMLEtBQWVELE1BQXBCLEVBQTZCO0FBQ2hDLHFDQUFrQlIsS0FBbEIsa0hBQTBCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSx3QkFBaEJVLElBQWdCOztBQUN0QkEseUJBQUtMLElBQUwsQ0FBVUMsTUFBVixHQUFtQkUsT0FBT0gsSUFBUCxDQUFZQyxNQUEvQjtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxlQUFPTixLQUFQO0FBQ0gsSzs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O21CQWFBVyxRLHVCQUFxQjtBQUFBLFlBQVpDLElBQVksdUVBQUwsRUFBSzs7QUFDakIsWUFBSUMsYUFBYUMsUUFBUSxlQUFSLENBQWpCO0FBQ0EsWUFBSUMsWUFBYUQsUUFBUSxhQUFSLENBQWpCOztBQUVBLFlBQUlFLE9BQU8sSUFBSUgsVUFBSixDQUFlLElBQUlFLFNBQUosRUFBZixFQUFnQyxJQUFoQyxFQUFzQ0gsSUFBdEMsQ0FBWDtBQUNBLGVBQU9JLEtBQUtDLFNBQUwsRUFBUDtBQUNILEs7O21CQUVEQyxNLG1CQUFPaEIsSyxFQUFPO0FBQ1YsZ0NBQVMsaURBQVQ7QUFDQSxhQUFLRCxXQUFMLENBQWlCQyxLQUFqQjtBQUNILEs7O21CQUVEaUIsTyxzQkFBVTtBQUNOLGdDQUFTLHVEQUFUO0FBQ0EsZUFBTyxLQUFLQyxNQUFMLENBQVlDLEtBQVosQ0FBa0JDLEdBQXpCO0FBQ0gsSzs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFrQld6QixJIiwiZmlsZSI6InJvb3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCB3YXJuT25jZSAgZnJvbSAnLi93YXJuLW9uY2UnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBDU1MgZmlsZSBhbmQgY29udGFpbnMgYWxsIGl0cyBwYXJzZWQgbm9kZXMuXG4gKlxuICogQGV4dGVuZHMgQ29udGFpbmVyXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhe2NvbG9yOmJsYWNrfSBie3otaW5kZXg6Mn0nKTtcbiAqIHJvb3QudHlwZSAgICAgICAgIC8vPT4gJ3Jvb3QnXG4gKiByb290Lm5vZGVzLmxlbmd0aCAvLz0+IDJcbiAqL1xuY2xhc3MgUm9vdCBleHRlbmRzIENvbnRhaW5lciB7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0cykge1xuICAgICAgICBzdXBlcihkZWZhdWx0cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdyb290JztcbiAgICAgICAgaWYgKCAhdGhpcy5ub2RlcyApIHRoaXMubm9kZXMgPSBbXTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChjaGlsZCkge1xuICAgICAgICBjaGlsZCA9IHRoaXMuaW5kZXgoY2hpbGQpO1xuXG4gICAgICAgIGlmICggY2hpbGQgPT09IDAgJiYgdGhpcy5ub2Rlcy5sZW5ndGggPiAxICkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlc1sxXS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbY2hpbGRdLnJhd3MuYmVmb3JlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemUoY2hpbGQsIHNhbXBsZSwgdHlwZSkge1xuICAgICAgICBsZXQgbm9kZXMgPSBzdXBlci5ub3JtYWxpemUoY2hpbGQpO1xuXG4gICAgICAgIGlmICggc2FtcGxlICkge1xuICAgICAgICAgICAgaWYgKCB0eXBlID09PSAncHJlcGVuZCcgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVzLmxlbmd0aCA+IDEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbMV0ucmF3cy5iZWZvcmU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNhbXBsZS5yYXdzLmJlZm9yZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmZpcnN0ICE9PSBzYW1wbGUgKSB7XG4gICAgICAgICAgICAgICAgZm9yICggbGV0IG5vZGUgb2Ygbm9kZXMgKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmF3cy5iZWZvcmUgPSBzYW1wbGUucmF3cy5iZWZvcmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmVzdWx0fSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHJvb3TigJlzIENTUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSAtIG9wdGlvbnMgd2l0aCBvbmx5IGB0b2AgYW5kIGBtYXBgIGtleXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1Jlc3VsdH0gcmVzdWx0IHdpdGggY3VycmVudCByb2904oCZcyBDU1NcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm9vdDEgPSBwb3N0Y3NzLnBhcnNlKGNzczEsIHsgZnJvbTogJ2EuY3NzJyB9KTtcbiAgICAgKiBjb25zdCByb290MiA9IHBvc3Rjc3MucGFyc2UoY3NzMiwgeyBmcm9tOiAnYi5jc3MnIH0pO1xuICAgICAqIHJvb3QxLmFwcGVuZChyb290Mik7XG4gICAgICogY29uc3QgcmVzdWx0ID0gcm9vdDEudG9SZXN1bHQoeyB0bzogJ2FsbC5jc3MnLCBtYXA6IHRydWUgfSk7XG4gICAgICovXG4gICAgdG9SZXN1bHQob3B0cyA9IHsgfSkge1xuICAgICAgICBsZXQgTGF6eVJlc3VsdCA9IHJlcXVpcmUoJy4vbGF6eS1yZXN1bHQnKTtcbiAgICAgICAgbGV0IFByb2Nlc3NvciAgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcicpO1xuXG4gICAgICAgIGxldCBsYXp5ID0gbmV3IExhenlSZXN1bHQobmV3IFByb2Nlc3NvcigpLCB0aGlzLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIGxhenkuc3RyaW5naWZ5KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGNoaWxkKSB7XG4gICAgICAgIHdhcm5PbmNlKCdSb290I3JlbW92ZSBpcyBkZXByZWNhdGVkLiBVc2UgUm9vdCNyZW1vdmVDaGlsZCcpO1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG5cbiAgICBwcmV2TWFwKCkge1xuICAgICAgICB3YXJuT25jZSgnUm9vdCNwcmV2TWFwIGlzIGRlcHJlY2F0ZWQuIFVzZSBSb290I3NvdXJjZS5pbnB1dC5tYXAnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlLmlucHV0Lm1hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgUm9vdCNcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgLSBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICAgKlxuICAgICAqIEV2ZXJ5IHBhcnNlciBzYXZlcyBpdHMgb3duIHByb3BlcnRpZXMsXG4gICAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICAgKlxuICAgICAqICogYGFmdGVyYDogdGhlIHNwYWNlIHN5bWJvbHMgYWZ0ZXIgdGhlIGxhc3QgY2hpbGQgdG8gdGhlIGVuZCBvZiBmaWxlLlxuICAgICAqICogYHNlbWljb2xvbmA6IGlzIHRoZSBsYXN0IGNoaWxkIGhhcyBhbiAob3B0aW9uYWwpIHNlbWljb2xvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcy5wYXJzZSgnYSB7fVxcbicpLnJhd3MgLy89PiB7IGFmdGVyOiAnXFxuJyB9XG4gICAgICogcG9zdGNzcy5wYXJzZSgnYSB7fScpLnJhd3MgICAvLz0+IHsgYWZ0ZXI6ICcnIH1cbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBSb290O1xuIl19