@codingame/monaco-vscode-files-service-override 6.0.0 → 6.0.2

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 (2) hide show
  1. package/files.js +43 -42
  2. package/package.json +2 -2
package/files.js CHANGED
@@ -27,7 +27,7 @@ import { IFilesConfigurationService } from 'vscode/vscode/vs/workbench/services/
27
27
  import { BrowserElevatedFileService } from './vscode/src/vs/workbench/services/files/browser/elevatedFileService.js';
28
28
  import { IElevatedFileService } from 'vscode/vscode/vs/workbench/services/files/common/elevatedFileService.service';
29
29
  import { VSBuffer } from 'vscode/vscode/vs/base/common/buffer';
30
- import { newWriteableStream } from 'vscode/vscode/vs/base/common/stream';
30
+ import { newWriteableStream, listenStream } from 'vscode/vscode/vs/base/common/stream';
31
31
  import { registerServiceInitializePreParticipant, checkServicesNotInitialized } from 'vscode/lifecycle';
32
32
  import { logsPath } from 'vscode/workbench';
33
33
  import 'vscode/vscode/vs/workbench/contrib/files/browser/files.contribution._configuration';
@@ -238,10 +238,11 @@ class RegisteredFileSystemProvider extends Disposable {
238
238
  return Promise.resolve(toWrite.byteLength);
239
239
  }
240
240
  _lookupRoot(authority) {
241
- let root = this.rootByAuthority.get(authority);
241
+ const _authority = authority.toLowerCase();
242
+ let root = this.rootByAuthority.get(_authority);
242
243
  if (root == null) {
243
244
  root = new RegisteredDirectory();
244
- this.rootByAuthority.set(authority, root);
245
+ this.rootByAuthority.set(_authority, root);
245
246
  }
246
247
  return root;
247
248
  }
@@ -304,7 +305,7 @@ class RegisteredFileSystemProvider extends Disposable {
304
305
  }
305
306
  const name = parts[parts.length - 1];
306
307
  if (directory.getChildren(name) != null) {
307
- throw new Error(`file '${uri.toString()}' already exists`);
308
+ throw new Error(`file '${extUri.joinPath(uri, name).toString()}/' already exists`);
308
309
  }
309
310
  const disposableStore = new DisposableStore();
310
311
  disposableStore.add(toDisposable(() => {
@@ -353,11 +354,8 @@ class RegisteredFileSystemProvider extends Disposable {
353
354
  try {
354
355
  if (file.readStream == null || typeof opts.length === 'number' || typeof opts.position === 'number') {
355
356
  let buffer = await file.read();
356
- if (typeof opts.position === 'number') {
357
- buffer = buffer.slice(opts.position);
358
- }
359
- if (typeof opts.length === 'number') {
360
- buffer = buffer.slice(0, opts.length);
357
+ if (typeof opts.position === 'number' || typeof opts.length === 'number') {
358
+ buffer = buffer.slice(opts.position ?? 0, opts.length);
361
359
  }
362
360
  stream.end(buffer);
363
361
  }
@@ -493,37 +491,17 @@ class OverlayFileSystemProvider {
493
491
  get delegates() {
494
492
  return ( this.providers.map(({ provider }) => provider));
495
493
  }
496
- async readFromDelegates(caller) {
494
+ async readFromDelegates(caller, token) {
497
495
  if (this.delegates.length === 0) {
498
496
  throw createFileSystemProviderError('No delegate', FileSystemProviderErrorCode.Unavailable);
499
497
  }
500
498
  let firstError;
501
499
  for (const delegate of this.delegates) {
502
- try {
503
- return await caller(delegate);
504
- }
505
- catch (err) {
506
- firstError ?? (firstError = err);
507
- if (err instanceof FileSystemProviderError && [
508
- FileSystemProviderErrorCode.NoPermissions,
509
- FileSystemProviderErrorCode.FileNotFound,
510
- FileSystemProviderErrorCode.Unavailable
511
- ].includes(err.code)) {
512
- continue;
513
- }
514
- throw err;
500
+ if (token != null && token.isCancellationRequested) {
501
+ throw new Error('Cancelled');
515
502
  }
516
- }
517
- throw firstError;
518
- }
519
- readFromDelegatesSync(caller) {
520
- if (this.delegates.length === 0) {
521
- throw createFileSystemProviderError('No delegate', FileSystemProviderErrorCode.Unavailable);
522
- }
523
- let firstError;
524
- for (const delegate of this.delegates) {
525
503
  try {
526
- return caller(delegate);
504
+ return await caller(delegate);
527
505
  }
528
506
  catch (err) {
529
507
  firstError ?? (firstError = err);
@@ -577,20 +555,43 @@ class OverlayFileSystemProvider {
577
555
  return this.readFromDelegates(delegate => delegate.readFile(resource));
578
556
  }
579
557
  readFileStream(resource, opts, token) {
580
- return this.readFromDelegatesSync(delegate => {
558
+ const writableStream = newWriteableStream(data => VSBuffer.concat(( data.map(data => VSBuffer.wrap(data)))).buffer);
559
+ this.readFromDelegates(async (delegate) => {
581
560
  if (hasFileReadStreamCapability(delegate)) {
582
- return delegate.readFileStream(resource, opts, token);
561
+ const stream = delegate.readFileStream(resource, opts, token);
562
+ await new Promise((resolve, reject) => {
563
+ let dataReceived = false;
564
+ listenStream(stream, {
565
+ onData(data) {
566
+ dataReceived = true;
567
+ void writableStream.write(data);
568
+ },
569
+ onEnd() {
570
+ writableStream.end();
571
+ resolve();
572
+ },
573
+ onError(err) {
574
+ if (!dataReceived) {
575
+ reject(err);
576
+ }
577
+ else {
578
+ writableStream.error(err);
579
+ }
580
+ }
581
+ }, token);
582
+ });
583
583
  }
584
584
  else {
585
- const stream = newWriteableStream(data => VSBuffer.concat(( data.map(data => VSBuffer.wrap(data)))).buffer);
586
- delegate.readFile(resource).then(data => {
587
- stream.end(data);
588
- }, err => {
589
- stream.error(err);
590
- });
591
- return stream;
585
+ let data = await this.readFile(resource);
586
+ if (typeof opts.position === 'number' || typeof opts.length === 'number') {
587
+ data = data.slice(opts.position ?? 0, opts.length);
588
+ }
589
+ return writableStream.end(data);
592
590
  }
591
+ }, token).catch(err => {
592
+ writableStream.error(err);
593
593
  });
594
+ return writableStream;
594
595
  }
595
596
  async readdir(resource) {
596
597
  const results = await Promise.allSettled(( this.delegates.map(async (delegate) => delegate.readdir(resource))));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-files-service-override",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "keywords": [],
5
5
  "author": {
6
6
  "name": "CodinGame",
@@ -26,6 +26,6 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "vscode": "npm:@codingame/monaco-vscode-api@6.0.0"
29
+ "vscode": "npm:@codingame/monaco-vscode-api@6.0.2"
30
30
  }
31
31
  }