| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 'use strict';var captureLastRun = require('last-run').capture;var releaseLastRun = require('last-run').release;var metadata = require('./metadata');var uid = 0;function Storage(fn) {  var meta = metadata.get(fn);  this.fn = meta.orig || fn;  this.uid = uid++;  this.name = meta.name;  this.branch = meta.branch || false;  this.captureTime = Date.now();  this.startHr = [];}Storage.prototype.capture = function() {  captureLastRun(this.fn, this.captureTime);};Storage.prototype.release = function() {  releaseLastRun(this.fn);};function createExtensions(ee) {  return {    create: function(fn) {      return new Storage(fn);    },    before: function(storage) {      storage.startHr = process.hrtime();      ee.emit('start', {        uid: storage.uid,        name: storage.name,        branch: storage.branch,        time: Date.now(),      });    },    after: function(result, storage) {      if (result && result.state === 'error') {        return this.error(result.value, storage);      }      storage.capture();      ee.emit('stop', {        uid: storage.uid,        name: storage.name,        branch: storage.branch,        duration: process.hrtime(storage.startHr),        time: Date.now(),      });    },    error: function(error, storage) {      if (Array.isArray(error)) {        error = error[0];      }      storage.release();      ee.emit('error', {        uid: storage.uid,        name: storage.name,        branch: storage.branch,        error: error,        duration: process.hrtime(storage.startHr),        time: Date.now(),      });    },  };}module.exports = createExtensions;
 |