🎨 unhook scm from marshalling

This commit is contained in:
Joao Moreno
2017-03-30 10:27:14 +02:00
parent bc9a7bb1f9
commit ae46d50241
3 changed files with 25 additions and 20 deletions

View File

@@ -23,11 +23,16 @@ interface CommandHandler {
description: ICommandHandlerDescription;
}
export interface ArgumentProcessor {
processArgument(arg: any): any;
}
export class ExtHostCommands extends ExtHostCommandsShape {
private _commands = new Map<string, CommandHandler>();
private _proxy: MainThreadCommandsShape;
private _converter: CommandsConverter;
private _argumentProcessors: ArgumentProcessor[] = [];
constructor(
threadService: IThreadService,
@@ -42,6 +47,10 @@ export class ExtHostCommands extends ExtHostCommandsShape {
return this._converter;
}
registerArgumentProcessor(processor: ArgumentProcessor): void {
this._argumentProcessors.push(processor);
}
registerCommand(id: string, callback: <T>(...args: any[]) => T | Thenable<T>, thisArg?: any, description?: ICommandHandlerDescription): extHostTypes.Disposable {
if (!id.trim().length) {
@@ -110,6 +119,8 @@ export class ExtHostCommands extends ExtHostCommandsShape {
}
}
args = args.map(arg => this._argumentProcessors.reduce((r, p) => p.processArgument(r), arg));
try {
let result = callback.apply(thisArg, args);
return TPromise.as(result);