2.4.12 • Published 4 months ago

@volar/monaco v2.4.12

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

@volar/monaco

@volar/monaco is used to bridge the language capabilities implemented based on Volar.js to Monaco Editor, you can expect:

  • Support IntelliSense, Diagnosis, Formatting
  • Language behavior is consistent with regular IDEs
  • Optimized Performance
  • Missing package types are automatically fetched from CDN

It should be noted that this package does not participate in syntax highlighting support and language configuration.

We assume you already know:

  • How to create a Monaco Editor
  • How to work with Web Worker

Usage

Setup worker

// my-lang.worker.ts
import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
import type * as monaco from 'monaco-editor-core';
import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';

self.onmessage = () => {
	worker.initialize((ctx: monaco.worker.IWorkerContext) => {
		const env: ServiceEnvironment = {
			workspaceFolder: 'file:///',
		};
		return createSimpleWorkerService({
			workerContext: ctx,
			env,
			languagePlugins: [
				// ...
			],
			servicePlugins: [
				// ...
			],
		});
	});
};

Add TypeScript Support

import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
import type * as monaco from 'monaco-editor-core';
-import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
+import {
+	createTypeScriptWorkerService,
+	ServiceEnvironment,
+} from '@volar/monaco/worker';
+import * as ts from 'typescript';
+import { create as createTypeScriptService } from 'volar-service-typescript';

self.onmessage = () => {
	worker.initialize((ctx: monaco.worker.IWorkerContext) => {
		const env: ServiceEnvironment = {
			workspaceFolder: 'file:///',
+			typescript: {
+				uriToFileName: uri => uri.substring('file://'.length),
+				fileNameToUri: fileName => 'file://' + fileName,
+			},
		};
-		return createSimpleWorkerService({
+		return createTypeScriptWorkerService({
+			typescript: ts,
+			compilerOptions: {
+				// ...
+			},
			workerContext: ctx,
			env,
			languagePlugins: [
				// ...
			],
			servicePlugins: [
				// ...
+				createTypeScriptService(ts),
			],
		});
	});
};

Add ATA Support for TypeScript

import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
import type * as monaco from 'monaco-editor-core';
import {
	createTypeScriptWorkerService,
	ServiceEnvironment,
+	activateAutomaticTypeAcquisition,
} from '@volar/monaco/worker';
import * as ts from 'typescript';
import { create as createTypeScriptService } from 'volar-service-typescript';

self.onmessage = () => {
	worker.initialize((ctx: monaco.worker.IWorkerContext) => {
		const env: ServiceEnvironment = {
			workspaceFolder: 'file:///',
			typescript: {
				uriToFileName: uri => uri.substring('file://'.length),
				fileNameToUri: fileName => 'file://' + fileName,
			},
		};
+		activateAutomaticTypeAcquisition(env);
		return createTypeScriptWorkerService({
			typescript: ts,
			compilerOptions: {
				// ...
			},
			workerContext: ctx,
			env,
			languagePlugins: [
				// ...
			],
			servicePlugins: [
				// ...
				createTypeScriptService(ts),
			],
		});
	});
};

Add worker loader to global env

import editorWorker from 'monaco-editor-core/esm/vs/editor/editor.worker?worker';
import myWorker from './my-lang.worker?worker';

(self as any).MonacoEnvironment = {
	getWorker(_: any, label: string) {
		if (label === 'my-lang') {
			return new myWorker();
		}
		return new editorWorker();
	}
}

Setup Language Features and Diagnostics

import type { LanguageService } from '@volar/language-service';
import { editor, languages, Uri } from 'monaco-editor-core';
import { activateMarkers, activateAutoInsertion, registerProviders } from '@volar/monaco';

languages.register({ id: 'my-lang', extensions: ['.my-lang'] });

languages.onLanguage('my-lang', () => {
	const worker = editor.createWebWorker<LanguageService>({
		moduleId: 'vs/language/my-lang/myLangWorker',
		label: 'my-lang',
	});
	activateMarkers(
		worker,
		['my-lang'],
		'my-lang-markers-owner',
		// sync files
		() => [Uri.file('/Foo.my-lang'), Uri.file('/Bar.my-lang')],
		editor
	);
	// auto close tags
	activateAutoInsertion(
		worker,
		['my-lang'],
		// sync files
		() => [Uri.file('/Foo.my-lang'), Uri.file('/Bar.my-lang')],
		editor
	);
	registerProviders(worker, ['my-lang'], languages)
});

Samples

2.4.12

4 months ago

2.4.11

7 months ago

2.4.10

8 months ago

2.4.9

8 months ago

2.4.7

9 months ago

2.4.8

9 months ago

2.4.6

9 months ago

2.4.1

11 months ago

2.4.3

10 months ago

2.4.2

11 months ago

2.4.5

10 months ago

2.4.4

10 months ago

2.4.0

11 months ago

2.4.0-alpha.20

11 months ago

2.4.0-alpha.19

11 months ago

2.4.0-alpha.18

12 months ago

2.3.5-alpha.1

1 year ago

2.3.5-alpha.2

1 year ago

2.4.0-alpha.10

1 year ago

2.3.2

1 year ago

2.4.0-alpha.11

1 year ago

2.3.1

1 year ago

2.4.0-alpha.12

1 year ago

2.3.4

1 year ago

2.4.0-alpha.13

1 year ago

2.3.3

1 year ago

2.4.0-alpha.14

1 year ago

2.4.0-alpha.15

1 year ago

2.4.0-alpha.16

1 year ago

2.4.0-alpha.17

12 months ago

2.4.0-alpha.0

1 year ago

2.4.0-alpha.2

1 year ago

2.4.0-alpha.1

1 year ago

2.4.0-alpha.4

1 year ago

2.4.0-alpha.3

1 year ago

2.4.0-alpha.6

1 year ago

2.4.0-alpha.5

1 year ago

2.4.0-alpha.8

1 year ago

2.4.0-alpha.7

1 year ago

2.4.0-alpha.9

1 year ago

2.3.0-alpha.8

1 year ago

2.3.0-alpha.9

1 year ago

2.3.0

1 year ago

2.3.0-alpha.10

1 year ago

2.3.0-alpha.13

1 year ago

2.3.0-alpha.14

1 year ago

2.3.0-alpha.11

1 year ago

2.3.0-alpha.12

1 year ago

2.3.0-alpha.15

1 year ago

2.3.0-alpha.6

1 year ago

2.3.0-alpha.7

1 year ago

2.3.0-alpha.2

1 year ago

2.3.0-alpha.3

1 year ago

2.3.0-alpha.0

1 year ago

2.3.0-alpha.1

1 year ago

2.3.0-alpha.4

1 year ago

2.3.0-alpha.5

1 year ago

2.2.5

1 year ago

2.2.3

1 year ago

2.2.4

1 year ago

2.2.2

1 year ago

2.2.1

1 year ago

2.2.0

1 year ago

2.2.0-alpha.11

1 year ago

2.2.0-alpha.12

1 year ago

2.2.0-alpha.10

1 year ago

2.2.0-alpha.9

1 year ago

2.2.0-alpha.8

1 year ago

2.2.0-alpha.7

1 year ago

2.2.0-alpha.6

1 year ago

2.2.0-alpha.5

1 year ago

2.2.0-alpha.4

1 year ago

2.2.0-alpha.3

1 year ago

2.2.0-alpha.2

1 year ago

2.1.6

1 year ago

2.2.0-alpha.1

1 year ago

2.2.0-alpha.0

1 year ago

2.1.5

1 year ago

2.1.4

1 year ago

2.1.3

1 year ago

2.1.2

1 year ago

2.1.1

1 year ago

2.1.0

1 year ago

2.0.4

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

2.0.0-alpha.14

1 year ago

2.0.0-alpha.13

2 years ago

2.0.0-alpha.11

2 years ago

2.0.0-alpha.12

2 years ago

2.0.0-alpha.8

2 years ago

2.0.0-alpha.9

2 years ago

2.0.0-alpha.10

2 years ago

2.0.0-alpha.7

2 years ago

2.0.0-alpha.6

2 years ago

2.0.0-alpha.5

2 years ago

2.0.0-alpha.4

2 years ago

2.0.0-alpha.3

2 years ago

2.0.0-alpha.1

2 years ago

2.0.0-alpha.2

2 years ago

2.0.0-alpha.0

2 years ago

1.10.5

2 years ago

1.10.4

2 years ago

1.10.3

2 years ago

1.10.2

2 years ago

1.10.9

2 years ago

1.10.8

2 years ago

1.10.7

2 years ago

1.10.6

2 years ago

1.8.2

2 years ago

1.8.1

2 years ago

1.8.0

2 years ago

1.9.2

2 years ago

1.11.0

2 years ago

1.11.1

2 years ago

1.9.1

2 years ago

1.9.0

2 years ago

1.10.10-alpha.1

2 years ago

1.10.10-alpha.0

2 years ago

1.10.10

2 years ago

1.8.3

2 years ago

1.10.1

2 years ago

1.10.0

2 years ago

1.7.10

2 years ago

1.7.9

2 years ago

1.6.5-patch.1

2 years ago

1.6.5-patch.2

2 years ago

1.6.4

2 years ago

1.6.3

2 years ago

1.7.8

2 years ago

1.7.7

2 years ago

1.7.6

2 years ago

1.7.5

2 years ago

1.7.4

2 years ago

1.7.3

2 years ago

1.7.2

2 years ago

1.7.1

2 years ago

1.7.0

2 years ago

1.6.9

2 years ago

1.6.8

2 years ago

1.6.7

2 years ago

1.6.6

2 years ago

1.6.5

2 years ago

1.6.2

2 years ago

1.6.1

2 years ago

1.6.0

2 years ago

1.5.4

2 years ago

1.5.3

2 years ago

1.5.2

2 years ago

1.5.1

2 years ago

1.5.0

2 years ago

1.5.0-alpha.0

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.4.0-alpha.12

2 years ago

1.4.0-alpha.11

2 years ago

1.4.0-alpha.10

2 years ago

1.4.0-alpha.9

2 years ago

1.4.0-alpha.8

2 years ago

1.4.0-alpha.7

2 years ago

1.4.0-alpha.6

2 years ago

1.4.0-alpha.5

2 years ago

1.4.0-alpha.4

2 years ago

1.4.0-alpha.3

2 years ago

1.4.0-alpha.2

2 years ago

1.4.0-alpha.1

2 years ago

1.4.0-alpha.0

2 years ago

1.3.0-alpha.3

2 years ago

1.3.0-alpha.2

2 years ago

1.3.0-alpha.1

2 years ago

1.3.0-alpha.0

2 years ago