1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- var __rest = (this && this.__rest) || function (s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
- };
- import { getBytes, getLines, getMessages } from './parse';
- export const EventStreamContentType = 'text/event-stream';
- const DefaultRetryInterval = 1000;
- const LastEventId = 'last-event-id';
- export function fetchEventSource(input, _a) {
- var { signal: inputSignal, headers: inputHeaders, onopen: inputOnOpen, onmessage, onclose, onerror, openWhenHidden, fetch: inputFetch } = _a, rest = __rest(_a, ["signal", "headers", "onopen", "onmessage", "onclose", "onerror", "openWhenHidden", "fetch"]);
- return new Promise((resolve, reject) => {
- const headers = Object.assign({}, inputHeaders);
- if (!headers.accept) {
- headers.accept = EventStreamContentType;
- }
- let curRequestController;
- function onVisibilityChange() {
- curRequestController.abort();
- if (!document.hidden) {
- create();
- }
- }
- if (!openWhenHidden) {
- document.addEventListener('visibilitychange', onVisibilityChange);
- }
- let retryInterval = DefaultRetryInterval;
- let retryTimer = 0;
- function dispose() {
- document.removeEventListener('visibilitychange', onVisibilityChange);
- window.clearTimeout(retryTimer);
- curRequestController.abort();
- }
- inputSignal === null || inputSignal === void 0 ? void 0 : inputSignal.addEventListener('abort', () => {
- dispose();
- resolve();
- });
- const fetch = inputFetch !== null && inputFetch !== void 0 ? inputFetch : window.fetch;
- const onopen = inputOnOpen !== null && inputOnOpen !== void 0 ? inputOnOpen : defaultOnOpen;
- async function create() {
- var _a;
- curRequestController = new AbortController();
- try {
- const response = await fetch(input, Object.assign(Object.assign({}, rest), { headers, signal: curRequestController.signal }));
- await onopen(response);
- await getBytes(response.body, getLines(getMessages(id => {
- if (id) {
- headers[LastEventId] = id;
- }
- else {
- delete headers[LastEventId];
- }
- }, retry => {
- retryInterval = retry;
- }, onmessage)));
- onclose === null || onclose === void 0 ? void 0 : onclose();
- dispose();
- resolve();
- }
- catch (err) {
- if (!curRequestController.signal.aborted) {
- try {
- const interval = (_a = onerror === null || onerror === void 0 ? void 0 : onerror(err)) !== null && _a !== void 0 ? _a : retryInterval;
- window.clearTimeout(retryTimer);
- retryTimer = window.setTimeout(create, interval);
- }
- catch (innerErr) {
- dispose();
- reject(innerErr);
- }
- }
- }
- }
- create();
- });
- }
- function defaultOnOpen(response) {
- const contentType = response.headers.get('content-type');
- if (!(contentType === null || contentType === void 0 ? void 0 : contentType.startsWith(EventStreamContentType))) {
- throw new Error(`Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`);
- }
- }
- //# sourceMappingURL=fetch.js.map
|