diff --git a/CHANGELOG.md b/CHANGELOG.md index 8260cec..e75f49b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # CHANGELOG ## 3.0.0 +- Add node.js support - Upgrade to TypeScript 4.9 - Add exports in package.json - This package is now pure ESM. Please [read this](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c). diff --git a/package.json b/package.json index 6c76611..2b3c213 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "tsconfig.esm.json" ], "engines": { - "node": ">=14.16" + "node": ">=18.12" }, "scripts": { "clean": "rimraf ./lib ./coverage", diff --git a/src/fetch.ts b/src/fetch.ts index ed31406..bbcd2c8 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -49,7 +49,7 @@ export interface FetchEventSourceInit extends RequestInit { */ openWhenHidden?: boolean; - /** The Fetch function to use. Defaults to window.fetch */ + /** The Fetch function to use. Defaults to fetch */ fetch?: typeof fetch; } @@ -79,15 +79,17 @@ export function fetchEventSource(input: RequestInfo, { } } - if (!openWhenHidden) { + if (typeof window !== 'undefined' && !openWhenHidden) { document.addEventListener('visibilitychange', onVisibilityChange); } let retryInterval = DefaultRetryInterval; let retryTimer = 0; function dispose() { - document.removeEventListener('visibilitychange', onVisibilityChange); - window.clearTimeout(retryTimer); + if (typeof window !== 'undefined' && !openWhenHidden) { + document.removeEventListener('visibilitychange', onVisibilityChange); + } + clearTimeout(retryTimer); curRequestController.abort(); } @@ -97,12 +99,12 @@ export function fetchEventSource(input: RequestInfo, { resolve(); // don't waste time constructing/logging errors }); - const fetch = inputFetch ?? window.fetch; + const fetchFn = inputFetch ?? fetch; const onopen = inputOnOpen ?? defaultOnOpen; async function create() { curRequestController = new AbortController(); try { - const response = await fetch(input, { + const response = await fetchFn(input, { ...rest, headers, signal: curRequestController.signal, @@ -131,8 +133,8 @@ export function fetchEventSource(input: RequestInfo, { try { // check if we need to retry: const interval: any = onerror?.(err) ?? retryInterval; - window.clearTimeout(retryTimer); - retryTimer = window.setTimeout(create, interval); + clearTimeout(retryTimer); + retryTimer = setTimeout(create, interval); } catch (innerErr) { // we should not retry anymore: dispose();