text: "use strict";
  module.exports = function (Promise, INTERNAL) {
      var util = require("./util.js");
      var TimeoutError = Promise.TimeoutError;
  
      var afterTimeout = function afterTimeout(promise, message) {
          if (!promise.isPending()) return;
  
          var err;
          if (!util.isPrimitive(message) && message instanceof Error) {
              err = message;
          } else {
              if (typeof message !== "string") {
                  message = "operation timed out";
              }
              err = new TimeoutError(message);
          }
          util.markAsOriginatingFromRejection(err);
          promise._attachExtraTrace(err);
          promise._cancel(err);
      };
  
      var afterValue = function afterValue(value) {
          return delay(+this).thenReturn(value);
      };
      var delay = Promise.delay = function (value, ms) {
          if (ms === undefined) {
              ms = value;
              value = undefined;
              var ret = new Promise(INTERNAL);
              setTimeout(function () {
                  ret._fulfill();
              }, ms);
              return ret;
          }
          ms = +ms;
          return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);
      };
  
      Promise.prototype.delay = function (ms) {
          return delay(this, ms);
      };
  
      function successClear(value) {
          var handle = this;
          if (handle instanceof Number) handle = +handle;
          clearTimeout(handle);
          return value;
      }
  
      function failureClear(reason) {
          var handle = this;
          if (handle instanceof Number) handle = +handle;
          clearTimeout(handle);
          throw reason;
      }
  
      Promise.prototype.timeout = function (ms, message) {
          ms = +ms;
          var ret = this.then().cancellable();
          ret._cancellationParent = this;
          var handle = setTimeout(function timeoutTimeout() {
              afterTimeout(ret, message);
          }, ms);
          return ret._then(successClear, failureClear, undefined, handle, undefined);
      };
  };
  
  //# sourceMappingURL=timers-compiled.js.map