@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.
Files changed (140) hide show
  1. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.js +8 -19
  2. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.js.map +1 -1
  3. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js +8 -16
  4. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js.map +1 -1
  5. package/lib/browser/download/file-download-command-contribution.js +6 -14
  6. package/lib/browser/download/file-download-command-contribution.js.map +1 -1
  7. package/lib/browser/download/file-download-service.js +6 -14
  8. package/lib/browser/download/file-download-service.js.map +1 -1
  9. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js +7 -15
  10. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js.map +1 -1
  11. package/lib/browser/file-dialog/file-dialog-model.js +8 -16
  12. package/lib/browser/file-dialog/file-dialog-model.js.map +1 -1
  13. package/lib/browser/file-dialog/file-dialog-service.js +14 -22
  14. package/lib/browser/file-dialog/file-dialog-service.js.map +1 -1
  15. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js +4 -15
  16. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js.map +1 -1
  17. package/lib/browser/file-dialog/file-dialog-tree.js +2 -7
  18. package/lib/browser/file-dialog/file-dialog-tree.js.map +1 -1
  19. package/lib/browser/file-dialog/file-dialog-widget.js +6 -17
  20. package/lib/browser/file-dialog/file-dialog-widget.js.map +1 -1
  21. package/lib/browser/file-dialog/file-dialog.js +34 -45
  22. package/lib/browser/file-dialog/file-dialog.js.map +1 -1
  23. package/lib/browser/file-dialog/index.js +5 -14
  24. package/lib/browser/file-dialog/index.js.map +1 -1
  25. package/lib/browser/file-resource.d.ts +6 -2
  26. package/lib/browser/file-resource.d.ts.map +1 -1
  27. package/lib/browser/file-resource.js +39 -22
  28. package/lib/browser/file-resource.js.map +1 -1
  29. package/lib/browser/file-service.d.ts +13 -0
  30. package/lib/browser/file-service.d.ts.map +1 -1
  31. package/lib/browser/file-service.js +46 -40
  32. package/lib/browser/file-service.js.map +1 -1
  33. package/lib/browser/file-tree/file-tree-decorator-adapter.js +10 -18
  34. package/lib/browser/file-tree/file-tree-decorator-adapter.js.map +1 -1
  35. package/lib/browser/file-tree/file-tree-label-provider.js +6 -14
  36. package/lib/browser/file-tree/file-tree-label-provider.js.map +1 -1
  37. package/lib/browser/file-tree/file-tree-model.js +14 -22
  38. package/lib/browser/file-tree/file-tree-model.js.map +1 -1
  39. package/lib/browser/file-tree/file-tree-widget.js +10 -21
  40. package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
  41. package/lib/browser/file-tree/file-tree.js +6 -14
  42. package/lib/browser/file-tree/file-tree.js.map +1 -1
  43. package/lib/browser/file-tree/index.js +7 -16
  44. package/lib/browser/file-tree/index.js.map +1 -1
  45. package/lib/browser/file-upload-service.d.ts +2 -4
  46. package/lib/browser/file-upload-service.d.ts.map +1 -1
  47. package/lib/browser/file-upload-service.js +14 -22
  48. package/lib/browser/file-upload-service.js.map +1 -1
  49. package/lib/browser/filesystem-frontend-contribution.js +18 -26
  50. package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
  51. package/lib/browser/filesystem-save-resource-service.d.ts +1 -1
  52. package/lib/browser/filesystem-save-resource-service.d.ts.map +1 -1
  53. package/lib/browser/filesystem-save-resource-service.js +10 -17
  54. package/lib/browser/filesystem-save-resource-service.js.map +1 -1
  55. package/lib/browser/filesystem-watcher-error-handler.js +6 -14
  56. package/lib/browser/filesystem-watcher-error-handler.js.map +1 -1
  57. package/lib/browser/index.js +6 -15
  58. package/lib/browser/index.js.map +1 -1
  59. package/lib/browser/location/index.js +3 -12
  60. package/lib/browser/location/index.js.map +1 -1
  61. package/lib/browser/location/location-renderer.js +12 -23
  62. package/lib/browser/location/location-renderer.js.map +1 -1
  63. package/lib/browser/remote-file-service-contribution.js +4 -12
  64. package/lib/browser/remote-file-service-contribution.js.map +1 -1
  65. package/lib/browser-only/browser-only-filesystem-frontend-module.d.ts +4 -0
  66. package/lib/browser-only/browser-only-filesystem-frontend-module.d.ts.map +1 -0
  67. package/lib/browser-only/browser-only-filesystem-frontend-module.js +41 -0
  68. package/lib/browser-only/browser-only-filesystem-frontend-module.js.map +1 -0
  69. package/lib/browser-only/browser-only-filesystem-provider-server.d.ts +12 -0
  70. package/lib/browser-only/browser-only-filesystem-provider-server.d.ts.map +1 -0
  71. package/lib/browser-only/browser-only-filesystem-provider-server.js +40 -0
  72. package/lib/browser-only/browser-only-filesystem-provider-server.js.map +1 -0
  73. package/lib/browser-only/browserfs-filesystem-initialization.d.ts +13 -0
  74. package/lib/browser-only/browserfs-filesystem-initialization.d.ts.map +1 -0
  75. package/lib/browser-only/browserfs-filesystem-initialization.js +55 -0
  76. package/lib/browser-only/browserfs-filesystem-initialization.js.map +1 -0
  77. package/lib/browser-only/browserfs-filesystem-provider.d.ts +46 -0
  78. package/lib/browser-only/browserfs-filesystem-provider.d.ts.map +1 -0
  79. package/lib/browser-only/browserfs-filesystem-provider.js +440 -0
  80. package/lib/browser-only/browserfs-filesystem-provider.js.map +1 -0
  81. package/lib/common/files.d.ts +8 -0
  82. package/lib/common/files.d.ts.map +1 -1
  83. package/lib/common/files.js +9 -1
  84. package/lib/common/files.js.map +1 -1
  85. package/lib/common/index.js +3 -12
  86. package/lib/common/index.js.map +1 -1
  87. package/lib/common/remote-file-system-provider.d.ts +11 -2
  88. package/lib/common/remote-file-system-provider.d.ts.map +1 -1
  89. package/lib/common/remote-file-system-provider.js +46 -24
  90. package/lib/common/remote-file-system-provider.js.map +1 -1
  91. package/lib/electron-browser/file-dialog/electron-file-dialog-service.js +5 -13
  92. package/lib/electron-browser/file-dialog/electron-file-dialog-service.js.map +1 -1
  93. package/lib/electron-main/electron-api-main.js +2 -7
  94. package/lib/electron-main/electron-api-main.js.map +1 -1
  95. package/lib/node/disk-file-system-provider.d.ts.map +1 -1
  96. package/lib/node/disk-file-system-provider.js +20 -22
  97. package/lib/node/disk-file-system-provider.js.map +1 -1
  98. package/lib/node/disk-file-system-provider.spec.js +35 -4
  99. package/lib/node/disk-file-system-provider.spec.js.map +1 -1
  100. package/lib/node/download/directory-archiver.js +3 -8
  101. package/lib/node/download/directory-archiver.js.map +1 -1
  102. package/lib/node/download/directory-archiver.spec.js +1 -1
  103. package/lib/node/download/directory-archiver.spec.js.map +1 -1
  104. package/lib/node/download/file-download-cache.js +4 -12
  105. package/lib/node/download/file-download-cache.js.map +1 -1
  106. package/lib/node/download/file-download-endpoint.js +9 -17
  107. package/lib/node/download/file-download-endpoint.js.map +1 -1
  108. package/lib/node/download/file-download-handler.d.ts.map +1 -1
  109. package/lib/node/download/file-download-handler.js +17 -25
  110. package/lib/node/download/file-download-handler.js.map +1 -1
  111. package/lib/node/file-change-collection.spec.js +1 -1
  112. package/lib/node/file-change-collection.spec.js.map +1 -1
  113. package/lib/node/filesystem-watcher-client.js +6 -14
  114. package/lib/node/filesystem-watcher-client.js.map +1 -1
  115. package/lib/node/filesystem-watcher-dispatcher.js +2 -7
  116. package/lib/node/filesystem-watcher-dispatcher.js.map +1 -1
  117. package/lib/node/node-file-upload-service.js +2 -7
  118. package/lib/node/node-file-upload-service.js.map +1 -1
  119. package/lib/node/nsfw-watcher/nsfw-filesystem-service.js +1 -1
  120. package/lib/node/nsfw-watcher/nsfw-filesystem-service.js.map +1 -1
  121. package/package.json +9 -6
  122. package/src/browser/file-resource.ts +36 -7
  123. package/src/browser/file-service.ts +40 -13
  124. package/src/browser/file-upload-service.ts +4 -6
  125. package/src/browser/filesystem-save-resource-service.ts +3 -2
  126. package/src/browser-only/browser-only-filesystem-frontend-module.ts +38 -0
  127. package/src/browser-only/browser-only-filesystem-provider-server.ts +32 -0
  128. package/src/browser-only/browserfs-filesystem-initialization.ts +61 -0
  129. package/src/browser-only/browserfs-filesystem-provider.ts +462 -0
  130. package/src/common/files.ts +13 -0
  131. package/src/common/remote-file-system-provider.ts +40 -2
  132. package/src/electron-browser/file-dialog/electron-file-dialog-service.ts +1 -1
  133. package/src/node/disk-file-system-provider.spec.ts +38 -5
  134. package/src/node/disk-file-system-provider.ts +9 -4
  135. package/src/node/download/directory-archiver.spec.ts +1 -1
  136. package/src/node/download/directory-archiver.ts +1 -1
  137. package/src/node/download/file-download-endpoint.ts +1 -1
  138. package/src/node/download/file-download-handler.ts +6 -6
  139. package/src/node/file-change-collection.spec.ts +1 -1
  140. 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/node/file-uri';
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/node/file-uri';
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 { v4 } from 'uuid';
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, `${v4()}.txt`);
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, `${v4()}.txt`);
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 { v4 } from 'uuid';
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/node/file-uri';
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(unlink)(filePath);
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(), v4());
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/node/file-uri';
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/node/file-uri';
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/node/file-uri';
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 { v4 } from 'uuid';
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/node/file-uri';
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(), v4()), entries?: string[]): Promise<string> {
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 = v4()): Promise<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 = v4();
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 = v4();
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/node/file-uri';
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/node/file-uri';
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';