UNPKG

3.51 kBPlain TextView Raw
1import {Directory, DirectoryContent, File, ShallowDirectory} from "./model";
2
3export interface FileSystemEvent {
4 type: keyof Events;
5 correlation?: Correlation;
6}
7
8export interface UnexpectedErrorEvent extends FileSystemEvent {
9 type: 'unexpectedError';
10 stack?: string;
11}
12
13export interface FileCreatedEvent extends FileSystemEvent {
14 type: 'fileCreated';
15 fullPath: string;
16 newContent: string;
17}
18
19export interface FileChangedEvent extends FileSystemEvent {
20 type: 'fileChanged';
21 fullPath: string;
22 newContent: string;
23}
24
25export interface FileDeletedEvent extends FileSystemEvent {
26 type: 'fileDeleted';
27 fullPath: string;
28}
29
30export interface DirectoryCreatedEvent extends FileSystemEvent {
31 type: 'directoryCreated';
32 fullPath: string;
33}
34
35export interface DirectoryDeletedEvent extends FileSystemEvent {
36 type: 'directoryDeleted';
37 fullPath: string;
38}
39
40export interface Disposable {
41 dispose(): void
42}
43
44export function isDisposable(fs: any): fs is Disposable {
45 return !!fs && typeof fs.dispose === 'function';
46}
47
48export type ListenerFn<T> = (event: T) => any;
49
50export type Events = {
51 unexpectedError: UnexpectedErrorEvent;
52 fileCreated: FileCreatedEvent;
53 fileChanged: FileChangedEvent;
54 fileDeleted: FileDeletedEvent;
55 directoryCreated: DirectoryCreatedEvent;
56 directoryDeleted: DirectoryDeletedEvent;
57
58}
59export const fileSystemEventNames: Array<keyof Events> = ['unexpectedError', 'fileCreated', 'fileChanged', 'fileDeleted', 'directoryCreated', 'directoryDeleted'];
60export const fileSystemAsyncMethods: Array<keyof FileSystem> = ['saveFile', 'deleteFile', 'deleteDirectory', 'loadTextFile', 'loadDirectoryTree', 'ensureDirectory', 'loadDirectoryChildren'];
61
62export type Correlation = string;
63
64export interface EventEmitter {
65 listeners<S extends keyof Events>(event: S, exists: boolean): Array<ListenerFn<Events[S]>> | boolean;
66
67 listeners<S extends keyof Events>(event: S): Array<ListenerFn<Events[S]>>;
68
69 on<S extends keyof Events>(event: S, fn: ListenerFn<Events[S]>, context?: any): this;
70
71 addListener<S extends keyof Events>(event: S, fn: ListenerFn<Events[S]>, context?: any): this;
72
73 once<S extends keyof Events>(event: S, fn: ListenerFn<Events[S]>, context?: any): this;
74
75 removeListener<S extends keyof Events>(event: S, fn?: ListenerFn<Events[S]>, context?: any, once?: boolean): this;
76
77 removeAllListeners<S extends keyof Events>(event: S): this;
78
79 off<S extends keyof Events>(event: S, fn?: ListenerFn<Events[S]>, context?: any, once?: boolean): this;
80
81 eventNames(): Array<keyof Events>
82}
83
84
85export interface FileSystem {
86 readonly events: EventEmitter;
87 readonly baseUrl: string;
88
89 saveFile(fullPath: string, newContent: string): Promise<Correlation>;
90
91 deleteFile(fullPath: string): Promise<Correlation>;
92
93 deleteDirectory(fullPath: string, recursive?: boolean): Promise<Correlation>;
94
95 ensureDirectory(fullPath: string): Promise<Correlation>;
96
97 loadTextFile(fullPath: string): Promise<string>;
98
99 loadDirectoryTree(fullPath?: string): Promise<Directory>;
100
101 loadDirectoryChildren(fullPath: string): Promise<(File | ShallowDirectory)[]>;
102}
103
104
105export interface FileSystemReadSync extends FileSystem {
106
107 loadTextFileSync(fullPath: string): string;
108
109 loadDirectoryTreeSync(fullPath?: string): Directory;
110
111 loadDirectoryContentSync(fullPath?: string): DirectoryContent;
112
113 loadDirectoryChildrenSync(fullPath: string): Array<File | ShallowDirectory>;
114}