@d1g1tal/transportr
Version:
JavaScript wrapper for the Fetch API
61 lines (48 loc) • 2.42 kB
JavaScript
import HttpRequestMethod from './http-request-methods.js';
import ResponseStatus from './response-status.js';
import MediaType from '@d1g1tal/media-type';
import HttpMediaType from './http-media-type.js';
/** @typedef {'configured'|'success'|'error'|'aborted'|'timeout'|'complete'} RequestEvent */
/** @type {string} */
const defaultCharset = 'utf-8';
/** @type {RegExp} */
const endsWithSlashRegEx = /\/$/;
/** @typedef {Map<string, MediaType>} MediaTypeMap A map of media types. */
/** @type {MediaTypeMap} */
const mediaTypes = new Map([
[HttpMediaType.PNG, new MediaType(HttpMediaType.PNG)],
[HttpMediaType.TEXT, new MediaType(HttpMediaType.TEXT, { defaultCharset })],
[HttpMediaType.JSON, new MediaType(HttpMediaType.JSON, { defaultCharset })],
[HttpMediaType.HTML, new MediaType(HttpMediaType.HTML, { defaultCharset })],
[HttpMediaType.JAVA_SCRIPT, new MediaType(HttpMediaType.JAVA_SCRIPT, { defaultCharset })],
[HttpMediaType.CSS, new MediaType(HttpMediaType.CSS, { defaultCharset })],
[HttpMediaType.XML, new MediaType(HttpMediaType.XML, { defaultCharset })],
[HttpMediaType.BIN, new MediaType(HttpMediaType.BIN)]
]);
/**
* @static
* @constant {Object<string, RequestEvent>}
*/
const RequestEvents = Object.freeze({
CONFIGURED: 'configured',
SUCCESS: 'success',
ERROR: 'error',
ABORTED: 'aborted',
TIMEOUT: 'timeout',
COMPLETE: 'complete',
ALL_COMPLETE: 'all-complete'
});
const SignalEvents = Object.freeze({
ABORT: 'abort',
TIMEOUT: 'timeout'
});
const _abortEvent = new CustomEvent(SignalEvents.ABORT, { detail: { cause: new DOMException('The request was aborted', 'AbortError') } });
const requestBodyMethods = [ HttpRequestMethod.POST, HttpRequestMethod.PUT, HttpRequestMethod.PATCH ];
const internalServerError = new ResponseStatus(500, 'Internal Server Error');
const eventResponseStatuses = Object.freeze({
[RequestEvents.ABORTED]: new ResponseStatus(499, 'Aborted'),
[RequestEvents.TIMEOUT]: new ResponseStatus(504, 'Request Timeout')
});
/** @type {ProxyHandler<import('./transportr.js').RequestOptions>} */
const abortSignalProxyHandler = { get: (target, property) => property == 'signal' ? target.signal.timeout(target.timeout) : Reflect.get(target, property) };
export { defaultCharset, endsWithSlashRegEx, mediaTypes, RequestEvents, SignalEvents, _abortEvent as abortEvent, requestBodyMethods, internalServerError, eventResponseStatuses, abortSignalProxyHandler };