summaryrefslogtreecommitdiff
path: root/node_modules/rollup-plugin-node-polyfills/polyfills/timers.js
blob: 1efe5f4d1496330f7a89ae7dcda8482a9892ae7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// License https://jryans.mit-license.org/

import {setImmediate, clearImmediate} from './setimmediate';
export {setImmediate, clearImmediate};
// DOM APIs, for completeness
var apply = Function.prototype.apply;

export function clearInterval(timeout) {
  if (typeof timeout === 'number' && typeof global.clearInterval === 'function') {
    global.clearInterval(timeout);
  } else {
    clearFn(timeout)
  }
}
export function clearTimeout(timeout) {
  if (typeof timeout === 'number' && typeof global.clearTimeout === 'function') {
    global.clearTimeout(timeout);
  } else {
    clearFn(timeout)
  }
}
function clearFn(timeout) {
  if (timeout && typeof timeout.close === 'function') {
    timeout.close();
  }
}
export function setTimeout() {
  return new Timeout(apply.call(global.setTimeout, window, arguments), clearTimeout);
}
export function setInterval() {
  return new Timeout(apply.call(global.setInterval, window, arguments), clearInterval);
}

function Timeout(id) {
  this._id = id;
}
Timeout.prototype.unref = Timeout.prototype.ref = function() {};
Timeout.prototype.close = function() {
  clearFn(this._id);
}

// Does not start the time, just sets up the members needed.
export function enroll(item, msecs) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = msecs;
}

export function unenroll(item) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = -1;
}
export var _unrefActive = active;
export function active(item) {
  clearTimeout(item._idleTimeoutId);

  var msecs = item._idleTimeout;
  if (msecs >= 0) {
    item._idleTimeoutId = setTimeout(function onTimeout() {
      if (item._onTimeout)
        item._onTimeout();
    }, msecs);
  }
}

export default {
  setImmediate: setImmediate,
  clearImmediate: clearImmediate,
  setTimeout: setTimeout,
  clearTimeout: clearTimeout,
  setInterval: setInterval,
  clearInterval: clearInterval,
  active: active,
  unenroll: unenroll,
  _unrefActive: _unrefActive,
  enroll: enroll
};