2 /*---------------------------------------------------------------------------------------------
\r
3 * Copyright (c) Microsoft Corporation. All rights reserved.
\r
4 * Licensed under the MIT License. See License.txt in the project root for license information.
\r
5 *--------------------------------------------------------------------------------------------*/
\r
6 Object.defineProperty(exports, "__esModule", { value: true });
\r
7 exports.getLanguageModelCache = void 0;
\r
8 function getLanguageModelCache(maxEntries, cleanupIntervalTimeInSec, parse) {
\r
9 let languageModels = {};
\r
11 let cleanupInterval = undefined;
\r
12 if (cleanupIntervalTimeInSec > 0) {
\r
13 cleanupInterval = setInterval(() => {
\r
14 let cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;
\r
15 let uris = Object.keys(languageModels);
\r
16 for (let uri of uris) {
\r
17 let languageModelInfo = languageModels[uri];
\r
18 if (languageModelInfo.cTime < cutoffTime) {
\r
19 delete languageModels[uri];
\r
23 }, cleanupIntervalTimeInSec * 1000);
\r
27 let version = document.version;
\r
28 let languageId = document.languageId;
\r
29 let languageModelInfo = languageModels[document.uri];
\r
30 if (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {
\r
31 languageModelInfo.cTime = Date.now();
\r
32 return languageModelInfo.languageModel;
\r
34 let languageModel = parse(document);
\r
35 languageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };
\r
36 if (!languageModelInfo) {
\r
39 if (nModels === maxEntries) {
\r
40 let oldestTime = Number.MAX_VALUE;
\r
41 let oldestUri = null;
\r
42 for (let uri in languageModels) {
\r
43 let languageModelInfo = languageModels[uri];
\r
44 if (languageModelInfo.cTime < oldestTime) {
\r
46 oldestTime = languageModelInfo.cTime;
\r
50 delete languageModels[oldestUri];
\r
54 return languageModel;
\r
56 onDocumentRemoved(document) {
\r
57 let uri = document.uri;
\r
58 if (languageModels[uri]) {
\r
59 delete languageModels[uri];
\r
64 if (typeof cleanupInterval !== 'undefined') {
\r
65 clearInterval(cleanupInterval);
\r
66 cleanupInterval = undefined;
\r
67 languageModels = {};
\r
73 exports.getLanguageModelCache = getLanguageModelCache;
\r
74 //# sourceMappingURL=languageModelCache.js.map