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;
|