monaco-languageclient 10.6.0 → 11.0.0-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.
Files changed (80) hide show
  1. package/CHANGELOG.md +19 -4
  2. package/LICENSE +0 -0
  3. package/README.md +63 -63
  4. package/lib/common/commonTypes.d.ts +1 -1
  5. package/lib/common/commonTypes.d.ts.map +1 -1
  6. package/lib/common/utils.d.ts.map +1 -1
  7. package/lib/common/utils.js +2 -2
  8. package/lib/common/utils.js.map +1 -1
  9. package/lib/debugger/index.d.ts +1 -1
  10. package/lib/debugger/index.d.ts.map +1 -1
  11. package/lib/debugger/index.js +2 -4
  12. package/lib/debugger/index.js.map +1 -1
  13. package/lib/editorApp/config.d.ts +11 -11
  14. package/lib/editorApp/config.d.ts.map +1 -1
  15. package/lib/editorApp/config.js +0 -1
  16. package/lib/editorApp/config.js.map +1 -1
  17. package/lib/editorApp/editorApp.d.ts +5 -5
  18. package/lib/editorApp/editorApp.d.ts.map +1 -1
  19. package/lib/editorApp/editorApp.js +21 -23
  20. package/lib/editorApp/editorApp.js.map +1 -1
  21. package/lib/fs/definitions.d.ts.map +1 -1
  22. package/lib/fs/endpoints/defaultEndpoint.d.ts.map +1 -1
  23. package/lib/fs/endpoints/defaultEndpoint.js.map +1 -1
  24. package/lib/index.d.ts +1 -1
  25. package/lib/index.d.ts.map +1 -1
  26. package/lib/index.js +1 -1
  27. package/lib/index.js.map +1 -1
  28. package/lib/vscode/apiWrapper.d.ts +2 -2
  29. package/lib/vscode/apiWrapper.d.ts.map +1 -1
  30. package/lib/vscode/apiWrapper.js +19 -22
  31. package/lib/vscode/apiWrapper.js.map +1 -1
  32. package/lib/vscode/config.d.ts +4 -4
  33. package/lib/vscode/config.d.ts.map +1 -1
  34. package/lib/vscode/config.js +0 -1
  35. package/lib/vscode/config.js.map +1 -1
  36. package/lib/vscode/locales.d.ts +1 -1
  37. package/lib/vscode/locales.d.ts.map +1 -1
  38. package/lib/vscode/locales.js +35 -18
  39. package/lib/vscode/locales.js.map +1 -1
  40. package/lib/vscode/utils.d.ts +3 -3
  41. package/lib/vscode/utils.d.ts.map +1 -1
  42. package/lib/vscode/utils.js +3 -10
  43. package/lib/vscode/utils.js.map +1 -1
  44. package/lib/vscode/viewsService.d.ts.map +1 -1
  45. package/lib/vscode/viewsService.js +13 -7
  46. package/lib/vscode/viewsService.js.map +1 -1
  47. package/lib/worker/index.d.ts +1 -1
  48. package/lib/worker/index.d.ts.map +1 -1
  49. package/lib/worker/index.js.map +1 -1
  50. package/lib/wrapper/lcconfig.d.ts +2 -2
  51. package/lib/wrapper/lcconfig.d.ts.map +1 -1
  52. package/lib/wrapper/lcmanager.d.ts.map +1 -1
  53. package/lib/wrapper/lcmanager.js.map +1 -1
  54. package/lib/wrapper/lcwrapper.d.ts +1 -1
  55. package/lib/wrapper/lcwrapper.d.ts.map +1 -1
  56. package/lib/wrapper/lcwrapper.js +17 -16
  57. package/lib/wrapper/lcwrapper.js.map +1 -1
  58. package/package.json +70 -96
  59. package/src/common/commonTypes.ts +35 -30
  60. package/src/common/index.ts +0 -1
  61. package/src/common/utils.ts +45 -45
  62. package/src/debugger/index.ts +130 -133
  63. package/src/editorApp/config.ts +33 -33
  64. package/src/editorApp/editorApp.ts +382 -370
  65. package/src/editorApp/index.ts +0 -0
  66. package/src/fs/definitions.ts +72 -75
  67. package/src/fs/endpoints/defaultEndpoint.ts +50 -41
  68. package/src/fs/index.ts +0 -0
  69. package/src/index.ts +18 -18
  70. package/src/vscode/apiWrapper.ts +302 -296
  71. package/src/vscode/config.ts +30 -30
  72. package/src/vscode/index.ts +0 -0
  73. package/src/vscode/locales.ts +127 -110
  74. package/src/vscode/utils.ts +20 -26
  75. package/src/vscode/viewsService.ts +44 -37
  76. package/src/worker/index.ts +38 -45
  77. package/src/wrapper/index.ts +0 -0
  78. package/src/wrapper/lcconfig.ts +16 -16
  79. package/src/wrapper/lcmanager.ts +68 -69
  80. package/src/wrapper/lcwrapper.ts +256 -249
@@ -4,10 +4,16 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { initialize, LogLevel } from '@codingame/monaco-vscode-api';
7
- import { ExtensionHostKind, getBuiltinExtensions, registerExtension, type IExtensionManifest, type RegisterExtensionResult } from '@codingame/monaco-vscode-api/extensions';
7
+ import {
8
+ ExtensionHostKind,
9
+ getBuiltinExtensions,
10
+ registerExtension,
11
+ type IExtensionManifest,
12
+ type RegisterExtensionResult
13
+ } from '@codingame/monaco-vscode-api/extensions';
8
14
  import { DisposableStore, setUnexpectedErrorHandler } from '@codingame/monaco-vscode-api/monaco';
9
15
  import getConfigurationServiceOverride, { initUserConfiguration } from '@codingame/monaco-vscode-configuration-service-override';
10
- import * as monaco from '@codingame/monaco-vscode-editor-api';
16
+ import type { editor } from '@codingame/monaco-vscode-editor-api';
11
17
  import getLogServiceOverride, { ConsoleLogger, type ILogger } from '@codingame/monaco-vscode-log-service-override';
12
18
  import getModelServiceOverride from '@codingame/monaco-vscode-model-service-override';
13
19
  import { encodeStringOrUrlToDataUrl } from 'monaco-languageclient/common';
@@ -18,351 +24,351 @@ import type { ExtensionConfig, MonacoVscodeApiConfig, ViewsConfig } from './conf
18
24
  import { getEnhancedMonacoEnvironment, mergeServices, reportServiceLoading, useOpenEditorStub } from './utils.js';
19
25
 
20
26
  export interface MonacoVscodeApiConfigRuntime extends MonacoVscodeApiConfig {
21
- serviceOverrides: monaco.editor.IEditorOverrideServices;
22
- logLevel: LogLevel | number;
23
- viewsConfig: ViewsConfig;
27
+ serviceOverrides: editor.IEditorOverrideServices;
28
+ logLevel: LogLevel | number;
29
+ viewsConfig: ViewsConfig;
24
30
  }
25
31
 
26
32
  export interface StartInstructions {
27
- caller?: string;
28
- performServiceConsistencyChecks?: boolean;
33
+ caller?: string;
34
+ performServiceConsistencyChecks?: boolean;
29
35
  }
30
36
 
31
37
  export class MonacoVscodeApiWrapper {
32
-
33
- private logger: ILogger = new ConsoleLogger();
34
- private extensionRegisterResults: Map<string, | RegisterExtensionResult> = new Map();
35
- private disposableStore: DisposableStore = new DisposableStore();
36
- private apiConfig: MonacoVscodeApiConfigRuntime;
37
-
38
- constructor(apiConfig: MonacoVscodeApiConfig) {
39
- this.apiConfig = {
40
- ...apiConfig,
41
- serviceOverrides: apiConfig.serviceOverrides ?? {},
42
- logLevel: apiConfig.logLevel ?? LogLevel.Off,
43
- };
44
- this.logger.setLevel(this.apiConfig.logLevel);
38
+ private logger: ILogger = new ConsoleLogger();
39
+ private extensionRegisterResults: Map<string, RegisterExtensionResult> = new Map();
40
+ private disposableStore: DisposableStore = new DisposableStore();
41
+ private apiConfig: MonacoVscodeApiConfigRuntime;
42
+
43
+ constructor(apiConfig: MonacoVscodeApiConfig) {
44
+ this.apiConfig = {
45
+ ...apiConfig,
46
+ serviceOverrides: apiConfig.serviceOverrides ?? {},
47
+ logLevel: apiConfig.logLevel ?? LogLevel.Off
48
+ };
49
+ this.logger.setLevel(this.apiConfig.logLevel);
50
+ }
51
+
52
+ getExtensionRegisterResult(extensionName: string) {
53
+ return this.extensionRegisterResults.get(extensionName);
54
+ }
55
+
56
+ getMonacoVscodeApiConfig(): MonacoVscodeApiConfig {
57
+ return this.apiConfig;
58
+ }
59
+
60
+ protected configureMonacoWorkers() {
61
+ if (typeof this.apiConfig.monacoWorkerFactory === 'function') {
62
+ this.apiConfig.monacoWorkerFactory(this.logger);
63
+ } else {
64
+ useWorkerFactory({
65
+ logger: this.logger
66
+ });
45
67
  }
46
-
47
- getExtensionRegisterResult(extensionName: string) {
48
- return this.extensionRegisterResults.get(extensionName);
68
+ }
69
+
70
+ private performErrorHandling = (message: string) => {
71
+ getEnhancedMonacoEnvironment().vscodeApiInitialising = false;
72
+ throw new Error(message);
73
+ };
74
+
75
+ protected async configureHighlightingServices() {
76
+ if (this.apiConfig.$type === 'extended') {
77
+ const getTextmateServiceOverride = (await import('@codingame/monaco-vscode-textmate-service-override')).default;
78
+ const getThemeServiceOverride = (await import('@codingame/monaco-vscode-theme-service-override')).default;
79
+ const getLanguagesServiceOverride = (await import('@codingame/monaco-vscode-languages-service-override')).default;
80
+ mergeServices(this.apiConfig.serviceOverrides, {
81
+ ...getLanguagesServiceOverride(),
82
+ ...getTextmateServiceOverride(),
83
+ ...getThemeServiceOverride()
84
+ });
85
+ } else {
86
+ const getMonarchServiceOverride = (await import('@codingame/monaco-vscode-monarch-service-override')).default;
87
+ mergeServices(this.apiConfig.serviceOverrides, {
88
+ ...getMonarchServiceOverride()
89
+ });
49
90
  }
50
-
51
- getMonacoVscodeApiConfig(): MonacoVscodeApiConfig {
52
- return this.apiConfig;
91
+ }
92
+
93
+ protected async configureViewsServices() {
94
+ const viewsConfigType = this.apiConfig.viewsConfig.$type;
95
+ if (viewsConfigType === 'ViewsService' || viewsConfigType === 'WorkbenchService') {
96
+ if (this.apiConfig.$type === 'classic') {
97
+ this.performErrorHandling(`View Service Type "${viewsConfigType}" cannot be used with classic configuration.`);
98
+ }
99
+ if (this.apiConfig.viewsConfig.htmlContainer === undefined) {
100
+ this.performErrorHandling(`View Service Type "${viewsConfigType}" requires a HTMLElement.`);
101
+ }
53
102
  }
54
103
 
55
- protected configureMonacoWorkers() {
56
- if (typeof this.apiConfig.monacoWorkerFactory === 'function') {
57
- this.apiConfig.monacoWorkerFactory(this.logger);
58
- } else {
59
- useWorkerFactory({
60
- logger: this.logger
61
- });
62
- }
104
+ const envEnhanced = getEnhancedMonacoEnvironment();
105
+ if (viewsConfigType === 'ViewsService') {
106
+ const getViewsServiceOverride = (await import('@codingame/monaco-vscode-views-service-override')).default;
107
+ mergeServices(this.apiConfig.serviceOverrides, {
108
+ ...getViewsServiceOverride(this.apiConfig.viewsConfig.openEditorFunc ?? useOpenEditorStub)
109
+ });
110
+ envEnhanced.viewServiceType = 'ViewsService';
111
+ } else if (viewsConfigType === 'WorkbenchService') {
112
+ const getWorkbenchServiceOverride = (await import('@codingame/monaco-vscode-workbench-service-override')).default;
113
+ mergeServices(this.apiConfig.serviceOverrides, {
114
+ ...getWorkbenchServiceOverride()
115
+ });
116
+ envEnhanced.viewServiceType = 'WorkbenchService';
117
+ } else {
118
+ const getEditorServiceOverride = (await import('@codingame/monaco-vscode-editor-service-override')).default;
119
+ mergeServices(this.apiConfig.serviceOverrides, {
120
+ ...getEditorServiceOverride(this.apiConfig.viewsConfig.openEditorFunc ?? useOpenEditorStub)
121
+ });
122
+ envEnhanced.viewServiceType = 'EditorService';
63
123
  }
124
+ }
64
125
 
65
- private performErrorHandling = (message: string) => {
66
- getEnhancedMonacoEnvironment().vscodeApiInitialising = false;
67
- throw new Error(message);
68
- };
69
-
70
- protected async configureHighlightingServices() {
71
- if (this.apiConfig.$type === 'extended') {
72
- const getTextmateServiceOverride = (await import('@codingame/monaco-vscode-textmate-service-override')).default;
73
- const getThemeServiceOverride = (await import('@codingame/monaco-vscode-theme-service-override')).default;
74
- const getLanguagesServiceOverride = (await import('@codingame/monaco-vscode-languages-service-override')).default;
75
- mergeServices(this.apiConfig.serviceOverrides, {
76
- ...getLanguagesServiceOverride(),
77
- ...getTextmateServiceOverride(),
78
- ...getThemeServiceOverride()
79
- });
80
- } else {
81
- const getMonarchServiceOverride = (await import('@codingame/monaco-vscode-monarch-service-override')).default;
82
- mergeServices(this.apiConfig.serviceOverrides, {
83
- ...getMonarchServiceOverride()
84
- });
85
- }
126
+ protected async applyViewsPostConfig() {
127
+ const viewsConfigType = this.apiConfig.viewsConfig.$type;
128
+ if (viewsConfigType === 'ViewsService' || viewsConfigType === 'WorkbenchService') {
129
+ this.apiConfig.viewsConfig.htmlAugmentationInstructions?.(this.apiConfig.viewsConfig.htmlContainer);
130
+ await this.apiConfig.viewsConfig.viewsInitFunc?.();
86
131
  }
87
-
88
- protected async configureViewsServices() {
89
- const viewsConfigType = this.apiConfig.viewsConfig.$type;
90
- if (viewsConfigType === 'ViewsService' || viewsConfigType === 'WorkbenchService') {
91
- if (this.apiConfig.$type === 'classic') {
92
- this.performErrorHandling(`View Service Type "${viewsConfigType}" cannot be used with classic configuration.`);
93
- }
94
- if (this.apiConfig.viewsConfig.htmlContainer === undefined) {
95
- this.performErrorHandling(`View Service Type "${viewsConfigType}" requires a HTMLElement.`);
96
- }
97
- }
98
-
99
- const envEnhanced = getEnhancedMonacoEnvironment();
100
- if (viewsConfigType === 'ViewsService') {
101
- const getViewsServiceOverride = (await import('@codingame/monaco-vscode-views-service-override')).default;
102
- mergeServices(this.apiConfig.serviceOverrides, {
103
- ...getViewsServiceOverride(this.apiConfig.viewsConfig.openEditorFunc ?? useOpenEditorStub)
104
- });
105
- envEnhanced.viewServiceType = 'ViewsService';
106
- } else if (viewsConfigType === 'WorkbenchService') {
107
- const getWorkbenchServiceOverride = (await import('@codingame/monaco-vscode-workbench-service-override')).default;
108
- mergeServices(this.apiConfig.serviceOverrides, {
109
- ...getWorkbenchServiceOverride()
110
- });
111
- envEnhanced.viewServiceType = 'WorkbenchService';
112
- } else {
113
- const getEditorServiceOverride = (await import('@codingame/monaco-vscode-editor-service-override')).default;
114
- mergeServices(this.apiConfig.serviceOverrides, {
115
- ...getEditorServiceOverride(this.apiConfig.viewsConfig.openEditorFunc ?? useOpenEditorStub)
116
- });
117
- envEnhanced.viewServiceType = 'EditorService';
118
- }
119
- }
120
-
121
- protected async applyViewsPostConfig() {
122
- const viewsConfigType = this.apiConfig.viewsConfig.$type;
123
- if (viewsConfigType === 'ViewsService' || viewsConfigType === 'WorkbenchService') {
124
- this.apiConfig.viewsConfig.htmlAugmentationInstructions?.(this.apiConfig.viewsConfig.htmlContainer);
125
- await this.apiConfig.viewsConfig.viewsInitFunc?.();
132
+ }
133
+
134
+ /**
135
+ * Adding the default workspace config if not provided
136
+ */
137
+ protected configureWorkspaceConfig() {
138
+ this.apiConfig.workspaceConfig ??= {
139
+ workspaceProvider: {
140
+ trusted: true,
141
+ workspace: {
142
+ workspaceUri: vscode.Uri.file('/workspace.code-workspace')
143
+ },
144
+ async open() {
145
+ window.open(window.location.href);
146
+ return true;
126
147
  }
148
+ }
149
+ };
150
+ }
151
+
152
+ /**
153
+ * Set the log-level via the development settings.
154
+ * VSCode developmentOptions are read-only. There are no functions exposed to set options directly.
155
+ * Therefore the Object properties need to be manipulated directly via Object.assign.
156
+ */
157
+ protected configureDevLogLevel() {
158
+ const devLogLevel = this.apiConfig.workspaceConfig?.developmentOptions?.logLevel;
159
+ if (devLogLevel === undefined) {
160
+ const devOptions: Record<string, unknown> = {
161
+ ...this.apiConfig.workspaceConfig!.developmentOptions
162
+ };
163
+ devOptions.logLevel = this.apiConfig.logLevel;
164
+ (this.apiConfig.workspaceConfig!.developmentOptions as Record<string, unknown>) = Object.assign({}, devOptions);
165
+ } else if (devLogLevel !== this.apiConfig.logLevel) {
166
+ this.performErrorHandling(
167
+ `You have configured mismatching logLevels: ${this.apiConfig.logLevel} (wrapperConfig) ${devLogLevel} (workspaceConfig.developmentOptions)`
168
+ );
169
+ } else {
170
+ this.logger.debug('Development log level and api log level are in aligned.');
127
171
  }
128
-
129
- /**
130
- * Adding the default workspace config if not provided
131
- */
132
- protected configureWorkspaceConfig() {
133
- if (this.apiConfig.workspaceConfig === undefined) {
134
- this.apiConfig.workspaceConfig = {
135
- workspaceProvider: {
136
- trusted: true,
137
- workspace: {
138
- workspaceUri: vscode.Uri.file('/workspace.code-workspace')
139
- },
140
- async open() {
141
- window.open(window.location.href);
142
- return true;
143
- }
144
- },
145
- };
146
- }
172
+ }
173
+
174
+ /**
175
+ * enable semantic highlighting in the default configuration
176
+ */
177
+ protected configureSemanticHighlighting() {
178
+ if (this.apiConfig.advanced?.enforceSemanticHighlighting === true) {
179
+ const configDefaults: Record<string, unknown> = {
180
+ ...(this.apiConfig.workspaceConfig!.configurationDefaults ?? {})
181
+ };
182
+ configDefaults['editor.semanticHighlighting.enabled'] = true;
183
+ (this.apiConfig.workspaceConfig!.configurationDefaults as Record<string, unknown>) = Object.assign({}, configDefaults);
147
184
  }
185
+ }
148
186
 
149
- /**
150
- * Set the log-level via the development settings.
151
- * VSCode developmentOptions are read-only. There are no functions exposed to set options directly.
152
- * Therefore the Object properties need to be manipulated directly via Object.assign.
153
- */
154
- protected configureDevLogLevel() {
155
- const devLogLevel = this.apiConfig.workspaceConfig?.developmentOptions?.logLevel;
156
- if (devLogLevel === undefined) {
157
- const devOptions: Record<string, unknown> = {
158
- ...this.apiConfig.workspaceConfig!.developmentOptions
159
- };
160
- devOptions.logLevel = this.apiConfig.logLevel;
161
- (this.apiConfig.workspaceConfig!.developmentOptions as Record<string, unknown>) = Object.assign({}, devOptions);
162
- } else if (devLogLevel !== this.apiConfig.logLevel) {
163
- this.performErrorHandling(`You have configured mismatching logLevels: ${this.apiConfig.logLevel} (wrapperConfig) ${devLogLevel} (workspaceConfig.developmentOptions)`);
164
- } else {
165
- this.logger.debug('Development log level and api log level are in aligned.');
166
- }
187
+ protected async initUserConfiguration() {
188
+ if (this.apiConfig.userConfiguration?.json !== undefined) {
189
+ await initUserConfiguration(this.apiConfig.userConfiguration.json);
167
190
  }
191
+ }
168
192
 
169
- /**
170
- * enable semantic highlighting in the default configuration
171
- */
172
- protected configureSemanticHighlighting() {
173
- if (this.apiConfig.advanced?.enforceSemanticHighlighting === true) {
174
- const configDefaults: Record<string, unknown> = {
175
- ...this.apiConfig.workspaceConfig!.configurationDefaults ?? {}
176
- };
177
- configDefaults['editor.semanticHighlighting.enabled'] = true;
178
- (this.apiConfig.workspaceConfig!.configurationDefaults as Record<string, unknown>) = Object.assign({}, configDefaults);
179
- }
193
+ protected async supplyRequiredServices() {
194
+ return {
195
+ ...getConfigurationServiceOverride(),
196
+ ...getLogServiceOverride(),
197
+ ...getModelServiceOverride()
198
+ };
199
+ }
200
+
201
+ protected checkServiceConsistency() {
202
+ const userServices = this.apiConfig.serviceOverrides;
203
+ const haveThemeService = Object.keys(userServices).includes('themeService');
204
+ const haveTextmateService = Object.keys(userServices).includes('textMateTokenizationFeature');
205
+ const haveMarkersService = Object.keys(userServices).includes('markersService');
206
+ const haveViewsService = Object.keys(userServices).includes('viewsService');
207
+
208
+ // theme requires textmate
209
+ if (haveThemeService && !haveTextmateService) {
210
+ this.performErrorHandling('"theme" service requires "textmate" service. Please add it to the "userServices".');
180
211
  }
181
212
 
182
- protected async initUserConfiguration() {
183
- if (this.apiConfig.userConfiguration?.json !== undefined) {
184
- await initUserConfiguration(this.apiConfig.userConfiguration.json);
185
- }
213
+ // markers service requires views service
214
+ if (haveMarkersService && !haveViewsService) {
215
+ this.performErrorHandling('"markers" service requires "views" service. Please add it to the "userServices".');
186
216
  }
187
-
188
- protected async supplyRequiredServices() {
189
- return {
190
- ...getConfigurationServiceOverride(),
191
- ...getLogServiceOverride(),
192
- ...getModelServiceOverride()
193
- };
217
+ }
218
+
219
+ /**
220
+ * monaco-vscode-api automatically loads the following services:
221
+ * - layout
222
+ * - environment
223
+ * - extension
224
+ * - files
225
+ * - quickAccess
226
+ * monaco-languageclient always adds the following services:
227
+ * - languages
228
+ * - log
229
+ * - model
230
+ * - configuration services
231
+ */
232
+ protected async initAllServices(performServiceConsistencyChecks?: boolean) {
233
+ const services = await this.supplyRequiredServices();
234
+
235
+ mergeServices(services, this.apiConfig.serviceOverrides);
236
+ if (this.apiConfig.advanced?.loadExtensionServices === undefined ? true : this.apiConfig.advanced.loadExtensionServices === true) {
237
+ const { default: getExtensionServiceOverride } = await import('@codingame/monaco-vscode-extensions-service-override');
238
+ mergeServices(services, {
239
+ ...getExtensionServiceOverride({
240
+ enableWorkerExtensionHost: this.apiConfig.advanced?.enableExtHostWorker === true
241
+ })
242
+ });
194
243
  }
195
244
 
196
- protected checkServiceConsistency() {
197
- const userServices = this.apiConfig.serviceOverrides;
198
- const haveThemeService = Object.keys(userServices).includes('themeService');
199
- const haveTextmateService = Object.keys(userServices).includes('textMateTokenizationFeature');
200
- const haveMarkersService = Object.keys(userServices).includes('markersService');
201
- const haveViewsService = Object.keys(userServices).includes('viewsService');
202
-
203
- // theme requires textmate
204
- if (haveThemeService && !haveTextmateService) {
205
- this.performErrorHandling('"theme" service requires "textmate" service. Please add it to the "userServices".');
206
- }
245
+ reportServiceLoading(services, this.logger);
207
246
 
208
- // markers service requires views service
209
- if (haveMarkersService && !haveViewsService) {
210
- this.performErrorHandling('"markers" service requires "views" service. Please add it to the "userServices".');
211
- }
247
+ if (performServiceConsistencyChecks ?? true) {
248
+ this.checkServiceConsistency();
212
249
  }
213
250
 
214
- /**
215
- * monaco-vscode-api automatically loads the following services:
216
- * - layout
217
- * - environment
218
- * - extension
219
- * - files
220
- * - quickAccess
221
- * monaco-languageclient always adds the following services:
222
- * - languages
223
- * - log
224
- * - model
225
- * - configuration services
226
- */
227
- protected async initAllServices(performServiceConsistencyChecks?: boolean) {
228
- const services = await this.supplyRequiredServices();
229
-
230
- mergeServices(services, this.apiConfig.serviceOverrides);
231
- if (this.apiConfig.advanced?.loadExtensionServices === undefined ? true : this.apiConfig.advanced.loadExtensionServices === true) {
232
- const { default: getExtensionServiceOverride } = await import('@codingame/monaco-vscode-extensions-service-override');
233
- mergeServices(services, {
234
- ...getExtensionServiceOverride({
235
- enableWorkerExtensionHost: this.apiConfig.advanced?.enableExtHostWorker === true
236
- })
237
- });
238
- }
239
-
240
- reportServiceLoading(services, this.logger);
241
-
242
- if (performServiceConsistencyChecks ?? true) {
243
- this.checkServiceConsistency();
244
- }
245
-
246
- if (this.apiConfig.viewsConfig.$type === 'ViewsService' || this.apiConfig.viewsConfig.$type === 'WorkbenchService') {
247
- await initialize(services, this.apiConfig.viewsConfig.htmlContainer, this.apiConfig.workspaceConfig, this.apiConfig.envOptions);
248
- } else {
249
- await initialize(services, undefined, this.apiConfig.workspaceConfig, this.apiConfig.envOptions);
250
- }
251
-
252
- setUnexpectedErrorHandler((e) => {
253
- const message = 'Unexpected error';
254
- if (this.logger.getLevel() >= LogLevel.Error) {
255
- this.logger.error(message, e);
256
- }
257
- return new Error(message);
258
- });
251
+ if (this.apiConfig.viewsConfig.$type === 'ViewsService' || this.apiConfig.viewsConfig.$type === 'WorkbenchService') {
252
+ await initialize(services, this.apiConfig.viewsConfig.htmlContainer, this.apiConfig.workspaceConfig, this.apiConfig.envOptions);
253
+ } else {
254
+ await initialize(services, undefined, this.apiConfig.workspaceConfig, this.apiConfig.envOptions);
259
255
  }
260
256
 
261
- async initExtensions(): Promise<void> {
262
- if (this.apiConfig.$type === 'extended' && (this.apiConfig.advanced?.loadThemes === undefined ? true : this.apiConfig.advanced.loadThemes === true)) {
263
- await import('@codingame/monaco-vscode-theme-defaults-default-extension');
264
- }
265
-
266
- const extensions = this.apiConfig.extensions;
267
- if (this.apiConfig.extensions) {
268
- const allPromises: Array<Promise<void>> = [];
269
- const extensionIds: string[] = [];
270
- getBuiltinExtensions().forEach((ext) => {
271
- extensionIds.push(ext.identifier.id);
272
- });
273
- for (const extensionConfig of extensions ?? []) {
274
- if (!extensionIds.includes(`${extensionConfig.config.publisher}.${extensionConfig.config.name}`)) {
275
- allPromises.push(this.initExtension(extensionConfig, extensionIds));
276
- }
277
- }
278
- await Promise.all(allPromises);
279
- }
257
+ setUnexpectedErrorHandler((e) => {
258
+ const message = 'Unexpected error';
259
+ if (this.logger.getLevel() !== LogLevel.Off) {
260
+ this.logger.error(message, e);
261
+ }
262
+ });
263
+ }
264
+
265
+ async initExtensions(): Promise<void> {
266
+ if (
267
+ this.apiConfig.$type === 'extended' &&
268
+ (this.apiConfig.advanced?.loadThemes === undefined ? true : this.apiConfig.advanced.loadThemes === true)
269
+ ) {
270
+ await import('@codingame/monaco-vscode-theme-defaults-default-extension');
280
271
  }
281
272
 
282
- protected initExtension(extensionConfig: ExtensionConfig, extensionIds: string[]): Promise<void> {
273
+ const extensions = this.apiConfig.extensions;
274
+ if (this.apiConfig.extensions !== undefined && this.apiConfig.extensions.length > 0) {
275
+ const allPromises: Array<Promise<void>> = [];
276
+ const extensionIds: string[] = [];
277
+ getBuiltinExtensions().forEach((ext) => {
278
+ extensionIds.push(ext.identifier.id);
279
+ });
280
+ for (const extensionConfig of extensions ?? []) {
283
281
  if (!extensionIds.includes(`${extensionConfig.config.publisher}.${extensionConfig.config.name}`)) {
284
- const manifest = extensionConfig.config as IExtensionManifest;
285
- const extRegResult = registerExtension(manifest, ExtensionHostKind.LocalProcess);
286
- this.extensionRegisterResults.set(manifest.name, extRegResult);
287
- if (extensionConfig.filesOrContents && Object.hasOwn(extRegResult, 'registerFileUrl')) {
288
- for (const entry of extensionConfig.filesOrContents) {
289
- this.disposableStore.add(extRegResult.registerFileUrl(entry[0], encodeStringOrUrlToDataUrl(entry[1])));
290
- }
291
- }
292
- return extRegResult.whenReady();
293
- } else {
294
- return Promise.resolve();
282
+ allPromises.push(this.initExtension(extensionConfig, extensionIds));
295
283
  }
284
+ }
285
+ await Promise.all(allPromises);
296
286
  }
297
-
298
- protected markGlobalInit() {
299
- this.logger.debug('markGlobalInit');
300
-
301
- const envEnhanced = getEnhancedMonacoEnvironment();
302
- envEnhanced.vscodeApiGlobalInitAwait = new Promise<void>((resolve) => {
303
- envEnhanced.vscodeApiGlobalInitResolve = resolve;
304
- });
287
+ }
288
+
289
+ protected initExtension(extensionConfig: ExtensionConfig, extensionIds: string[]): Promise<void> {
290
+ if (!extensionIds.includes(`${extensionConfig.config.publisher}.${extensionConfig.config.name}`)) {
291
+ const manifest = extensionConfig.config as IExtensionManifest;
292
+ const extRegResult = registerExtension(manifest, ExtensionHostKind.LocalProcess);
293
+ this.extensionRegisterResults.set(manifest.name, extRegResult);
294
+ if (extensionConfig.filesOrContents !== undefined && Object.hasOwn(extRegResult, 'registerFileUrl')) {
295
+ for (const entry of extensionConfig.filesOrContents) {
296
+ this.disposableStore.add(extRegResult.registerFileUrl(entry[0], encodeStringOrUrlToDataUrl(entry[1])));
297
+ }
298
+ }
299
+ return extRegResult.whenReady();
300
+ } else {
301
+ return Promise.resolve();
305
302
  }
303
+ }
306
304
 
307
- protected markGlobalInitDone() {
308
- const envEnhanced = getEnhancedMonacoEnvironment();
309
- envEnhanced.vscodeApiGlobalInitResolve?.();
305
+ protected markGlobalInit() {
306
+ this.logger.debug('markGlobalInit');
310
307
 
311
- envEnhanced.vscodeApiInitialised = true;
312
- envEnhanced.vscodeApiGlobalInitAwait = undefined;
313
- envEnhanced.vscodeApiGlobalInitResolve = undefined;
314
- this.logger.debug('markGlobalInitDone');
315
- }
308
+ const envEnhanced = getEnhancedMonacoEnvironment();
309
+ envEnhanced.vscodeApiGlobalInitAwait = new Promise<void>((resolve) => {
310
+ envEnhanced.vscodeApiGlobalInitResolve = resolve;
311
+ });
312
+ }
316
313
 
317
- async start(startInstructions?: StartInstructions): Promise<void> {
318
- const envEnhanced = getEnhancedMonacoEnvironment();
319
- if (envEnhanced.vscodeApiInitialised === true) {
320
- this.logger.warn('Initialization of monaco-vscode api can only performed once!');
321
- } else {
322
- if (!(envEnhanced.vscodeApiInitialising === true)) {
314
+ protected markGlobalInitDone() {
315
+ const envEnhanced = getEnhancedMonacoEnvironment();
316
+ envEnhanced.vscodeApiGlobalInitResolve?.();
323
317
 
324
- envEnhanced.vscodeApiInitialising = true;
325
- this.markGlobalInit();
318
+ envEnhanced.vscodeApiInitialised = true;
319
+ envEnhanced.vscodeApiGlobalInitAwait = undefined;
320
+ envEnhanced.vscodeApiGlobalInitResolve = undefined;
321
+ this.logger.debug('markGlobalInitDone');
322
+ }
326
323
 
327
- // ensures "vscodeApiConfig.workspaceConfig" is available
328
- this.configureWorkspaceConfig();
324
+ async start(startInstructions?: StartInstructions): Promise<void> {
325
+ const envEnhanced = getEnhancedMonacoEnvironment();
326
+ if (envEnhanced.vscodeApiInitialised === true) {
327
+ this.logger.warn('Initialization of monaco-vscode api can only performed once!');
328
+ } else {
329
+ if (!(envEnhanced.vscodeApiInitialising === true)) {
330
+ envEnhanced.vscodeApiInitialising = true;
331
+ this.markGlobalInit();
329
332
 
330
- // ensure logging and development logging options are in-line
331
- this.configureDevLogLevel();
332
- this.logger.info(`Initializing monaco-vscode api. Caller: ${startInstructions?.caller ?? 'unknown'}`);
333
+ // ensures "vscodeApiConfig.workspaceConfig" is available
334
+ this.configureWorkspaceConfig();
333
335
 
334
- await this.configureMonacoWorkers();
336
+ // ensure logging and development logging options are in-line
337
+ this.configureDevLogLevel();
338
+ this.logger.info(`Initializing monaco-vscode api. Caller: ${startInstructions?.caller ?? 'unknown'}`);
335
339
 
336
- // ensure either classic (monarch) or textmate (extended) highlighting is used
337
- await this.configureHighlightingServices();
340
+ this.configureMonacoWorkers();
338
341
 
339
- // ensure one of the three potential view services are configured
340
- await this.configureViewsServices();
342
+ // ensure either classic (monarch) or textmate (extended) highlighting is used
343
+ await this.configureHighlightingServices();
341
344
 
342
- // enforce semantic highlighting if configured
343
- this.configureSemanticHighlighting();
345
+ // ensure one of the three potential view services are configured
346
+ await this.configureViewsServices();
344
347
 
345
- await this.initUserConfiguration();
348
+ // enforce semantic highlighting if configured
349
+ this.configureSemanticHighlighting();
346
350
 
347
- await this.initAllServices(startInstructions?.performServiceConsistencyChecks);
351
+ await this.initUserConfiguration();
348
352
 
349
- await this.applyViewsPostConfig();
353
+ await this.initAllServices(startInstructions?.performServiceConsistencyChecks);
350
354
 
351
- await this.initExtensions();
355
+ await this.applyViewsPostConfig();
352
356
 
353
- this.markGlobalInitDone();
354
- this.logger.debug('Initialization of monaco-vscode api completed successfully.');
355
- } else {
356
- this.logger.debug('Initialization of monaco-vscode api is already ongoing.');
357
- }
358
- }
357
+ await this.initExtensions();
358
+
359
+ this.markGlobalInitDone();
360
+ this.logger.debug('Initialization of monaco-vscode api completed successfully.');
361
+ } else {
362
+ this.logger.debug('Initialization of monaco-vscode api is already ongoing.');
363
+ }
359
364
  }
365
+ }
360
366
 
361
- dispose() {
362
- this.extensionRegisterResults.forEach((k) => k.dispose());
363
- this.disposableStore.dispose();
367
+ dispose() {
368
+ this.extensionRegisterResults.forEach((k) => k.dispose());
369
+ this.disposableStore.dispose();
364
370
 
365
- // re-create disposable stores
366
- this.disposableStore = new DisposableStore();
367
- }
371
+ // re-create disposable stores
372
+ this.disposableStore = new DisposableStore();
373
+ }
368
374
  }