37 lines
812 B
JavaScript
37 lines
812 B
JavaScript
|
'use strict';
|
||
|
|
||
|
// We define these manually to ensure they're always copied
|
||
|
// even if they would move up the prototype chain
|
||
|
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
|
||
|
const knownProperties = [
|
||
|
'aborted',
|
||
|
'complete',
|
||
|
'destroy',
|
||
|
'headers',
|
||
|
'httpVersion',
|
||
|
'httpVersionMinor',
|
||
|
'httpVersionMajor',
|
||
|
'method',
|
||
|
'rawHeaders',
|
||
|
'rawTrailers',
|
||
|
'setTimeout',
|
||
|
'socket',
|
||
|
'statusCode',
|
||
|
'statusMessage',
|
||
|
'trailers',
|
||
|
'url'
|
||
|
];
|
||
|
|
||
|
module.exports = (fromStream, toStream) => {
|
||
|
const fromProps = new Set(Object.keys(fromStream).concat(knownProperties));
|
||
|
|
||
|
for (const prop of fromProps) {
|
||
|
// Don't overwrite existing properties
|
||
|
if (prop in toStream) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
|
||
|
}
|
||
|
};
|