@whatwg-node/server
Version:
Fetch API compliant HTTP Server adapter
52 lines (51 loc) • 2.02 kB
JavaScript
export function isAsyncIterable(body) {
return (body != null && typeof body === 'object' && typeof body[Symbol.asyncIterator] === 'function');
}
export function isReadableStream(stream) {
return stream != null && stream.getReader != null;
}
export function isRequestInit(val) {
return (val != null &&
typeof val === 'object' &&
('body' in val ||
'cache' in val ||
'credentials' in val ||
'headers' in val ||
'integrity' in val ||
'keepalive' in val ||
'method' in val ||
'mode' in val ||
'redirect' in val ||
'referrer' in val ||
'referrerPolicy' in val ||
'signal' in val ||
'window' in val));
}
// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#copying_accessors
export function completeAssign(...args) {
const [target, ...sources] = args.filter(arg => arg != null && typeof arg === 'object');
sources.forEach(source => {
// modified Object.keys to Object.getOwnPropertyNames
// because Object.keys only returns enumerable properties
const descriptors = Object.getOwnPropertyNames(source).reduce((descriptors, key) => {
descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
return descriptors;
}, {});
// By default, Object.assign copies enumerable Symbols, too
Object.getOwnPropertySymbols(source).forEach(sym => {
const descriptor = Object.getOwnPropertyDescriptor(source, sym);
if (descriptor.enumerable) {
descriptors[sym] = descriptor;
}
});
Object.defineProperties(target, descriptors);
});
return target;
}
export function addWaitUntil(serverContext, waitUntilPromises) {
serverContext['waitUntil'] = function (promise) {
if (promise != null) {
waitUntilPromises.push(promise);
}
};
}