/
githubmirror
/
next.js
Обзор
Документация
Войти
/
githubmirror
/
next.js
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
canary
packages/devlow-bench/src/file.ts
60 строк
2 KB
Will Binns-Smith
Lint devlow-bench with the root eslint config (#96871)
07 авг 2026, 06:39
Не верифицирован
07 авг 2026, 06:39
007058e
Код
Авторство
О чём код?
import { watch } from 'fs' import { access, constants } from 'fs/promises' import { dirname } from 'path' export async function waitForFile( path: string, timeout: number ): Promise<void> { let currentAction = '' let timeoutRef const timeoutPromise = new Promise<void>((_resolve, reject) => { timeoutRef = setTimeout(() => { reject( new Error(`Timed out waiting for file ${path} (${currentAction}))`) ) }, timeout || 60000) }) const elements: string[] = [] let current = path while (true) { elements.push(current) const parent = dirname(current) if (parent === current) { break } current = parent } elements.reverse() try { for (const element of elements) { const checkAccess = () => access(element, constants.F_OK) .then(() => true) .catch(() => false) if (!(await checkAccess())) { let resolveCheckAgain = () => {} const watcher = watch(dirname(element), () => { resolveCheckAgain() }) currentAction = `waiting for ${element}` let checkAgainPromise = new Promise<void>((resolve) => { resolveCheckAgain = resolve }) try { do { await Promise.race([timeoutPromise, checkAgainPromise]) // eslint-disable-next-line no-loop-func checkAgainPromise = new Promise<void>((resolve) => { resolveCheckAgain = resolve }) } while (!(await checkAccess())) } finally { watcher.close() } } } } finally { clearTimeout(timeoutRef) } }