@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.
Files changed (134) hide show
  1. package/lib/browser/download/file-download-service.d.ts.map +1 -1
  2. package/lib/browser/download/file-download-service.js +0 -1
  3. package/lib/browser/download/file-download-service.js.map +1 -1
  4. package/lib/browser/file-dialog/file-dialog.js +1 -1
  5. package/lib/browser/file-dialog/file-dialog.js.map +1 -1
  6. package/lib/browser/file-resource.spec.js +2 -1
  7. package/lib/browser/file-resource.spec.js.map +1 -1
  8. package/lib/browser/file-service-watcher.spec.js +2 -1
  9. package/lib/browser/file-service-watcher.spec.js.map +1 -1
  10. package/lib/browser/file-service.d.ts +1 -1
  11. package/lib/browser/file-service.js +1 -1
  12. package/lib/browser/file-service.js.map +1 -1
  13. package/lib/browser/file-tree/file-tree-decorator-adapter.js +1 -1
  14. package/lib/browser/file-tree/file-tree-decorator-adapter.js.map +1 -1
  15. package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js +2 -1
  16. package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js.map +1 -1
  17. package/lib/browser/file-tree/file-tree-model.js +1 -1
  18. package/lib/browser/file-tree/file-tree-model.js.map +1 -1
  19. package/lib/browser/file-tree/file-tree-widget.js +1 -1
  20. package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
  21. package/lib/browser/filesystem-frontend-contribution.js +1 -1
  22. package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
  23. package/lib/browser/location/location-renderer.js +1 -1
  24. package/lib/browser/location/location-renderer.js.map +1 -1
  25. package/lib/browser/location/location-renderer.spec.js +2 -1
  26. package/lib/browser/location/location-renderer.spec.js.map +1 -1
  27. package/lib/browser/upload/file-upload-service-impl.js +1 -1
  28. package/lib/browser/upload/file-upload-service-impl.js.map +1 -1
  29. package/lib/browser-only/download/file-download-service.js +1 -1
  30. package/lib/browser-only/download/file-download-service.js.map +1 -1
  31. package/lib/browser-only/file-search.js +2 -1
  32. package/lib/browser-only/file-search.js.map +1 -1
  33. package/lib/browser-only/upload/file-upload-service-impl.js +1 -1
  34. package/lib/browser-only/upload/file-upload-service-impl.js.map +1 -1
  35. package/lib/common/files.js +2 -1
  36. package/lib/common/files.js.map +1 -1
  37. package/lib/common/files.spec.js +2 -1
  38. package/lib/common/files.spec.js.map +1 -1
  39. package/lib/common/filesystem-watcher-protocol.d.ts +4 -0
  40. package/lib/common/filesystem-watcher-protocol.d.ts.map +1 -1
  41. package/lib/common/remote-file-system-provider.d.ts +4 -4
  42. package/lib/common/remote-file-system-provider.d.ts.map +1 -1
  43. package/lib/common/remote-file-system-provider.js +1 -1
  44. package/lib/common/remote-file-system-provider.js.map +1 -1
  45. package/lib/node/disk-file-system-provider.d.ts.map +1 -1
  46. package/lib/node/disk-file-system-provider.js +8 -5
  47. package/lib/node/disk-file-system-provider.js.map +1 -1
  48. package/lib/node/disk-file-system-provider.spec.js +28 -2
  49. package/lib/node/disk-file-system-provider.spec.js.map +1 -1
  50. package/lib/node/download/directory-archiver.js +2 -2
  51. package/lib/node/download/directory-archiver.js.map +1 -1
  52. package/lib/node/download/directory-archiver.spec.js +5 -4
  53. package/lib/node/download/directory-archiver.spec.js.map +1 -1
  54. package/lib/node/download/file-download-handler.d.ts.map +1 -1
  55. package/lib/node/download/file-download-handler.js +4 -5
  56. package/lib/node/download/file-download-handler.js.map +1 -1
  57. package/lib/node/file-change-collection.spec.js +2 -1
  58. package/lib/node/file-change-collection.spec.js.map +1 -1
  59. package/lib/node/filesystem-backend-module.d.ts +2 -2
  60. package/lib/node/filesystem-backend-module.d.ts.map +1 -1
  61. package/lib/node/filesystem-backend-module.js +7 -5
  62. package/lib/node/filesystem-backend-module.js.map +1 -1
  63. package/lib/node/filesystem-watcher-service-impl.d.ts +30 -0
  64. package/lib/node/filesystem-watcher-service-impl.d.ts.map +1 -0
  65. package/lib/node/filesystem-watcher-service-impl.js +92 -0
  66. package/lib/node/filesystem-watcher-service-impl.js.map +1 -0
  67. package/lib/node/filesystem-watcher-service-impl.spec.d.ts +2 -0
  68. package/lib/node/filesystem-watcher-service-impl.spec.d.ts.map +1 -0
  69. package/lib/node/filesystem-watcher-service-impl.spec.js +202 -0
  70. package/lib/node/filesystem-watcher-service-impl.spec.js.map +1 -0
  71. package/lib/node/filesystem-watcher.d.ts +93 -0
  72. package/lib/node/filesystem-watcher.d.ts.map +1 -0
  73. package/lib/node/filesystem-watcher.js +134 -0
  74. package/lib/node/filesystem-watcher.js.map +1 -0
  75. package/lib/node/nodejs-watcher/node-directory-watcher.d.ts +175 -0
  76. package/lib/node/nodejs-watcher/node-directory-watcher.d.ts.map +1 -0
  77. package/lib/node/nodejs-watcher/node-directory-watcher.js +580 -0
  78. package/lib/node/nodejs-watcher/node-directory-watcher.js.map +1 -0
  79. package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts +2 -0
  80. package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts.map +1 -0
  81. package/lib/node/nodejs-watcher/node-directory-watcher.spec.js +1284 -0
  82. package/lib/node/nodejs-watcher/node-directory-watcher.spec.js.map +1 -0
  83. package/lib/node/nodejs-watcher/watch-request-router.d.ts +63 -0
  84. package/lib/node/nodejs-watcher/watch-request-router.d.ts.map +1 -0
  85. package/lib/node/nodejs-watcher/watch-request-router.js +183 -0
  86. package/lib/node/nodejs-watcher/watch-request-router.js.map +1 -0
  87. package/lib/node/nodejs-watcher/watcher-host.d.ts +50 -0
  88. package/lib/node/nodejs-watcher/watcher-host.d.ts.map +1 -0
  89. package/lib/node/nodejs-watcher/watcher-host.js +99 -0
  90. package/lib/node/nodejs-watcher/watcher-host.js.map +1 -0
  91. package/lib/node/parcel-watcher/index.js +4 -3
  92. package/lib/node/parcel-watcher/index.js.map +1 -1
  93. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts +14 -194
  94. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -1
  95. package/lib/node/parcel-watcher/parcel-filesystem-service.js +7 -424
  96. package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -1
  97. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js +8 -7
  98. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js.map +1 -1
  99. package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js +8 -7
  100. package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js.map +1 -1
  101. package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js +7 -6
  102. package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js.map +1 -1
  103. package/lib/node/parcel-watcher/parcel-watcher.d.ts +165 -0
  104. package/lib/node/parcel-watcher/parcel-watcher.d.ts.map +1 -0
  105. package/lib/node/parcel-watcher/parcel-watcher.js +370 -0
  106. package/lib/node/parcel-watcher/parcel-watcher.js.map +1 -0
  107. package/lib/node/test/watcher-test-helper.d.ts +21 -0
  108. package/lib/node/test/watcher-test-helper.d.ts.map +1 -0
  109. package/lib/node/test/watcher-test-helper.js +56 -0
  110. package/lib/node/test/watcher-test-helper.js.map +1 -0
  111. package/lib/node/upload/node-file-upload-service.spec.js +4 -3
  112. package/lib/node/upload/node-file-upload-service.spec.js.map +1 -1
  113. package/package.json +7 -7
  114. package/src/browser/download/file-download-service.ts +0 -1
  115. package/src/browser/file-service.ts +3 -3
  116. package/src/common/filesystem-watcher-protocol.ts +4 -0
  117. package/src/node/disk-file-system-provider.spec.ts +29 -0
  118. package/src/node/disk-file-system-provider.ts +5 -2
  119. package/src/node/download/file-download-handler.ts +0 -1
  120. package/src/node/filesystem-backend-module.ts +5 -4
  121. package/src/node/filesystem-watcher-service-impl.spec.ts +272 -0
  122. package/src/node/filesystem-watcher-service-impl.ts +109 -0
  123. package/src/node/filesystem-watcher.ts +197 -0
  124. package/src/node/nodejs-watcher/node-directory-watcher.spec.ts +1594 -0
  125. package/src/node/nodejs-watcher/node-directory-watcher.ts +664 -0
  126. package/src/node/nodejs-watcher/watch-request-router.ts +224 -0
  127. package/src/node/nodejs-watcher/watcher-host.ts +126 -0
  128. package/src/node/parcel-watcher/index.ts +2 -2
  129. package/src/node/parcel-watcher/parcel-filesystem-service.ts +14 -500
  130. package/src/node/parcel-watcher/parcel-filesystem-watcher.spec.ts +4 -4
  131. package/src/node/parcel-watcher/parcel-watcher-exclude.spec.ts +4 -4
  132. package/src/node/parcel-watcher/parcel-watcher-retry.spec.ts +3 -3
  133. package/src/node/parcel-watcher/parcel-watcher.ts +432 -0
  134. package/src/node/test/watcher-test-helper.ts +58 -0
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-backend-module.js","sourceRoot":"","sources":["../../src/node/filesystem-backend-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem-backend-module.js","sourceRoot":"","sources":["../../src/node/filesystem-backend-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { FileSystemWatcherService, FileSystemWatcherServiceClient, WatchOptions } from '../common/filesystem-watcher-protocol';
2
+ import { ResolvedWatchOptions, WatcherLogger, WatcherProvider } from './filesystem-watcher';
3
+ import { ParcelFileSystemWatcherServerOptions } from './parcel-watcher/parcel-watcher';
4
+ /** Routes each request to the first provider that can handle it. The provider picks the watcher that serves it. */
5
+ export declare class FileSystemWatcherServiceImpl implements FileSystemWatcherService {
6
+ protected client: FileSystemWatcherServiceClient | undefined;
7
+ protected watcherId: number;
8
+ protected readonly logger: WatcherLogger;
9
+ /** Checked in order. The first one whose `canHandle` returns `true` serves the request. */
10
+ protected readonly providers: readonly WatcherProvider[];
11
+ /**
12
+ * `this.client` is undefined until someone sets it.
13
+ */
14
+ protected readonly maybeClient: FileSystemWatcherServiceClient;
15
+ constructor(options?: Partial<ParcelFileSystemWatcherServerOptions>);
16
+ setClient(client: FileSystemWatcherServiceClient | undefined): void;
17
+ /** Requests resolving to the same target share a watcher. */
18
+ watchFileChanges(clientId: number, uri: string, options?: WatchOptions): Promise<number>;
19
+ unwatchFileChanges(watcherId: number): Promise<void>;
20
+ /** `options` keeps the parcel shape that adopters already bind. Only the recursive provider reads `parcelOptions`. */
21
+ protected createProviders(options: ParcelFileSystemWatcherServerOptions): WatcherProvider[];
22
+ protected providerFor(options: ResolvedWatchOptions): WatcherProvider;
23
+ /**
24
+ * Return fully qualified options. Watchers created before `recursive` existed were always recursive.
25
+ */
26
+ protected resolveWatchOptions(options?: WatchOptions): ResolvedWatchOptions;
27
+ protected debug(message: string, ...params: unknown[]): void;
28
+ dispose(): void;
29
+ }
30
+ //# sourceMappingURL=filesystem-watcher-service-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher-service-impl.d.ts","sourceRoot":"","sources":["../../src/node/filesystem-watcher-service-impl.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC/H,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAE,oCAAoC,EAA4B,MAAM,iCAAiC,CAAC;AAEjH,mHAAmH;AACnH,qBAAa,4BAA6B,YAAW,wBAAwB;IAEzE,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAE7D,SAAS,CAAC,SAAS,SAAK;IAExB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAEzC,2FAA2F;IAC3F,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAEzD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,8BAA8B,CAG5D;gBAEU,OAAO,CAAC,EAAE,OAAO,CAAC,oCAAoC,CAAC;IAYnE,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,SAAS,GAAG,IAAI;IAInE,6DAA6D;IACvD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxF,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D,sHAAsH;IACtH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,oCAAoC,GAAG,eAAe,EAAE;IAO3F,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe;IAQrE;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,oBAAoB;IAO3E,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAM5D,OAAO,IAAI,IAAI;CAGlB"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2017-2018 TypeFox and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.FileSystemWatcherServiceImpl = void 0;
19
+ const file_uri_1 = require("@theia/core/lib/common/file-uri");
20
+ const node_directory_watcher_1 = require("./nodejs-watcher/node-directory-watcher");
21
+ const parcel_watcher_1 = require("./parcel-watcher/parcel-watcher");
22
+ /** Routes each request to the first provider that can handle it. The provider picks the watcher that serves it. */
23
+ class FileSystemWatcherServiceImpl {
24
+ constructor(options) {
25
+ this.watcherId = 0;
26
+ /**
27
+ * `this.client` is undefined until someone sets it.
28
+ */
29
+ this.maybeClient = {
30
+ onDidFilesChanged: event => this.client?.onDidFilesChanged(event),
31
+ onError: event => this.client?.onError(event),
32
+ };
33
+ const resolved = {
34
+ parcelOptions: {},
35
+ verbose: false,
36
+ info: (message, ...args) => console.info(message, ...args),
37
+ error: (message, ...args) => console.error(message, ...args),
38
+ ...options
39
+ };
40
+ this.logger = resolved;
41
+ this.providers = this.createProviders(resolved);
42
+ }
43
+ setClient(client) {
44
+ this.client = client;
45
+ }
46
+ /** Requests resolving to the same target share a watcher. */
47
+ async watchFileChanges(clientId, uri, options) {
48
+ const resolvedOptions = this.resolveWatchOptions(options);
49
+ const provider = this.providerFor(resolvedOptions);
50
+ const watcherId = this.watcherId++;
51
+ await provider.watch(watcherId, { clientId, path: file_uri_1.FileUri.fsPath(uri), ignored: resolvedOptions.ignored });
52
+ return watcherId;
53
+ }
54
+ async unwatchFileChanges(watcherId) {
55
+ if (!this.providers.some(provider => provider.unwatch(watcherId))) {
56
+ console.warn(`tried to de-allocate a disposed watcher: watcherId=${watcherId}`);
57
+ }
58
+ }
59
+ /** `options` keeps the parcel shape that adopters already bind. Only the recursive provider reads `parcelOptions`. */
60
+ createProviders(options) {
61
+ return [
62
+ new parcel_watcher_1.RecursiveWatcherProvider(options, this.maybeClient),
63
+ new node_directory_watcher_1.DirectoryWatcherProvider(options, this.maybeClient)
64
+ ];
65
+ }
66
+ providerFor(options) {
67
+ const provider = this.providers.find(candidate => candidate.canHandle(options));
68
+ if (!provider) {
69
+ throw new Error(`No watcher provider takes options: ${JSON.stringify(options)}`);
70
+ }
71
+ return provider;
72
+ }
73
+ /**
74
+ * Return fully qualified options. Watchers created before `recursive` existed were always recursive.
75
+ */
76
+ resolveWatchOptions(options) {
77
+ return {
78
+ ignored: options?.ignored ?? [],
79
+ recursive: options?.recursive ?? true
80
+ };
81
+ }
82
+ debug(message, ...params) {
83
+ if (this.logger.verbose) {
84
+ this.logger.info(message, ...params);
85
+ }
86
+ }
87
+ dispose() {
88
+ // Singletons shouldn't be disposed...
89
+ }
90
+ }
91
+ exports.FileSystemWatcherServiceImpl = FileSystemWatcherServiceImpl;
92
+ //# sourceMappingURL=filesystem-watcher-service-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher-service-impl.js","sourceRoot":"","sources":["../../src/node/filesystem-watcher-service-impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filesystem-watcher-service-impl.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher-service-impl.spec.d.ts","sourceRoot":"","sources":["../../src/node/filesystem-watcher-service-impl.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Ehab Younes and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const tslib_1 = require("tslib");
19
+ const assert = tslib_1.__importStar(require("assert"));
20
+ const promise_util_1 = require("@theia/core/lib/common/promise-util");
21
+ const temp = tslib_1.__importStar(require("temp"));
22
+ const fs = tslib_1.__importStar(require("@theia/core/shared/fs-extra"));
23
+ const core_1 = require("@theia/core");
24
+ const node_1 = require("@theia/core/lib/node");
25
+ const node_directory_watcher_1 = require("./nodejs-watcher/node-directory-watcher");
26
+ const watcher_test_helper_1 = require("./test/watcher-test-helper");
27
+ const parcel_filesystem_service_1 = require("./parcel-watcher/parcel-filesystem-service");
28
+ const track = temp.track();
29
+ const RECURSIVE = { ignored: [], recursive: true };
30
+ const NON_RECURSIVE = { ignored: [], recursive: false };
31
+ class TestDirectoryProvider extends node_directory_watcher_1.DirectoryWatcherProvider {
32
+ get allocated() {
33
+ return this.activeWatchers;
34
+ }
35
+ watcherOf(watcherId) {
36
+ return this.watcherFor(watcherId);
37
+ }
38
+ }
39
+ class TestRecursiveProvider extends parcel_filesystem_service_1.RecursiveWatcherProvider {
40
+ get allocated() {
41
+ return this.activeWatchers;
42
+ }
43
+ watcherOf(watcherId) {
44
+ return this.watcherFor(watcherId);
45
+ }
46
+ }
47
+ function isTestProvider(provider) {
48
+ return provider instanceof TestDirectoryProvider || provider instanceof TestRecursiveProvider;
49
+ }
50
+ /** A temporary directory and a watcher service on it, one per test. */
51
+ class Sandbox extends parcel_filesystem_service_1.FileSystemWatcherServiceImpl {
52
+ constructor() {
53
+ super(watcher_test_helper_1.NO_LOGGING);
54
+ /** The directory the requests of this test point into. */
55
+ this.files = new watcher_test_helper_1.TempDir(fs.realpathSync.native(temp.mkdirSync('filesystem-watcher-service')));
56
+ this.requested = [];
57
+ }
58
+ get root() {
59
+ return this.files.root;
60
+ }
61
+ watch(fsPath, options) {
62
+ return this.watchFileChanges(1, node_1.FileUri.create(fsPath).toString(), options)
63
+ .then(watcherId => (this.requested.push(watcherId), watcherId));
64
+ }
65
+ /** The watchers currently allocated, one per distinct key, across both providers. */
66
+ get allocated() {
67
+ return this.testProviders.flatMap(provider => provider.allocated);
68
+ }
69
+ get testProviders() {
70
+ return this.providers.filter(isTestProvider);
71
+ }
72
+ /** The watcher serving a request, asked of whichever provider holds it. */
73
+ watcherOf(watcherId) {
74
+ return this.testProviders.map(provider => provider.watcherOf(watcherId)).find(Boolean);
75
+ }
76
+ async release() {
77
+ const outstanding = this.requested.splice(0).filter(watcherId => this.watcherOf(watcherId));
78
+ const allocated = this.allocated;
79
+ await Promise.all(outstanding.map(watcherId => this.unwatchFileChanges(watcherId)));
80
+ await Promise.all(allocated.map(watcher => watcher.whenDisposed));
81
+ }
82
+ createProviders(options) {
83
+ return [
84
+ new TestRecursiveProvider(options, this.maybeClient, watcher_test_helper_1.WATCHER_TIMINGS.deferredDisposalTimeout),
85
+ new TestDirectoryProvider(options, this.maybeClient, watcher_test_helper_1.WATCHER_TIMINGS)
86
+ ];
87
+ }
88
+ }
89
+ describe('filesystem-watcher-service', function () {
90
+ this.timeout(20000);
91
+ let box;
92
+ beforeEach(() => {
93
+ box = new Sandbox();
94
+ });
95
+ afterEach(async () => {
96
+ await box.release();
97
+ track.cleanupSync();
98
+ });
99
+ describe('routing', () => {
100
+ it('keeps the deprecated service name usable by adopters', () => {
101
+ assert.strictEqual(parcel_filesystem_service_1.ParcelFileSystemWatcherService, parcel_filesystem_service_1.FileSystemWatcherServiceImpl);
102
+ });
103
+ it('serves a recursive request, and one that does not say, with the parcel watcher', async () => {
104
+ const recursive = await box.watch(box.root, RECURSIVE);
105
+ const unspecified = await box.watch(box.files.mkdir('other'), { ignored: [] });
106
+ assert.ok(box.watcherOf(recursive) instanceof parcel_filesystem_service_1.ParcelWatcher);
107
+ assert.ok(box.watcherOf(unspecified) instanceof parcel_filesystem_service_1.ParcelWatcher);
108
+ });
109
+ it('serves a non-recursive request with a directory watcher', async () => {
110
+ const watcherId = await box.watch(box.root, NON_RECURSIVE);
111
+ assert.ok(box.watcherOf(watcherId) instanceof node_directory_watcher_1.NodeDirectoryWatcher);
112
+ });
113
+ it('keeps a recursive and a non-recursive request on the same path apart', async () => {
114
+ const recursive = await box.watch(box.root, RECURSIVE);
115
+ const nonRecursive = await box.watch(box.root, NON_RECURSIVE);
116
+ assert.notStrictEqual(box.watcherOf(recursive), box.watcherOf(nonRecursive));
117
+ assert.strictEqual(box.allocated.length, 2);
118
+ });
119
+ });
120
+ describe('sharing', () => {
121
+ it('shares one watcher between a directory and the files inside it', async () => {
122
+ const directory = await box.watch(box.root, NON_RECURSIVE);
123
+ const first = await box.watch(box.files.write('a.txt'), NON_RECURSIVE);
124
+ const second = await box.watch(box.files.write('b.txt'), NON_RECURSIVE);
125
+ assert.strictEqual(box.allocated.length, 1);
126
+ assert.strictEqual(box.watcherOf(directory), box.watcherOf(first));
127
+ assert.strictEqual(box.watcherOf(first), box.watcherOf(second));
128
+ });
129
+ it('shares one watcher between requests with different excludes', async () => {
130
+ await box.watch(box.root, { ignored: ['**/node_modules'], recursive: false });
131
+ await box.watch(box.root, NON_RECURSIVE);
132
+ assert.strictEqual(box.allocated.length, 1);
133
+ });
134
+ it('shares one watcher between a directory and a symbolic link to it', async () => {
135
+ const real = box.files.mkdir('real');
136
+ fs.symlinkSync(real, box.files.path('link'), core_1.isWindows ? 'junction' : 'dir');
137
+ const direct = await box.watch(real, NON_RECURSIVE);
138
+ const linked = await box.watch(box.files.path('link'), NON_RECURSIVE);
139
+ assert.strictEqual(box.allocated.length, 1);
140
+ assert.strictEqual(box.watcherOf(direct), box.watcherOf(linked));
141
+ });
142
+ it('shares one watcher between concurrent requests for the same directory', async () => {
143
+ const [first, second] = [box.files.write('a.txt'), box.files.write('b.txt')];
144
+ const [one, two] = await Promise.all([box.watch(first, NON_RECURSIVE), box.watch(second, NON_RECURSIVE)]);
145
+ assert.strictEqual(box.allocated.length, 1);
146
+ assert.strictEqual(box.watcherOf(one), box.watcherOf(two));
147
+ });
148
+ it('moves a watcher to the parent once its path turns out to be a file', async () => {
149
+ const pending = await box.watch(box.files.path('later.txt'), NON_RECURSIVE);
150
+ box.files.write('later.txt');
151
+ await box.watcherOf(pending).whenStarted;
152
+ const directory = await box.watch(box.root, NON_RECURSIVE);
153
+ assert.strictEqual(box.allocated.length, 1);
154
+ assert.strictEqual(box.watcherOf(pending), box.watcherOf(directory));
155
+ });
156
+ it('merges two watchers whose paths turn out to be files in one directory', async () => {
157
+ const [one, two] = await Promise.all([
158
+ box.watch(box.files.path('a.txt'), NON_RECURSIVE),
159
+ box.watch(box.files.path('b.txt'), NON_RECURSIVE)
160
+ ]);
161
+ box.files.write('a.txt');
162
+ box.files.write('b.txt');
163
+ await Promise.all([one, two].map(watcherId => box.watcherOf(watcherId).whenStarted));
164
+ assert.strictEqual(box.allocated.length, 1);
165
+ assert.strictEqual(box.watcherOf(one), box.watcherOf(two));
166
+ // The handles have to follow the merge, or the moved request would never be released.
167
+ const survivor = box.watcherOf(one);
168
+ await Promise.all([one, two].map(watcherId => box.unwatchFileChanges(watcherId)));
169
+ await survivor.whenDisposed;
170
+ assert.strictEqual(box.allocated.length, 0);
171
+ });
172
+ it('does not attach a request to a watcher that is already disposed', async () => {
173
+ const first = await box.watch(box.root, NON_RECURSIVE);
174
+ const disposed = box.watcherOf(first);
175
+ disposed.dispose();
176
+ const second = await box.watch(box.root, NON_RECURSIVE);
177
+ assert.notStrictEqual(box.watcherOf(second), disposed);
178
+ assert.strictEqual(box.allocated.length, 1);
179
+ });
180
+ });
181
+ describe('releasing', () => {
182
+ it('disposes a directory watcher once its last request is unwatched', async () => {
183
+ const first = await box.watch(box.root, NON_RECURSIVE);
184
+ const second = await box.watch(box.root, NON_RECURSIVE);
185
+ const watcher = box.watcherOf(first);
186
+ await box.unwatchFileChanges(first);
187
+ await (0, promise_util_1.wait)(watcher_test_helper_1.WATCHER_TIMINGS.deferredDisposalTimeout * 2);
188
+ assert.strictEqual(watcher.isDisposed, false, 'the remaining request must keep the watcher alive');
189
+ await box.unwatchFileChanges(second);
190
+ await watcher.whenDisposed;
191
+ assert.strictEqual(box.allocated.length, 0);
192
+ });
193
+ it('releases the client reference of a recursive watcher', async () => {
194
+ const watcherId = await box.watch(box.root, RECURSIVE);
195
+ const watcher = box.watcherOf(watcherId);
196
+ await box.unwatchFileChanges(watcherId);
197
+ await watcher.whenDisposed;
198
+ assert.strictEqual(box.allocated.length, 0);
199
+ });
200
+ });
201
+ });
202
+ //# sourceMappingURL=filesystem-watcher-service-impl.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher-service-impl.spec.js","sourceRoot":"","sources":["../../src/node/filesystem-watcher-service-impl.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,6CAA6C;AAC7C,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,uDAAiC;AACjC,sEAA2D;AAC3D,mDAA6B;AAC7B,wEAAkD;AAClD,sCAAwC;AACxC,+CAA+C;AAC/C,oFAAyG;AACzG,oEAA6F;AAE7F,0FAEoD;AAGpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAE3B,MAAM,SAAS,GAA2B,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC3E,MAAM,aAAa,GAA2B,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAQhF,MAAM,qBAAsB,SAAQ,iDAAwB;IACxD,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACJ;AAED,MAAM,qBAAsB,SAAQ,oDAAwB;IACxD,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACJ;AAED,SAAS,cAAc,CAAC,QAAyB;IAC7C,OAAO,QAAQ,YAAY,qBAAqB,IAAI,QAAQ,YAAY,qBAAqB,CAAC;AAClG,CAAC;AAED,uEAAuE;AACvE,MAAM,OAAQ,SAAQ,wDAA4B;IAO9C;QACI,KAAK,CAAC,gCAAU,CAAC,CAAC;QANtB,0DAA0D;QACjD,UAAK,GAAG,IAAI,6BAAO,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;QAEhF,cAAS,GAAa,EAAE,CAAC;IAI5C,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,OAAqB;QACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,cAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC;aACtE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,qFAAqF;IACrF,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;IAED,IAAc,aAAa;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IAED,2EAA2E;IAC3E,SAAS,CAAC,SAAiB;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5F,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACtE,CAAC;IAEkB,eAAe,CAAC,OAA6C;QAC5E,OAAO;YACH,IAAI,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,qCAAO,CAAC,uBAAuB,CAAC;YACrF,IAAI,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,qCAAO,CAAC;SAChE,CAAC;IACN,CAAC;CACJ;AAED,QAAQ,CAAC,4BAA4B,EAAE;IAEnC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEpB,IAAI,GAAY,CAAC;IAEjB,UAAU,CAAC,GAAG,EAAE;QACZ,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QAErB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,MAAM,CAAC,WAAW,CAAC,0DAA8B,EAAE,wDAA4B,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;YAE5F,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAE/E,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,yCAAa,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,yCAAa,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YAErE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAE3D,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,6CAAoB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YAElF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAE9D,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QAErB,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAE5E,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;YAExE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAEzE,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAEzC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YAEtE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAE7E,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YAE1G,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;YAC5E,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAA0B,CAAC,WAAW,CAAC;YAEnE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAE3D,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;gBACjD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;aACpD,CAAC,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAE,GAAG,CAAC,SAAS,CAAC,SAAS,CAA0B,CAAC,WAAW,CAAC,CAAC,CAAC;YAE/G,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3D,sFAAsF;YACtF,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAyB,CAAC;YAC5D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClF,MAAM,QAAQ,CAAC,YAAY,CAAC;YAC5B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAyB,CAAC;YAC9D,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEnB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAExD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;YACvD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QAEvB,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAyB,CAAC;YAE7D,MAAM,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,IAAA,mBAAI,EAAC,qCAAO,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,mDAAmD,CAAC,CAAC;YAEnG,MAAM,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,CAAC,YAAY,CAAC;YAC3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,CAAkB,CAAC;YAE1D,MAAM,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,OAAO,CAAC,YAAY,CAAC;YAE3B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { WatchOptions } from '../common/filesystem-watcher-protocol';
2
+ /** How a watcher reports what it is doing. */
3
+ export interface WatcherLogger {
4
+ verbose: boolean;
5
+ info: (message: string, ...args: unknown[]) => void;
6
+ error: (message: string, ...args: unknown[]) => void;
7
+ }
8
+ /** A single client request served by a {@link FileSystemWatcher}. */
9
+ export interface WatchRequest {
10
+ /** Client to route the changes of this request to. */
11
+ readonly clientId: number;
12
+ /** Path as requested by the client. Change URIs are built from it, never from the real path. */
13
+ readonly path: string;
14
+ /** Exclude patterns of this request alone. */
15
+ readonly ignored: readonly string[];
16
+ }
17
+ /** A watch shared by every request that resolves to the same target. Implementations decide whether it recurses. */
18
+ export interface FileSystemWatcher {
19
+ /** A disposed watcher released its resources and must not be given further requests. */
20
+ readonly isDisposed: boolean;
21
+ /** Resolves once this watcher disposed itself. Never rejects. */
22
+ readonly whenDisposed: Promise<void>;
23
+ /** Serves `request` until {@link removeRequest} is called with the same `watcherId`. */
24
+ addRequest(watcherId: number, request: WatchRequest): void;
25
+ /** Releases a request. The watcher disposes itself once it has none left. */
26
+ removeRequest(watcherId: number): void;
27
+ }
28
+ /** Handles disposal and logging for a watcher. Subclasses decide how to observe the file system. */
29
+ export declare abstract class AbstractFileSystemWatcher implements FileSystemWatcher {
30
+ /** Path this watcher was asked about; the subclass decides what it resolves to. */
31
+ protected readonly target: string;
32
+ private readonly logger;
33
+ private static debugIdSequence;
34
+ private readonly debugId;
35
+ private readonly disposalDeferred;
36
+ private readonly disposal;
37
+ readonly whenDisposed: Promise<void>;
38
+ constructor(
39
+ /** Path this watcher was asked about; the subclass decides what it resolves to. */
40
+ target: string, logger: WatcherLogger);
41
+ get isDisposed(): boolean;
42
+ abstract addRequest(watcherId: number, request: WatchRequest): void;
43
+ abstract removeRequest(watcherId: number): void;
44
+ /**
45
+ * Marks this watcher disposed.
46
+ * @returns `false` if it already was, in which case the caller must not clean up again.
47
+ */
48
+ protected markDisposed(): boolean;
49
+ /** Logs as-is. Unlike {@link info} it is not prefixed, since these messages name their own path. */
50
+ protected error(message: string, ...params: unknown[]): void;
51
+ protected info(prefix: string, ...params: unknown[]): void;
52
+ protected debug(prefix: string, ...params: unknown[]): void;
53
+ }
54
+ export type ResolvedWatchOptions = Required<WatchOptions>;
55
+ /** Serves either recursive or non-recursive requests, and decides which watcher serves each one. */
56
+ export interface WatcherProvider {
57
+ /** @returns `true` if this provider serves requests made with these options. */
58
+ canHandle(options: ResolvedWatchOptions): boolean;
59
+ /** Serves `request` under `watcherId`, on a watcher shared with requests resolving to the same target. */
60
+ watch(watcherId: number, request: WatchRequest): Promise<void>;
61
+ /**
62
+ * Releases the request registered under `watcherId`.
63
+ * @returns `true` if this provider served the request.
64
+ */
65
+ unwatch(watcherId: number): boolean;
66
+ }
67
+ /** A {@link WatcherProvider} that keeps one watcher per target. Subclasses decide which key a target maps to. */
68
+ export declare abstract class AbstractWatcherProvider implements WatcherProvider {
69
+ private readonly watchersByTarget;
70
+ /** The watcher that serves each request, by `watcherId`. */
71
+ private readonly watchersByRequest;
72
+ /** Every watcher this provider currently has open. */
73
+ protected get activeWatchers(): readonly FileSystemWatcher[];
74
+ abstract canHandle(options: ResolvedWatchOptions): boolean;
75
+ abstract watch(watcherId: number, request: WatchRequest): Promise<void>;
76
+ unwatch(watcherId: number): boolean;
77
+ /** The watcher serving a request, if this provider has one. */
78
+ protected watcherFor(watcherId: number): FileSystemWatcher | undefined;
79
+ /** Puts a request on a watcher and records which one, so {@link unwatch} finds it again. */
80
+ protected serve(watcherId: number, watcher: FileSystemWatcher, request: WatchRequest): void;
81
+ /** Records the watcher of a request that reached it without {@link serve}, such as through a re-key. */
82
+ protected assign(watcherId: number, watcher: FileSystemWatcher): void;
83
+ /**
84
+ * Returns the watcher under `watcherKey`, or creates one. A disposed watcher stays in the map until a later
85
+ * promise callback removes it, so it is replaced here rather than handed a new request.
86
+ */
87
+ protected getOrCreateWatcher<T extends FileSystemWatcher>(watcherKey: string, create: () => T): T;
88
+ /** @returns `true` if `watcher` is the one registered under `watcherKey`. */
89
+ protected isRegisteredAs(watcher: FileSystemWatcher, watcherKey: string): boolean;
90
+ /** Forgets every key a watcher is registered under, so that it can be registered under another. */
91
+ protected unregisterWatcher(watcher: FileSystemWatcher): void;
92
+ }
93
+ //# sourceMappingURL=filesystem-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher.d.ts","sourceRoot":"","sources":["../../src/node/filesystem-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Ehab Younes and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.AbstractWatcherProvider = exports.AbstractFileSystemWatcher = void 0;
19
+ const promise_util_1 = require("@theia/core/lib/common/promise-util");
20
+ const cancellation_1 = require("@theia/core/lib/common/cancellation");
21
+ /** Handles disposal and logging for a watcher. Subclasses decide how to observe the file system. */
22
+ class AbstractFileSystemWatcher {
23
+ static { this.debugIdSequence = 0; }
24
+ constructor(
25
+ /** Path this watcher was asked about; the subclass decides what it resolves to. */
26
+ target, logger) {
27
+ this.target = target;
28
+ this.logger = logger;
29
+ this.debugId = AbstractFileSystemWatcher.debugIdSequence++;
30
+ this.disposalDeferred = new promise_util_1.Deferred();
31
+ this.disposal = new cancellation_1.CancellationTokenSource();
32
+ this.whenDisposed = this.disposalDeferred.promise;
33
+ }
34
+ get isDisposed() {
35
+ return this.disposal.token.isCancellationRequested;
36
+ }
37
+ /**
38
+ * Marks this watcher disposed.
39
+ * @returns `false` if it already was, in which case the caller must not clean up again.
40
+ */
41
+ markDisposed() {
42
+ if (this.isDisposed) {
43
+ return false;
44
+ }
45
+ this.disposal.cancel();
46
+ this.disposalDeferred.resolve();
47
+ return true;
48
+ }
49
+ /** Logs as-is. Unlike {@link info} it is not prefixed, since these messages name their own path. */
50
+ error(message, ...params) {
51
+ this.logger.error(message, ...params);
52
+ }
53
+ info(prefix, ...params) {
54
+ this.logger.info(`${prefix} ${this.constructor.name}(${this.debugId} at "${this.target}"):`, ...params);
55
+ }
56
+ debug(prefix, ...params) {
57
+ if (this.logger.verbose) {
58
+ this.info(prefix, ...params);
59
+ }
60
+ }
61
+ }
62
+ exports.AbstractFileSystemWatcher = AbstractFileSystemWatcher;
63
+ /** A {@link WatcherProvider} that keeps one watcher per target. Subclasses decide which key a target maps to. */
64
+ class AbstractWatcherProvider {
65
+ constructor() {
66
+ this.watchersByTarget = new Map();
67
+ /** The watcher that serves each request, by `watcherId`. */
68
+ this.watchersByRequest = new Map();
69
+ }
70
+ /** Every watcher this provider currently has open. */
71
+ get activeWatchers() {
72
+ return Array.from(this.watchersByTarget.values());
73
+ }
74
+ unwatch(watcherId) {
75
+ const watcher = this.watchersByRequest.get(watcherId);
76
+ if (!watcher) {
77
+ return false;
78
+ }
79
+ this.watchersByRequest.delete(watcherId);
80
+ watcher.removeRequest(watcherId);
81
+ return true;
82
+ }
83
+ /** The watcher serving a request, if this provider has one. */
84
+ watcherFor(watcherId) {
85
+ return this.watchersByRequest.get(watcherId);
86
+ }
87
+ /** Puts a request on a watcher and records which one, so {@link unwatch} finds it again. */
88
+ serve(watcherId, watcher, request) {
89
+ watcher.addRequest(watcherId, request);
90
+ this.assign(watcherId, watcher);
91
+ }
92
+ /** Records the watcher of a request that reached it without {@link serve}, such as through a re-key. */
93
+ assign(watcherId, watcher) {
94
+ this.watchersByRequest.set(watcherId, watcher);
95
+ }
96
+ /**
97
+ * Returns the watcher under `watcherKey`, or creates one. A disposed watcher stays in the map until a later
98
+ * promise callback removes it, so it is replaced here rather than handed a new request.
99
+ */
100
+ getOrCreateWatcher(watcherKey, create) {
101
+ const existing = this.watchersByTarget.get(watcherKey);
102
+ if (existing && !existing.isDisposed) {
103
+ return existing;
104
+ }
105
+ const watcher = create();
106
+ this.watchersByTarget.set(watcherKey, watcher);
107
+ watcher.whenDisposed.then(() => {
108
+ if (this.watchersByTarget.get(watcherKey) === watcher) {
109
+ this.watchersByTarget.delete(watcherKey);
110
+ }
111
+ // Requests it handed to another watcher already point there, so drop only the ones still on it.
112
+ for (const [watcherId, serving] of this.watchersByRequest) {
113
+ if (serving === watcher) {
114
+ this.watchersByRequest.delete(watcherId);
115
+ }
116
+ }
117
+ });
118
+ return watcher;
119
+ }
120
+ /** @returns `true` if `watcher` is the one registered under `watcherKey`. */
121
+ isRegisteredAs(watcher, watcherKey) {
122
+ return this.watchersByTarget.get(watcherKey) === watcher;
123
+ }
124
+ /** Forgets every key a watcher is registered under, so that it can be registered under another. */
125
+ unregisterWatcher(watcher) {
126
+ for (const [watcherKey, registered] of this.watchersByTarget) {
127
+ if (registered === watcher) {
128
+ this.watchersByTarget.delete(watcherKey);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ exports.AbstractWatcherProvider = AbstractWatcherProvider;
134
+ //# sourceMappingURL=filesystem-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-watcher.js","sourceRoot":"","sources":["../../src/node/filesystem-watcher.ts"],"names":[],"mappings":"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"}