@volar/monaco 1.6.9 → 1.7.1

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.
package/README.md CHANGED
@@ -36,23 +36,37 @@ self.onmessage = () => {
36
36
  };
37
37
  ```
38
38
 
39
- #### TypeScript Support
39
+ #### Add TypeScript Support
40
40
 
41
- ```ts
42
- import { createLanguageService, createDtsHost } from '@volar/monaco/worker';
43
- import * as ts from 'typescript';
44
-
45
- createLanguageService({
46
- // ...
47
- typescript: {
48
- module: ts as any,
49
- compilerOptions: {
50
- // ...tsconfig options
51
- },
52
- },
53
- // Enable auto fetch node_modules types
54
- dtsHost: createDtsHost('https://unpkg.com/', { typescript: '4.9.5' }),
55
- });
41
+ ```diff
42
+ import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
43
+ import type * as monaco from 'monaco-editor-core';
44
+ import { createLanguageService } from '@volar/monaco/worker';
45
+ +import * as ts from 'typescript';
46
+ +import createTypeScriptService, { createJsDelivrDtsHost } from 'volar-service-typescript';
47
+
48
+ self.onmessage = () => {
49
+ worker.initialize((ctx: monaco.worker.IWorkerContext) => {
50
+ return createLanguageService({
51
+ workerContext: ctx,
52
+ config: {
53
+ // ...Language Service Config of my-lang language support
54
+ + services: {
55
+ + typescript: createTypeScriptService({
56
+ + // Enable auto fetch node_modules types
57
+ + dtsHost: createJsDelivrDtsHost({ typescript: '4.9.5' }),
58
+ + })
59
+ + },
60
+ },
61
+ + typescript: {
62
+ + module: ts as any,
63
+ + compilerOptions: {
64
+ + // ...tsconfig options
65
+ + },
66
+ + },
67
+ });
68
+ });
69
+ };
56
70
  ```
57
71
 
58
72
  ### Add worker loader to global env
@@ -14,10 +14,10 @@ async function createLanguageFeaturesProvider(worker, getSyncUris) {
14
14
  const inlayHints = new WeakMap();
15
15
  const languageService = await worker.getProxy();
16
16
  return {
17
- triggerCharacters: await languageService.triggerCharacters(),
18
- autoFormatTriggerCharacters: await languageService.autoFormatTriggerCharacters(),
19
- signatureHelpTriggerCharacters: await languageService.signatureHelpTriggerCharacters(),
20
- signatureHelpRetriggerCharacters: await languageService.signatureHelpRetriggerCharacters(),
17
+ triggerCharacters: await languageService.getTriggerCharacters(),
18
+ autoFormatTriggerCharacters: await languageService.getAutoFormatTriggerCharacters(),
19
+ signatureHelpTriggerCharacters: await languageService.getSignatureHelpTriggerCharacters(),
20
+ signatureHelpRetriggerCharacters: await languageService.getSignatureHelpRetriggerCharacters(),
21
21
  getLegend() {
22
22
  return language_service_1.standardSemanticTokensLegend;
23
23
  },
package/out/worker.d.ts CHANGED
@@ -1,11 +1,8 @@
1
1
  import { type Config } from '@volar/language-service';
2
2
  import type * as monaco from 'monaco-editor-core';
3
3
  import type * as ts from 'typescript/lib/tsserverlibrary';
4
- import * as webFs from '@volar/web-fs';
5
- export * from '@volar/web-fs';
6
4
  export declare function createLanguageService(options: {
7
5
  workerContext: monaco.worker.IWorkerContext<any>;
8
- dtsHost?: webFs.IDtsHost;
9
6
  config: Config;
10
7
  typescript?: {
11
8
  module: typeof import('typescript/lib/tsserverlibrary');
package/out/worker.js CHANGED
@@ -1,75 +1,37 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
3
  exports.createLanguageService = void 0;
18
4
  const language_service_1 = require("@volar/language-service");
19
5
  const vscode_uri_1 = require("vscode-uri");
20
- const webFs = require("@volar/web-fs");
21
- __exportStar(require("@volar/web-fs"), exports);
22
6
  function createLanguageService(options) {
23
- let dtsClientVersion = 0;
24
7
  const ts = options.typescript?.module;
25
8
  const config = options.config ?? {};
26
- const compilerOptions = options.typescript?.compilerOptions ?? {};
27
9
  const host = createLanguageServiceHost();
28
10
  const languageService = (0, language_service_1.createLanguageService)({ typescript: ts }, {
29
11
  uriToFileName: uri => vscode_uri_1.URI.parse(uri).fsPath.replace(/\\/g, '/'),
30
12
  fileNameToUri: fileName => vscode_uri_1.URI.file(fileName).toString(),
31
13
  rootUri: vscode_uri_1.URI.file('/'),
32
14
  }, config, host);
33
- const dtsClient = options.dtsHost ? webFs.createDtsClient(options.dtsHost) : undefined;
34
- if (!dtsClient) {
35
- return languageService;
36
- }
37
15
  class InnocentRabbit {
38
16
  }
39
17
  ;
40
18
  for (const api in languageService) {
41
19
  const isFunction = typeof languageService[api] === 'function';
42
- if (!isFunction) {
43
- InnocentRabbit.prototype[api] = () => languageService[api];
44
- continue;
20
+ if (isFunction) {
21
+ InnocentRabbit.prototype[api] = languageService[api];
45
22
  }
46
- InnocentRabbit.prototype[api] = async (...args) => {
47
- if (!options.dtsHost) {
48
- return languageService[api](...args);
49
- }
50
- let lastDtsClientVersion = dtsClientVersion;
51
- let result = await languageService[api](...args);
52
- dtsClientVersion = await dtsClient.sync();
53
- while (lastDtsClientVersion !== dtsClientVersion) {
54
- lastDtsClientVersion = dtsClientVersion;
55
- result = await languageService[api](...args);
56
- dtsClientVersion = await dtsClient.sync();
57
- }
58
- return result;
59
- };
60
23
  }
61
24
  return new InnocentRabbit();
62
25
  function createLanguageServiceHost() {
63
26
  let projectVersion = 0;
64
27
  const modelSnapshot = new WeakMap();
65
- const dtsFileSnapshot = new Map();
66
28
  const modelVersions = new Map();
67
29
  const host = {
68
30
  getProjectVersion() {
69
31
  const models = options.workerContext.getMirrorModels();
70
32
  if (modelVersions.size === options.workerContext.getMirrorModels().length) {
71
33
  if (models.every(model => modelVersions.get(model) === model.version)) {
72
- return dtsClientVersion.toString() + ':' + projectVersion.toString();
34
+ return projectVersion;
73
35
  }
74
36
  }
75
37
  modelVersions.clear();
@@ -77,22 +39,12 @@ function createLanguageService(options) {
77
39
  modelVersions.set(model, model.version);
78
40
  }
79
41
  projectVersion++;
80
- return dtsClientVersion.toString() + ':' + projectVersion.toString();
81
- },
82
- getTypeRootsVersion() {
83
- return dtsClientVersion;
42
+ return projectVersion;
84
43
  },
85
44
  getScriptFileNames() {
86
45
  const models = options.workerContext.getMirrorModels();
87
46
  return models.map(model => model.uri.fsPath);
88
47
  },
89
- getScriptVersion(fileName) {
90
- const model = options.workerContext.getMirrorModels().find(model => model.uri.fsPath === fileName);
91
- if (model) {
92
- return model.version.toString();
93
- }
94
- return dtsClient?.readFile(fileName)?.length.toString() ?? '';
95
- },
96
48
  getScriptSnapshot(fileName) {
97
49
  const model = options.workerContext.getMirrorModels().find(model => model.uri.fsPath === fileName);
98
50
  if (model) {
@@ -108,45 +60,13 @@ function createLanguageService(options) {
108
60
  }]);
109
61
  return modelSnapshot.get(model)?.[1];
110
62
  }
111
- if (dtsFileSnapshot.has(fileName)) {
112
- return dtsFileSnapshot.get(fileName);
113
- }
114
- const dtsFileText = dtsClient?.readFile(fileName);
115
- if (dtsFileText !== undefined) {
116
- dtsFileSnapshot.set(fileName, {
117
- getText: (start, end) => dtsFileText.substring(start, end),
118
- getLength: () => dtsFileText.length,
119
- getChangeRange: () => undefined,
120
- });
121
- return dtsFileSnapshot.get(fileName);
122
- }
123
63
  },
124
64
  getCompilationSettings() {
125
- return compilerOptions;
65
+ return options.typescript?.compilerOptions ?? {};
126
66
  },
127
67
  getCurrentDirectory() {
128
68
  return '/';
129
69
  },
130
- getDefaultLibFileName(options) {
131
- if (ts) {
132
- return `/node_modules/typescript/lib/${ts.getDefaultLibFileName(options)}`;
133
- }
134
- return '';
135
- },
136
- readFile(fileName) {
137
- const model = options.workerContext.getMirrorModels().find(model => model.uri.fsPath === fileName);
138
- if (model) {
139
- return model.getValue();
140
- }
141
- return dtsClient?.readFile(fileName);
142
- },
143
- fileExists(fileName) {
144
- const model = options.workerContext.getMirrorModels().find(model => model.uri.fsPath === fileName);
145
- if (model) {
146
- return true;
147
- }
148
- return dtsClient?.fileExists(fileName) ?? false;
149
- },
150
70
  };
151
71
  return host;
152
72
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/monaco",
3
- "version": "1.6.9",
3
+ "version": "1.7.1",
4
4
  "main": "out/index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -15,13 +15,12 @@
15
15
  "directory": "packages/monaco"
16
16
  },
17
17
  "dependencies": {
18
- "@volar/language-service": "1.6.9",
18
+ "@volar/language-service": "1.7.1",
19
19
  "vscode-uri": "^3.0.7"
20
20
  },
21
21
  "devDependencies": {
22
- "@volar/web-fs": "1.6.9",
23
22
  "monaco-editor-core": "latest",
24
23
  "vscode-languageserver-protocol": "^3.17.3"
25
24
  },
26
- "gitHead": "e676fa08e4186bd2f8cc14861ef65f8d8c855ea1"
25
+ "gitHead": "6d092d684c65ce43af8a401bc90d0b2769a2bf49"
27
26
  }