+"use strict";\r
+/*---------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ *--------------------------------------------------------------------------------------------*/\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+exports.getLanguageModelCache = void 0;\r
+function getLanguageModelCache(maxEntries, cleanupIntervalTimeInSec, parse) {\r
+ let languageModels = {};\r
+ let nModels = 0;\r
+ let cleanupInterval = undefined;\r
+ if (cleanupIntervalTimeInSec > 0) {\r
+ cleanupInterval = setInterval(() => {\r
+ let cutoffTime = Date.now() - cleanupIntervalTimeInSec * 1000;\r
+ let uris = Object.keys(languageModels);\r
+ for (let uri of uris) {\r
+ let languageModelInfo = languageModels[uri];\r
+ if (languageModelInfo.cTime < cutoffTime) {\r
+ delete languageModels[uri];\r
+ nModels--;\r
+ }\r
+ }\r
+ }, cleanupIntervalTimeInSec * 1000);\r
+ }\r
+ return {\r
+ get(document) {\r
+ let version = document.version;\r
+ let languageId = document.languageId;\r
+ let languageModelInfo = languageModels[document.uri];\r
+ if (languageModelInfo && languageModelInfo.version === version && languageModelInfo.languageId === languageId) {\r
+ languageModelInfo.cTime = Date.now();\r
+ return languageModelInfo.languageModel;\r
+ }\r
+ let languageModel = parse(document);\r
+ languageModels[document.uri] = { languageModel, version, languageId, cTime: Date.now() };\r
+ if (!languageModelInfo) {\r
+ nModels++;\r
+ }\r
+ if (nModels === maxEntries) {\r
+ let oldestTime = Number.MAX_VALUE;\r
+ let oldestUri = null;\r
+ for (let uri in languageModels) {\r
+ let languageModelInfo = languageModels[uri];\r
+ if (languageModelInfo.cTime < oldestTime) {\r
+ oldestUri = uri;\r
+ oldestTime = languageModelInfo.cTime;\r
+ }\r
+ }\r
+ if (oldestUri) {\r
+ delete languageModels[oldestUri];\r
+ nModels--;\r
+ }\r
+ }\r
+ return languageModel;\r
+ },\r
+ onDocumentRemoved(document) {\r
+ let uri = document.uri;\r
+ if (languageModels[uri]) {\r
+ delete languageModels[uri];\r
+ nModels--;\r
+ }\r
+ },\r
+ dispose() {\r
+ if (typeof cleanupInterval !== 'undefined') {\r
+ clearInterval(cleanupInterval);\r
+ cleanupInterval = undefined;\r
+ languageModels = {};\r
+ nModels = 0;\r
+ }\r
+ }\r
+ };\r
+}\r
+exports.getLanguageModelCache = getLanguageModelCache;\r
+//# sourceMappingURL=languageModelCache.js.map
\ No newline at end of file