You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							206 lines
						
					
					
						
							5.1 KiB
						
					
					
				
			
		
		
	
	
							206 lines
						
					
					
						
							5.1 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
exports.__esModule = true; | 
						|
exports["default"] = void 0; | 
						|
 | 
						|
var _parser = _interopRequireDefault(require("./parser")); | 
						|
 | 
						|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | 
						|
 | 
						|
var Processor = /*#__PURE__*/function () { | 
						|
  function Processor(func, options) { | 
						|
    this.func = func || function noop() {}; | 
						|
 | 
						|
    this.funcRes = null; | 
						|
    this.options = options; | 
						|
  } | 
						|
 | 
						|
  var _proto = Processor.prototype; | 
						|
 | 
						|
  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) { | 
						|
    if (options === void 0) { | 
						|
      options = {}; | 
						|
    } | 
						|
 | 
						|
    var merged = Object.assign({}, this.options, options); | 
						|
 | 
						|
    if (merged.updateSelector === false) { | 
						|
      return false; | 
						|
    } else { | 
						|
      return typeof rule !== "string"; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  _proto._isLossy = function _isLossy(options) { | 
						|
    if (options === void 0) { | 
						|
      options = {}; | 
						|
    } | 
						|
 | 
						|
    var merged = Object.assign({}, this.options, options); | 
						|
 | 
						|
    if (merged.lossless === false) { | 
						|
      return true; | 
						|
    } else { | 
						|
      return false; | 
						|
    } | 
						|
  }; | 
						|
 | 
						|
  _proto._root = function _root(rule, options) { | 
						|
    if (options === void 0) { | 
						|
      options = {}; | 
						|
    } | 
						|
 | 
						|
    var parser = new _parser["default"](rule, this._parseOptions(options)); | 
						|
    return parser.root; | 
						|
  }; | 
						|
 | 
						|
  _proto._parseOptions = function _parseOptions(options) { | 
						|
    return { | 
						|
      lossy: this._isLossy(options) | 
						|
    }; | 
						|
  }; | 
						|
 | 
						|
  _proto._run = function _run(rule, options) { | 
						|
    var _this = this; | 
						|
 | 
						|
    if (options === void 0) { | 
						|
      options = {}; | 
						|
    } | 
						|
 | 
						|
    return new Promise(function (resolve, reject) { | 
						|
      try { | 
						|
        var root = _this._root(rule, options); | 
						|
 | 
						|
        Promise.resolve(_this.func(root)).then(function (transform) { | 
						|
          var string = undefined; | 
						|
 | 
						|
          if (_this._shouldUpdateSelector(rule, options)) { | 
						|
            string = root.toString(); | 
						|
            rule.selector = string; | 
						|
          } | 
						|
 | 
						|
          return { | 
						|
            transform: transform, | 
						|
            root: root, | 
						|
            string: string | 
						|
          }; | 
						|
        }).then(resolve, reject); | 
						|
      } catch (e) { | 
						|
        reject(e); | 
						|
        return; | 
						|
      } | 
						|
    }); | 
						|
  }; | 
						|
 | 
						|
  _proto._runSync = function _runSync(rule, options) { | 
						|
    if (options === void 0) { | 
						|
      options = {}; | 
						|
    } | 
						|
 | 
						|
    var root = this._root(rule, options); | 
						|
 | 
						|
    var transform = this.func(root); | 
						|
 | 
						|
    if (transform && typeof transform.then === "function") { | 
						|
      throw new Error("Selector processor returned a promise to a synchronous call."); | 
						|
    } | 
						|
 | 
						|
    var string = undefined; | 
						|
 | 
						|
    if (options.updateSelector && typeof rule !== "string") { | 
						|
      string = root.toString(); | 
						|
      rule.selector = string; | 
						|
    } | 
						|
 | 
						|
    return { | 
						|
      transform: transform, | 
						|
      root: root, | 
						|
      string: string | 
						|
    }; | 
						|
  } | 
						|
  /** | 
						|
   * Process rule into a selector AST. | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {Promise<parser.Root>} The AST of the selector after processing it. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.ast = function ast(rule, options) { | 
						|
    return this._run(rule, options).then(function (result) { | 
						|
      return result.root; | 
						|
    }); | 
						|
  } | 
						|
  /** | 
						|
   * Process rule into a selector AST synchronously. | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {parser.Root} The AST of the selector after processing it. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.astSync = function astSync(rule, options) { | 
						|
    return this._runSync(rule, options).root; | 
						|
  } | 
						|
  /** | 
						|
   * Process a selector into a transformed value asynchronously | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {Promise<any>} The value returned by the processor. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.transform = function transform(rule, options) { | 
						|
    return this._run(rule, options).then(function (result) { | 
						|
      return result.transform; | 
						|
    }); | 
						|
  } | 
						|
  /** | 
						|
   * Process a selector into a transformed value synchronously. | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {any} The value returned by the processor. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.transformSync = function transformSync(rule, options) { | 
						|
    return this._runSync(rule, options).transform; | 
						|
  } | 
						|
  /** | 
						|
   * Process a selector into a new selector string asynchronously. | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {string} the selector after processing. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.process = function process(rule, options) { | 
						|
    return this._run(rule, options).then(function (result) { | 
						|
      return result.string || result.root.toString(); | 
						|
    }); | 
						|
  } | 
						|
  /** | 
						|
   * Process a selector into a new selector string synchronously. | 
						|
   * | 
						|
   * @param rule {postcss.Rule | string} The css selector to be processed | 
						|
   * @param options The options for processing | 
						|
   * @returns {string} the selector after processing. | 
						|
   */ | 
						|
  ; | 
						|
 | 
						|
  _proto.processSync = function processSync(rule, options) { | 
						|
    var result = this._runSync(rule, options); | 
						|
 | 
						|
    return result.string || result.root.toString(); | 
						|
  }; | 
						|
 | 
						|
  return Processor; | 
						|
}(); | 
						|
 | 
						|
exports["default"] = Processor; | 
						|
module.exports = exports.default; |