demo___customer_pitch-c4152739-a50b-4b5b-9d4d-0561461666d9.zip-extract/_dependencies/npm/on-finished-2.4.1/index.js

Path
demo___customer_pitch-c4152739-a50b-4b5b-9d4d-0561461666d9.zip-extract/_dependencies/npm/on-finished-2.4.1/index.js
Status
scanned
Type
file
Name
index.js
Extension
.js
Programming language
JavaScript
Mime type
text/plain
File type
ASCII text
Tag

      
    
Rootfs path

      
    
Size
4430 (4.3 KB)
MD5
b1c3d24b92f25989b8aefc7f6aaa91ba
SHA1
3f69307bd04cc4dfe71cd13616509f443b48f923
SHA256
8e16bae14ec63bac9cdbb50572a7b53061fee914712f5e803ff03c44e8845276
SHA512

      
    
SHA1_git
e68df7bde39bb47aa1fd7eff4b317b3969de75bd
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
index.js | 4.3 KB |

/*! * on-finished * Copyright(c) 2013 Jonathan Ong * Copyright(c) 2014 Douglas Christopher Wilson * MIT Licensed */ 'use strict' /** * Module exports. * @public */ module.exports = onFinished module.exports.isFinished = isFinished /** * Module dependencies. * @private */ var asyncHooks = tryRequireAsyncHooks() var first = require('ee-first') /** * Variables. * @private */ /* istanbul ignore next */ var defer = typeof setImmediate === 'function' ? setImmediate : 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, wrap(listener)) return msg } /** * Determine if message is already finished. * * @param {object} msg * @return {boolean} * @public */ function isFinished (msg) { var socket = msg.socket if (typeof msg.finished === 'boolean') { // OutgoingMessage return Boolean(msg.finished || (socket && !socket.writable)) } if (typeof msg.complete === 'boolean') { // IncomingMessage return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable)) } // don't know return undefined } /** * Attach a finished listener to the message. * * @param {object} msg * @param {function} callback * @private */ function attachFinishedListener (msg, callback) { var eeMsg var eeSocket var finished = false function onFinish (error) { eeMsg.cancel() eeSocket.cancel() finished = true callback(error) } // finished on first message event eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) function onSocket (socket) { // remove listener msg.removeListener('socket', onSocket) if (finished) return if (eeMsg !== eeSocket) return // finished on first socket event eeSocket = first([[socket, 'error', 'close']], onFinish) } if (msg.socket) { // socket already assigned onSocket(msg.socket) return } // wait for socket to be assigned msg.on('socket', onSocket) if (msg.socket === undefined) { // istanbul ignore next: node.js 0.8 patch patchAssignSocket(msg, onSocket) } } /** * Attach the listener to the message. * * @param {object} msg * @return {function} * @private */ function attachListener (msg, listener) { var attached = msg.__onFinished // create a private single listener with queue if (!attached || !attached.queue) { attached = msg.__onFinished = createListener(msg) attachFinishedListener(msg, attached) } attached.queue.push(listener) } /** * Create listener on message. * * @param {object} msg * @return {function} * @private */ function createListener (msg) { function listener (err) { if (msg.__onFinished === listener) msg.__onFinished = null if (!listener.queue) return var queue = listener.queue listener.queue = null for (var i = 0; i < queue.length; i++) { queue[i](err, msg) } } listener.queue = [] return listener } /** * Patch ServerResponse.prototype.assignSocket for node.js 0.8. * * @param {ServerResponse} res * @param {function} callback * @private */ // istanbul ignore next: node.js 0.8 patch function patchAssignSocket (res, callback) { var assignSocket = res.assignSocket if (typeof assignSocket !== 'function') return // res.on('socket', callback) is broken in 0.8 res.assignSocket = function _assignSocket (socket) { assignSocket.call(this, socket) callback(socket) } } /** * Try to require async_hooks * @private */ function tryRequireAsyncHooks () { try { return require('async_hooks') } catch (e) { return {} } } /** * Wrap function with async resource, if possible. * AsyncResource.bind static method backported. * @private */ function wrap (fn) { var res // create anonymous resource if (asyncHooks.AsyncResource) { res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn') } // incompatible node.js if (!res || !res.runInAsyncScope) { return fn } // return bound function return res.runInAsyncScope.bind(res, fn, null) }
Detected license expression
mit
Detected license expression (SPDX)
MIT
Percentage of license text
0.41
Copyrights
- end_line: 3
  copyright: Copyright (c) 2013 Jonathan Ong
  start_line: 3
- end_line: 4
  copyright: Copyright (c) 2014 Douglas Christopher Wilson
  start_line: 4
Holders
- holder: Jonathan Ong
  end_line: 3
  start_line: 3
- holder: Douglas Christopher Wilson
  end_line: 4
  start_line: 4
Authors

      
    
License detections License expression License expression SPDX
mit-4e7803e6-e54b-c9ca-bcd2-bee9755c0dd7 mit MIT
Package URL License Primary language
pkg:npm/acme-demo-app@1.0.0 JavaScript
pkg:npm/on-finished@2.4.1 mit JavaScript