Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { URI } from '../../../base/common/uri.js';
7
import { InstantiationType, registerSingleton } from '../../instantiation/common/extensions.js';
8
import { IFileService } from '../../files/common/files.js';
9
import { FileAccess, Schemas } from '../../../base/common/network.js';
10
import { IProductService } from '../../product/common/productService.js';
11
import { IStorageService } from '../../storage/common/storage.js';
12
import { IEnvironmentService } from '../../environment/common/environment.js';
13
import { ILogService } from '../../log/common/log.js';
14
import { IConfigurationService } from '../../configuration/common/configuration.js';
15
import { AbstractExtensionResourceLoaderService, IExtensionResourceLoaderService } from '../common/extensionResourceLoader.js';
16
import { IExtensionGalleryManifestService } from '../../extensionManagement/common/extensionGalleryManifest.js';
17
18
class ExtensionResourceLoaderService extends AbstractExtensionResourceLoaderService {
19
20
declare readonly _serviceBrand: undefined;
21
22
constructor(
23
@IFileService fileService: IFileService,
24
@IStorageService storageService: IStorageService,
25
@IProductService productService: IProductService,
26
@IEnvironmentService environmentService: IEnvironmentService,
27
@IConfigurationService configurationService: IConfigurationService,
28
@IExtensionGalleryManifestService extensionGalleryManifestService: IExtensionGalleryManifestService,
29
@ILogService logService: ILogService,
30
) {
31
super(fileService, storageService, productService, environmentService, configurationService, extensionGalleryManifestService, logService);
32
}
33
34
async readExtensionResource(uri: URI): Promise<string> {
35
uri = FileAccess.uriToBrowserUri(uri);
36
37
if (uri.scheme !== Schemas.http && uri.scheme !== Schemas.https && uri.scheme !== Schemas.data) {
38
const result = await this._fileService.readFile(uri);
39
return result.value.toString();
40
}
41
42
const requestInit: RequestInit = {};
43
if (await this.isExtensionGalleryResource(uri)) {
44
requestInit.headers = await this.getExtensionGalleryRequestHeaders();
45
requestInit.mode = 'cors'; /* set mode to cors so that above headers are always passed */
46
}
47
48
const response = await fetch(uri.toString(true), requestInit);
49
if (response.status !== 200) {
50
this._logService.info(`Request to '${uri.toString(true)}' failed with status code ${response.status}`);
51
throw new Error(response.statusText);
52
}
53
return response.text();
54
}
55
}
56
57
registerSingleton(IExtensionResourceLoaderService, ExtensionResourceLoaderService, InstantiationType.Delayed);
58
59