1 | import {Directory, DirectoryContent, File, ShallowDirectory} from "./model";
|
2 |
|
3 | export interface FileSystemEvent {
|
4 | type: keyof Events;
|
5 | correlation?: Correlation;
|
6 | }
|
7 |
|
8 | export interface UnexpectedErrorEvent extends FileSystemEvent {
|
9 | type: 'unexpectedError';
|
10 | stack?: string;
|
11 | }
|
12 |
|
13 | export interface FileCreatedEvent extends FileSystemEvent {
|
14 | type: 'fileCreated';
|
15 | fullPath: string;
|
16 | newContent: string;
|
17 | }
|
18 |
|
19 | export interface FileChangedEvent extends FileSystemEvent {
|
20 | type: 'fileChanged';
|
21 | fullPath: string;
|
22 | newContent: string;
|
23 | }
|
24 |
|
25 | export interface FileDeletedEvent extends FileSystemEvent {
|
26 | type: 'fileDeleted';
|
27 | fullPath: string;
|
28 | }
|
29 |
|
30 | export interface DirectoryCreatedEvent extends FileSystemEvent {
|
31 | type: 'directoryCreated';
|
32 | fullPath: string;
|
33 | }
|
34 |
|
35 | export interface DirectoryDeletedEvent extends FileSystemEvent {
|
36 | type: 'directoryDeleted';
|
37 | fullPath: string;
|
38 | }
|
39 |
|
40 | export interface Disposable {
|
41 | dispose(): void
|
42 | }
|
43 |
|
44 | export function isDisposable(fs: any): fs is Disposable {
|
45 | return !!fs && typeof fs.dispose === 'function';
|
46 | }
|
47 |
|
48 | export type ListenerFn<T> = (event: T) => any;
|
49 |
|
50 | export type Events = {
|
51 | unexpectedError: UnexpectedErrorEvent;
|
52 | fileCreated: FileCreatedEvent;
|
53 | fileChanged: FileChangedEvent;
|
54 | fileDeleted: FileDeletedEvent;
|
55 | directoryCreated: DirectoryCreatedEvent;
|
56 | directoryDeleted: DirectoryDeletedEvent;
|
57 |
|
58 | }
|
59 | export const fileSystemEventNames: Array<keyof Events> = ['unexpectedError', 'fileCreated', 'fileChanged', 'fileDeleted', 'directoryCreated', 'directoryDeleted'];
|
60 | export const fileSystemAsyncMethods: Array<keyof FileSystem> = ['saveFile', 'deleteFile', 'deleteDirectory', 'loadTextFile', 'loadDirectoryTree', 'ensureDirectory', 'loadDirectoryChildren'];
|
61 |
|
62 | export type Correlation = string;
|
63 |
|
64 | export 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 |
|
85 | export 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 |
|
105 | export 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 | }
|