xprezzo-on-finished
Advanced tools
Comparing version 1.1.0 to 1.1.1
94
index.js
@@ -10,16 +10,8 @@ /*! | ||
/** | ||
* Module exports. | ||
* @public | ||
*/ | ||
module.exports = onFinished | ||
module.exports.isFinished = isFinished | ||
/** | ||
* Module dependencies. | ||
* @private | ||
*/ | ||
const __queue__ = new WeakMap() | ||
const first = require('./lib/ee-first') | ||
var first = require('ee-first') | ||
/** | ||
@@ -31,3 +23,3 @@ * Variables. | ||
/* istanbul ignore next */ | ||
var defer = typeof setImmediate === 'function' | ||
const defer = typeof setImmediate === 'function' | ||
? setImmediate | ||
@@ -37,24 +29,2 @@ : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) } | ||
/** | ||
* Invoke callback when the response has finished, useful for | ||
* cleaning up resources afterwards. | ||
* | ||
* @param {object} msg | ||
* @param {function} listener | ||
* @return {object} | ||
* @public | ||
*/ | ||
function onFinished (msg, listener) { | ||
if (isFinished(msg) !== false) { | ||
defer(listener, null, msg) | ||
return msg | ||
} | ||
// attach the listener to the message | ||
attachListener(msg, listener) | ||
return msg | ||
} | ||
/** | ||
* Determine if message is already finished. | ||
@@ -68,3 +38,3 @@ * | ||
function isFinished (msg) { | ||
var socket = msg.socket | ||
const socket = msg.socket | ||
@@ -94,5 +64,4 @@ if (typeof msg.finished === 'boolean') { | ||
function attachFinishedListener (msg, callback) { | ||
var eeMsg | ||
var eeSocket | ||
var finished = false | ||
let eeSocket | ||
let finished = false | ||
@@ -108,3 +77,3 @@ function onFinish (error) { | ||
// finished on first message event | ||
eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) | ||
const eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) | ||
@@ -146,3 +115,3 @@ function onSocket (socket) { | ||
function attachListener (msg, listener) { | ||
var attached = msg.__onFinished | ||
let attached = msg.__onFinished | ||
@@ -154,4 +123,5 @@ // create a private single listener with queue | ||
} | ||
attached.queue.push(listener) | ||
const queue = __queue__.get(attached) | ||
queue.push(listener) | ||
__queue__.set(attached, queue) | ||
} | ||
@@ -169,15 +139,13 @@ | ||
function listener (err) { | ||
const queue = __queue__.get(listener) | ||
if (msg.__onFinished === listener) msg.__onFinished = null | ||
if (!listener.queue) return | ||
if (!queue) return | ||
var queue = listener.queue | ||
listener.queue = null | ||
for (var i = 0; i < queue.length; i++) { | ||
__queue__.set(listener, null) | ||
for (let i = 0; i < queue.length; i++) { | ||
queue[i](err, msg) | ||
} | ||
} | ||
__queue__.set(listener, []) | ||
listener.queue = [] | ||
return listener | ||
@@ -196,3 +164,3 @@ } | ||
function patchAssignSocket (res, callback) { | ||
var assignSocket = res.assignSocket | ||
const assignSocket = res.assignSocket | ||
@@ -207,1 +175,29 @@ if (typeof assignSocket !== 'function') return | ||
} | ||
/** | ||
* Module exports. | ||
* @public | ||
*/ | ||
/** | ||
* Invoke callback when the response has finished, useful for | ||
* cleaning up resources afterwards. | ||
* | ||
* @param {object} msg | ||
* @param {function} listener | ||
* @return {object} | ||
* @public | ||
*/ | ||
module.exports = (msg, listener) => { | ||
if (isFinished(msg) !== false) { | ||
defer(listener, null, msg) | ||
return msg | ||
} | ||
// attach the listener to the message | ||
attachListener(msg, listener) | ||
return msg | ||
} | ||
module.exports.isFinished = isFinished |
{ | ||
"name": "xprezzo-on-finished", | ||
"description": "Execute a callback when a request closes, finishes, or errors", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"author": "Ben Ajenoui <info@seohero.io>", | ||
"license": "MIT", | ||
"repository": "xprezzo/xprezzo-on-finished", | ||
"dependencies": { | ||
"ee-first": "1.1.1" | ||
}, | ||
"dependencies": {}, | ||
"devDependencies": { | ||
"eslint": "7.8.1", | ||
"eslint": "7.11.0", | ||
"eslint-config-standard": "14.1.1", | ||
"eslint-plugin-import": "2.22.0", | ||
"eslint-plugin-import": "2.22.1", | ||
"eslint-plugin-markdown": "1.0.2", | ||
@@ -19,4 +17,4 @@ "eslint-plugin-node": "11.1.0", | ||
"eslint-plugin-standard": "4.0.1", | ||
"mocha": "8.1.3", | ||
"nyc": "15.0.1" | ||
"mocha": "8.2.0", | ||
"nyc": "15.1.0" | ||
}, | ||
@@ -27,2 +25,3 @@ "engines": { | ||
"files": [ | ||
"lib/", | ||
"HISTORY.md", | ||
@@ -29,0 +28,0 @@ "LICENSE", |
12747
0
6
221
- Removedee-first@1.1.1
- Removedee-first@1.1.1(transitive)