Files
supabase/e2e/studio/scripts/common/timeout.ts
Ali Waseem 22cfd2be14 feat: Run E2E tests aganist Platform Pt.1 (#41032)
* added packages for creating projects

* updated scripts

* remove ami version

* cleaned up common

* updated tests

* refactored helpers

* updated env

* updated config

* updated to reference env

* updated global setup

* updated type logic and scripts

* added mocking of hcaptcha

* added log statements

* updated local env

* update env file

* updated env vars

* updated logging

* updated to remove check

* updated print and project names

* updated helpers

* updated url

* updated setup

* updated storage helpers to account for listing files

* updated setup and tests

* updated timeout only for setup

* updated helper to account for different api response

* added ignores for tests

* updated lock file

* updated database spec to add exact

* updated timeouts

* removed check for table grid footer

* updated test runner

* updated is_platform

* updated playwright config

* updated worker settings

* removed dotenvx

* updated README

* updated to remove comment

* Update e2e/studio/scripts/common/retriedFetch.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

---------

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
2025-12-05 10:50:16 -07:00

41 lines
812 B
TypeScript

export default async function timeoutRequest<T>(
request: Promise<T>,
timeout: number,
abortController?: AbortController
): Promise<T> {
let timer: NodeJS.Timeout | undefined
const cleanup = () => {
if (timer) {
clearTimeout(timer)
timer = undefined
}
}
try {
const timeoutPromise = new Promise<T>((_, reject) => {
timer = setTimeout(() => {
if (abortController) {
abortController.abort()
}
cleanup()
reject(new Error(`Timeout (${timeout}) for task exceeded`))
}, timeout)
})
const result = await Promise.race<T>([
request.catch((err) => {
cleanup()
throw err
}),
timeoutPromise
])
cleanup()
return result
} catch (error) {
cleanup()
throw error
}
}