12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 'use strict';
- var assert = require('assert');
- var WM = require('es6-weak-map');
- var hasNativeWeakMap = require('es6-weak-map/is-native-implemented');
- var defaultResolution = require('default-resolution');
- var runtimes = new WM();
- function isFunction(fn) {
- return (typeof fn === 'function');
- }
- function isExtensible(fn) {
- if (hasNativeWeakMap) {
- // Native weakmap doesn't care about extensible
- return true;
- }
- return Object.isExtensible(fn);
- }
- function lastRun(fn, timeResolution) {
- assert(isFunction(fn), 'Only functions can check lastRun');
- assert(isExtensible(fn), 'Only extensible functions can check lastRun');
- var time = runtimes.get(fn);
- if (time == null) {
- return;
- }
- var resolution = defaultResolution(timeResolution);
- return time - (time % resolution);
- }
- function capture(fn, timestamp) {
- assert(isFunction(fn), 'Only functions can be captured');
- assert(isExtensible(fn), 'Only extensible functions can be captured');
- timestamp = timestamp || Date.now();
- runtimes.set(fn, timestamp);
- }
- function release(fn) {
- assert(isFunction(fn), 'Only functions can be captured');
- assert(isExtensible(fn), 'Only extensible functions can be captured');
- runtimes.delete(fn);
- }
- lastRun.capture = capture;
- lastRun.release = release;
- module.exports = lastRun;
|