44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
/**
|
|
* Lazy accessor for proper-lockfile.
|
|
*
|
|
* proper-lockfile depends on graceful-fs, which monkey-patches every fs
|
|
* method on first require (~8ms). Static imports of proper-lockfile pull this
|
|
* cost into the startup path even when no locking happens (e.g. `--help`).
|
|
*
|
|
* Import this module instead of `proper-lockfile` directly. The underlying
|
|
* package is only loaded the first time a lock function is actually called.
|
|
*/
|
|
|
|
import type { CheckOptions, LockOptions, UnlockOptions } from 'proper-lockfile'
|
|
|
|
type Lockfile = typeof import('proper-lockfile')
|
|
|
|
let _lockfile: Lockfile | undefined
|
|
|
|
function getLockfile(): Lockfile {
|
|
if (!_lockfile) {
|
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
_lockfile = require('proper-lockfile') as Lockfile
|
|
}
|
|
return _lockfile
|
|
}
|
|
|
|
export function lock(
|
|
file: string,
|
|
options?: LockOptions,
|
|
): Promise<() => Promise<void>> {
|
|
return getLockfile().lock(file, options)
|
|
}
|
|
|
|
export function lockSync(file: string, options?: LockOptions): () => void {
|
|
return getLockfile().lockSync(file, options)
|
|
}
|
|
|
|
export function unlock(file: string, options?: UnlockOptions): Promise<void> {
|
|
return getLockfile().unlock(file, options)
|
|
}
|
|
|
|
export function check(file: string, options?: CheckOptions): Promise<boolean> {
|
|
return getLockfile().check(file, options)
|
|
}
|