text: "use strict";
  var core_1 = require('@angular/core');
  var lang_1 = require('../facade/lang');
  var invalid_pipe_argument_exception_1 = require('./invalid_pipe_argument_exception');
  var ReplacePipe = (function () {
      function ReplacePipe() {
      }
      ReplacePipe.prototype.transform = function (value, pattern, replacement) {
          if (lang_1.isBlank(value)) {
              return value;
          }
          if (!this._supportedInput(value)) {
              throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, value);
          }
          var input = value.toString();
          if (!this._supportedPattern(pattern)) {
              throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, pattern);
          }
          if (!this._supportedReplacement(replacement)) {
              throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, replacement);
          }
          // template fails with literal RegExp e.g /pattern/igm
          // var rgx = pattern instanceof RegExp ? pattern : RegExpWrapper.create(pattern);
          if (lang_1.isFunction(replacement)) {
              var rgxPattern = lang_1.isString(pattern) ? lang_1.RegExpWrapper.create(pattern) : pattern;
              return lang_1.StringWrapper.replaceAllMapped(input, rgxPattern, replacement);
          }
          if (pattern instanceof RegExp) {
              // use the replaceAll variant
              return lang_1.StringWrapper.replaceAll(input, pattern, replacement);
          }
          return lang_1.StringWrapper.replace(input, pattern, replacement);
      };
      ReplacePipe.prototype._supportedInput = function (input) { return lang_1.isString(input) || lang_1.isNumber(input); };
      ReplacePipe.prototype._supportedPattern = function (pattern) {
          return lang_1.isString(pattern) || pattern instanceof RegExp;
      };
      ReplacePipe.prototype._supportedReplacement = function (replacement) {
          return lang_1.isString(replacement) || lang_1.isFunction(replacement);
      };
      /** @nocollapse */
      ReplacePipe.decorators = [
          { type: core_1.Pipe, args: [{ name: 'replace' },] },
          { type: core_1.Injectable },
      ];
      return ReplacePipe;
  }());
  exports.ReplacePipe = ReplacePipe;
  //# sourceMappingURL=replace_pipe.js.map