@codingame/monaco-vscode-language-detection-worker-service-override 1.82.4 → 1.82.5-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ function __decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ function __param(paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ }
10
+
11
+ export { __decorate, __param };
package/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { default } from 'vscode/service-override/languageDetectionWorker'
1
+ export { default } from './languageDetectionWorker.js';
package/index.js CHANGED
@@ -1 +1 @@
1
- export { default } from 'vscode/service-override/languageDetectionWorker'
1
+ export { default } from './languageDetectionWorker.js';
@@ -0,0 +1,5 @@
1
+ import { IEditorOverrideServices } from 'vscode/vscode/vs/editor/standalone/browser/standaloneServices';
2
+
3
+ declare function getServiceOverride(): IEditorOverrideServices;
4
+
5
+ export { getServiceOverride as default };
@@ -0,0 +1,16 @@
1
+ import { SyncDescriptor } from 'monaco-editor/esm/vs/platform/instantiation/common/descriptors.js';
2
+ import { LanguageDetectionService } from './vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.js';
3
+ import { ILanguageDetectionService } from 'vscode/vscode/vs/workbench/services/languageDetection/common/languageDetectionWorkerService';
4
+ import { registerAssets } from 'vscode/assets';
5
+
6
+ registerAssets({
7
+ 'vs/../../node_modules/@vscode/vscode-languagedetection/model/model.json': new URL('@vscode/vscode-languagedetection/model/model.json', import.meta.url).href,
8
+ 'vs/../../node_modules/@vscode/vscode-languagedetection/model/group1-shard1of1.bin': new URL('@vscode/vscode-languagedetection/model/group1-shard1of1.bin', import.meta.url).href
9
+ });
10
+ function getServiceOverride() {
11
+ return {
12
+ [( ILanguageDetectionService.toString())]: new SyncDescriptor(LanguageDetectionService, [], false)
13
+ };
14
+ }
15
+
16
+ export { getServiceOverride as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-language-detection-worker-service-override",
3
- "version": "1.82.4",
3
+ "version": "1.82.5-next.0",
4
4
  "keywords": [],
5
5
  "author": {
6
6
  "name": "CodinGame",
@@ -18,7 +18,7 @@
18
18
  "module": "index.js",
19
19
  "types": "index.d.ts",
20
20
  "dependencies": {
21
- "vscode": "npm:@codingame/monaco-vscode-api@1.82.4",
21
+ "vscode": "npm:@codingame/monaco-vscode-api@1.82.5-next.0",
22
22
  "@vscode/vscode-languagedetection": "^1.0.22",
23
23
  "monaco-editor": "0.43.0"
24
24
  },
@@ -0,0 +1,175 @@
1
+ import { ModelOperations } from '@vscode/vscode-languagedetection';
2
+ import { StopWatch } from 'monaco-editor/esm/vs/base/common/stopwatch.js';
3
+ import { EditorSimpleWorker } from 'monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js';
4
+
5
+ function create(host) {
6
+ return ( new LanguageDetectionSimpleWorker(host, null));
7
+ }
8
+ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
9
+ constructor() {
10
+ super(...arguments);
11
+ this._loadFailed = false;
12
+ this.modelIdToCoreId = ( new Map());
13
+ }
14
+ static { this.expectedRelativeConfidence = 0.2; }
15
+ static { this.positiveConfidenceCorrectionBucket1 = 0.05; }
16
+ static { this.positiveConfidenceCorrectionBucket2 = 0.025; }
17
+ static { this.negativeConfidenceCorrection = 0.5; }
18
+ async detectLanguage(uri, langBiases, preferHistory, supportedLangs) {
19
+ const languages = [];
20
+ const confidences = [];
21
+ const stopWatch = ( new StopWatch());
22
+ const documentTextSample = this.getTextForDetection(uri);
23
+ if (!documentTextSample) {
24
+ return;
25
+ }
26
+ const neuralResolver = async () => {
27
+ for await (const language of this.detectLanguagesImpl(documentTextSample)) {
28
+ if (!( this.modelIdToCoreId.has(language.languageId))) {
29
+ this.modelIdToCoreId.set(language.languageId, await this._host.fhr('getLanguageId', [language.languageId]));
30
+ }
31
+ const coreId = this.modelIdToCoreId.get(language.languageId);
32
+ if (coreId && (!supportedLangs?.length || supportedLangs.includes(coreId))) {
33
+ languages.push(coreId);
34
+ confidences.push(language.confidence);
35
+ }
36
+ }
37
+ stopWatch.stop();
38
+ if (languages.length) {
39
+ this._host.fhr('sendTelemetryEvent', [languages, confidences, stopWatch.elapsed()]);
40
+ return languages[0];
41
+ }
42
+ return undefined;
43
+ };
44
+ const neural = await neuralResolver();
45
+ if (neural) {
46
+ return neural;
47
+ }
48
+ return undefined;
49
+ }
50
+ getTextForDetection(uri) {
51
+ const editorModel = this._getModel(uri);
52
+ if (!editorModel) {
53
+ return;
54
+ }
55
+ const end = editorModel.positionAt(10000);
56
+ const content = editorModel.getValueInRange({
57
+ startColumn: 1,
58
+ startLineNumber: 1,
59
+ endColumn: end.column,
60
+ endLineNumber: end.lineNumber
61
+ });
62
+ return content;
63
+ }
64
+ async getModelOperations() {
65
+ if (this._modelOperations) {
66
+ return this._modelOperations;
67
+ }
68
+ this._modelOperations = ( new ModelOperations({
69
+ modelJsonLoaderFunc: async () => {
70
+ const response = await fetch(await this._host.fhr('getModelJsonUri', []));
71
+ try {
72
+ const modelJSON = await response.json();
73
+ return modelJSON;
74
+ }
75
+ catch (e) {
76
+ const message = `Failed to parse model JSON.`;
77
+ throw new Error(message);
78
+ }
79
+ },
80
+ weightsLoaderFunc: async () => {
81
+ const response = await fetch(await this._host.fhr('getWeightsUri', []));
82
+ const buffer = await response.arrayBuffer();
83
+ return buffer;
84
+ }
85
+ }));
86
+ return this._modelOperations;
87
+ }
88
+ adjustLanguageConfidence(modelResult) {
89
+ switch (modelResult.languageId) {
90
+ case 'js':
91
+ case 'html':
92
+ case 'json':
93
+ case 'ts':
94
+ case 'css':
95
+ case 'py':
96
+ case 'xml':
97
+ case 'php':
98
+ modelResult.confidence += LanguageDetectionSimpleWorker.positiveConfidenceCorrectionBucket1;
99
+ break;
100
+ case 'cpp':
101
+ case 'sh':
102
+ case 'java':
103
+ case 'cs':
104
+ case 'c':
105
+ modelResult.confidence += LanguageDetectionSimpleWorker.positiveConfidenceCorrectionBucket2;
106
+ break;
107
+ case 'bat':
108
+ case 'ini':
109
+ case 'makefile':
110
+ case 'sql':
111
+ case 'csv':
112
+ case 'toml':
113
+ modelResult.confidence -= LanguageDetectionSimpleWorker.negativeConfidenceCorrection;
114
+ break;
115
+ }
116
+ return modelResult;
117
+ }
118
+ async *detectLanguagesImpl(content) {
119
+ if (this._loadFailed) {
120
+ return;
121
+ }
122
+ let modelOperations;
123
+ try {
124
+ modelOperations = await this.getModelOperations();
125
+ }
126
+ catch (e) {
127
+ console.log(e);
128
+ this._loadFailed = true;
129
+ return;
130
+ }
131
+ let modelResults;
132
+ try {
133
+ modelResults = await modelOperations.runModel(content);
134
+ }
135
+ catch (e) {
136
+ console.warn(e);
137
+ }
138
+ if (!modelResults
139
+ || modelResults.length === 0
140
+ || modelResults[0].confidence < LanguageDetectionSimpleWorker.expectedRelativeConfidence) {
141
+ return;
142
+ }
143
+ const firstModelResult = this.adjustLanguageConfidence(modelResults[0]);
144
+ if (firstModelResult.confidence < LanguageDetectionSimpleWorker.expectedRelativeConfidence) {
145
+ return;
146
+ }
147
+ const possibleLanguages = [firstModelResult];
148
+ for (let current of modelResults) {
149
+ if (current === firstModelResult) {
150
+ continue;
151
+ }
152
+ current = this.adjustLanguageConfidence(current);
153
+ const currentHighest = possibleLanguages[possibleLanguages.length - 1];
154
+ if (currentHighest.confidence - current.confidence >= LanguageDetectionSimpleWorker.expectedRelativeConfidence) {
155
+ while (possibleLanguages.length) {
156
+ yield possibleLanguages.shift();
157
+ }
158
+ if (current.confidence > LanguageDetectionSimpleWorker.expectedRelativeConfidence) {
159
+ possibleLanguages.push(current);
160
+ continue;
161
+ }
162
+ return;
163
+ }
164
+ else {
165
+ if (current.confidence > LanguageDetectionSimpleWorker.expectedRelativeConfidence) {
166
+ possibleLanguages.push(current);
167
+ continue;
168
+ }
169
+ return;
170
+ }
171
+ }
172
+ }
173
+ }
174
+
175
+ export { LanguageDetectionSimpleWorker, create };
@@ -0,0 +1,261 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { Disposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
3
+ import { LanguageDetectionStatsId } from 'vscode/vscode/vs/workbench/services/languageDetection/common/languageDetectionWorkerService';
4
+ import { FileAccess, Schemas, nodeModulesPath, nodeModulesAsarPath } from 'monaco-editor/esm/vs/base/common/network.js';
5
+ import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService';
6
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
7
+ import { ILanguageService } from 'monaco-editor/esm/vs/editor/common/languages/language.js';
8
+ import { URI } from 'monaco-editor/esm/vs/base/common/uri.js';
9
+ import { isWeb } from 'monaco-editor/esm/vs/base/common/platform.js';
10
+ import { IModelService } from 'monaco-editor/esm/vs/editor/common/services/model.js';
11
+ import { SimpleWorkerClient } from 'monaco-editor/esm/vs/base/common/worker/simpleWorker.js';
12
+ import { ITelemetryService } from 'monaco-editor/esm/vs/platform/telemetry/common/telemetry.js';
13
+ import { EditorWorkerClient, EditorWorkerHost } from 'monaco-editor/esm/vs/editor/browser/services/editorWorkerService.js';
14
+ import { ILanguageConfigurationService } from 'monaco-editor/esm/vs/editor/common/languages/languageConfigurationRegistry.js';
15
+ import { IDiagnosticsService } from 'vscode/vscode/vs/platform/diagnostics/common/diagnostics';
16
+ import { IWorkspaceContextService } from 'monaco-editor/esm/vs/platform/workspace/common/workspace.js';
17
+ import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
18
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
19
+ import { LRUCache } from 'monaco-editor/esm/vs/base/common/map.js';
20
+ import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
21
+
22
+ var LanguageDetectionService_1;
23
+ const TOP_LANG_COUNTS = 12;
24
+ const regexpModuleLocation = `${nodeModulesPath}/vscode-regexp-languagedetection`;
25
+ const regexpModuleLocationAsar = `${nodeModulesAsarPath}/vscode-regexp-languagedetection`;
26
+ const moduleLocation = `${nodeModulesPath}/@vscode/vscode-languagedetection`;
27
+ const moduleLocationAsar = `${nodeModulesAsarPath}/@vscode/vscode-languagedetection`;
28
+ let LanguageDetectionService = class LanguageDetectionService extends Disposable {
29
+ static { LanguageDetectionService_1 = this; }
30
+ static { this.enablementSettingKey = 'workbench.editor.languageDetection'; }
31
+ static { this.historyBasedEnablementConfig = 'workbench.editor.historyBasedLanguageDetection'; }
32
+ static { this.preferHistoryConfig = 'workbench.editor.preferHistoryBasedLanguageDetection'; }
33
+ static { this.workspaceOpenedLanguagesStorageKey = 'workbench.editor.languageDetectionOpenedLanguages.workspace'; }
34
+ static { this.globalOpenedLanguagesStorageKey = 'workbench.editor.languageDetectionOpenedLanguages.global'; }
35
+ constructor(_environmentService, languageService, _configurationService, _diagnosticsService, _workspaceContextService, modelService, _editorService, telemetryService, storageService, _logService, languageConfigurationService) {
36
+ super();
37
+ this._environmentService = _environmentService;
38
+ this._configurationService = _configurationService;
39
+ this._diagnosticsService = _diagnosticsService;
40
+ this._workspaceContextService = _workspaceContextService;
41
+ this._editorService = _editorService;
42
+ this._logService = _logService;
43
+ this.hasResolvedWorkspaceLanguageIds = false;
44
+ this.workspaceLanguageIds = ( new Set());
45
+ this.sessionOpenedLanguageIds = ( new Set());
46
+ this.historicalGlobalOpenedLanguageIds = ( new LRUCache(TOP_LANG_COUNTS));
47
+ this.historicalWorkspaceOpenedLanguageIds = ( new LRUCache(TOP_LANG_COUNTS));
48
+ this.dirtyBiases = true;
49
+ this.langBiases = {};
50
+ this._languageDetectionWorkerClient = ( new LanguageDetectionWorkerClient(
51
+ modelService,
52
+ languageService,
53
+ telemetryService,
54
+ this._environmentService.isBuilt && !isWeb
55
+ ? ( ( FileAccess.asBrowserUri(`${moduleLocationAsar}/dist/lib/index.js`)).toString(true))
56
+ : ( ( FileAccess.asBrowserUri(`${moduleLocation}/dist/lib/index.js`)).toString(true)),
57
+ this._environmentService.isBuilt && !isWeb
58
+ ? ( ( FileAccess.asBrowserUri(`${moduleLocationAsar}/model/model.json`)).toString(true))
59
+ : ( ( FileAccess.asBrowserUri(`${moduleLocation}/model/model.json`)).toString(true)),
60
+ this._environmentService.isBuilt && !isWeb
61
+ ? ( ( FileAccess.asBrowserUri(`${moduleLocationAsar}/model/group1-shard1of1.bin`)).toString(true))
62
+ : ( ( FileAccess.asBrowserUri(`${moduleLocation}/model/group1-shard1of1.bin`)).toString(true)),
63
+ this._environmentService.isBuilt && !isWeb
64
+ ? ( ( FileAccess.asBrowserUri(`${regexpModuleLocationAsar}/dist/index.js`)).toString(true))
65
+ : ( ( FileAccess.asBrowserUri(`${regexpModuleLocation}/dist/index.js`)).toString(true)),
66
+ languageConfigurationService
67
+ ));
68
+ this.initEditorOpenedListeners(storageService);
69
+ }
70
+ async resolveWorkspaceLanguageIds() {
71
+ if (this.hasResolvedWorkspaceLanguageIds) {
72
+ return;
73
+ }
74
+ this.hasResolvedWorkspaceLanguageIds = true;
75
+ const fileExtensions = await this._diagnosticsService.getWorkspaceFileExtensions(this._workspaceContextService.getWorkspace());
76
+ let count = 0;
77
+ for (const ext of fileExtensions.extensions) {
78
+ const langId = this._languageDetectionWorkerClient.getLanguageId(ext);
79
+ if (langId && count < TOP_LANG_COUNTS) {
80
+ this.workspaceLanguageIds.add(langId);
81
+ count++;
82
+ if (count > TOP_LANG_COUNTS) {
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ this.dirtyBiases = true;
88
+ }
89
+ isEnabledForLanguage(languageId) {
90
+ return !!languageId && this._configurationService.getValue(LanguageDetectionService_1.enablementSettingKey, { overrideIdentifier: languageId });
91
+ }
92
+ getLanguageBiases() {
93
+ if (!this.dirtyBiases) {
94
+ return this.langBiases;
95
+ }
96
+ const biases = {};
97
+ this.sessionOpenedLanguageIds.forEach(lang => biases[lang] = (biases[lang] ?? 0) + 7);
98
+ this.workspaceLanguageIds.forEach(lang => biases[lang] = (biases[lang] ?? 0) + 5);
99
+ [...( this.historicalWorkspaceOpenedLanguageIds.keys())].forEach(lang => biases[lang] = (biases[lang] ?? 0) + 3);
100
+ [...( this.historicalGlobalOpenedLanguageIds.keys())].forEach(lang => biases[lang] = (biases[lang] ?? 0) + 1);
101
+ this._logService.trace('Session Languages:', JSON.stringify([...this.sessionOpenedLanguageIds]));
102
+ this._logService.trace('Workspace Languages:', JSON.stringify([...this.workspaceLanguageIds]));
103
+ this._logService.trace('Historical Workspace Opened Languages:', JSON.stringify([...( this.historicalWorkspaceOpenedLanguageIds.keys())]));
104
+ this._logService.trace('Historical Globally Opened Languages:', JSON.stringify([...( this.historicalGlobalOpenedLanguageIds.keys())]));
105
+ this._logService.trace('Computed Language Detection Biases:', JSON.stringify(biases));
106
+ this.dirtyBiases = false;
107
+ this.langBiases = biases;
108
+ return biases;
109
+ }
110
+ async detectLanguage(resource, supportedLangs) {
111
+ const useHistory = this._configurationService.getValue(LanguageDetectionService_1.historyBasedEnablementConfig);
112
+ const preferHistory = this._configurationService.getValue(LanguageDetectionService_1.preferHistoryConfig);
113
+ if (useHistory) {
114
+ await this.resolveWorkspaceLanguageIds();
115
+ }
116
+ const biases = useHistory ? this.getLanguageBiases() : undefined;
117
+ return this._languageDetectionWorkerClient.detectLanguage(resource, biases, preferHistory, supportedLangs);
118
+ }
119
+ initEditorOpenedListeners(storageService) {
120
+ try {
121
+ const globalLangHistoryData = JSON.parse(storageService.get(LanguageDetectionService_1.globalOpenedLanguagesStorageKey, 0 , '[]'));
122
+ this.historicalGlobalOpenedLanguageIds.fromJSON(globalLangHistoryData);
123
+ }
124
+ catch (e) {
125
+ console.error(e);
126
+ }
127
+ try {
128
+ const workspaceLangHistoryData = JSON.parse(storageService.get(LanguageDetectionService_1.workspaceOpenedLanguagesStorageKey, 1 , '[]'));
129
+ this.historicalWorkspaceOpenedLanguageIds.fromJSON(workspaceLangHistoryData);
130
+ }
131
+ catch (e) {
132
+ console.error(e);
133
+ }
134
+ this._register(this._editorService.onDidActiveEditorChange(() => {
135
+ const activeLanguage = this._editorService.activeTextEditorLanguageId;
136
+ if (activeLanguage && this._editorService.activeEditor?.resource?.scheme !== Schemas.untitled) {
137
+ this.sessionOpenedLanguageIds.add(activeLanguage);
138
+ this.historicalGlobalOpenedLanguageIds.set(activeLanguage, true);
139
+ this.historicalWorkspaceOpenedLanguageIds.set(activeLanguage, true);
140
+ storageService.store(LanguageDetectionService_1.globalOpenedLanguagesStorageKey, JSON.stringify(this.historicalGlobalOpenedLanguageIds.toJSON()), 0 , 1 );
141
+ storageService.store(LanguageDetectionService_1.workspaceOpenedLanguagesStorageKey, JSON.stringify(this.historicalWorkspaceOpenedLanguageIds.toJSON()), 1 , 1 );
142
+ this.dirtyBiases = true;
143
+ }
144
+ }));
145
+ }
146
+ };
147
+ LanguageDetectionService = LanguageDetectionService_1 = ( __decorate([
148
+ ( __param(0, IWorkbenchEnvironmentService)),
149
+ ( __param(1, ILanguageService)),
150
+ ( __param(2, IConfigurationService)),
151
+ ( __param(3, IDiagnosticsService)),
152
+ ( __param(4, IWorkspaceContextService)),
153
+ ( __param(5, IModelService)),
154
+ ( __param(6, IEditorService)),
155
+ ( __param(7, ITelemetryService)),
156
+ ( __param(8, IStorageService)),
157
+ ( __param(9, ILogService)),
158
+ ( __param(10, ILanguageConfigurationService))
159
+ ], LanguageDetectionService));
160
+ class LanguageDetectionWorkerClient extends EditorWorkerClient {
161
+ constructor(modelService, _languageService, _telemetryService, _indexJsUri, _modelJsonUri, _weightsUri, _regexpModelUri, languageConfigurationService) {
162
+ super(modelService, true, 'languageDetectionWorkerService', languageConfigurationService);
163
+ this._languageService = _languageService;
164
+ this._telemetryService = _telemetryService;
165
+ this._indexJsUri = _indexJsUri;
166
+ this._modelJsonUri = _modelJsonUri;
167
+ this._weightsUri = _weightsUri;
168
+ this._regexpModelUri = _regexpModelUri;
169
+ }
170
+ _getOrCreateLanguageDetectionWorker() {
171
+ if (this.workerPromise) {
172
+ return this.workerPromise;
173
+ }
174
+ this.workerPromise = ( new Promise((resolve, reject) => {
175
+ resolve(this._register(( new SimpleWorkerClient(
176
+ this._workerFactory,
177
+ 'vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker',
178
+ ( new EditorWorkerHost(this))
179
+ ))));
180
+ }));
181
+ return this.workerPromise;
182
+ }
183
+ _guessLanguageIdByUri(uri) {
184
+ const guess = this._languageService.guessLanguageIdByFilepathOrFirstLine(uri);
185
+ if (guess && guess !== 'unknown') {
186
+ return guess;
187
+ }
188
+ return undefined;
189
+ }
190
+ async _getProxy() {
191
+ return (await this._getOrCreateLanguageDetectionWorker()).getProxyObject();
192
+ }
193
+ async fhr(method, args) {
194
+ switch (method) {
195
+ case 'getIndexJsUri':
196
+ return this.getIndexJsUri();
197
+ case 'getModelJsonUri':
198
+ return this.getModelJsonUri();
199
+ case 'getWeightsUri':
200
+ return this.getWeightsUri();
201
+ case 'getRegexpModelUri':
202
+ return this.getRegexpModelUri();
203
+ case 'getLanguageId':
204
+ return this.getLanguageId(args[0]);
205
+ case 'sendTelemetryEvent':
206
+ return this.sendTelemetryEvent(args[0], args[1], args[2]);
207
+ default:
208
+ return super.fhr(method, args);
209
+ }
210
+ }
211
+ async getIndexJsUri() {
212
+ return this._indexJsUri;
213
+ }
214
+ getLanguageId(languageIdOrExt) {
215
+ if (!languageIdOrExt) {
216
+ return undefined;
217
+ }
218
+ if (this._languageService.isRegisteredLanguageId(languageIdOrExt)) {
219
+ return languageIdOrExt;
220
+ }
221
+ const guessed = this._guessLanguageIdByUri(URI.file(`file.${languageIdOrExt}`));
222
+ if (!guessed || guessed === 'unknown') {
223
+ return undefined;
224
+ }
225
+ return guessed;
226
+ }
227
+ async getModelJsonUri() {
228
+ return this._modelJsonUri;
229
+ }
230
+ async getWeightsUri() {
231
+ return this._weightsUri;
232
+ }
233
+ async getRegexpModelUri() {
234
+ return this._regexpModelUri;
235
+ }
236
+ async sendTelemetryEvent(languages, confidences, timeSpent) {
237
+ this._telemetryService.publicLog2(LanguageDetectionStatsId, {
238
+ languages: languages.join(','),
239
+ confidences: confidences.join(','),
240
+ timeSpent
241
+ });
242
+ }
243
+ async detectLanguage(resource, langBiases, preferHistory, supportedLangs) {
244
+ const startTime = Date.now();
245
+ const quickGuess = this._guessLanguageIdByUri(resource);
246
+ if (quickGuess) {
247
+ return quickGuess;
248
+ }
249
+ await this._withSyncedResources([resource]);
250
+ const modelId = await (await this._getProxy()).detectLanguage(( resource.toString()), langBiases, preferHistory, supportedLangs);
251
+ const languageId = this.getLanguageId(modelId);
252
+ const LanguageDetectionStatsId = 'automaticlanguagedetection.perf';
253
+ this._telemetryService.publicLog2(LanguageDetectionStatsId, {
254
+ timeSpent: Date.now() - startTime,
255
+ detection: languageId || 'unknown',
256
+ });
257
+ return languageId;
258
+ }
259
+ }
260
+
261
+ export { LanguageDetectionService, LanguageDetectionWorkerClient };
package/worker.js CHANGED
@@ -1 +1 @@
1
- import 'vscode/workers/languageDetection.worker'
1
+ import './workers/languageDetection.worker.js';
@@ -0,0 +1,9 @@
1
+ import { create } from '../vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker.js';
2
+ import { SimpleWorkerServer } from 'monaco-editor/esm/vs/base/common/worker/simpleWorker.js';
3
+
4
+ const simpleWorker = new SimpleWorkerServer((msg) => {
5
+ globalThis.postMessage(msg);
6
+ }, create);
7
+ globalThis.onmessage = (e) => {
8
+ simpleWorker.onmessage(e.data);
9
+ };