71 lines
2.8 KiB
JavaScript
71 lines
2.8 KiB
JavaScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
'use strict';
|
||
|
var STOP_WHEN_IDLE_FOR = 2 * 60 * 1000; // 2min
|
||
|
var WorkerManager = /** @class */ (function () {
|
||
|
function WorkerManager(defaults) {
|
||
|
var _this = this;
|
||
|
this._defaults = defaults;
|
||
|
this._worker = null;
|
||
|
this._idleCheckInterval = setInterval(function () { return _this._checkIfIdle(); }, 30 * 1000);
|
||
|
this._lastUsedTime = 0;
|
||
|
this._configChangeListener = this._defaults.onDidChange(function () { return _this._stopWorker(); });
|
||
|
}
|
||
|
WorkerManager.prototype._stopWorker = function () {
|
||
|
if (this._worker) {
|
||
|
this._worker.dispose();
|
||
|
this._worker = null;
|
||
|
}
|
||
|
this._client = null;
|
||
|
};
|
||
|
WorkerManager.prototype.dispose = function () {
|
||
|
clearInterval(this._idleCheckInterval);
|
||
|
this._configChangeListener.dispose();
|
||
|
this._stopWorker();
|
||
|
};
|
||
|
WorkerManager.prototype._checkIfIdle = function () {
|
||
|
if (!this._worker) {
|
||
|
return;
|
||
|
}
|
||
|
var timePassedSinceLastUsed = Date.now() - this._lastUsedTime;
|
||
|
if (timePassedSinceLastUsed > STOP_WHEN_IDLE_FOR) {
|
||
|
this._stopWorker();
|
||
|
}
|
||
|
};
|
||
|
WorkerManager.prototype._getClient = function () {
|
||
|
this._lastUsedTime = Date.now();
|
||
|
if (!this._client) {
|
||
|
this._worker = monaco.editor.createWebWorker({
|
||
|
// module that exports the create() method and returns a `JSONWorker` instance
|
||
|
moduleId: 'vs/language/json/jsonWorker',
|
||
|
label: this._defaults.languageId,
|
||
|
// passed in to the create() method
|
||
|
createData: {
|
||
|
languageSettings: this._defaults.diagnosticsOptions,
|
||
|
languageId: this._defaults.languageId,
|
||
|
enableSchemaRequest: this._defaults.diagnosticsOptions.enableSchemaRequest
|
||
|
}
|
||
|
});
|
||
|
this._client = this._worker.getProxy();
|
||
|
}
|
||
|
return this._client;
|
||
|
};
|
||
|
WorkerManager.prototype.getLanguageServiceWorker = function () {
|
||
|
var _this = this;
|
||
|
var resources = [];
|
||
|
for (var _i = 0; _i < arguments.length; _i++) {
|
||
|
resources[_i] = arguments[_i];
|
||
|
}
|
||
|
var _client;
|
||
|
return this._getClient().then(function (client) {
|
||
|
_client = client;
|
||
|
}).then(function (_) {
|
||
|
return _this._worker.withSyncedResources(resources);
|
||
|
}).then(function (_) { return _client; });
|
||
|
};
|
||
|
return WorkerManager;
|
||
|
}());
|
||
|
export { WorkerManager };
|