diff --git a/dist/facade/LanguageServiceFacade.js b/dist/facade/LanguageServiceFacade.js index 1f1b26e..901b0a6 100644 --- a/dist/facade/LanguageServiceFacade.js +++ b/dist/facade/LanguageServiceFacade.js @@ -18,22 +18,33 @@ var LanguageServiceFacade = /** @class */ (function () { }, LanguageServiceFacade.timeout); }); var result = LanguageServiceFacade.GetParseResult(str, parseReason); + var workingWorker = (parseReason === ParseReason.GetCompletionWords ? LanguageServiceFacade.workingWorkerForCompletion : LanguageServiceFacade.workingWorkerForGettingError); return Q.race([timeExceeded, result]).then(function (words) { - LanguageServiceFacade.workingWorker.terminate(); + workingWorker.terminate(); return words; }); }; LanguageServiceFacade.timeout = 2000; - LanguageServiceFacade.workingWorker = null; + LanguageServiceFacade.workingWorkerForCompletion = null; + LanguageServiceFacade.workingWorkerForGettingError = null; LanguageServiceFacade.GetParseResult = function (str, parseReason) { return Q.Promise(function (resolve) { - if (LanguageServiceFacade.workingWorker != null) { - LanguageServiceFacade.workingWorker.terminate(); + var workingWorker = (parseReason === ParseReason.GetCompletionWords ? LanguageServiceFacade.workingWorkerForCompletion : LanguageServiceFacade.workingWorkerForGettingError); + // terminate the expired worker. + if (workingWorker != null) { + workingWorker.terminate(); } var currentUrlWithoutQueryParamsAndHashRoute = window.location.protocol + "//" + window.location.host + window.location.pathname; var url = currentUrlWithoutQueryParamsAndHashRoute.replace(/\/[^\/]*$/, '/node_modules/@azure/cosmos-language-service/dist/worker/dist/LanguageServiceWorker.js'); - LanguageServiceFacade.workingWorker = new Worker(url); - LanguageServiceFacade.workingWorker.onmessage = function (ev) { + if (parseReason === ParseReason.GetCompletionWords) { + LanguageServiceFacade.workingWorkerForCompletion = new Worker(url); + workingWorker = LanguageServiceFacade.workingWorkerForCompletion; + } + else { + LanguageServiceFacade.workingWorkerForGettingError = new Worker(url); + workingWorker = LanguageServiceFacade.workingWorkerForGettingError; + } + workingWorker.onmessage = function (ev) { var processedResults = []; var parseResults = ev.data; if (parseReason === ParseReason.GetCompletionWords) { @@ -68,7 +79,7 @@ var LanguageServiceFacade = /** @class */ (function () { code: str, reason: parseReason }; - LanguageServiceFacade.workingWorker.postMessage(source); + workingWorker.postMessage(source); }); }; return LanguageServiceFacade; diff --git a/dist/facade/LanguageServiceFacade.js.map b/dist/facade/LanguageServiceFacade.js.map index 9248b63..fa4f5dd 100644 --- a/dist/facade/LanguageServiceFacade.js.map +++ b/dist/facade/LanguageServiceFacade.js.map @@ -1 +1 @@ -{"version":3,"file":"LanguageServiceFacade.js","sourceRoot":"","sources":["../../src/facade/LanguageServiceFacade.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LanguageServiceFacade.js","sourceRoot":"","sources":["../../src/facade/LanguageServiceFacade.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/facade/LanguageServiceFacade.ts b/src/facade/LanguageServiceFacade.ts index 0e16600..62003d3 100644 --- a/src/facade/LanguageServiceFacade.ts +++ b/src/facade/LanguageServiceFacade.ts @@ -9,8 +9,9 @@ export enum ParseReason { export class LanguageServiceFacade { private static readonly timeout : number = 2000; - private static workingWorker : Worker = null; - + private static workingWorkerForCompletion : Worker = null; + private static workingWorkerForGettingError : Worker = null; + public static GetLanguageServiceParseResult(str : string, parseReason : ParseReason) : Q.Promise { const timeExceeded = Q.Promise((resolve : any, reject : any) => { const wait = setTimeout(() => { @@ -20,23 +21,35 @@ export class LanguageServiceFacade { }); const result = LanguageServiceFacade.GetParseResult(str, parseReason); + let workingWorker = (parseReason === ParseReason.GetCompletionWords ? LanguageServiceFacade.workingWorkerForCompletion : LanguageServiceFacade.workingWorkerForGettingError); return Q.race([timeExceeded, result]).then(function(words) { - LanguageServiceFacade.workingWorker.terminate(); + workingWorker.terminate(); return words; }); } private static GetParseResult = (str : string, parseReason : ParseReason) : Q.Promise => { return Q.Promise((resolve : any) => { - if (LanguageServiceFacade.workingWorker != null) { - LanguageServiceFacade.workingWorker.terminate(); + + let workingWorker = (parseReason === ParseReason.GetCompletionWords ? LanguageServiceFacade.workingWorkerForCompletion : LanguageServiceFacade.workingWorkerForGettingError); + + // terminate the expired worker. + if (workingWorker != null) { + workingWorker.terminate(); } const currentUrlWithoutQueryParamsAndHashRoute: string = `${window.location.protocol}//${window.location.host}${window.location.pathname}`; let url = currentUrlWithoutQueryParamsAndHashRoute.replace(/\/[^\/]*$/, '/node_modules/@azure/cosmos-language-service/dist/worker/dist/LanguageServiceWorker.js'); - LanguageServiceFacade.workingWorker = new Worker(url); + + if(parseReason === ParseReason.GetCompletionWords) { + LanguageServiceFacade.workingWorkerForCompletion = new Worker(url); + workingWorker = LanguageServiceFacade.workingWorkerForCompletion; + } else { + LanguageServiceFacade.workingWorkerForGettingError = new Worker(url); + workingWorker = LanguageServiceFacade.workingWorkerForGettingError; + } - LanguageServiceFacade.workingWorker.onmessage = (ev : MessageEvent) => { + workingWorker.onmessage = (ev : MessageEvent) => { var processedResults: any[] = []; var parseResults: any[] = ev.data; @@ -72,7 +85,7 @@ export class LanguageServiceFacade { code : str, reason : parseReason }; - LanguageServiceFacade.workingWorker.postMessage(source); + workingWorker.postMessage(source); }); } }