39 lines
866 B
JavaScript
39 lines
866 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 fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));
|
||
|
|
||
|
for (const property of fromProperties) {
|
||
|
// Don't overwrite existing properties.
|
||
|
if (property in toStream) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
toStream[property] = typeof fromStream[property] === 'function' ? fromStream[property].bind(fromStream) : fromStream[property];
|
||
|
}
|
||
|
|
||
|
return toStream;
|
||
|
};
|