fix: support "other" event type in FSWatcher (#12836)

This commit adds support for "other" events in `FSWatcher`. Flags on
events are now exposed via the `flag` property  on `FsEvent`.
This commit is contained in:
Luca Casonato 2021-11-23 11:30:24 +01:00 committed by GitHub
parent 2eae1ae665
commit ae34f8fa10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 5 deletions

View file

@ -2007,9 +2007,23 @@ declare namespace Deno {
*/
export function resources(): ResourceMap;
/**
* Additional information for FsEvent objects with the "other" kind.
*
* - "rescan": rescan notices indicate either a lapse in the events or a
* change in the filesystem such that events received so far can no longer
* be relied on to represent the state of the filesystem now. An
* application that simply reacts to file changes may not care about this.
* An application that keeps an in-memory representation of the filesystem
* will need to care, and will need to refresh that representation directly
* from the filesystem.
*/
export type FsEventFlag = "rescan";
export interface FsEvent {
kind: "any" | "access" | "create" | "modify" | "remove";
kind: "any" | "access" | "create" | "modify" | "remove" | "other";
paths: string[];
flag?: FsEventFlag;
}
/**

View file

@ -65,8 +65,9 @@ impl Resource for FsEventsResource {
/// the complexity.
#[derive(Serialize, Debug)]
struct FsEvent {
kind: String,
kind: &'static str,
paths: Vec<PathBuf>,
flag: Option<&'static str>,
}
impl From<NotifyEvent> for FsEvent {
@ -77,12 +78,15 @@ impl From<NotifyEvent> for FsEvent {
EventKind::Create(_) => "create",
EventKind::Modify(_) => "modify",
EventKind::Remove(_) => "remove",
EventKind::Other => todo!(), // What's this for? Leaving it out for now.
}
.to_string();
EventKind::Other => "other",
};
let flag = e.flag().map(|f| match f {
notify::event::Flag::Rescan => "rescan",
});
FsEvent {
kind,
paths: e.paths,
flag,
}
}
}