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

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 +39 -39
  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';
@@ -353,11 +353,8 @@ class RegisteredFileSystemProvider extends Disposable {
353
353
  try {
354
354
  if (file.readStream == null || typeof opts.length === 'number' || typeof opts.position === 'number') {
355
355
  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);
356
+ if (typeof opts.position === 'number' || typeof opts.length === 'number') {
357
+ buffer = buffer.slice(opts.position ?? 0, opts.length);
361
358
  }
362
359
  stream.end(buffer);
363
360
  }
@@ -493,37 +490,17 @@ class OverlayFileSystemProvider {
493
490
  get delegates() {
494
491
  return ( this.providers.map(({ provider }) => provider));
495
492
  }
496
- async readFromDelegates(caller) {
493
+ async readFromDelegates(caller, token) {
497
494
  if (this.delegates.length === 0) {
498
495
  throw createFileSystemProviderError('No delegate', FileSystemProviderErrorCode.Unavailable);
499
496
  }
500
497
  let firstError;
501
498
  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;
499
+ if (token != null && token.isCancellationRequested) {
500
+ throw new Error('Cancelled');
515
501
  }
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
502
  try {
526
- return caller(delegate);
503
+ return await caller(delegate);
527
504
  }
528
505
  catch (err) {
529
506
  firstError ?? (firstError = err);
@@ -577,20 +554,43 @@ class OverlayFileSystemProvider {
577
554
  return this.readFromDelegates(delegate => delegate.readFile(resource));
578
555
  }
579
556
  readFileStream(resource, opts, token) {
580
- return this.readFromDelegatesSync(delegate => {
557
+ const writableStream = newWriteableStream(data => VSBuffer.concat(( data.map(data => VSBuffer.wrap(data)))).buffer);
558
+ this.readFromDelegates(async (delegate) => {
581
559
  if (hasFileReadStreamCapability(delegate)) {
582
- return delegate.readFileStream(resource, opts, token);
560
+ const stream = delegate.readFileStream(resource, opts, token);
561
+ await new Promise((resolve, reject) => {
562
+ let dataReceived = false;
563
+ listenStream(stream, {
564
+ onData(data) {
565
+ dataReceived = true;
566
+ void writableStream.write(data);
567
+ },
568
+ onEnd() {
569
+ writableStream.end();
570
+ resolve();
571
+ },
572
+ onError(err) {
573
+ if (!dataReceived) {
574
+ reject(err);
575
+ }
576
+ else {
577
+ writableStream.error(err);
578
+ }
579
+ }
580
+ }, token);
581
+ });
583
582
  }
584
583
  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;
584
+ let data = await this.readFile(resource);
585
+ if (typeof opts.position === 'number' || typeof opts.length === 'number') {
586
+ data = data.slice(opts.position ?? 0, opts.length);
587
+ }
588
+ return writableStream.end(data);
592
589
  }
590
+ }, token).catch(err => {
591
+ writableStream.error(err);
593
592
  });
593
+ return writableStream;
594
594
  }
595
595
  async readdir(resource) {
596
596
  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.1",
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.1"
30
30
  }
31
31
  }