@theia/filesystem 1.53.2 → 1.55.0-next.14
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/file-resource.d.ts +2 -0
- package/lib/browser/file-resource.d.ts.map +1 -1
- package/lib/browser/file-resource.js +11 -0
- package/lib/browser/file-resource.js.map +1 -1
- package/lib/browser/file-resource.spec.d.ts +2 -0
- package/lib/browser/file-resource.spec.d.ts.map +1 -0
- package/lib/browser/file-resource.spec.js +191 -0
- package/lib/browser/file-resource.spec.js.map +1 -0
- package/lib/browser/file-tree/file-tree-model.d.ts +1 -5
- package/lib/browser/file-tree/file-tree-model.d.ts.map +1 -1
- package/lib/browser/file-tree/file-tree-model.js +0 -17
- package/lib/browser/file-tree/file-tree-model.js.map +1 -1
- package/lib/browser/filesystem-preferences.d.ts.map +1 -1
- package/lib/browser/filesystem-preferences.js +1 -2
- package/lib/browser/filesystem-preferences.js.map +1 -1
- package/lib/node/filesystem-backend-module.d.ts +8 -8
- package/lib/node/filesystem-backend-module.d.ts.map +1 -1
- package/lib/node/filesystem-backend-module.js +27 -27
- package/lib/node/filesystem-backend-module.js.map +1 -1
- package/lib/node/filesystem-watcher-client.d.ts +1 -2
- package/lib/node/filesystem-watcher-client.d.ts.map +1 -1
- package/lib/node/filesystem-watcher-client.js +2 -3
- package/lib/node/filesystem-watcher-client.js.map +1 -1
- package/lib/node/parcel-watcher/index.d.ts.map +1 -0
- package/lib/node/{nsfw-watcher → parcel-watcher}/index.js +3 -3
- package/lib/node/parcel-watcher/index.js.map +1 -0
- package/lib/node/{nsfw-watcher/nsfw-filesystem-service.d.ts → parcel-watcher/parcel-filesystem-service.d.ts} +29 -29
- package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -0
- package/lib/node/{nsfw-watcher/nsfw-filesystem-service.js → parcel-watcher/parcel-filesystem-service.js} +55 -66
- package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -0
- package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.d.ts +2 -0
- package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.d.ts.map +1 -0
- package/lib/node/{nsfw-watcher/nsfw-filesystem-watcher.spec.js → parcel-watcher/parcel-filesystem-watcher.spec.js} +22 -29
- package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js.map +1 -0
- package/lib/node/parcel-watcher/parcel-options.d.ts +7 -0
- package/lib/node/parcel-watcher/parcel-options.d.ts.map +1 -0
- package/lib/node/{nsfw-watcher/nsfw-options.js → parcel-watcher/parcel-options.js} +4 -4
- package/lib/node/parcel-watcher/parcel-options.js.map +1 -0
- package/package.json +4 -4
- package/src/browser/file-resource.spec.ts +255 -0
- package/src/browser/file-resource.ts +12 -0
- package/src/browser/file-tree/file-tree-model.ts +1 -19
- package/src/browser/filesystem-preferences.ts +1 -2
- package/src/node/filesystem-backend-module.ts +27 -27
- package/src/node/filesystem-watcher-client.ts +1 -3
- package/src/node/{nsfw-watcher → parcel-watcher}/index.ts +3 -3
- package/src/node/{nsfw-watcher/nsfw-filesystem-service.ts → parcel-watcher/parcel-filesystem-service.ts} +62 -72
- package/src/node/{nsfw-watcher/nsfw-filesystem-watcher.spec.ts → parcel-watcher/parcel-filesystem-watcher.spec.ts} +22 -29
- package/src/node/{nsfw-watcher/nsfw-options.ts → parcel-watcher/parcel-options.ts} +4 -4
- package/lib/node/nsfw-watcher/index.d.ts.map +0 -1
- package/lib/node/nsfw-watcher/index.js.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-service.d.ts.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-service.js.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.d.ts +0 -2
- package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.d.ts.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.js.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-options.d.ts +0 -7
- package/lib/node/nsfw-watcher/nsfw-options.d.ts.map +0 -1
- package/lib/node/nsfw-watcher/nsfw-options.js.map +0 -1
- package/src/typings/nsfw/index.d.ts +0 -18
- /package/lib/node/{nsfw-watcher → parcel-watcher}/index.d.ts +0 -0
|
@@ -19,9 +19,9 @@ import { ContainerModule, interfaces } from '@theia/core/shared/inversify';
|
|
|
19
19
|
import { ConnectionHandler, RpcConnectionHandler, ILogger } from '@theia/core/lib/common';
|
|
20
20
|
import { FileSystemWatcherServer, FileSystemWatcherService } from '../common/filesystem-watcher-protocol';
|
|
21
21
|
import { FileSystemWatcherServerClient } from './filesystem-watcher-client';
|
|
22
|
-
import {
|
|
22
|
+
import { ParcelFileSystemWatcherService, ParcelFileSystemWatcherServerOptions } from './parcel-watcher/parcel-filesystem-service';
|
|
23
23
|
import { NodeFileUploadService } from './node-file-upload-service';
|
|
24
|
-
import {
|
|
24
|
+
import { ParcelWatcherOptions } from './parcel-watcher/parcel-options';
|
|
25
25
|
import { DiskFileSystemProvider } from './disk-file-system-provider';
|
|
26
26
|
import {
|
|
27
27
|
remoteFileSystemPath, RemoteFileSystemServer, RemoteFileSystemClient, FileSystemProviderServer, RemoteFileSystemProxyFactory
|
|
@@ -32,16 +32,16 @@ import { BackendApplicationContribution, IPCConnectionProvider } from '@theia/co
|
|
|
32
32
|
import { RpcProxyFactory, ConnectionErrorHandler } from '@theia/core';
|
|
33
33
|
import { FileSystemWatcherServiceDispatcher } from './filesystem-watcher-dispatcher';
|
|
34
34
|
|
|
35
|
-
export const
|
|
36
|
-
export const
|
|
35
|
+
export const WATCHER_SINGLE_THREADED = process.argv.includes('--no-cluster');
|
|
36
|
+
export const WATCHER_VERBOSE = process.argv.includes('--watcher-verbose');
|
|
37
37
|
|
|
38
|
-
export const
|
|
38
|
+
export const FileSystemWatcherServiceProcessOptions = Symbol('FileSystemWatcherServiceProcessOptions');
|
|
39
39
|
/**
|
|
40
|
-
* Options to control the way the `
|
|
40
|
+
* Options to control the way the `ParcelFileSystemWatcherService` process is spawned.
|
|
41
41
|
*/
|
|
42
|
-
export interface
|
|
42
|
+
export interface FileSystemWatcherServiceProcessOptions {
|
|
43
43
|
/**
|
|
44
|
-
* Path to the script that will run the `
|
|
44
|
+
* Path to the script that will run the `ParcelFileSystemWatcherService` in a new process.
|
|
45
45
|
*/
|
|
46
46
|
entryPoint: string;
|
|
47
47
|
}
|
|
@@ -66,41 +66,41 @@ export default new ContainerModule(bind => {
|
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
export function bindFileSystemWatcherServer(bind: interfaces.Bind): void {
|
|
69
|
-
bind<
|
|
69
|
+
bind<ParcelWatcherOptions>(ParcelWatcherOptions).toConstantValue({});
|
|
70
70
|
|
|
71
71
|
bind(FileSystemWatcherServiceDispatcher).toSelf().inSingletonScope();
|
|
72
72
|
|
|
73
73
|
bind(FileSystemWatcherServerClient).toSelf();
|
|
74
74
|
bind(FileSystemWatcherServer).toService(FileSystemWatcherServerClient);
|
|
75
75
|
|
|
76
|
-
bind<
|
|
77
|
-
entryPoint: path.join(__dirname, '
|
|
76
|
+
bind<FileSystemWatcherServiceProcessOptions>(FileSystemWatcherServiceProcessOptions).toDynamicValue(ctx => ({
|
|
77
|
+
entryPoint: path.join(__dirname, 'parcel-watcher'),
|
|
78
78
|
})).inSingletonScope();
|
|
79
|
-
bind<
|
|
79
|
+
bind<ParcelFileSystemWatcherServerOptions>(ParcelFileSystemWatcherServerOptions).toDynamicValue(ctx => {
|
|
80
80
|
const logger = ctx.container.get<ILogger>(ILogger);
|
|
81
|
-
const
|
|
81
|
+
const watcherOptions = ctx.container.get<ParcelWatcherOptions>(ParcelWatcherOptions);
|
|
82
82
|
return {
|
|
83
|
-
|
|
84
|
-
verbose:
|
|
83
|
+
parcelOptions: watcherOptions,
|
|
84
|
+
verbose: WATCHER_VERBOSE,
|
|
85
85
|
info: (message, ...args) => logger.info(message, ...args),
|
|
86
86
|
error: (message, ...args) => logger.error(message, ...args),
|
|
87
87
|
};
|
|
88
88
|
}).inSingletonScope();
|
|
89
89
|
|
|
90
90
|
bind<FileSystemWatcherService>(FileSystemWatcherService).toDynamicValue(
|
|
91
|
-
ctx =>
|
|
92
|
-
?
|
|
93
|
-
:
|
|
91
|
+
ctx => WATCHER_SINGLE_THREADED
|
|
92
|
+
? createParcelFileSystemWatcherService(ctx)
|
|
93
|
+
: spawnParcelFileSystemWatcherServiceProcess(ctx)
|
|
94
94
|
).inSingletonScope();
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
98
|
* Run the watch server in the current process.
|
|
99
99
|
*/
|
|
100
|
-
export function
|
|
101
|
-
const options = ctx.container.get<
|
|
100
|
+
export function createParcelFileSystemWatcherService(ctx: interfaces.Context): FileSystemWatcherService {
|
|
101
|
+
const options = ctx.container.get<ParcelFileSystemWatcherServerOptions>(ParcelFileSystemWatcherServerOptions);
|
|
102
102
|
const dispatcher = ctx.container.get<FileSystemWatcherServiceDispatcher>(FileSystemWatcherServiceDispatcher);
|
|
103
|
-
const server = new
|
|
103
|
+
const server = new ParcelFileSystemWatcherService(options);
|
|
104
104
|
server.setClient(dispatcher);
|
|
105
105
|
return server;
|
|
106
106
|
}
|
|
@@ -109,21 +109,21 @@ export function createNsfwFileSystemWatcherService(ctx: interfaces.Context): Fil
|
|
|
109
109
|
* Run the watch server in a child process.
|
|
110
110
|
* Return a proxy forwarding calls to the child process.
|
|
111
111
|
*/
|
|
112
|
-
export function
|
|
113
|
-
const options = ctx.container.get<
|
|
112
|
+
export function spawnParcelFileSystemWatcherServiceProcess(ctx: interfaces.Context): FileSystemWatcherService {
|
|
113
|
+
const options = ctx.container.get<FileSystemWatcherServiceProcessOptions>(FileSystemWatcherServiceProcessOptions);
|
|
114
114
|
const dispatcher = ctx.container.get<FileSystemWatcherServiceDispatcher>(FileSystemWatcherServiceDispatcher);
|
|
115
|
-
const serverName = '
|
|
115
|
+
const serverName = 'parcel-watcher';
|
|
116
116
|
const logger = ctx.container.get<ILogger>(ILogger);
|
|
117
|
-
const
|
|
117
|
+
const watcherOptions = ctx.container.get<ParcelWatcherOptions>(ParcelWatcherOptions);
|
|
118
118
|
const ipcConnectionProvider = ctx.container.get<IPCConnectionProvider>(IPCConnectionProvider);
|
|
119
119
|
const proxyFactory = new RpcProxyFactory<FileSystemWatcherService>();
|
|
120
120
|
const serverProxy = proxyFactory.createProxy();
|
|
121
121
|
// We need to call `.setClient` before listening, else the JSON-RPC calls won't go through.
|
|
122
122
|
serverProxy.setClient(dispatcher);
|
|
123
123
|
const args: string[] = [
|
|
124
|
-
`--
|
|
124
|
+
`--watchOptions=${JSON.stringify(watcherOptions)}`
|
|
125
125
|
];
|
|
126
|
-
if (
|
|
126
|
+
if (WATCHER_VERBOSE) {
|
|
127
127
|
args.push('--verbose');
|
|
128
128
|
}
|
|
129
129
|
ipcConnectionProvider.listen({
|
|
@@ -18,10 +18,8 @@ import { injectable, inject } from '@theia/core/shared/inversify';
|
|
|
18
18
|
import { FileSystemWatcherServer, WatchOptions, FileSystemWatcherClient, FileSystemWatcherService } from '../common/filesystem-watcher-protocol';
|
|
19
19
|
import { FileSystemWatcherServiceDispatcher } from './filesystem-watcher-dispatcher';
|
|
20
20
|
|
|
21
|
-
export const NSFW_WATCHER = 'nsfw-watcher';
|
|
22
|
-
|
|
23
21
|
/**
|
|
24
|
-
* Wraps the
|
|
22
|
+
* Wraps the watcher singleton service for each frontend.
|
|
25
23
|
*/
|
|
26
24
|
@injectable()
|
|
27
25
|
export class FileSystemWatcherServerClient implements FileSystemWatcherServer {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import * as yargs from '@theia/core/shared/yargs';
|
|
18
18
|
import { RpcProxyFactory } from '@theia/core';
|
|
19
19
|
import { FileSystemWatcherServiceClient } from '../../common/filesystem-watcher-protocol';
|
|
20
|
-
import {
|
|
20
|
+
import { ParcelFileSystemWatcherService } from './parcel-filesystem-service';
|
|
21
21
|
import { IPCEntryPoint } from '@theia/core/lib/node/messaging/ipc-protocol';
|
|
22
22
|
|
|
23
23
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
@@ -30,7 +30,7 @@ const options: {
|
|
|
30
30
|
alias: 'v',
|
|
31
31
|
type: 'boolean'
|
|
32
32
|
})
|
|
33
|
-
.option('
|
|
33
|
+
.option('watchOptions', {
|
|
34
34
|
alias: 'o',
|
|
35
35
|
type: 'string',
|
|
36
36
|
coerce: JSON.parse
|
|
@@ -38,7 +38,7 @@ const options: {
|
|
|
38
38
|
.argv as any;
|
|
39
39
|
|
|
40
40
|
export default <IPCEntryPoint>(connection => {
|
|
41
|
-
const server = new
|
|
41
|
+
const server = new ParcelFileSystemWatcherService(options);
|
|
42
42
|
const factory = new RpcProxyFactory<FileSystemWatcherServiceClient>(server);
|
|
43
43
|
server.setClient(factory.createProxy());
|
|
44
44
|
factory.listen(connection);
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import nsfw = require('@theia/core/shared/nsfw');
|
|
18
17
|
import path = require('path');
|
|
19
18
|
import { promises as fsp } from 'fs';
|
|
20
19
|
import { IMinimatch, Minimatch } from 'minimatch';
|
|
@@ -24,19 +23,20 @@ import {
|
|
|
24
23
|
} from '../../common/filesystem-watcher-protocol';
|
|
25
24
|
import { FileChangeCollection } from '../file-change-collection';
|
|
26
25
|
import { Deferred, timeout } from '@theia/core/lib/common/promise-util';
|
|
26
|
+
import { subscribe, Options, AsyncSubscription, Event } from '@theia/core/shared/@parcel/watcher';
|
|
27
27
|
|
|
28
|
-
export interface
|
|
28
|
+
export interface ParcelWatcherOptions {
|
|
29
29
|
ignored: IMinimatch[]
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export const
|
|
33
|
-
export interface
|
|
32
|
+
export const ParcelFileSystemWatcherServerOptions = Symbol('ParcelFileSystemWatcherServerOptions');
|
|
33
|
+
export interface ParcelFileSystemWatcherServerOptions {
|
|
34
34
|
verbose: boolean;
|
|
35
35
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
36
|
info: (message: string, ...args: any[]) => void;
|
|
37
37
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
38
|
error: (message: string, ...args: any[]) => void;
|
|
39
|
-
|
|
39
|
+
parcelOptions: Options;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -54,7 +54,7 @@ export const WatcherDisposal = Symbol('WatcherDisposal');
|
|
|
54
54
|
* Once there are no more references the handle
|
|
55
55
|
* will wait for some time before destroying its resources.
|
|
56
56
|
*/
|
|
57
|
-
export class
|
|
57
|
+
export class ParcelWatcher {
|
|
58
58
|
|
|
59
59
|
protected static debugIdSequence = 0;
|
|
60
60
|
|
|
@@ -63,12 +63,12 @@ export class NsfwWatcher {
|
|
|
63
63
|
/**
|
|
64
64
|
* Used for debugging to keep track of the watchers.
|
|
65
65
|
*/
|
|
66
|
-
protected debugId =
|
|
66
|
+
protected debugId = ParcelWatcher.debugIdSequence++;
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
* When this field is set, it means the
|
|
69
|
+
* When this field is set, it means the watcher instance was successfully started.
|
|
70
70
|
*/
|
|
71
|
-
protected
|
|
71
|
+
protected watcher: AsyncSubscription | undefined;
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
74
|
* When the ref count hits zero, we schedule this watch handle to be disposed.
|
|
@@ -93,7 +93,7 @@ export class NsfwWatcher {
|
|
|
93
93
|
* Ensures that events are processed in the order they are emitted,
|
|
94
94
|
* despite being processed async.
|
|
95
95
|
*/
|
|
96
|
-
protected
|
|
96
|
+
protected parcelEventProcessingQueue: Promise<void> = Promise.resolve();
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
99
|
* Resolves once this handle disposed itself and its resources. Never throws.
|
|
@@ -115,9 +115,9 @@ export class NsfwWatcher {
|
|
|
115
115
|
/** Filesystem path to be watched. */
|
|
116
116
|
readonly fsPath: string,
|
|
117
117
|
/** Watcher-specific options */
|
|
118
|
-
readonly watcherOptions:
|
|
119
|
-
/** Logging and
|
|
120
|
-
protected readonly
|
|
118
|
+
readonly watcherOptions: ParcelWatcherOptions,
|
|
119
|
+
/** Logging and parcel watcher options */
|
|
120
|
+
protected readonly parcelFileSystemWatchServerOptions: ParcelFileSystemWatcherServerOptions,
|
|
121
121
|
/** The client to forward events to. */
|
|
122
122
|
protected readonly fileSystemWatcherClient: FileSystemWatcherServiceClient,
|
|
123
123
|
/** Amount of time in ms to wait once this handle is not referenced anymore. */
|
|
@@ -207,7 +207,7 @@ export class NsfwWatcher {
|
|
|
207
207
|
|
|
208
208
|
/**
|
|
209
209
|
* When starting a watcher, we'll first check and wait for the path to exists
|
|
210
|
-
* before running
|
|
210
|
+
* before running a parcel watcher.
|
|
211
211
|
*/
|
|
212
212
|
protected async start(): Promise<void> {
|
|
213
213
|
while (await fsp.stat(this.fsPath).then(() => false, () => true)) {
|
|
@@ -215,71 +215,61 @@ export class NsfwWatcher {
|
|
|
215
215
|
this.assertNotDisposed();
|
|
216
216
|
}
|
|
217
217
|
this.assertNotDisposed();
|
|
218
|
-
const watcher = await this.
|
|
218
|
+
const watcher = await this.createWatcher();
|
|
219
219
|
this.assertNotDisposed();
|
|
220
|
-
await watcher.start();
|
|
221
220
|
this.debug('STARTED', `disposed=${this.disposed}`);
|
|
222
221
|
// The watcher could be disposed while it was starting, make sure to check for this:
|
|
223
222
|
if (this.disposed) {
|
|
224
|
-
await this.
|
|
223
|
+
await this.stopWatcher(watcher);
|
|
225
224
|
throw WatcherDisposal;
|
|
226
225
|
}
|
|
227
|
-
this.
|
|
226
|
+
this.watcher = watcher;
|
|
228
227
|
}
|
|
229
228
|
|
|
230
229
|
/**
|
|
231
|
-
* Given a started
|
|
230
|
+
* Given a started parcel watcher instance, gracefully shut it down.
|
|
232
231
|
*/
|
|
233
|
-
protected async
|
|
234
|
-
await watcher.
|
|
232
|
+
protected async stopWatcher(watcher: AsyncSubscription): Promise<void> {
|
|
233
|
+
await watcher.unsubscribe()
|
|
235
234
|
.then(() => 'success=true', error => error)
|
|
236
235
|
.then(status => this.debug('STOPPED', status));
|
|
237
236
|
}
|
|
238
237
|
|
|
239
|
-
protected async
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
console.error(`
|
|
238
|
+
protected async createWatcher(): Promise<AsyncSubscription> {
|
|
239
|
+
let fsPath = await fsp.realpath(this.fsPath);
|
|
240
|
+
if ((await fsp.stat(fsPath)).isFile()) {
|
|
241
|
+
fsPath = path.dirname(fsPath);
|
|
242
|
+
}
|
|
243
|
+
return subscribe(fsPath, (err, events) => {
|
|
244
|
+
if (err) {
|
|
245
|
+
console.error(`Watcher service error on "${fsPath}":`, err);
|
|
247
246
|
this._dispose();
|
|
248
247
|
this.fireError();
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
this.handleWatcherEvents(events);
|
|
251
|
+
}, {
|
|
252
|
+
...this.parcelFileSystemWatchServerOptions.parcelOptions
|
|
254
253
|
});
|
|
255
254
|
}
|
|
256
255
|
|
|
257
|
-
protected
|
|
256
|
+
protected handleWatcherEvents(events: Event[]): void {
|
|
258
257
|
// Only process events if someone is listening.
|
|
259
258
|
if (this.isInUse()) {
|
|
260
|
-
// This callback is async, but
|
|
259
|
+
// This callback is async, but parcel won't wait for it to finish before firing the next one.
|
|
261
260
|
// We will use a lock/queue to make sure everything is processed in the order it arrives.
|
|
262
|
-
this.
|
|
261
|
+
this.parcelEventProcessingQueue = this.parcelEventProcessingQueue.then(async () => {
|
|
263
262
|
const fileChangeCollection = new FileChangeCollection();
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
this.pushFileChange(fileChangeCollection, FileChangeType.
|
|
272
|
-
} else {
|
|
273
|
-
const filePath = await this.resolveEventPath(event.directory, event.file!);
|
|
274
|
-
if (event.action === nsfw.actions.CREATED) {
|
|
275
|
-
this.pushFileChange(fileChangeCollection, FileChangeType.ADDED, filePath);
|
|
276
|
-
} else if (event.action === nsfw.actions.DELETED) {
|
|
277
|
-
this.pushFileChange(fileChangeCollection, FileChangeType.DELETED, filePath);
|
|
278
|
-
} else if (event.action === nsfw.actions.MODIFIED) {
|
|
279
|
-
this.pushFileChange(fileChangeCollection, FileChangeType.UPDATED, filePath);
|
|
280
|
-
}
|
|
263
|
+
for (const event of events) {
|
|
264
|
+
const filePath = event.path;
|
|
265
|
+
if (event.type === 'create') {
|
|
266
|
+
this.pushFileChange(fileChangeCollection, FileChangeType.ADDED, filePath);
|
|
267
|
+
} else if (event.type === 'delete') {
|
|
268
|
+
this.pushFileChange(fileChangeCollection, FileChangeType.DELETED, filePath);
|
|
269
|
+
} else if (event.type === 'update') {
|
|
270
|
+
this.pushFileChange(fileChangeCollection, FileChangeType.UPDATED, filePath);
|
|
281
271
|
}
|
|
282
|
-
}
|
|
272
|
+
}
|
|
283
273
|
const changes = fileChangeCollection.values();
|
|
284
274
|
// If all changes are part of the ignored files, the collection will be empty.
|
|
285
275
|
if (changes.length > 0) {
|
|
@@ -293,7 +283,7 @@ export class NsfwWatcher {
|
|
|
293
283
|
}
|
|
294
284
|
|
|
295
285
|
protected async resolveEventPath(directory: string, file: string): Promise<string> {
|
|
296
|
-
//
|
|
286
|
+
// parcel already resolves symlinks, the paths should be clean already:
|
|
297
287
|
return path.resolve(directory, file);
|
|
298
288
|
}
|
|
299
289
|
|
|
@@ -344,9 +334,9 @@ export class NsfwWatcher {
|
|
|
344
334
|
if (!this.disposed) {
|
|
345
335
|
this.disposed = true;
|
|
346
336
|
this.deferredDisposalDeferred.reject(WatcherDisposal);
|
|
347
|
-
if (this.
|
|
348
|
-
this.
|
|
349
|
-
this.
|
|
337
|
+
if (this.watcher) {
|
|
338
|
+
this.stopWatcher(this.watcher);
|
|
339
|
+
this.watcher = undefined;
|
|
350
340
|
}
|
|
351
341
|
this.debug('DISPOSED');
|
|
352
342
|
}
|
|
@@ -354,12 +344,12 @@ export class NsfwWatcher {
|
|
|
354
344
|
|
|
355
345
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
346
|
protected info(prefix: string, ...params: any[]): void {
|
|
357
|
-
this.
|
|
347
|
+
this.parcelFileSystemWatchServerOptions.info(`${prefix} ParcelWatcher(${this.debugId} at "${this.fsPath}"):`, ...params);
|
|
358
348
|
}
|
|
359
349
|
|
|
360
350
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
361
351
|
protected debug(prefix: string, ...params: any[]): void {
|
|
362
|
-
if (this.
|
|
352
|
+
if (this.parcelFileSystemWatchServerOptions.verbose) {
|
|
363
353
|
this.info(prefix, ...params);
|
|
364
354
|
}
|
|
365
355
|
}
|
|
@@ -370,20 +360,20 @@ export class NsfwWatcher {
|
|
|
370
360
|
*
|
|
371
361
|
* This watcherId will map to this handle type which keeps track of the clientId that made the request.
|
|
372
362
|
*/
|
|
373
|
-
export interface
|
|
363
|
+
export interface PacelWatcherHandle {
|
|
374
364
|
clientId: number;
|
|
375
|
-
watcher:
|
|
365
|
+
watcher: ParcelWatcher;
|
|
376
366
|
}
|
|
377
367
|
|
|
378
|
-
export class
|
|
368
|
+
export class ParcelFileSystemWatcherService implements FileSystemWatcherService {
|
|
379
369
|
|
|
380
370
|
protected client: FileSystemWatcherServiceClient | undefined;
|
|
381
371
|
|
|
382
372
|
protected watcherId = 0;
|
|
383
|
-
protected readonly watchers = new Map<string,
|
|
384
|
-
protected readonly watcherHandles = new Map<number,
|
|
373
|
+
protected readonly watchers = new Map<string, ParcelWatcher>();
|
|
374
|
+
protected readonly watcherHandles = new Map<number, PacelWatcherHandle>();
|
|
385
375
|
|
|
386
|
-
protected readonly options:
|
|
376
|
+
protected readonly options: ParcelFileSystemWatcherServerOptions;
|
|
387
377
|
|
|
388
378
|
/**
|
|
389
379
|
* `this.client` is undefined until someone sets it.
|
|
@@ -393,9 +383,9 @@ export class NsfwFileSystemWatcherService implements FileSystemWatcherService {
|
|
|
393
383
|
onError: event => this.client?.onError(event),
|
|
394
384
|
};
|
|
395
385
|
|
|
396
|
-
constructor(options?: Partial<
|
|
386
|
+
constructor(options?: Partial<ParcelFileSystemWatcherServerOptions>) {
|
|
397
387
|
this.options = {
|
|
398
|
-
|
|
388
|
+
parcelOptions: {},
|
|
399
389
|
verbose: false,
|
|
400
390
|
info: (message, ...args) => console.info(message, ...args),
|
|
401
391
|
error: (message, ...args) => console.error(message, ...args),
|
|
@@ -430,12 +420,12 @@ export class NsfwFileSystemWatcherService implements FileSystemWatcherService {
|
|
|
430
420
|
return watcherId;
|
|
431
421
|
}
|
|
432
422
|
|
|
433
|
-
protected createWatcher(clientId: number, fsPath: string, options: WatchOptions):
|
|
434
|
-
const watcherOptions:
|
|
423
|
+
protected createWatcher(clientId: number, fsPath: string, options: WatchOptions): ParcelWatcher {
|
|
424
|
+
const watcherOptions: ParcelWatcherOptions = {
|
|
435
425
|
ignored: options.ignored
|
|
436
426
|
.map(pattern => new Minimatch(pattern, { dot: true })),
|
|
437
427
|
};
|
|
438
|
-
return new
|
|
428
|
+
return new ParcelWatcher(clientId, fsPath, watcherOptions, this.options, this.maybeClient);
|
|
439
429
|
}
|
|
440
430
|
|
|
441
431
|
async unwatchFileChanges(watcherId: number): Promise<void> {
|
|
@@ -21,16 +21,16 @@ import * as fs from '@theia/core/shared/fs-extra';
|
|
|
21
21
|
import * as assert from 'assert';
|
|
22
22
|
import URI from '@theia/core/lib/common/uri';
|
|
23
23
|
import { FileUri } from '@theia/core/lib/node';
|
|
24
|
-
import {
|
|
24
|
+
import { ParcelFileSystemWatcherService } from './parcel-filesystem-service';
|
|
25
25
|
import { DidFilesChangedParams, FileChange, FileChangeType } from '../../common/filesystem-watcher-protocol';
|
|
26
26
|
|
|
27
27
|
const expect = chai.expect;
|
|
28
28
|
const track = temp.track();
|
|
29
29
|
|
|
30
|
-
describe('
|
|
30
|
+
describe('parcel-filesystem-watcher', function (): void {
|
|
31
31
|
|
|
32
32
|
let root: URI;
|
|
33
|
-
let watcherService:
|
|
33
|
+
let watcherService: ParcelFileSystemWatcherService;
|
|
34
34
|
let watcherId: number;
|
|
35
35
|
|
|
36
36
|
this.timeout(100000);
|
|
@@ -38,7 +38,7 @@ describe('nsfw-filesystem-watcher', function (): void {
|
|
|
38
38
|
beforeEach(async () => {
|
|
39
39
|
let tempPath = temp.mkdirSync('node-fs-root');
|
|
40
40
|
// Sometimes tempPath will use some Windows 8.3 short name in its path. This is a problem
|
|
41
|
-
// since
|
|
41
|
+
// since parcel always returns paths with long names. We need to convert here.
|
|
42
42
|
// See: https://stackoverflow.com/a/34473971/7983255
|
|
43
43
|
if (process.platform === 'win32') {
|
|
44
44
|
tempPath = cp.execSync(`powershell "(Get-Item -LiteralPath '${tempPath}').FullName"`, {
|
|
@@ -46,9 +46,9 @@ describe('nsfw-filesystem-watcher', function (): void {
|
|
|
46
46
|
}).trim();
|
|
47
47
|
}
|
|
48
48
|
root = FileUri.create(fs.realpathSync(tempPath));
|
|
49
|
-
watcherService =
|
|
49
|
+
watcherService = createParcelFileSystemWatcherService();
|
|
50
50
|
watcherId = await watcherService.watchFileChanges(0, root.toString());
|
|
51
|
-
await sleep(
|
|
51
|
+
await sleep(200);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
afterEach(async () => {
|
|
@@ -76,15 +76,15 @@ describe('nsfw-filesystem-watcher', function (): void {
|
|
|
76
76
|
|
|
77
77
|
fs.mkdirSync(FileUri.fsPath(root.resolve('foo')));
|
|
78
78
|
expect(fs.statSync(FileUri.fsPath(root.resolve('foo'))).isDirectory()).to.be.true;
|
|
79
|
-
await sleep(
|
|
79
|
+
await sleep(200);
|
|
80
80
|
|
|
81
81
|
fs.mkdirSync(FileUri.fsPath(root.resolve('foo').resolve('bar')));
|
|
82
82
|
expect(fs.statSync(FileUri.fsPath(root.resolve('foo').resolve('bar'))).isDirectory()).to.be.true;
|
|
83
|
-
await sleep(
|
|
83
|
+
await sleep(200);
|
|
84
84
|
|
|
85
85
|
fs.writeFileSync(FileUri.fsPath(root.resolve('foo').resolve('bar').resolve('baz.txt')), 'baz');
|
|
86
86
|
expect(fs.readFileSync(FileUri.fsPath(root.resolve('foo').resolve('bar').resolve('baz.txt')), 'utf8')).to.be.equal('baz');
|
|
87
|
-
await sleep(
|
|
87
|
+
await sleep(200);
|
|
88
88
|
|
|
89
89
|
assert.deepStrictEqual([...actualUris], expectedUris);
|
|
90
90
|
});
|
|
@@ -106,20 +106,20 @@ describe('nsfw-filesystem-watcher', function (): void {
|
|
|
106
106
|
|
|
107
107
|
fs.mkdirSync(FileUri.fsPath(root.resolve('foo')));
|
|
108
108
|
expect(fs.statSync(FileUri.fsPath(root.resolve('foo'))).isDirectory()).to.be.true;
|
|
109
|
-
await sleep(
|
|
109
|
+
await sleep(200);
|
|
110
110
|
|
|
111
111
|
fs.mkdirSync(FileUri.fsPath(root.resolve('foo').resolve('bar')));
|
|
112
112
|
expect(fs.statSync(FileUri.fsPath(root.resolve('foo').resolve('bar'))).isDirectory()).to.be.true;
|
|
113
|
-
await sleep(
|
|
113
|
+
await sleep(200);
|
|
114
114
|
|
|
115
115
|
fs.writeFileSync(FileUri.fsPath(root.resolve('foo').resolve('bar').resolve('baz.txt')), 'baz');
|
|
116
116
|
expect(fs.readFileSync(FileUri.fsPath(root.resolve('foo').resolve('bar').resolve('baz.txt')), 'utf8')).to.be.equal('baz');
|
|
117
|
-
await sleep(
|
|
117
|
+
await sleep(200);
|
|
118
118
|
|
|
119
119
|
assert.deepStrictEqual(actualUris.size, 0);
|
|
120
120
|
});
|
|
121
121
|
|
|
122
|
-
it('Renaming should emit a DELETED
|
|
122
|
+
it('Renaming should emit a DELETED and ADDED event', async function (): Promise<void> {
|
|
123
123
|
const file_txt = root.resolve('file.txt');
|
|
124
124
|
const FILE_txt = root.resolve('FILE.txt');
|
|
125
125
|
const changes: FileChange[] = [];
|
|
@@ -131,41 +131,34 @@ describe('nsfw-filesystem-watcher', function (): void {
|
|
|
131
131
|
FileUri.fsPath(file_txt),
|
|
132
132
|
'random content\n'
|
|
133
133
|
);
|
|
134
|
-
await sleep(
|
|
134
|
+
await sleep(200);
|
|
135
135
|
await fs.promises.rename(
|
|
136
136
|
FileUri.fsPath(file_txt),
|
|
137
137
|
FileUri.fsPath(FILE_txt)
|
|
138
138
|
);
|
|
139
|
-
await sleep(
|
|
139
|
+
await sleep(200);
|
|
140
|
+
// The order of DELETED and ADDED is not deterministic
|
|
140
141
|
try {
|
|
141
142
|
expect(changes).deep.eq([
|
|
142
143
|
// initial file creation change event:
|
|
143
144
|
{ type: FileChangeType.ADDED, uri: file_txt.toString() },
|
|
144
145
|
// rename change events:
|
|
145
146
|
{ type: FileChangeType.DELETED, uri: file_txt.toString() },
|
|
146
|
-
{ type: FileChangeType.ADDED, uri: FILE_txt.toString() }
|
|
147
|
+
{ type: FileChangeType.ADDED, uri: FILE_txt.toString() },
|
|
147
148
|
]);
|
|
148
|
-
} catch
|
|
149
|
-
// TODO: remove this try/catch once the bug on macOS is fixed.
|
|
150
|
-
// See https://github.com/Axosoft/nsfw/issues/146
|
|
151
|
-
if (process.platform !== 'darwin') {
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
// On macOS we only get ADDED events for some reason
|
|
149
|
+
} catch {
|
|
155
150
|
expect(changes).deep.eq([
|
|
156
151
|
// initial file creation change event:
|
|
157
152
|
{ type: FileChangeType.ADDED, uri: file_txt.toString() },
|
|
158
153
|
// rename change events:
|
|
159
|
-
{ type: FileChangeType.ADDED, uri:
|
|
160
|
-
{ type: FileChangeType.
|
|
154
|
+
{ type: FileChangeType.ADDED, uri: FILE_txt.toString() },
|
|
155
|
+
{ type: FileChangeType.DELETED, uri: file_txt.toString() },
|
|
161
156
|
]);
|
|
162
|
-
// Mark the test case as skipped so it stands out that the bogus branch got tested
|
|
163
|
-
this.skip();
|
|
164
157
|
}
|
|
165
158
|
});
|
|
166
159
|
|
|
167
|
-
function
|
|
168
|
-
return new
|
|
160
|
+
function createParcelFileSystemWatcherService(): ParcelFileSystemWatcherService {
|
|
161
|
+
return new ParcelFileSystemWatcherService({
|
|
169
162
|
verbose: true
|
|
170
163
|
});
|
|
171
164
|
}
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import
|
|
17
|
+
import { Options } from '@theia/core/shared/@parcel/watcher';
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* Inversify service identifier allowing extensions to override options passed to
|
|
20
|
+
* Inversify service identifier allowing extensions to override options passed to parcel by the file watcher.
|
|
21
21
|
*/
|
|
22
|
-
export const
|
|
23
|
-
export type
|
|
22
|
+
export const ParcelWatcherOptions = Symbol('ParcelWatcherOptions');
|
|
23
|
+
export type ParcelWatcherOptions = Options;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/nsfw-watcher/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;;AAmB5E,wBAKG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/nsfw-watcher/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,kDAAkD;AAClD,sCAA8C;AAE9C,uEAAyE;AAGzE,uDAAuD;AAEvD,MAAM,OAAO,GAET,KAAK;KACJ,MAAM,CAAC,SAAS,EAAE;IACf,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;CAClB,CAAC;KACD,MAAM,CAAC,aAAa,EAAE;IACnB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,IAAI,CAAC,KAAK;CACrB,CAAC;KACD,IAAW,CAAC;AAEjB,kBAA8B,CAAC,UAAU,CAAC,EAAE;IACxC,MAAM,MAAM,GAAG,IAAI,sDAA4B,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,sBAAe,CAAiC,MAAM,CAAC,CAAC;IAC5E,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nsfw-filesystem-service.d.ts","sourceRoot":"","sources":["../../../src/node/nsfw-watcher/nsfw-filesystem-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nsfw-filesystem-service.js","sourceRoot":"","sources":["../../../src/node/nsfw-watcher/nsfw-filesystem-service.ts"],"names":[],"mappings":"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"}
|