warning.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. 'use strict';
  2. exports.__esModule = true;
  3. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  4. /**
  5. * Represents a plugin’s warning. It can be created using {@link Node#warn}.
  6. *
  7. * @example
  8. * if ( decl.important ) {
  9. * decl.warn(result, 'Avoid !important', { word: '!important' });
  10. * }
  11. */
  12. var Warning = function () {
  13. /**
  14. * @param {string} text - warning message
  15. * @param {Object} [opts] - warning options
  16. * @param {Node} opts.node - CSS node that caused the warning
  17. * @param {string} opts.word - word in CSS source that caused the warning
  18. * @param {number} opts.index - index in CSS node string that caused
  19. * the warning
  20. * @param {string} opts.plugin - name of the plugin that created
  21. * this warning. {@link Result#warn} fills
  22. * this property automatically.
  23. */
  24. function Warning(text) {
  25. var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  26. _classCallCheck(this, Warning);
  27. /**
  28. * @member {string} - Type to filter warnings from
  29. * {@link Result#messages}. Always equal
  30. * to `"warning"`.
  31. *
  32. * @example
  33. * const nonWarning = result.messages.filter(i => i.type !== 'warning')
  34. */
  35. this.type = 'warning';
  36. /**
  37. * @member {string} - The warning message.
  38. *
  39. * @example
  40. * warning.text //=> 'Try to avoid !important'
  41. */
  42. this.text = text;
  43. if (opts.node && opts.node.source) {
  44. var pos = opts.node.positionBy(opts);
  45. /**
  46. * @member {number} - Line in the input file
  47. * with this warning’s source
  48. *
  49. * @example
  50. * warning.line //=> 5
  51. */
  52. this.line = pos.line;
  53. /**
  54. * @member {number} - Column in the input file
  55. * with this warning’s source.
  56. *
  57. * @example
  58. * warning.column //=> 6
  59. */
  60. this.column = pos.column;
  61. }
  62. for (var opt in opts) {
  63. this[opt] = opts[opt];
  64. }
  65. }
  66. /**
  67. * Returns a warning position and message.
  68. *
  69. * @example
  70. * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'
  71. *
  72. * @return {string} warning position and message
  73. */
  74. Warning.prototype.toString = function toString() {
  75. if (this.node) {
  76. return this.node.error(this.text, {
  77. plugin: this.plugin,
  78. index: this.index,
  79. word: this.word
  80. }).message;
  81. } else if (this.plugin) {
  82. return this.plugin + ': ' + this.text;
  83. } else {
  84. return this.text;
  85. }
  86. };
  87. /**
  88. * @memberof Warning#
  89. * @member {string} plugin - The name of the plugin that created
  90. * it will fill this property automatically.
  91. * this warning. When you call {@link Node#warn}
  92. *
  93. * @example
  94. * warning.plugin //=> 'postcss-important'
  95. */
  96. /**
  97. * @memberof Warning#
  98. * @member {Node} node - Contains the CSS node that caused the warning.
  99. *
  100. * @example
  101. * warning.node.toString() //=> 'color: white !important'
  102. */
  103. return Warning;
  104. }();
  105. exports.default = Warning;
  106. module.exports = exports['default'];
  107. //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9saWIvd2FybmluZy5lczYiXSwibmFtZXMiOlsiV2FybmluZyIsInRleHQiLCJvcHRzIiwidHlwZSIsIm5vZGUiLCJzb3VyY2UiLCJwb3MiLCJwb3NpdGlvbkJ5IiwibGluZSIsImNvbHVtbiIsIm9wdCIsInRvU3RyaW5nIiwiZXJyb3IiLCJwbHVnaW4iLCJpbmRleCIsIndvcmQiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7Ozs7SUFRTUEsTzs7QUFFRjs7Ozs7Ozs7Ozs7QUFXQSxtQkFBWUMsSUFBWixFQUE4QjtBQUFBLFFBQVpDLElBQVksdUVBQUwsRUFBSzs7QUFBQTs7QUFDMUI7Ozs7Ozs7O0FBUUEsU0FBS0MsSUFBTCxHQUFZLFNBQVo7QUFDQTs7Ozs7O0FBTUEsU0FBS0YsSUFBTCxHQUFZQSxJQUFaOztBQUVBLFFBQUtDLEtBQUtFLElBQUwsSUFBYUYsS0FBS0UsSUFBTCxDQUFVQyxNQUE1QixFQUFxQztBQUNqQyxVQUFJQyxNQUFVSixLQUFLRSxJQUFMLENBQVVHLFVBQVYsQ0FBcUJMLElBQXJCLENBQWQ7QUFDQTs7Ozs7OztBQU9BLFdBQUtNLElBQUwsR0FBY0YsSUFBSUUsSUFBbEI7QUFDQTs7Ozs7OztBQU9BLFdBQUtDLE1BQUwsR0FBY0gsSUFBSUcsTUFBbEI7QUFDSDs7QUFFRCxTQUFNLElBQUlDLEdBQVYsSUFBaUJSLElBQWpCO0FBQXdCLFdBQUtRLEdBQUwsSUFBWVIsS0FBS1EsR0FBTCxDQUFaO0FBQXhCO0FBQ0g7O0FBRUQ7Ozs7Ozs7Ozs7b0JBUUFDLFEsdUJBQVc7QUFDUCxRQUFLLEtBQUtQLElBQVYsRUFBaUI7QUFDYixhQUFPLEtBQUtBLElBQUwsQ0FBVVEsS0FBVixDQUFnQixLQUFLWCxJQUFyQixFQUEyQjtBQUM5QlksZ0JBQVEsS0FBS0EsTUFEaUI7QUFFOUJDLGVBQVEsS0FBS0EsS0FGaUI7QUFHOUJDLGNBQVEsS0FBS0E7QUFIaUIsT0FBM0IsRUFJSkMsT0FKSDtBQUtILEtBTkQsTUFNTyxJQUFLLEtBQUtILE1BQVYsRUFBbUI7QUFDdEIsYUFBTyxLQUFLQSxNQUFMLEdBQWMsSUFBZCxHQUFxQixLQUFLWixJQUFqQztBQUNILEtBRk0sTUFFQTtBQUNILGFBQU8sS0FBS0EsSUFBWjtBQUNIO0FBQ0osRzs7QUFFRDs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7OztrQkFVV0QsTyIsImZpbGUiOiJ3YXJuaW5nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXByZXNlbnRzIGEgcGx1Z2lu4oCZcyB3YXJuaW5nLiBJdCBjYW4gYmUgY3JlYXRlZCB1c2luZyB7QGxpbmsgTm9kZSN3YXJufS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaWYgKCBkZWNsLmltcG9ydGFudCApIHtcbiAqICAgICBkZWNsLndhcm4ocmVzdWx0LCAnQXZvaWQgIWltcG9ydGFudCcsIHsgd29yZDogJyFpbXBvcnRhbnQnIH0pO1xuICogfVxuICovXG5jbGFzcyBXYXJuaW5nIHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICAgICAgICAtIHdhcm5pbmcgbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gICAgICAtIHdhcm5pbmcgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7Tm9kZX0gICBvcHRzLm5vZGUgICAtIENTUyBub2RlIHRoYXQgY2F1c2VkIHRoZSB3YXJuaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMud29yZCAgIC0gd29yZCBpbiBDU1Mgc291cmNlIHRoYXQgY2F1c2VkIHRoZSB3YXJuaW5nXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuaW5kZXggIC0gaW5kZXggaW4gQ1NTIG5vZGUgc3RyaW5nIHRoYXQgY2F1c2VkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHdhcm5pbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5wbHVnaW4gLSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB3YXJuaW5nLiB7QGxpbmsgUmVzdWx0I3dhcm59IGZpbGxzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBwcm9wZXJ0eSBhdXRvbWF0aWNhbGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHRleHQsIG9wdHMgPSB7IH0pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge3N0cmluZ30gLSBUeXBlIHRvIGZpbHRlciB3YXJuaW5ncyBmcm9tXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICB7QGxpbmsgUmVzdWx0I21lc3NhZ2VzfS4gQWx3YXlzIGVxdWFsXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICB0byBgXCJ3YXJuaW5nXCJgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBjb25zdCBub25XYXJuaW5nID0gcmVzdWx0Lm1lc3NhZ2VzLmZpbHRlcihpID0+IGkudHlwZSAhPT0gJ3dhcm5pbmcnKVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlID0gJ3dhcm5pbmcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfSAtIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIHdhcm5pbmcudGV4dCAvLz0+ICdUcnkgdG8gYXZvaWQgIWltcG9ydGFudCdcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG5cbiAgICAgICAgaWYgKCBvcHRzLm5vZGUgJiYgb3B0cy5ub2RlLnNvdXJjZSApIHtcbiAgICAgICAgICAgIGxldCBwb3MgICAgID0gb3B0cy5ub2RlLnBvc2l0aW9uQnkob3B0cyk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcn0gLSBMaW5lIGluIHRoZSBpbnB1dCBmaWxlXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGlzIHdhcm5pbmfigJlzIHNvdXJjZVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiB3YXJuaW5nLmxpbmUgLy89PiA1XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubGluZSAgID0gcG9zLmxpbmU7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBtZW1iZXIge251bWJlcn0gLSBDb2x1bW4gaW4gdGhlIGlucHV0IGZpbGVcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICB3aXRoIHRoaXMgd2FybmluZ+KAmXMgc291cmNlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiB3YXJuaW5nLmNvbHVtbiAvLz0+IDZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICggbGV0IG9wdCBpbiBvcHRzICkgdGhpc1tvcHRdID0gb3B0c1tvcHRdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB3YXJuaW5nIHBvc2l0aW9uIGFuZCBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB3YXJuaW5nLnRvU3RyaW5nKCkgLy89PiAncG9zdGNzcy1saW50OmEuY3NzOjEwOjE0OiBBdm9pZCAhaW1wb3J0YW50J1xuICAgICAqXG4gICAgICogQHJldHVybiB7c3RyaW5nfSB3YXJuaW5nIHBvc2l0aW9uIGFuZCBtZXNzYWdlXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICggdGhpcy5ub2RlICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5lcnJvcih0aGlzLnRleHQsIHtcbiAgICAgICAgICAgICAgICBwbHVnaW46IHRoaXMucGx1Z2luLFxuICAgICAgICAgICAgICAgIGluZGV4OiAgdGhpcy5pbmRleCxcbiAgICAgICAgICAgICAgICB3b3JkOiAgIHRoaXMud29yZFxuICAgICAgICAgICAgfSkubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICggdGhpcy5wbHVnaW4gKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wbHVnaW4gKyAnOiAnICsgdGhpcy50ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBXYXJuaW5nI1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gcGx1Z2luIC0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNyZWF0ZWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgZmlsbCB0aGlzIHByb3BlcnR5IGF1dG9tYXRpY2FsbHkuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdhcm5pbmcuIFdoZW4geW91IGNhbGwge0BsaW5rIE5vZGUjd2Fybn1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogd2FybmluZy5wbHVnaW4gLy89PiAncG9zdGNzcy1pbXBvcnRhbnQnXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgV2FybmluZyNcbiAgICAgKiBAbWVtYmVyIHtOb2RlfSBub2RlIC0gQ29udGFpbnMgdGhlIENTUyBub2RlIHRoYXQgY2F1c2VkIHRoZSB3YXJuaW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB3YXJuaW5nLm5vZGUudG9TdHJpbmcoKSAvLz0+ICdjb2xvcjogd2hpdGUgIWltcG9ydGFudCdcbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBXYXJuaW5nO1xuIl19