@theia/filesystem 1.77.0-next.6 → 1.77.0-next.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/download/file-download-service.d.ts.map +1 -1
- package/lib/browser/download/file-download-service.js +0 -1
- package/lib/browser/download/file-download-service.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog.js +1 -1
- package/lib/browser/file-dialog/file-dialog.js.map +1 -1
- package/lib/browser/file-resource.spec.js +2 -1
- package/lib/browser/file-resource.spec.js.map +1 -1
- package/lib/browser/file-service-watcher.spec.js +2 -1
- package/lib/browser/file-service-watcher.spec.js.map +1 -1
- package/lib/browser/file-service.d.ts +1 -1
- package/lib/browser/file-service.js +1 -1
- package/lib/browser/file-service.js.map +1 -1
- package/lib/browser/file-tree/file-tree-decorator-adapter.js +1 -1
- package/lib/browser/file-tree/file-tree-decorator-adapter.js.map +1 -1
- package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js +2 -1
- package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js.map +1 -1
- package/lib/browser/file-tree/file-tree-model.js +1 -1
- package/lib/browser/file-tree/file-tree-model.js.map +1 -1
- package/lib/browser/file-tree/file-tree-widget.js +1 -1
- package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
- package/lib/browser/filesystem-frontend-contribution.js +1 -1
- package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
- package/lib/browser/location/location-renderer.js +1 -1
- package/lib/browser/location/location-renderer.js.map +1 -1
- package/lib/browser/location/location-renderer.spec.js +2 -1
- package/lib/browser/location/location-renderer.spec.js.map +1 -1
- package/lib/browser/upload/file-upload-service-impl.js +1 -1
- package/lib/browser/upload/file-upload-service-impl.js.map +1 -1
- package/lib/browser-only/download/file-download-service.js +1 -1
- package/lib/browser-only/download/file-download-service.js.map +1 -1
- package/lib/browser-only/file-search.js +2 -1
- package/lib/browser-only/file-search.js.map +1 -1
- package/lib/browser-only/upload/file-upload-service-impl.js +1 -1
- package/lib/browser-only/upload/file-upload-service-impl.js.map +1 -1
- package/lib/common/files.js +2 -1
- package/lib/common/files.js.map +1 -1
- package/lib/common/files.spec.js +2 -1
- package/lib/common/files.spec.js.map +1 -1
- package/lib/common/filesystem-watcher-protocol.d.ts +4 -0
- package/lib/common/filesystem-watcher-protocol.d.ts.map +1 -1
- package/lib/common/remote-file-system-provider.d.ts +4 -4
- package/lib/common/remote-file-system-provider.d.ts.map +1 -1
- package/lib/common/remote-file-system-provider.js +1 -1
- package/lib/common/remote-file-system-provider.js.map +1 -1
- package/lib/node/disk-file-system-provider.d.ts.map +1 -1
- package/lib/node/disk-file-system-provider.js +8 -5
- package/lib/node/disk-file-system-provider.js.map +1 -1
- package/lib/node/disk-file-system-provider.spec.js +28 -2
- package/lib/node/disk-file-system-provider.spec.js.map +1 -1
- package/lib/node/download/directory-archiver.js +2 -2
- package/lib/node/download/directory-archiver.js.map +1 -1
- package/lib/node/download/directory-archiver.spec.js +5 -4
- package/lib/node/download/directory-archiver.spec.js.map +1 -1
- package/lib/node/download/file-download-handler.d.ts.map +1 -1
- package/lib/node/download/file-download-handler.js +4 -5
- package/lib/node/download/file-download-handler.js.map +1 -1
- package/lib/node/file-change-collection.spec.js +2 -1
- package/lib/node/file-change-collection.spec.js.map +1 -1
- package/lib/node/filesystem-backend-module.d.ts +2 -2
- package/lib/node/filesystem-backend-module.d.ts.map +1 -1
- package/lib/node/filesystem-backend-module.js +7 -5
- package/lib/node/filesystem-backend-module.js.map +1 -1
- package/lib/node/filesystem-watcher-service-impl.d.ts +30 -0
- package/lib/node/filesystem-watcher-service-impl.d.ts.map +1 -0
- package/lib/node/filesystem-watcher-service-impl.js +92 -0
- package/lib/node/filesystem-watcher-service-impl.js.map +1 -0
- package/lib/node/filesystem-watcher-service-impl.spec.d.ts +2 -0
- package/lib/node/filesystem-watcher-service-impl.spec.d.ts.map +1 -0
- package/lib/node/filesystem-watcher-service-impl.spec.js +202 -0
- package/lib/node/filesystem-watcher-service-impl.spec.js.map +1 -0
- package/lib/node/filesystem-watcher.d.ts +93 -0
- package/lib/node/filesystem-watcher.d.ts.map +1 -0
- package/lib/node/filesystem-watcher.js +134 -0
- package/lib/node/filesystem-watcher.js.map +1 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.d.ts +175 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.d.ts.map +1 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.js +580 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.js.map +1 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts +2 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts.map +1 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.spec.js +1284 -0
- package/lib/node/nodejs-watcher/node-directory-watcher.spec.js.map +1 -0
- package/lib/node/nodejs-watcher/watch-request-router.d.ts +63 -0
- package/lib/node/nodejs-watcher/watch-request-router.d.ts.map +1 -0
- package/lib/node/nodejs-watcher/watch-request-router.js +183 -0
- package/lib/node/nodejs-watcher/watch-request-router.js.map +1 -0
- package/lib/node/nodejs-watcher/watcher-host.d.ts +50 -0
- package/lib/node/nodejs-watcher/watcher-host.d.ts.map +1 -0
- package/lib/node/nodejs-watcher/watcher-host.js +99 -0
- package/lib/node/nodejs-watcher/watcher-host.js.map +1 -0
- package/lib/node/parcel-watcher/index.js +4 -3
- package/lib/node/parcel-watcher/index.js.map +1 -1
- package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts +14 -194
- package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -1
- package/lib/node/parcel-watcher/parcel-filesystem-service.js +7 -424
- package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -1
- package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js +8 -7
- package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js.map +1 -1
- package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js +8 -7
- package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js.map +1 -1
- package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js +7 -6
- package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js.map +1 -1
- package/lib/node/parcel-watcher/parcel-watcher.d.ts +165 -0
- package/lib/node/parcel-watcher/parcel-watcher.d.ts.map +1 -0
- package/lib/node/parcel-watcher/parcel-watcher.js +370 -0
- package/lib/node/parcel-watcher/parcel-watcher.js.map +1 -0
- package/lib/node/test/watcher-test-helper.d.ts +21 -0
- package/lib/node/test/watcher-test-helper.d.ts.map +1 -0
- package/lib/node/test/watcher-test-helper.js +56 -0
- package/lib/node/test/watcher-test-helper.js.map +1 -0
- package/lib/node/upload/node-file-upload-service.spec.js +4 -3
- package/lib/node/upload/node-file-upload-service.spec.js.map +1 -1
- package/package.json +7 -7
- package/src/browser/download/file-download-service.ts +0 -1
- package/src/browser/file-service.ts +3 -3
- package/src/common/filesystem-watcher-protocol.ts +4 -0
- package/src/node/disk-file-system-provider.spec.ts +29 -0
- package/src/node/disk-file-system-provider.ts +5 -2
- package/src/node/download/file-download-handler.ts +0 -1
- package/src/node/filesystem-backend-module.ts +5 -4
- package/src/node/filesystem-watcher-service-impl.spec.ts +272 -0
- package/src/node/filesystem-watcher-service-impl.ts +109 -0
- package/src/node/filesystem-watcher.ts +197 -0
- package/src/node/nodejs-watcher/node-directory-watcher.spec.ts +1594 -0
- package/src/node/nodejs-watcher/node-directory-watcher.ts +664 -0
- package/src/node/nodejs-watcher/watch-request-router.ts +224 -0
- package/src/node/nodejs-watcher/watcher-host.ts +126 -0
- package/src/node/parcel-watcher/index.ts +2 -2
- package/src/node/parcel-watcher/parcel-filesystem-service.ts +14 -500
- package/src/node/parcel-watcher/parcel-filesystem-watcher.spec.ts +4 -4
- package/src/node/parcel-watcher/parcel-watcher-exclude.spec.ts +4 -4
- package/src/node/parcel-watcher/parcel-watcher-retry.spec.ts +3 -3
- package/src/node/parcel-watcher/parcel-watcher.ts +432 -0
- package/src/node/test/watcher-test-helper.ts +58 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { CancellationToken } from '@theia/core/lib/common/cancellation';
|
|
2
|
+
import { WatcherHost } from './watcher-host';
|
|
3
|
+
import { FileSystemWatcherServiceClient } from '../../common/filesystem-watcher-protocol';
|
|
4
|
+
import { AbstractFileSystemWatcher, AbstractWatcherProvider, ResolvedWatchOptions, WatcherLogger, WatchRequest } from '../filesystem-watcher';
|
|
5
|
+
import { DirectoryWatchRequest, ResolvedChange, WatchRequestRouter } from './watch-request-router';
|
|
6
|
+
export interface NodeDirectoryWatcherTimings {
|
|
7
|
+
/** Aggregation window before raw events are resolved against the file system. */
|
|
8
|
+
readonly changeDelay: number;
|
|
9
|
+
/** Grace period before a deletion is confirmed, so an atomic save is not reported as one. */
|
|
10
|
+
readonly deleteDelay: number;
|
|
11
|
+
/** Poll interval for a path that does not exist yet. */
|
|
12
|
+
readonly existencePollDelay: number;
|
|
13
|
+
/** How long an unreferenced watcher is kept, so a reconnecting frontend can reuse it. */
|
|
14
|
+
readonly deferredDisposalTimeout: number;
|
|
15
|
+
}
|
|
16
|
+
export declare namespace NodeDirectoryWatcherTimings {
|
|
17
|
+
/** Every delay drives a `setTimeout`, where anything below 1ms silently becomes 1ms. */
|
|
18
|
+
function validate(timings: NodeDirectoryWatcherTimings): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const DEFAULT_WATCHER_TIMINGS: NodeDirectoryWatcherTimings;
|
|
21
|
+
interface PendingEvent {
|
|
22
|
+
eventType: string;
|
|
23
|
+
fileName: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** What the events of one batch share: one directory read, and one timer for the deletions they defer. */
|
|
26
|
+
interface EventBatch {
|
|
27
|
+
/** The child's name on disk, which can differ from `fileName` in case, or `undefined` if there is none. */
|
|
28
|
+
storedName(fileName: string): Promise<string | undefined>;
|
|
29
|
+
scheduleDelete(fileName: string): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Watches one directory level with Node's `fs.watch`.
|
|
33
|
+
*
|
|
34
|
+
* One instance serves every non-recursive request resolving to the same directory, for the directory itself
|
|
35
|
+
* or for a single file in it. Sharing saves more than handles: on macOS libuv keeps one `FSEventStream` per
|
|
36
|
+
* event loop and rebuilds it whenever a handle opens or closes, losing every other watcher's events.
|
|
37
|
+
*/
|
|
38
|
+
export declare class NodeDirectoryWatcher extends AbstractFileSystemWatcher {
|
|
39
|
+
protected readonly client: FileSystemWatcherServiceClient;
|
|
40
|
+
protected readonly timings: NodeDirectoryWatcherTimings;
|
|
41
|
+
protected readonly host: WatcherHost;
|
|
42
|
+
protected watchedDirectory: string;
|
|
43
|
+
/** The path polled and resolved on each start: the target, or its directory once it turned out to be a file. */
|
|
44
|
+
protected watchPath: string;
|
|
45
|
+
private handle;
|
|
46
|
+
/** The identity of the directory the handle is bound to, read before it opened. */
|
|
47
|
+
private identity;
|
|
48
|
+
/** Direct children of {@link watchedDirectory}, kept in sync to classify changes and to diff a rescan. */
|
|
49
|
+
protected children: Set<string>;
|
|
50
|
+
/** Set once a start recorded the children. Until then, what clients saw of them is unknown. */
|
|
51
|
+
private started;
|
|
52
|
+
/** The directory that {@link children} list, which a re-key can move {@link watchedDirectory} away from. */
|
|
53
|
+
private childrenDirectory;
|
|
54
|
+
/** The children clients last saw. Kept until a restart reports its diff, so a superseded restart passes it on. */
|
|
55
|
+
private restartBaseline;
|
|
56
|
+
/** Set once the watched path is found missing, until a start finds it. Changes wait for that start meanwhile. */
|
|
57
|
+
private watchedPathMissing;
|
|
58
|
+
/** The directory last announced through {@link onDidResolveDirectory}, which the provider keys the watcher by. */
|
|
59
|
+
private announcedDirectory;
|
|
60
|
+
protected readonly router: WatchRequestRouter;
|
|
61
|
+
private readonly pendingEvents;
|
|
62
|
+
private readonly pendingDeletes;
|
|
63
|
+
private changeQueue;
|
|
64
|
+
/** Names from `rename` events that arrive while {@link readChildren} runs, else `undefined`. */
|
|
65
|
+
private renamedDuringRead;
|
|
66
|
+
/** Collects raw events for one `changeDelay` window, counted from the first. */
|
|
67
|
+
private readonly scheduleFlush;
|
|
68
|
+
/** Cancels the start attempt in flight, so a superseded one opens no handle. */
|
|
69
|
+
private attempt;
|
|
70
|
+
private disposalTimer;
|
|
71
|
+
private openFailed;
|
|
72
|
+
private readonly directoryResolvedEmitter;
|
|
73
|
+
/** Fires when {@link directory} changes, for example when a missing target appears as a file. */
|
|
74
|
+
readonly onDidResolveDirectory: import("@theia/core").Event<void>;
|
|
75
|
+
/** Resolves once the watcher is up, or once it got disposed while starting. Never rejects. */
|
|
76
|
+
readonly whenStarted: Promise<void>;
|
|
77
|
+
constructor(target: string, options: WatcherLogger, client: FileSystemWatcherServiceClient, timings?: NodeDirectoryWatcherTimings, host?: WatcherHost);
|
|
78
|
+
/** The directory the handle is on, settled once {@link whenStarted} resolved. */
|
|
79
|
+
get directory(): string;
|
|
80
|
+
/** Drains the requests, so that they can be moved to the watcher serving their directory. */
|
|
81
|
+
takeRequests(): Map<number, DirectoryWatchRequest>;
|
|
82
|
+
/**
|
|
83
|
+
* Serves requests that a re-key moved here. After the work queued before them runs, each hears where its path
|
|
84
|
+
* differs from what it takes it for.
|
|
85
|
+
*/
|
|
86
|
+
adoptRequests(requests: Map<number, DirectoryWatchRequest>): void;
|
|
87
|
+
protected createRouter(): WatchRequestRouter;
|
|
88
|
+
addRequest(watcherId: number, request: DirectoryWatchRequest): void;
|
|
89
|
+
removeRequest(watcherId: number): void;
|
|
90
|
+
dispose(): void;
|
|
91
|
+
/** Waits for the target, then opens the handle before reading the children, so no change is missed. */
|
|
92
|
+
protected start(token: CancellationToken): Promise<void>;
|
|
93
|
+
/** Polls until the target exists as a directory to watch and a handle is open. */
|
|
94
|
+
protected openWhenAvailable(token: CancellationToken): Promise<void>;
|
|
95
|
+
/** Records the watched path as missing, and tells each request that takes its path for existing. */
|
|
96
|
+
private reportLoss;
|
|
97
|
+
/** Tells each request where its own path differs from what the watcher last found, whenever it joined. */
|
|
98
|
+
private reconcile;
|
|
99
|
+
/**
|
|
100
|
+
* Reads the children. A child renamed during the read keeps its membership in `known`, as the read can list it
|
|
101
|
+
* or not, and its own event reports it. Only a `rename` announces a creation or a deletion.
|
|
102
|
+
*/
|
|
103
|
+
private readChildren;
|
|
104
|
+
/**
|
|
105
|
+
* Resolves the target to the directory to watch. Requests made while the target was missing are resolved
|
|
106
|
+
* here too, and narrowed to the file if the target is one.
|
|
107
|
+
* @returns `false` if the path is a file that the watcher cannot follow to its parent.
|
|
108
|
+
*/
|
|
109
|
+
protected resolveWatchedDirectory(): Promise<boolean>;
|
|
110
|
+
protected openHandle(): boolean;
|
|
111
|
+
private closeHandle;
|
|
112
|
+
protected handleEvent(eventType: string, fileName: string | null): void;
|
|
113
|
+
private flush;
|
|
114
|
+
/** Serializes the async parts of change handling so later events cannot overtake earlier ones. */
|
|
115
|
+
private enqueue;
|
|
116
|
+
protected processEvents(events: PendingEvent[]): Promise<ResolvedChange[]>;
|
|
117
|
+
/**
|
|
118
|
+
* @returns `true` if an event names the watched directory itself rather than a child. macOS reports such an
|
|
119
|
+
* event for any change inside, so {@link isWatchedDirectoryGone} decides whether the directory is gone. A
|
|
120
|
+
* new child with the same name is not in {@link children} yet, so the disk rules it out.
|
|
121
|
+
*/
|
|
122
|
+
protected namesWatchedDirectory(fileName: string, batch: EventBatch): Promise<boolean>;
|
|
123
|
+
/** The change this rename resolves to, or `undefined` when it is deferred to the delete timer. */
|
|
124
|
+
protected resolveRename(fileName: string, batch: EventBatch): Promise<ResolvedChange | undefined>;
|
|
125
|
+
/** Records a child found on disk: an update if it was known, an addition if not. */
|
|
126
|
+
private recordPresent;
|
|
127
|
+
/** A new {@link EventBatch}. Where names ignore case, its lookups share one directory read. */
|
|
128
|
+
protected createBatch(): EventBatch;
|
|
129
|
+
/**
|
|
130
|
+
* A deletion is confirmed rather than reported right away: tools that save atomically delete and recreate
|
|
131
|
+
* the file, which would otherwise surface as a deletion followed by an addition. The deletions of one batch
|
|
132
|
+
* share a timer, created on first use, so that they are confirmed with one directory read as well.
|
|
133
|
+
*/
|
|
134
|
+
private deleteScheduler;
|
|
135
|
+
/** Leaves the shared timer running: it confirms only the names still waiting on it. */
|
|
136
|
+
private cancelDelete;
|
|
137
|
+
private clearPendingDeletes;
|
|
138
|
+
/**
|
|
139
|
+
* Confirms the deletions of `scheduled` still waiting on `timer`. A deletion cancelled meanwhile is no longer on
|
|
140
|
+
* it. Only the names this timer scheduled are checked, so each confirmation costs its own batch, not every pending one.
|
|
141
|
+
*/
|
|
142
|
+
protected confirmDeletes(timer: NodeJS.Timeout, scheduled: readonly string[]): Promise<ResolvedChange[]>;
|
|
143
|
+
protected confirmDelete(fileName: string, storedName: EventBatch['storedName']): Promise<ResolvedChange[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Compares identity rather than mere existence: a directory that is deleted and recreated leaves the handle
|
|
146
|
+
* bound to the old inode, where it would never report anything again.
|
|
147
|
+
*/
|
|
148
|
+
protected isWatchedDirectoryGone(): Promise<boolean>;
|
|
149
|
+
/** Closes the handle and starts over, reporting the watched paths as deleted if the directory is gone. */
|
|
150
|
+
protected restart(error?: unknown): void;
|
|
151
|
+
/** Deletions come first, so a case-only rename resolves to an update for a request for the file. */
|
|
152
|
+
protected diff(previous: Set<string>, current: Set<string>): ResolvedChange[];
|
|
153
|
+
}
|
|
154
|
+
/** Serves non-recursive requests. Those resolving to the same directory share one watcher, file or folder alike. */
|
|
155
|
+
export declare class DirectoryWatcherProvider extends AbstractWatcherProvider {
|
|
156
|
+
protected readonly options: WatcherLogger;
|
|
157
|
+
protected readonly client: FileSystemWatcherServiceClient;
|
|
158
|
+
protected readonly timings?: NodeDirectoryWatcherTimings | undefined;
|
|
159
|
+
/** Shared, so every watcher this provider makes resolves paths the same way. */
|
|
160
|
+
protected readonly host: WatcherHost;
|
|
161
|
+
constructor(options: WatcherLogger, client: FileSystemWatcherServiceClient, timings?: NodeDirectoryWatcherTimings | undefined,
|
|
162
|
+
/** Shared, so every watcher this provider makes resolves paths the same way. */
|
|
163
|
+
host?: WatcherHost);
|
|
164
|
+
canHandle(options: ResolvedWatchOptions): boolean;
|
|
165
|
+
watch(watcherId: number, request: WatchRequest): Promise<void>;
|
|
166
|
+
/** While the path does not exist, `directory` is a guess, so re-key the watcher once it resolves. */
|
|
167
|
+
protected createRekeyingWatcher(directory: string): NodeDirectoryWatcher;
|
|
168
|
+
/** Moves a watcher to the key of the directory it resolved to, or hands its requests to the one there. */
|
|
169
|
+
protected rekeyWatcher(watcher: NodeDirectoryWatcher): void;
|
|
170
|
+
/** Excludes are left out: one level has nothing to prune, so they apply per request. */
|
|
171
|
+
protected watcherKey(directory: string): string;
|
|
172
|
+
protected createWatcher(directory: string): NodeDirectoryWatcher;
|
|
173
|
+
}
|
|
174
|
+
export {};
|
|
175
|
+
//# sourceMappingURL=node-directory-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-directory-watcher.d.ts","sourceRoot":"","sources":["../../../src/node/nodejs-watcher/node-directory-watcher.ts"],"names":[],"mappings":"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"}
|