mirror of
https://github.com/joelwmale/webhook-action.git
synced 2024-08-25 08:08:00 +00:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import Settings from '../settings';
|
|
import { ErrnoException, Stats } from '../types';
|
|
|
|
type FailureCallback = (err: ErrnoException) => void;
|
|
type SuccessCallback = (err: null, stats: Stats) => void;
|
|
|
|
export type AsyncCallback = (err: ErrnoException, stats: Stats) => void;
|
|
|
|
export function read(path: string, settings: Settings, callback: AsyncCallback): void {
|
|
settings.fs.lstat(path, (lstatError, lstat) => {
|
|
if (lstatError !== null) {
|
|
return callFailureCallback(callback, lstatError);
|
|
}
|
|
|
|
if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
|
|
return callSuccessCallback(callback, lstat);
|
|
}
|
|
|
|
settings.fs.stat(path, (statError, stat) => {
|
|
if (statError !== null) {
|
|
if (settings.throwErrorOnBrokenSymbolicLink) {
|
|
return callFailureCallback(callback, statError);
|
|
}
|
|
|
|
return callSuccessCallback(callback, lstat);
|
|
}
|
|
|
|
if (settings.markSymbolicLink) {
|
|
stat.isSymbolicLink = () => true;
|
|
}
|
|
|
|
callSuccessCallback(callback, stat);
|
|
});
|
|
});
|
|
}
|
|
|
|
function callFailureCallback(callback: AsyncCallback, error: ErrnoException): void {
|
|
(callback as FailureCallback)(error);
|
|
}
|
|
|
|
function callSuccessCallback(callback: AsyncCallback, result: Stats): void {
|
|
(callback as unknown as SuccessCallback)(null, result);
|
|
}
|