@theia/filesystem 1.45.0 → 1.46.0-next.106
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/breadcrumbs/filepath-breadcrumbs-container.js +8 -19
- package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.js.map +1 -1
- package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js +8 -16
- package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js.map +1 -1
- package/lib/browser/download/file-download-command-contribution.js +6 -14
- package/lib/browser/download/file-download-command-contribution.js.map +1 -1
- package/lib/browser/download/file-download-service.js +6 -14
- package/lib/browser/download/file-download-service.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js +7 -15
- package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-model.js +8 -16
- package/lib/browser/file-dialog/file-dialog-model.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-service.js +14 -22
- package/lib/browser/file-dialog/file-dialog-service.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js +4 -15
- package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-tree.js +2 -7
- package/lib/browser/file-dialog/file-dialog-tree.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog-widget.js +6 -17
- package/lib/browser/file-dialog/file-dialog-widget.js.map +1 -1
- package/lib/browser/file-dialog/file-dialog.js +34 -45
- package/lib/browser/file-dialog/file-dialog.js.map +1 -1
- package/lib/browser/file-dialog/index.js +5 -14
- package/lib/browser/file-dialog/index.js.map +1 -1
- package/lib/browser/file-resource.d.ts +6 -2
- package/lib/browser/file-resource.d.ts.map +1 -1
- package/lib/browser/file-resource.js +39 -22
- package/lib/browser/file-resource.js.map +1 -1
- package/lib/browser/file-service.d.ts +13 -0
- package/lib/browser/file-service.d.ts.map +1 -1
- package/lib/browser/file-service.js +46 -40
- package/lib/browser/file-service.js.map +1 -1
- package/lib/browser/file-tree/file-tree-decorator-adapter.js +10 -18
- package/lib/browser/file-tree/file-tree-decorator-adapter.js.map +1 -1
- package/lib/browser/file-tree/file-tree-label-provider.js +6 -14
- package/lib/browser/file-tree/file-tree-label-provider.js.map +1 -1
- package/lib/browser/file-tree/file-tree-model.js +14 -22
- package/lib/browser/file-tree/file-tree-model.js.map +1 -1
- package/lib/browser/file-tree/file-tree-widget.js +10 -21
- package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
- package/lib/browser/file-tree/file-tree.js +6 -14
- package/lib/browser/file-tree/file-tree.js.map +1 -1
- package/lib/browser/file-tree/index.js +7 -16
- package/lib/browser/file-tree/index.js.map +1 -1
- package/lib/browser/file-upload-service.d.ts +2 -4
- package/lib/browser/file-upload-service.d.ts.map +1 -1
- package/lib/browser/file-upload-service.js +14 -22
- package/lib/browser/file-upload-service.js.map +1 -1
- package/lib/browser/filesystem-frontend-contribution.js +18 -26
- package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
- package/lib/browser/filesystem-save-resource-service.d.ts +1 -1
- package/lib/browser/filesystem-save-resource-service.d.ts.map +1 -1
- package/lib/browser/filesystem-save-resource-service.js +10 -17
- package/lib/browser/filesystem-save-resource-service.js.map +1 -1
- package/lib/browser/filesystem-watcher-error-handler.js +6 -14
- package/lib/browser/filesystem-watcher-error-handler.js.map +1 -1
- package/lib/browser/index.js +6 -15
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/location/index.js +3 -12
- package/lib/browser/location/index.js.map +1 -1
- package/lib/browser/location/location-renderer.js +12 -23
- package/lib/browser/location/location-renderer.js.map +1 -1
- package/lib/browser/remote-file-service-contribution.js +4 -12
- package/lib/browser/remote-file-service-contribution.js.map +1 -1
- package/lib/browser-only/browser-only-filesystem-frontend-module.d.ts +4 -0
- package/lib/browser-only/browser-only-filesystem-frontend-module.d.ts.map +1 -0
- package/lib/browser-only/browser-only-filesystem-frontend-module.js +41 -0
- package/lib/browser-only/browser-only-filesystem-frontend-module.js.map +1 -0
- package/lib/browser-only/browser-only-filesystem-provider-server.d.ts +12 -0
- package/lib/browser-only/browser-only-filesystem-provider-server.d.ts.map +1 -0
- package/lib/browser-only/browser-only-filesystem-provider-server.js +40 -0
- package/lib/browser-only/browser-only-filesystem-provider-server.js.map +1 -0
- package/lib/browser-only/browserfs-filesystem-initialization.d.ts +13 -0
- package/lib/browser-only/browserfs-filesystem-initialization.d.ts.map +1 -0
- package/lib/browser-only/browserfs-filesystem-initialization.js +55 -0
- package/lib/browser-only/browserfs-filesystem-initialization.js.map +1 -0
- package/lib/browser-only/browserfs-filesystem-provider.d.ts +46 -0
- package/lib/browser-only/browserfs-filesystem-provider.d.ts.map +1 -0
- package/lib/browser-only/browserfs-filesystem-provider.js +440 -0
- package/lib/browser-only/browserfs-filesystem-provider.js.map +1 -0
- package/lib/common/files.d.ts +8 -0
- package/lib/common/files.d.ts.map +1 -1
- package/lib/common/files.js +9 -1
- package/lib/common/files.js.map +1 -1
- package/lib/common/index.js +3 -12
- package/lib/common/index.js.map +1 -1
- package/lib/common/remote-file-system-provider.d.ts +11 -2
- package/lib/common/remote-file-system-provider.d.ts.map +1 -1
- package/lib/common/remote-file-system-provider.js +46 -24
- package/lib/common/remote-file-system-provider.js.map +1 -1
- package/lib/electron-browser/file-dialog/electron-file-dialog-service.js +5 -13
- package/lib/electron-browser/file-dialog/electron-file-dialog-service.js.map +1 -1
- package/lib/electron-main/electron-api-main.js +2 -7
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/node/disk-file-system-provider.d.ts.map +1 -1
- package/lib/node/disk-file-system-provider.js +20 -22
- package/lib/node/disk-file-system-provider.js.map +1 -1
- package/lib/node/disk-file-system-provider.spec.js +35 -4
- package/lib/node/disk-file-system-provider.spec.js.map +1 -1
- package/lib/node/download/directory-archiver.js +3 -8
- package/lib/node/download/directory-archiver.js.map +1 -1
- package/lib/node/download/directory-archiver.spec.js +1 -1
- package/lib/node/download/directory-archiver.spec.js.map +1 -1
- package/lib/node/download/file-download-cache.js +4 -12
- package/lib/node/download/file-download-cache.js.map +1 -1
- package/lib/node/download/file-download-endpoint.js +9 -17
- package/lib/node/download/file-download-endpoint.js.map +1 -1
- package/lib/node/download/file-download-handler.d.ts.map +1 -1
- package/lib/node/download/file-download-handler.js +17 -25
- package/lib/node/download/file-download-handler.js.map +1 -1
- package/lib/node/file-change-collection.spec.js +1 -1
- package/lib/node/file-change-collection.spec.js.map +1 -1
- package/lib/node/filesystem-watcher-client.js +6 -14
- package/lib/node/filesystem-watcher-client.js.map +1 -1
- package/lib/node/filesystem-watcher-dispatcher.js +2 -7
- package/lib/node/filesystem-watcher-dispatcher.js.map +1 -1
- package/lib/node/node-file-upload-service.js +2 -7
- package/lib/node/node-file-upload-service.js.map +1 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-service.js +1 -1
- package/lib/node/nsfw-watcher/nsfw-filesystem-service.js.map +1 -1
- package/package.json +9 -6
- package/src/browser/file-resource.ts +36 -7
- package/src/browser/file-service.ts +40 -13
- package/src/browser/file-upload-service.ts +4 -6
- package/src/browser/filesystem-save-resource-service.ts +3 -2
- package/src/browser-only/browser-only-filesystem-frontend-module.ts +38 -0
- package/src/browser-only/browser-only-filesystem-provider-server.ts +32 -0
- package/src/browser-only/browserfs-filesystem-initialization.ts +61 -0
- package/src/browser-only/browserfs-filesystem-provider.ts +462 -0
- package/src/common/files.ts +13 -0
- package/src/common/remote-file-system-provider.ts +40 -2
- package/src/electron-browser/file-dialog/electron-file-dialog-service.ts +1 -1
- package/src/node/disk-file-system-provider.spec.ts +38 -5
- package/src/node/disk-file-system-provider.ts +9 -4
- package/src/node/download/directory-archiver.spec.ts +1 -1
- package/src/node/download/directory-archiver.ts +1 -1
- package/src/node/download/file-download-endpoint.ts +1 -1
- package/src/node/download/file-download-handler.ts +6 -6
- package/src/node/file-change-collection.spec.ts +1 -1
- package/src/node/nsfw-watcher/nsfw-filesystem-service.ts +1 -1
|
@@ -28,7 +28,7 @@ import { DefaultFileDialogService, OpenFileDialogProps, SaveFileDialogProps } fr
|
|
|
28
28
|
// solution.
|
|
29
29
|
//
|
|
30
30
|
// eslint-disable-next-line @theia/runtime-import-check
|
|
31
|
-
import { FileUri } from '@theia/core/lib/
|
|
31
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
32
32
|
import { OpenDialogOptions, SaveDialogOptions } from '../../electron-common/electron-api';
|
|
33
33
|
|
|
34
34
|
import '@theia/core/lib/electron-common/electron-api';
|
|
@@ -18,15 +18,15 @@ import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposa
|
|
|
18
18
|
import { EncodingService } from '@theia/core/lib/common/encoding-service';
|
|
19
19
|
import { ILogger } from '@theia/core/lib/common/logger';
|
|
20
20
|
import { MockLogger } from '@theia/core/lib/common/test/mock-logger';
|
|
21
|
-
import { FileUri } from '@theia/core/lib/
|
|
21
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
22
22
|
import { IPCConnectionProvider } from '@theia/core/lib/node/messaging/ipc-connection-provider';
|
|
23
23
|
import { Container, ContainerModule } from '@theia/core/shared/inversify';
|
|
24
24
|
import { equal, fail } from 'assert';
|
|
25
25
|
import { promises as fs } from 'fs';
|
|
26
26
|
import { join } from 'path';
|
|
27
27
|
import * as temp from 'temp';
|
|
28
|
-
import {
|
|
29
|
-
import { FilePermission, FileSystemProviderError, FileSystemProviderErrorCode } from '../common/files';
|
|
28
|
+
import { generateUuid } from '@theia/core/lib/common/uuid';
|
|
29
|
+
import { FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode } from '../common/files';
|
|
30
30
|
import { DiskFileSystemProvider } from './disk-file-system-provider';
|
|
31
31
|
import { bindFileSystemWatcherServer } from './filesystem-backend-module';
|
|
32
32
|
|
|
@@ -53,7 +53,7 @@ describe('disk-file-system-provider', () => {
|
|
|
53
53
|
describe('stat', () => {
|
|
54
54
|
it("should omit the 'permissions' property of the stat if the file can be both read and write", async () => {
|
|
55
55
|
const tempDirPath = tracked.mkdirSync();
|
|
56
|
-
const tempFilePath = join(tempDirPath, `${
|
|
56
|
+
const tempFilePath = join(tempDirPath, `${generateUuid()}.txt`);
|
|
57
57
|
await fs.writeFile(tempFilePath, 'some content', { encoding: 'utf8' });
|
|
58
58
|
|
|
59
59
|
let content = await fs.readFile(tempFilePath, { encoding: 'utf8' });
|
|
@@ -70,7 +70,7 @@ describe('disk-file-system-provider', () => {
|
|
|
70
70
|
|
|
71
71
|
it("should set the 'permissions' property to `Readonly` if the file can be read but not write", async () => {
|
|
72
72
|
const tempDirPath = tracked.mkdirSync();
|
|
73
|
-
const tempFilePath = join(tempDirPath, `${
|
|
73
|
+
const tempFilePath = join(tempDirPath, `${generateUuid()}.txt`);
|
|
74
74
|
await fs.writeFile(tempFilePath, 'readonly content', {
|
|
75
75
|
encoding: 'utf8',
|
|
76
76
|
});
|
|
@@ -93,6 +93,39 @@ describe('disk-file-system-provider', () => {
|
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
+
describe('delete', () => {
|
|
97
|
+
it('delete is able to delete folder', async () => {
|
|
98
|
+
const tempDirPath = tracked.mkdirSync();
|
|
99
|
+
const testFolder = join(tempDirPath, 'test');
|
|
100
|
+
const folderUri = FileUri.create(testFolder);
|
|
101
|
+
for (const recursive of [true, false]) {
|
|
102
|
+
// Note: useTrash = true fails on Linux
|
|
103
|
+
const useTrash = false;
|
|
104
|
+
if ((fsProvider.capabilities & FileSystemProviderCapabilities.Access) === 0 && useTrash) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
await fsProvider.mkdir(folderUri);
|
|
108
|
+
if (recursive) {
|
|
109
|
+
await fsProvider.writeFile(FileUri.create(join(testFolder, 'test.file')), Buffer.from('test'), { overwrite: false, create: true });
|
|
110
|
+
await fsProvider.mkdir(FileUri.create(join(testFolder, 'subFolder')));
|
|
111
|
+
}
|
|
112
|
+
await fsProvider.delete(folderUri, { recursive, useTrash });
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('delete is able to delete file', async () => {
|
|
117
|
+
const tempDirPath = tracked.mkdirSync();
|
|
118
|
+
const testFile = join(tempDirPath, 'test.file');
|
|
119
|
+
const testFileUri = FileUri.create(testFile);
|
|
120
|
+
for (const recursive of [true, false]) {
|
|
121
|
+
for (const useTrash of [true, false]) {
|
|
122
|
+
await fsProvider.writeFile(testFileUri, Buffer.from('test'), { overwrite: false, create: true });
|
|
123
|
+
await fsProvider.delete(testFileUri, { recursive, useTrash });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
96
129
|
function createContainer(): Container {
|
|
97
130
|
const container = new Container({ defaultScope: 'Singleton' });
|
|
98
131
|
const module = new ContainerModule(bind => {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
import { injectable, inject, postConstruct } from '@theia/core/shared/inversify';
|
|
26
26
|
import { basename, dirname, normalize, join } from 'path';
|
|
27
|
-
import {
|
|
27
|
+
import { generateUuid } from '@theia/core/lib/common/uuid';
|
|
28
28
|
import * as os from 'os';
|
|
29
29
|
import * as fs from 'fs';
|
|
30
30
|
import {
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
import { promisify } from 'util';
|
|
36
36
|
import URI from '@theia/core/lib/common/uri';
|
|
37
37
|
import { Path } from '@theia/core/lib/common/path';
|
|
38
|
-
import { FileUri } from '@theia/core/lib/
|
|
38
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
39
39
|
import { Event, Emitter } from '@theia/core/lib/common/event';
|
|
40
40
|
import { Disposable, DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
41
41
|
import { OS, isWindows } from '@theia/core/lib/common/os';
|
|
@@ -509,7 +509,12 @@ export class DiskFileSystemProvider implements Disposable,
|
|
|
509
509
|
if (opts.recursive) {
|
|
510
510
|
await this.rimraf(filePath);
|
|
511
511
|
} else {
|
|
512
|
-
await promisify(
|
|
512
|
+
const stat = await promisify(lstat)(filePath);
|
|
513
|
+
if (stat.isDirectory() && !stat.isSymbolicLink()) {
|
|
514
|
+
await promisify(rmdir)(filePath);
|
|
515
|
+
} else {
|
|
516
|
+
await promisify(unlink)(filePath);
|
|
517
|
+
}
|
|
513
518
|
}
|
|
514
519
|
} else {
|
|
515
520
|
await trash(filePath);
|
|
@@ -525,7 +530,7 @@ export class DiskFileSystemProvider implements Disposable,
|
|
|
525
530
|
|
|
526
531
|
protected async rimrafMove(path: string): Promise<void> {
|
|
527
532
|
try {
|
|
528
|
-
const pathInTemp = join(os.tmpdir(),
|
|
533
|
+
const pathInTemp = join(os.tmpdir(), generateUuid());
|
|
529
534
|
try {
|
|
530
535
|
await promisify(rename)(path, pathInTemp);
|
|
531
536
|
} catch (error) {
|
|
@@ -21,7 +21,7 @@ import { extract } from 'tar-fs';
|
|
|
21
21
|
import { expect } from 'chai';
|
|
22
22
|
import URI from '@theia/core/lib/common/uri';
|
|
23
23
|
import { MockDirectoryArchiver } from './test/mock-directory-archiver';
|
|
24
|
-
import { FileUri } from '@theia/core/lib/
|
|
24
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
25
25
|
|
|
26
26
|
const track = temp.track();
|
|
27
27
|
|
|
@@ -18,7 +18,7 @@ import { injectable } from '@theia/core/shared/inversify';
|
|
|
18
18
|
import * as fs from '@theia/core/shared/fs-extra';
|
|
19
19
|
import { pack } from 'tar-fs';
|
|
20
20
|
import URI from '@theia/core/lib/common/uri';
|
|
21
|
-
import { FileUri } from '@theia/core/lib/
|
|
21
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
22
22
|
|
|
23
23
|
@injectable()
|
|
24
24
|
export class DirectoryArchiver {
|
|
@@ -21,7 +21,7 @@ import { injectable, inject, named } from '@theia/core/shared/inversify';
|
|
|
21
21
|
import { json } from 'body-parser';
|
|
22
22
|
import { Application, Router } from '@theia/core/shared/express';
|
|
23
23
|
import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
|
|
24
|
-
import { FileUri } from '@theia/core/lib/
|
|
24
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
25
25
|
import { FileDownloadHandler } from './file-download-handler';
|
|
26
26
|
|
|
27
27
|
@injectable()
|
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
import * as os from 'os';
|
|
18
18
|
import * as fs from '@theia/core/shared/fs-extra';
|
|
19
19
|
import * as path from 'path';
|
|
20
|
-
import {
|
|
20
|
+
import { generateUuid } from '@theia/core/lib/common/uuid';
|
|
21
21
|
import { Request, Response } from '@theia/core/shared/express';
|
|
22
22
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
23
23
|
import { OK, BAD_REQUEST, METHOD_NOT_ALLOWED, NOT_FOUND, INTERNAL_SERVER_ERROR, REQUESTED_RANGE_NOT_SATISFIABLE, PARTIAL_CONTENT } from 'http-status-codes';
|
|
24
24
|
import URI from '@theia/core/lib/common/uri';
|
|
25
25
|
import { isEmpty } from '@theia/core/lib/common/objects';
|
|
26
26
|
import { ILogger } from '@theia/core/lib/common/logger';
|
|
27
|
-
import { FileUri } from '@theia/core/lib/
|
|
27
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
28
28
|
import { DirectoryArchiver } from './directory-archiver';
|
|
29
29
|
import { FileDownloadData } from '../../common/download/file-download-data';
|
|
30
30
|
import { FileDownloadCache, DownloadStorageItem } from './file-download-cache';
|
|
@@ -135,12 +135,12 @@ export abstract class FileDownloadHandler {
|
|
|
135
135
|
end: (isNaN(end) || end > statSize - 1) ? (statSize - 1) : end
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
-
protected async archive(inputPath: string, outputPath: string = path.join(os.tmpdir(),
|
|
138
|
+
protected async archive(inputPath: string, outputPath: string = path.join(os.tmpdir(), generateUuid()), entries?: string[]): Promise<string> {
|
|
139
139
|
await this.directoryArchiver.archive(inputPath, outputPath, entries);
|
|
140
140
|
return outputPath;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
protected async createTempDir(downloadId: string =
|
|
143
|
+
protected async createTempDir(downloadId: string = generateUuid()): Promise<string> {
|
|
144
144
|
const outputPath = path.join(os.tmpdir(), downloadId);
|
|
145
145
|
await fs.mkdir(outputPath);
|
|
146
146
|
return outputPath;
|
|
@@ -221,7 +221,7 @@ export class SingleFileDownloadHandler extends FileDownloadHandler {
|
|
|
221
221
|
return;
|
|
222
222
|
}
|
|
223
223
|
try {
|
|
224
|
-
const downloadId =
|
|
224
|
+
const downloadId = generateUuid();
|
|
225
225
|
const options: PrepareDownloadOptions = { filePath, downloadId, remove: false };
|
|
226
226
|
if (!stat.isDirectory()) {
|
|
227
227
|
await this.prepareDownload(request, response, options);
|
|
@@ -271,7 +271,7 @@ export class MultiFileDownloadHandler extends FileDownloadHandler {
|
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
try {
|
|
274
|
-
const downloadId =
|
|
274
|
+
const downloadId = generateUuid();
|
|
275
275
|
const outputRootPath = await this.createTempDir(downloadId);
|
|
276
276
|
const distinctUris = Array.from(new Set(body.uris.map(uri => new URI(uri))));
|
|
277
277
|
const tarPaths = [];
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import * as assert from 'assert';
|
|
18
|
-
import { FileUri } from '@theia/core/lib/
|
|
18
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
19
19
|
import { FileChangeCollection } from './file-change-collection';
|
|
20
20
|
import { FileChangeType } from '../common/files';
|
|
21
21
|
|
|
@@ -18,7 +18,7 @@ import nsfw = require('@theia/core/shared/nsfw');
|
|
|
18
18
|
import path = require('path');
|
|
19
19
|
import { promises as fsp } from 'fs';
|
|
20
20
|
import { IMinimatch, Minimatch } from 'minimatch';
|
|
21
|
-
import { FileUri } from '@theia/core/lib/
|
|
21
|
+
import { FileUri } from '@theia/core/lib/common/file-uri';
|
|
22
22
|
import {
|
|
23
23
|
FileChangeType, FileSystemWatcherService, FileSystemWatcherServiceClient, WatchOptions
|
|
24
24
|
} from '../../common/filesystem-watcher-protocol';
|