Skip to content

Commit 0ec9824

Browse files
committed
#1038 Provide Worker Label type definition for extended and classic
1 parent 236b974 commit 0ec9824

10 files changed

Lines changed: 84 additions & 46 deletions

File tree

.github/workflows/verify.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ jobs:
2828
run: |
2929
npm run report:versions
3030
31+
- name: Build
32+
shell: bash
33+
run: |
34+
npm run build
35+
3136
- name: Execute verification
3237
shell: bash
3338
run: |

packages/client/src/worker/index.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,39 @@ export class Worker {
1818

1919
export type WorkerLoader = (() => Worker) | undefined;
2020

21+
export type PossibleWorkerLabelsExtended =
22+
| 'editorWorkerService'
23+
| 'extensionHostWorkerMain'
24+
| 'TextMateWorker'
25+
| 'OutputLinkDetectionWorker'
26+
| 'LanguageDetectionWorker'
27+
| 'NotebookEditorWorker'
28+
| 'LocalFileSearchWorker';
29+
30+
export type PossibleWorkerLabelsClassic = 'editorWorkerService' | 'css' | 'html' | 'json' | 'javascript' | 'typescript';
31+
2132
export interface WorkerFactoryConfig {
22-
workerLoaders?: Partial<Record<string, WorkerLoader>>;
33+
workerLoaders?: Partial<Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>>;
2334
logger?: ILogger;
2435
}
2536

2637
export const useWorkerFactory = (config: WorkerFactoryConfig) => {
2738
const envEnhanced = getEnhancedMonacoEnvironment();
2839

29-
envEnhanced.getWorkerUrl = (workerId: string, label: string) => {
40+
envEnhanced.getWorkerUrl = (workerId: string, label: PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic) => {
3041
config.logger?.info(`getWorkerUrl: workerId: ${workerId} label: ${label}`);
3142
return config.workerLoaders?.[label]?.().url.toString();
3243
};
3344

34-
envEnhanced.getWorkerOptions = (moduleId: string, label: string) => {
45+
envEnhanced.getWorkerOptions = (moduleId: string, label: PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic) => {
3546
config.logger?.info(`getWorkerOptions: moduleId: ${moduleId} label: ${label}`);
3647
return config.workerLoaders?.[label]?.().options;
3748
};
3849
};
3950

40-
export const defineDefaultWorkerLoaders: () => Partial<Record<string, WorkerLoader>> = () => {
51+
export const defineDefaultWorkerLoaders: () => Partial<
52+
Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>
53+
> = () => {
4154
const defaultEditorWorkerService = () =>
4255
new Worker(new URL('@codingame/monaco-vscode-editor-api/esm/vs/editor/editor.worker.js', import.meta.url), { type: 'module' });
4356
const defaultExtensionHostWorkerMain = () =>

packages/client/test/support/helper-classic.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
* ------------------------------------------------------------------------------------------ */
55

66
import type { ILogger } from '@codingame/monaco-vscode-log-service-override';
7-
import { useWorkerFactory, Worker, type WorkerLoader } from 'monaco-languageclient/workerFactory';
7+
import {
8+
useWorkerFactory,
9+
Worker,
10+
type PossibleWorkerLabelsClassic,
11+
type PossibleWorkerLabelsExtended,
12+
type WorkerLoader
13+
} from 'monaco-languageclient/workerFactory';
814

9-
const workerResolver: Map<string, (value: void | PromiseLike<void>) => void> = new Map();
10-
const workerPromises: Map<string, Promise<void>> = new Map();
11-
export const createWorkerPromises = (keys: string[]) => {
15+
const workerResolver: Map<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, (value: void | PromiseLike<void>) => void> =
16+
new Map();
17+
const workerPromises: Map<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, Promise<void>> = new Map();
18+
export const createWorkerPromises = (keys: Array<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic>) => {
1219
workerResolver.clear();
1320
workerPromises.clear();
1421
for (const key of keys) {
@@ -23,46 +30,46 @@ export const awaitWorkerPromises = () => {
2330
return Promise.all([...workerPromises.values()]);
2431
};
2532

26-
const pushAndPrintLastWorker = (lastWorker: string) => {
33+
const pushAndPrintLastWorker = (lastWorker: PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic) => {
2734
console.log(`Called: ${lastWorker}\n`);
2835
workerResolver.get(lastWorker)?.();
2936
};
3037

31-
const defineClassicWorkers: () => Partial<Record<string, WorkerLoader>> = () => {
38+
const defineClassicWorkers: () => Partial<Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>> = () => {
3239
const editorWorkerServiceWorker = () => {
3340
const workerUrl = new URL('@codingame/monaco-vscode-editor-api/esm/vs/editor/editor.worker.js', import.meta.url);
3441
const worker = new Worker(workerUrl, {
3542
type: 'module'
3643
});
37-
pushAndPrintLastWorker('editorWorker');
44+
pushAndPrintLastWorker('editorWorkerService');
3845
return worker;
3946
};
4047

4148
const cssWorker = () => {
4249
const workerUrl = new URL('@codingame/monaco-vscode-standalone-css-language-features', import.meta.url);
4350
const worker = new Worker(workerUrl, { type: 'module' });
44-
pushAndPrintLastWorker('cssWorker');
51+
pushAndPrintLastWorker('css');
4552
return worker;
4653
};
4754

4855
const jsonWorker = () => {
4956
const workerUrl = new URL('@codingame/monaco-vscode-standalone-json-language-features', import.meta.url);
5057
const worker = new Worker(workerUrl, { type: 'module' });
51-
pushAndPrintLastWorker('jsonWorker');
58+
pushAndPrintLastWorker('json');
5259
return worker;
5360
};
5461

5562
const htmlWorker = () => {
5663
const workerUrl = new URL('@codingame/monaco-vscode-standalone-html-language-features', import.meta.url);
5764
const worker = new Worker(workerUrl, { type: 'module' });
58-
pushAndPrintLastWorker('htmlWorker');
65+
pushAndPrintLastWorker('html');
5966
return worker;
6067
};
6168

6269
const tsWorker = () => {
6370
const workerUrl = new URL('@codingame/monaco-vscode-standalone-typescript-language-features', import.meta.url);
6471
const worker = new Worker(workerUrl, { type: 'module' });
65-
pushAndPrintLastWorker('tsWorker');
72+
pushAndPrintLastWorker('typescript');
6673
return worker;
6774
};
6875

packages/client/test/worker/workerLoaders.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ describe.concurrent('Test WorkerLoaders', { concurrent: false, tags: ['vscode']
3838
console.log(`editorWorkerUrl: ${editorWorkerUrl} worker: ${editorWorkerCheck !== undefined}\n`);
3939

4040
// default, expect editor worker to be loaded
41-
createWorkerPromises(['editorWorker']);
41+
createWorkerPromises(['editorWorkerService']);
4242
await editorApp.start(htmlContainer);
4343
expect(await awaitWorkerPromises()).toStrictEqual([undefined]);
4444
await editorApp.disposeModelRefs();
@@ -54,7 +54,7 @@ describe.concurrent('Test WorkerLoaders', { concurrent: false, tags: ['vscode']
5454
console.log(`jsonWorkerUrl: ${jsonWorkerUrl} worker: ${jsonWorkerCheck !== undefined}\n`);
5555

5656
// ts worker, expect ts worker and json worker to be loaded
57-
createWorkerPromises(['tsWorker', 'jsonWorker']);
57+
createWorkerPromises(['typescript', 'json']);
5858
await editorApp.updateCodeResources({
5959
modified: {
6060
text: '',
@@ -69,7 +69,7 @@ describe.concurrent('Test WorkerLoaders', { concurrent: false, tags: ['vscode']
6969
expect(cssWorkerCheck).toBeUndefined();
7070
console.log(`cssWorkerUrl: ${cssWorkerUrl} worker: ${cssWorkerCheck !== undefined}\n`);
7171

72-
createWorkerPromises(['cssWorker']);
72+
createWorkerPromises(['css']);
7373
await editorApp.updateCodeResources({
7474
modified: {
7575
text: '',
@@ -84,7 +84,7 @@ describe.concurrent('Test WorkerLoaders', { concurrent: false, tags: ['vscode']
8484
expect(htmlWorkerCheck).toBeUndefined();
8585
console.log(`htmlWorkerUrl: ${htmlWorkerUrl} worker: ${htmlWorkerCheck !== undefined}\n`);
8686

87-
createWorkerPromises(['htmlWorker']);
87+
createWorkerPromises(['html']);
8888
await editorApp.updateCodeResources({
8989
modified: {
9090
text: '',

verify/next/app/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
'use client';
77

88
import type { ILogger } from '@codingame/monaco-vscode-log-service-override';
9-
import type { WorkerLoader } from 'monaco-languageclient/workerFactory';
9+
import type { PossibleWorkerLabelsExtended, PossibleWorkerLabelsClassic, WorkerLoader } from 'monaco-languageclient/workerFactory';
1010
import dynamic from 'next/dynamic';
1111
import './views.editorOnly.css';
1212

@@ -25,7 +25,7 @@ export default function Page() {
2525
name: 'Langium LS'
2626
});
2727

28-
const defineWorkerLoaders: () => Partial<Record<string, WorkerLoader>> = () => {
28+
const defineWorkerLoaders: () => Partial<Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>> = () => {
2929
const defaultEditorWorkerService = () =>
3030
new mlcWFModule.Worker(new URL('../bundle/editorWorker/editor.worker.js', import.meta.url), { type: 'module' });
3131
// const defaultExtensionHostWorkerMain = () => new mlcWFModule.Worker(

verify/next/app/vite.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* ------------------------------------------------------------------------------------------ */
55

66
import type { ILogger } from '@codingame/monaco-vscode-log-service-override';
7-
import type { WorkerLoader } from 'monaco-languageclient/workerFactory';
7+
import type { PossibleWorkerLabelsClassic, PossibleWorkerLabelsExtended, WorkerLoader } from 'monaco-languageclient/workerFactory';
88
import ReactDOM from 'react-dom/client';
99

1010
export const createDynamicEditorComponent = async () => {
@@ -13,7 +13,7 @@ export const createDynamicEditorComponent = async () => {
1313

1414
const { workerFactory, setupLangiumClientExtended, openDocument, showDocument } = await import('./langium-dsl/config/extendedConfig.js');
1515

16-
const defineWorkerLoaders: () => Partial<Record<string, WorkerLoader>> = () => {
16+
const defineWorkerLoaders: () => Partial<Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>> = () => {
1717
const defaultEditorWorkerService = () =>
1818
new workerFactory.Worker(new URL('../bundle/editorWorker/editor.worker.js', import.meta.url), { type: 'module' });
1919
const defaultExtensionHostWorkerMain = () =>

verify/next/next-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
/// <reference types="next" />
77
/// <reference types="next/image-types/global" />
8-
import './.next/types/routes.d.ts';
8+
import './.next/dev/types/routes.d.ts';
99

1010
// NOTE: This file should not be edited
1111
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

verify/next/package-lock.json

Lines changed: 30 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

verify/next/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"type": "module",
44
"scripts": {
55
"clean": "shx rm -fr .next dist lib bundle *.tsbuildinfo",
6-
"verify": "npm ci && npm run dev",
6+
"verify": "npm ci && npm run dev:next",
77
"verify:ci": "npm ci && npm run build -d",
88
"dev:next": "npm run bundle && npm run build:tsc && next dev -p 8083",
99
"dev:vite": "npm run bundle && npm run build:tsc && vite --config vite.config.ts",
@@ -49,6 +49,8 @@
4949
"dompurify": "~3.4.11",
5050
"monaco-languageclient": "../../packages/client",
5151
"postcss": "8.5.15",
52+
"vscode-languageclient": "~10.1.0",
53+
"vscode-languageserver": "~10.1.0",
5254
"vscode-ws-jsonrpc": "../../packages/vscode-ws-jsonrpc"
5355
},
5456
"engines": {

verify/webpack/src/client/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
import '@codingame/monaco-vscode-json-default-extension';
77
import { runExtendedClient } from 'monaco-languageclient-examples';
88
import { jsontLsConfig } from 'monaco-languageclient-examples/json-client';
9-
import { Worker, WorkerLoader } from 'monaco-languageclient/workerFactory';
9+
import { PossibleWorkerLabelsClassic, PossibleWorkerLabelsExtended, Worker, WorkerLoader } from 'monaco-languageclient/workerFactory';
1010

1111
const runJsonWrapper = async () => {
1212
const helloJsonCode = `{
1313
"$schema": "http://json.schemastore.org/coffeelint",
1414
"line_endings": {"value": "unix"}
1515
}`;
1616

17-
const defineWorkerLoaders: () => Partial<Record<string, WorkerLoader>> = () => {
17+
const defineWorkerLoaders: () => Partial<Record<PossibleWorkerLabelsExtended | PossibleWorkerLabelsClassic, WorkerLoader>> = () => {
1818
const defaultEditorWorkerService = () => new Worker(new URL('../../bundle/editor.worker.js', import.meta.url), { type: 'module' });
1919
const defaultTextMateWorker = () => new Worker(new URL('../../bundle/worker.js', import.meta.url), { type: 'module' });
2020

0 commit comments

Comments
 (0)