提交 0848fd85 编写于 作者: A Alex Dima

Add `createData` option for web workers, clean up monaco.worker API

上级 8c2fb779
......@@ -77,12 +77,6 @@ declare module monaco.languages {
declare module monaco.worker {
export interface IMirrorModel {
uri: Uri;
version: number;
getText(): string;
}
export var mirrorModels: IMirrorModel[];
#includeAll(vs/editor/common/services/editorSimpleWorker;):
}
\ No newline at end of file
......@@ -262,6 +262,7 @@ export interface MonacoWebWorker<T> {
export class MonacoWebWorkerImpl<T> extends EditorWorkerClient implements MonacoWebWorker<T> {
private _foreignModuleId: string;
private _foreignModuleCreateData: any;
private _foreignProxy: TPromise<T>;
/**
......@@ -270,13 +271,16 @@ export class MonacoWebWorkerImpl<T> extends EditorWorkerClient implements Monaco
constructor(modelService: IModelService, opts:IWebWorkerOptions) {
super(modelService);
this._foreignModuleId = opts.moduleId;
this._foreignModuleCreateData = opts.createData || null;
this._foreignProxy = null;
}
private _getForeignProxy(): TPromise<T> {
if (!this._foreignProxy) {
this._foreignProxy = new ShallowCancelThenPromise(this._getProxy().then((proxy) => {
return proxy.loadForeignModule(this._foreignModuleId).then((foreignMethods) => {
return proxy.loadForeignModule(this._foreignModuleId, this._foreignModuleCreateData).then((foreignMethods) => {
this._foreignModuleId = null;
this._foreignModuleCreateData = null;
let proxyMethodRequest = (method:string, args:any[]): TPromise<any> => {
return proxy.fmr(method, args);
......@@ -316,6 +320,10 @@ export interface IWebWorkerOptions {
* It should export a function `create` that should return the exported proxy.
*/
moduleId: string;
/**
* The data to send over when calling create on the module.
*/
createData?: any;
}
/**
......
......@@ -20,6 +20,15 @@ import {IRawModelData} from 'vs/editor/common/services/editorSimpleWorkerCommon'
import {getWordAtText, ensureValidWordDefinition} from 'vs/editor/common/model/wordHelper';
import {createMonacoBaseAPI} from 'vs/editor/common/standalone/standaloneBase';
export interface IMirrorModel {
uri: URI;
version: number;
getText(): string;
}
/**
* @internal
*/
export class MirrorModel extends MirrorModel2 {
public get uri(): URI {
......@@ -134,6 +143,9 @@ export class MirrorModel extends MirrorModel2 {
}
}
/**
* @internal
*/
export class EditorSimpleWorkerImpl implements IRequestHandler {
_requestHandlerTrait: any;
......@@ -288,11 +300,11 @@ export class EditorSimpleWorkerImpl implements IRequestHandler {
// ---- BEGIN foreign module support --------------------------------------------------------------------------
public loadForeignModule(moduleId:string): TPromise<string[]> {
public loadForeignModule(moduleId:string, createData:any): TPromise<string[]> {
return new TPromise<any>((c, e) => {
// Use the global require to be sure to get the global config
(<any>self).require([moduleId], (foreignModule) => {
this._foreignModule = foreignModule.create();
this._foreignModule = foreignModule.create(createData);
let methods: string[] = [];
for (let prop in this._foreignModule) {
......@@ -325,8 +337,16 @@ export class EditorSimpleWorkerImpl implements IRequestHandler {
const instance = new EditorSimpleWorkerImpl();
/**
* Get all available mirror models in this worker.
*/
export function getMirrorModels(): IMirrorModel[] {
return instance.getModels();
}
/**
* Called on the worker side
* @internal
*/
export function create(): IRequestHandler {
return instance;
......@@ -334,9 +354,7 @@ export function create(): IRequestHandler {
function createMonacoWorkerAPI(): typeof monaco.worker {
return {
get mirrorModels () {
return instance.getModels();
}
getMirrorModels: getMirrorModels
};
}
......
......@@ -830,6 +830,10 @@ declare module monaco.editor {
* It should export a function `create` that should return the exported proxy.
*/
moduleId: string;
/**
* The data to send over when calling create on the module.
*/
createData?: any;
}
/**
......@@ -4669,12 +4673,16 @@ declare module monaco.languages {
declare module monaco.worker {
export interface IMirrorModel {
uri: Uri;
version: number;
getText(): string;
}
export var mirrorModels: IMirrorModel[];
/**
* Get all available mirror models in this worker.
*/
export function getMirrorModels(): IMirrorModel[];
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册