@whatwg-node/server
Version:
Fetch API compliant HTTP Server adapter
60 lines (59 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addWaitUntil = exports.completeAssign = exports.isRequestInit = exports.isReadableStream = exports.isAsyncIterable = void 0;
function isAsyncIterable(body) {
return (body != null && typeof body === 'object' && typeof body[Symbol.asyncIterator] === 'function');
}
exports.isAsyncIterable = isAsyncIterable;
function isReadableStream(stream) {
return stream != null && stream.getReader != null;
}
exports.isReadableStream = isReadableStream;
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));
}
exports.isRequestInit = isRequestInit;
// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#copying_accessors
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;
}
exports.completeAssign = completeAssign;
function addWaitUntil(serverContext, waitUntilPromises) {
serverContext['waitUntil'] = function (promise) {
if (promise != null) {
waitUntilPromises.push(promise);
}
};
}
exports.addWaitUntil = addWaitUntil;