@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.
Files changed (61) hide show
  1. package/lib/browser/file-resource.d.ts +2 -0
  2. package/lib/browser/file-resource.d.ts.map +1 -1
  3. package/lib/browser/file-resource.js +11 -0
  4. package/lib/browser/file-resource.js.map +1 -1
  5. package/lib/browser/file-resource.spec.d.ts +2 -0
  6. package/lib/browser/file-resource.spec.d.ts.map +1 -0
  7. package/lib/browser/file-resource.spec.js +191 -0
  8. package/lib/browser/file-resource.spec.js.map +1 -0
  9. package/lib/browser/file-tree/file-tree-model.d.ts +1 -5
  10. package/lib/browser/file-tree/file-tree-model.d.ts.map +1 -1
  11. package/lib/browser/file-tree/file-tree-model.js +0 -17
  12. package/lib/browser/file-tree/file-tree-model.js.map +1 -1
  13. package/lib/browser/filesystem-preferences.d.ts.map +1 -1
  14. package/lib/browser/filesystem-preferences.js +1 -2
  15. package/lib/browser/filesystem-preferences.js.map +1 -1
  16. package/lib/node/filesystem-backend-module.d.ts +8 -8
  17. package/lib/node/filesystem-backend-module.d.ts.map +1 -1
  18. package/lib/node/filesystem-backend-module.js +27 -27
  19. package/lib/node/filesystem-backend-module.js.map +1 -1
  20. package/lib/node/filesystem-watcher-client.d.ts +1 -2
  21. package/lib/node/filesystem-watcher-client.d.ts.map +1 -1
  22. package/lib/node/filesystem-watcher-client.js +2 -3
  23. package/lib/node/filesystem-watcher-client.js.map +1 -1
  24. package/lib/node/parcel-watcher/index.d.ts.map +1 -0
  25. package/lib/node/{nsfw-watcher → parcel-watcher}/index.js +3 -3
  26. package/lib/node/parcel-watcher/index.js.map +1 -0
  27. package/lib/node/{nsfw-watcher/nsfw-filesystem-service.d.ts → parcel-watcher/parcel-filesystem-service.d.ts} +29 -29
  28. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -0
  29. package/lib/node/{nsfw-watcher/nsfw-filesystem-service.js → parcel-watcher/parcel-filesystem-service.js} +55 -66
  30. package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -0
  31. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.d.ts +2 -0
  32. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.d.ts.map +1 -0
  33. package/lib/node/{nsfw-watcher/nsfw-filesystem-watcher.spec.js → parcel-watcher/parcel-filesystem-watcher.spec.js} +22 -29
  34. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js.map +1 -0
  35. package/lib/node/parcel-watcher/parcel-options.d.ts +7 -0
  36. package/lib/node/parcel-watcher/parcel-options.d.ts.map +1 -0
  37. package/lib/node/{nsfw-watcher/nsfw-options.js → parcel-watcher/parcel-options.js} +4 -4
  38. package/lib/node/parcel-watcher/parcel-options.js.map +1 -0
  39. package/package.json +4 -4
  40. package/src/browser/file-resource.spec.ts +255 -0
  41. package/src/browser/file-resource.ts +12 -0
  42. package/src/browser/file-tree/file-tree-model.ts +1 -19
  43. package/src/browser/filesystem-preferences.ts +1 -2
  44. package/src/node/filesystem-backend-module.ts +27 -27
  45. package/src/node/filesystem-watcher-client.ts +1 -3
  46. package/src/node/{nsfw-watcher → parcel-watcher}/index.ts +3 -3
  47. package/src/node/{nsfw-watcher/nsfw-filesystem-service.ts → parcel-watcher/parcel-filesystem-service.ts} +62 -72
  48. package/src/node/{nsfw-watcher/nsfw-filesystem-watcher.spec.ts → parcel-watcher/parcel-filesystem-watcher.spec.ts} +22 -29
  49. package/src/node/{nsfw-watcher/nsfw-options.ts → parcel-watcher/parcel-options.ts} +4 -4
  50. package/lib/node/nsfw-watcher/index.d.ts.map +0 -1
  51. package/lib/node/nsfw-watcher/index.js.map +0 -1
  52. package/lib/node/nsfw-watcher/nsfw-filesystem-service.d.ts.map +0 -1
  53. package/lib/node/nsfw-watcher/nsfw-filesystem-service.js.map +0 -1
  54. package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.d.ts +0 -2
  55. package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.d.ts.map +0 -1
  56. package/lib/node/nsfw-watcher/nsfw-filesystem-watcher.spec.js.map +0 -1
  57. package/lib/node/nsfw-watcher/nsfw-options.d.ts +0 -7
  58. package/lib/node/nsfw-watcher/nsfw-options.d.ts.map +0 -1
  59. package/lib/node/nsfw-watcher/nsfw-options.js.map +0 -1
  60. package/src/typings/nsfw/index.d.ts +0 -18
  61. /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 { NsfwFileSystemWatcherService, NsfwFileSystemWatcherServerOptions } from './nsfw-watcher/nsfw-filesystem-service';
22
+ import { ParcelFileSystemWatcherService, ParcelFileSystemWatcherServerOptions } from './parcel-watcher/parcel-filesystem-service';
23
23
  import { NodeFileUploadService } from './node-file-upload-service';
24
- import { NsfwOptions } from './nsfw-watcher/nsfw-options';
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 NSFW_SINGLE_THREADED = process.argv.includes('--no-cluster');
36
- export const NSFW_WATCHER_VERBOSE = process.argv.includes('--nsfw-watcher-verbose');
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 NsfwFileSystemWatcherServiceProcessOptions = Symbol('NsfwFileSystemWatcherServiceProcessOptions');
38
+ export const FileSystemWatcherServiceProcessOptions = Symbol('FileSystemWatcherServiceProcessOptions');
39
39
  /**
40
- * Options to control the way the `NsfwFileSystemWatcherService` process is spawned.
40
+ * Options to control the way the `ParcelFileSystemWatcherService` process is spawned.
41
41
  */
42
- export interface NsfwFileSystemWatcherServiceProcessOptions {
42
+ export interface FileSystemWatcherServiceProcessOptions {
43
43
  /**
44
- * Path to the script that will run the `NsfwFileSystemWatcherService` in a new process.
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<NsfwOptions>(NsfwOptions).toConstantValue({});
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<NsfwFileSystemWatcherServiceProcessOptions>(NsfwFileSystemWatcherServiceProcessOptions).toDynamicValue(ctx => ({
77
- entryPoint: path.join(__dirname, 'nsfw-watcher'),
76
+ bind<FileSystemWatcherServiceProcessOptions>(FileSystemWatcherServiceProcessOptions).toDynamicValue(ctx => ({
77
+ entryPoint: path.join(__dirname, 'parcel-watcher'),
78
78
  })).inSingletonScope();
79
- bind<NsfwFileSystemWatcherServerOptions>(NsfwFileSystemWatcherServerOptions).toDynamicValue(ctx => {
79
+ bind<ParcelFileSystemWatcherServerOptions>(ParcelFileSystemWatcherServerOptions).toDynamicValue(ctx => {
80
80
  const logger = ctx.container.get<ILogger>(ILogger);
81
- const nsfwOptions = ctx.container.get<NsfwOptions>(NsfwOptions);
81
+ const watcherOptions = ctx.container.get<ParcelWatcherOptions>(ParcelWatcherOptions);
82
82
  return {
83
- nsfwOptions,
84
- verbose: NSFW_WATCHER_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 => NSFW_SINGLE_THREADED
92
- ? createNsfwFileSystemWatcherService(ctx)
93
- : spawnNsfwFileSystemWatcherServiceProcess(ctx)
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 createNsfwFileSystemWatcherService(ctx: interfaces.Context): FileSystemWatcherService {
101
- const options = ctx.container.get<NsfwFileSystemWatcherServerOptions>(NsfwFileSystemWatcherServerOptions);
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 NsfwFileSystemWatcherService(options);
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 spawnNsfwFileSystemWatcherServiceProcess(ctx: interfaces.Context): FileSystemWatcherService {
113
- const options = ctx.container.get<NsfwFileSystemWatcherServiceProcessOptions>(NsfwFileSystemWatcherServiceProcessOptions);
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 = 'nsfw-watcher';
115
+ const serverName = 'parcel-watcher';
116
116
  const logger = ctx.container.get<ILogger>(ILogger);
117
- const nsfwOptions = ctx.container.get<NsfwOptions>(NsfwOptions);
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
- `--nsfwOptions=${JSON.stringify(nsfwOptions)}`
124
+ `--watchOptions=${JSON.stringify(watcherOptions)}`
125
125
  ];
126
- if (NSFW_WATCHER_VERBOSE) {
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 NSFW singleton service for each frontend.
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 { NsfwFileSystemWatcherService } from './nsfw-filesystem-service';
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('nsfwOptions', {
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 NsfwFileSystemWatcherService(options);
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 NsfwWatcherOptions {
28
+ export interface ParcelWatcherOptions {
29
29
  ignored: IMinimatch[]
30
30
  }
31
31
 
32
- export const NsfwFileSystemWatcherServerOptions = Symbol('NsfwFileSystemWatcherServerOptions');
33
- export interface NsfwFileSystemWatcherServerOptions {
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
- nsfwOptions: nsfw.Options;
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 NsfwWatcher {
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 = NsfwWatcher.debugIdSequence++;
66
+ protected debugId = ParcelWatcher.debugIdSequence++;
67
67
 
68
68
  /**
69
- * When this field is set, it means the nsfw instance was successfully started.
69
+ * When this field is set, it means the watcher instance was successfully started.
70
70
  */
71
- protected nsfw: nsfw.NSFW | undefined;
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 nsfwEventProcessingQueue: Promise<void> = Promise.resolve();
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: NsfwWatcherOptions,
119
- /** Logging and Nsfw options */
120
- protected readonly nsfwFileSystemWatchServerOptions: NsfwFileSystemWatcherServerOptions,
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 an NSFW watcher.
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.createNsfw();
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.stopNsfw(watcher);
223
+ await this.stopWatcher(watcher);
225
224
  throw WatcherDisposal;
226
225
  }
227
- this.nsfw = watcher;
226
+ this.watcher = watcher;
228
227
  }
229
228
 
230
229
  /**
231
- * Given a started nsfw instance, gracefully shut it down.
230
+ * Given a started parcel watcher instance, gracefully shut it down.
232
231
  */
233
- protected async stopNsfw(watcher: nsfw.NSFW): Promise<void> {
234
- await watcher.stop()
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 createNsfw(): Promise<nsfw.NSFW> {
240
- const fsPath = await fsp.realpath(this.fsPath);
241
- return nsfw(fsPath, events => this.handleNsfwEvents(events), {
242
- ...this.nsfwFileSystemWatchServerOptions.nsfwOptions,
243
- // The errorCallback is called whenever NSFW crashes *while* watching.
244
- // See https://github.com/atom/github/issues/342
245
- errorCallback: error => {
246
- console.error(`NSFW service error on "${fsPath}":`, 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
- // Make sure to call user's error handling code:
250
- if (this.nsfwFileSystemWatchServerOptions.nsfwOptions.errorCallback) {
251
- this.nsfwFileSystemWatchServerOptions.nsfwOptions.errorCallback(error);
252
- }
253
- },
248
+ return;
249
+ }
250
+ this.handleWatcherEvents(events);
251
+ }, {
252
+ ...this.parcelFileSystemWatchServerOptions.parcelOptions
254
253
  });
255
254
  }
256
255
 
257
- protected handleNsfwEvents(events: nsfw.FileChangeEvent[]): void {
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 nsfw won't wait for it to finish before firing the next one.
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.nsfwEventProcessingQueue = this.nsfwEventProcessingQueue.then(async () => {
261
+ this.parcelEventProcessingQueue = this.parcelEventProcessingQueue.then(async () => {
263
262
  const fileChangeCollection = new FileChangeCollection();
264
- await Promise.all(events.map(async event => {
265
- if (event.action === nsfw.actions.RENAMED) {
266
- const [oldPath, newPath] = await Promise.all([
267
- this.resolveEventPath(event.directory, event.oldFile),
268
- this.resolveEventPath(event.newDirectory, event.newFile),
269
- ]);
270
- this.pushFileChange(fileChangeCollection, FileChangeType.DELETED, oldPath);
271
- this.pushFileChange(fileChangeCollection, FileChangeType.ADDED, newPath);
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
- // nsfw already resolves symlinks, the paths should be clean already:
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.nsfw) {
348
- this.stopNsfw(this.nsfw);
349
- this.nsfw = undefined;
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.nsfwFileSystemWatchServerOptions.info(`${prefix} NsfwWatcher(${this.debugId} at "${this.fsPath}"):`, ...params);
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.nsfwFileSystemWatchServerOptions.verbose) {
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 NsfwWatcherHandle {
363
+ export interface PacelWatcherHandle {
374
364
  clientId: number;
375
- watcher: NsfwWatcher;
365
+ watcher: ParcelWatcher;
376
366
  }
377
367
 
378
- export class NsfwFileSystemWatcherService implements FileSystemWatcherService {
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, NsfwWatcher>();
384
- protected readonly watcherHandles = new Map<number, NsfwWatcherHandle>();
373
+ protected readonly watchers = new Map<string, ParcelWatcher>();
374
+ protected readonly watcherHandles = new Map<number, PacelWatcherHandle>();
385
375
 
386
- protected readonly options: NsfwFileSystemWatcherServerOptions;
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<NsfwFileSystemWatcherServerOptions>) {
386
+ constructor(options?: Partial<ParcelFileSystemWatcherServerOptions>) {
397
387
  this.options = {
398
- nsfwOptions: {},
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): NsfwWatcher {
434
- const watcherOptions: NsfwWatcherOptions = {
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 NsfwWatcher(clientId, fsPath, watcherOptions, this.options, this.maybeClient);
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 { NsfwFileSystemWatcherService } from './nsfw-filesystem-service';
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('nsfw-filesystem-watcher', function (): void {
30
+ describe('parcel-filesystem-watcher', function (): void {
31
31
 
32
32
  let root: URI;
33
- let watcherService: NsfwFileSystemWatcherService;
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 NSFW always returns paths with long names. We need to convert here.
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 = createNsfwFileSystemWatcherService();
49
+ watcherService = createParcelFileSystemWatcherService();
50
50
  watcherId = await watcherService.watchFileChanges(0, root.toString());
51
- await sleep(2000);
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(2000);
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(2000);
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(2000);
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(2000);
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(2000);
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(2000);
117
+ await sleep(200);
118
118
 
119
119
  assert.deepStrictEqual(actualUris.size, 0);
120
120
  });
121
121
 
122
- it('Renaming should emit a DELETED change followed by ADDED', async function (): Promise<void> {
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(1000);
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(1000);
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 (error) {
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: file_txt.toString() },
160
- { type: FileChangeType.ADDED, uri: FILE_txt.toString() }
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 createNsfwFileSystemWatcherService(): NsfwFileSystemWatcherService {
168
- return new NsfwFileSystemWatcherService({
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 * as nsfw from '@theia/core/shared/nsfw';
17
+ import { Options } from '@theia/core/shared/@parcel/watcher';
18
18
 
19
19
  /**
20
- * Inversify service identifier allowing extensions to override options passed to nsfw by the file watcher.
20
+ * Inversify service identifier allowing extensions to override options passed to parcel by the file watcher.
21
21
  */
22
- export const NsfwOptions = Symbol('NsfwOptions');
23
- export type NsfwOptions = nsfw.Options;
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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"}