提交 d70cfb4b 编写于 作者: J Joao Moreno

lint: fix extension management layer breakage

#15293
上级 5d949f10
...@@ -5,12 +5,11 @@ ...@@ -5,12 +5,11 @@
'use strict'; 'use strict';
import nls = require('vs/nls'); import { localize } from 'vs/nls';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import Event from 'vs/base/common/event'; import Event from 'vs/base/common/event';
import { IPager } from 'vs/base/common/paging'; import { IPager } from 'vs/base/common/paging';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IRequestContext } from 'vs/base/node/request';
export const EXTENSION_IDENTIFIER_PATTERN = '^[a-z0-9A-Z][a-z0-9\-A-Z]*\\.[a-z0-9A-Z][a-z0-9\-A-Z]*$'; export const EXTENSION_IDENTIFIER_PATTERN = '^[a-z0-9A-Z][a-z0-9\-A-Z]*\\.[a-z0-9A-Z][a-z0-9\-A-Z]*$';
export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN); export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN);
...@@ -202,7 +201,8 @@ export interface IExtensionGalleryService { ...@@ -202,7 +201,8 @@ export interface IExtensionGalleryService {
getRequestHeaders(): TPromise<{ [key: string]: string; }>; getRequestHeaders(): TPromise<{ [key: string]: string; }>;
query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>; query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>;
download(extension: IGalleryExtension): TPromise<string>; download(extension: IGalleryExtension): TPromise<string>;
getAsset(url: string): TPromise<IRequestContext>; getReadme(extension: IGalleryExtension): TPromise<string>;
getManifest(extension: IGalleryExtension): TPromise<IExtensionManifest>;
loadCompatibleVersion(extension: IGalleryExtension): TPromise<IGalleryExtension>; loadCompatibleVersion(extension: IGalleryExtension): TPromise<IGalleryExtension>;
getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]>; getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]>;
} }
...@@ -288,5 +288,5 @@ export interface IExtensionTipsService { ...@@ -288,5 +288,5 @@ export interface IExtensionTipsService {
getWorkspaceRecommendations(): string[]; getWorkspaceRecommendations(): string[];
} }
export const ExtensionsLabel = nls.localize('extensions', "Extensions"); export const ExtensionsLabel = localize('extensions', "Extensions");
export const ExtensionsChannelId = 'extensions'; export const ExtensionsChannelId = 'extensions';
\ No newline at end of file
...@@ -17,7 +17,7 @@ import { assign, getOrDefault } from 'vs/base/common/objects'; ...@@ -17,7 +17,7 @@ import { assign, getOrDefault } from 'vs/base/common/objects';
import { IRequestService } from 'vs/platform/request/common/request'; import { IRequestService } from 'vs/platform/request/common/request';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IPager } from 'vs/base/common/paging'; import { IPager } from 'vs/base/common/paging';
import { IRequestOptions, IRequestContext, download, asJson } from 'vs/base/node/request'; import { IRequestOptions, IRequestContext, download, asJson, asText } from 'vs/base/node/request';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import pkg from 'vs/platform/package'; import pkg from 'vs/platform/package';
import product from 'vs/platform/product'; import product from 'vs/platform/product';
...@@ -371,15 +371,30 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -371,15 +371,30 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const startTime = new Date().getTime(); const startTime = new Date().getTime();
const log = duration => this.telemetryService.publicLog('galleryService:downloadVSIX', assign(data, { duration })); const log = duration => this.telemetryService.publicLog('galleryService:downloadVSIX', assign(data, { duration }));
return this._getAsset({ url }) return this.getAsset({ url })
.then(context => download(zipPath, context)) .then(context => download(zipPath, context))
.then(() => log(new Date().getTime() - startTime)) .then(() => log(new Date().getTime() - startTime))
.then(() => zipPath); .then(() => zipPath);
}); });
} }
getAsset(url: string): TPromise<IRequestContext> { getReadme(extension: IGalleryExtension): TPromise<string> {
return this._getAsset({ url }); const url = extension.assets.readme;
if (!url) {
return TPromise.wrapError('not available');
}
return this.getAsset({ url })
.then(asText);
}
getManifest(extension: IGalleryExtension): TPromise<IExtensionManifest> {
const url = extension.assets.manifest;
return this.getAsset({ url })
.then(asText)
.then(JSON.parse);
} }
getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]> { getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]> {
...@@ -469,7 +484,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -469,7 +484,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
* Always try with the `redirect=true` query string. * Always try with the `redirect=true` query string.
* If that does not return 200, try without it. * If that does not return 200, try without it.
*/ */
private _getAsset(options: IRequestOptions): TPromise<IRequestContext> { private getAsset(options: IRequestOptions): TPromise<IRequestContext> {
const parsedUrl = url.parse(options.url, true); const parsedUrl = url.parse(options.url, true);
parsedUrl.search = undefined; parsedUrl.search = undefined;
parsedUrl.query['redirect'] = 'true'; parsedUrl.query['redirect'] = 'true';
...@@ -525,7 +540,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -525,7 +540,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const url = getAssetSource(version.files, AssetType.Manifest); const url = getAssetSource(version.files, AssetType.Manifest);
const headers = { 'Accept-Encoding': 'gzip' }; const headers = { 'Accept-Encoding': 'gzip' };
return this._getAsset({ url, headers }) return this.getAsset({ url, headers })
.then(context => asJson<IExtensionManifest>(context)) .then(context => asJson<IExtensionManifest>(context))
.then(manifest => { .then(manifest => {
const engine = manifest.engines.vscode; const engine = manifest.engines.vscode;
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
'use strict'; 'use strict';
import { readFile } from 'vs/base/node/pfs'; import { readFile } from 'vs/base/node/pfs';
import { asText } from 'vs/base/node/request';
import * as semver from 'semver'; import * as semver from 'semver';
import * as path from 'path'; import * as path from 'path';
import Event, { Emitter, chain } from 'vs/base/common/event'; import Event, { Emitter, chain } from 'vs/base/common/event';
...@@ -100,14 +99,6 @@ class Extension implements IExtension { ...@@ -100,14 +99,6 @@ class Extension implements IExtension {
return this.local ? this.local.manifest.description : this.gallery.description; return this.local ? this.local.manifest.description : this.gallery.description;
} }
private get readmeUrl(): string {
if (this.local && this.local.readmeUrl) {
return this.local.readmeUrl;
}
return this.gallery && this.gallery.assets.readme;
}
private get changelogUrl(): string { private get changelogUrl(): string {
if (this.local && this.local.changelogUrl) { if (this.local && this.local.changelogUrl) {
return this.local.changelogUrl; return this.local.changelogUrl;
...@@ -180,25 +171,20 @@ class Extension implements IExtension { ...@@ -180,25 +171,20 @@ class Extension implements IExtension {
return TPromise.as(this.local.manifest); return TPromise.as(this.local.manifest);
} }
return this.galleryService.getAsset(this.gallery.assets.manifest) return this.galleryService.getManifest(this.gallery);
.then(asText)
.then(raw => JSON.parse(raw) as IExtensionManifest);
} }
getReadme(): TPromise<string> { getReadme(): TPromise<string> {
const readmeUrl = this.readmeUrl; if (this.local && this.local.readmeUrl) {
const uri = URI.parse(this.local.readmeUrl);
if (!readmeUrl) { return readFile(uri.fsPath, 'utf8');
return TPromise.wrapError('not available');
} }
const uri = URI.parse(readmeUrl); if (this.gallery) {
return this.galleryService.getReadme(this.gallery);
if (uri.scheme === 'file') {
return readFile(uri.fsPath, 'utf8');
} }
return this.galleryService.getAsset(readmeUrl).then(asText); return TPromise.wrapError('not available');
} }
getChangelog(): TPromise<string> { getChangelog(): TPromise<string> {
...@@ -214,6 +200,7 @@ class Extension implements IExtension { ...@@ -214,6 +200,7 @@ class Extension implements IExtension {
return readFile(uri.fsPath, 'utf8'); return readFile(uri.fsPath, 'utf8');
} }
// TODO@Joao
return TPromise.wrapError('not available'); return TPromise.wrapError('not available');
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册