@volar/typescript 2.0.0-alpha.0 → 2.0.0-alpha.10

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,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.arrayItemsEqual = exports.createTSServerPlugin = void 0;
4
+ const decorateLanguageService_1 = require("../node/decorateLanguageService");
5
+ const decorateLanguageServiceHost_1 = require("../node/decorateLanguageServiceHost");
6
+ const language_core_1 = require("@volar/language-core");
7
+ const externalFiles = new WeakMap();
8
+ const projectExternalFileExtensions = new WeakMap();
9
+ function createTSServerPlugin(init) {
10
+ return (modules) => {
11
+ const { typescript: ts } = modules;
12
+ const pluginModule = {
13
+ create(info) {
14
+ const { languagePlugins, extensions } = init(ts, info);
15
+ projectExternalFileExtensions.set(info.project, extensions);
16
+ const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost);
17
+ const files = (0, language_core_1.createFileProvider)(languagePlugins, ts.sys.useCaseSensitiveFileNames, fileName => {
18
+ const snapshot = getScriptSnapshot(fileName);
19
+ if (snapshot) {
20
+ files.updateSourceFile(fileName, (0, language_core_1.resolveCommonLanguageId)(fileName), snapshot);
21
+ }
22
+ else {
23
+ files.deleteSourceFile(fileName);
24
+ }
25
+ });
26
+ (0, decorateLanguageService_1.decorateLanguageService)(files, info.languageService);
27
+ (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(files, info.languageServiceHost, ts, extensions);
28
+ return info.languageService;
29
+ },
30
+ getExternalFiles(project, updateLevel = 0) {
31
+ if (updateLevel >= (1)
32
+ || !externalFiles.has(project)) {
33
+ const oldFiles = externalFiles.get(project);
34
+ const newFiles = (0, decorateLanguageServiceHost_1.searchExternalFiles)(ts, project, projectExternalFileExtensions.get(project));
35
+ externalFiles.set(project, newFiles);
36
+ if (oldFiles && !arrayItemsEqual(oldFiles, newFiles)) {
37
+ project.refreshDiagnostics();
38
+ }
39
+ }
40
+ return externalFiles.get(project);
41
+ },
42
+ };
43
+ return pluginModule;
44
+ };
45
+ }
46
+ exports.createTSServerPlugin = createTSServerPlugin;
47
+ function arrayItemsEqual(a, b) {
48
+ if (a.length !== b.length) {
49
+ return false;
50
+ }
51
+ const set = new Set(a);
52
+ for (const file of b) {
53
+ if (!set.has(file)) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ }
59
+ exports.arrayItemsEqual = arrayItemsEqual;
60
+ //# sourceMappingURL=createTSServerPlugin.js.map
@@ -0,0 +1,4 @@
1
+ import type * as ts from 'typescript/lib/tsserverlibrary';
2
+ import type { LanguagePlugin } from '@volar/language-core';
3
+ export declare let getLanguagePlugins: (ts: typeof import('typescript/lib/tsserverlibrary'), options: ts.CreateProgramOptions) => LanguagePlugin[];
4
+ export declare function runTsc(tscPath: string, extensions: string[], _getLanguagePlugins: typeof getLanguagePlugins): void;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runTsc = exports.getLanguagePlugins = void 0;
4
+ const fs = require("fs");
5
+ let getLanguagePlugins = () => [];
6
+ exports.getLanguagePlugins = getLanguagePlugins;
7
+ function runTsc(tscPath, extensions, _getLanguagePlugins) {
8
+ exports.getLanguagePlugins = _getLanguagePlugins;
9
+ const proxyApiPath = require.resolve('../node/proxyCreateProgram');
10
+ const readFileSync = fs.readFileSync;
11
+ fs.readFileSync = (...args) => {
12
+ if (args[0] === tscPath) {
13
+ let tsc = readFileSync(...args);
14
+ // add allow extensions
15
+ const extsText = extensions.map(ext => `"${ext}"`).join(', ');
16
+ tsc = replace(tsc, /supportedTSExtensions = .*(?=;)/, s => s + `.concat([[${extsText}]])`);
17
+ tsc = replace(tsc, /supportedJSExtensions = .*(?=;)/, s => s + `.concat([[${extsText}]])`);
18
+ tsc = replace(tsc, /allSupportedExtensions = .*(?=;)/, s => s + `.concat([[${extsText}]])`);
19
+ // proxy createProgram
20
+ tsc = replace(tsc, /function createProgram\(.+\) {/, s => `var createProgram = require(${JSON.stringify(proxyApiPath)}).proxyCreateProgram(`
21
+ + `new Proxy({}, { get(_target, p, _receiver) {return eval(p); } } ), `
22
+ + `_createProgram, `
23
+ + `[${extsText}], `
24
+ + `require(${JSON.stringify(__filename)}).getLanguagePlugins`
25
+ + `);\n`
26
+ + s.replace('createProgram', '_createProgram'));
27
+ return tsc;
28
+ }
29
+ return readFileSync(...args);
30
+ };
31
+ try {
32
+ require(tscPath);
33
+ }
34
+ finally {
35
+ fs.readFileSync = readFileSync;
36
+ delete require.cache[tscPath];
37
+ }
38
+ }
39
+ exports.runTsc = runTsc;
40
+ function replace(text, ...[search, replace]) {
41
+ const before = text;
42
+ text = text.replace(search, replace);
43
+ const after = text;
44
+ if (after === before) {
45
+ throw 'Search string not found: ' + JSON.stringify(search.toString());
46
+ }
47
+ return after;
48
+ }
49
+ //# sourceMappingURL=runTsc.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/typescript",
3
- "version": "2.0.0-alpha.0",
3
+ "version": "2.0.0-alpha.10",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -12,12 +12,13 @@
12
12
  "directory": "packages/typescript"
13
13
  },
14
14
  "dependencies": {
15
- "@volar/language-core": "2.0.0-alpha.0",
15
+ "@volar/language-core": "2.0.0-alpha.10",
16
16
  "path-browserify": "^1.0.1"
17
17
  },
18
18
  "devDependencies": {
19
+ "@types/node": "latest",
19
20
  "@types/path-browserify": "latest",
20
- "@volar/language-service": "2.0.0-alpha.0"
21
+ "@volar/language-service": "2.0.0-alpha.10"
21
22
  },
22
- "gitHead": "6a6be45a3b7983148d90541e7c68ef84c9155a7a"
23
+ "gitHead": "f320632bcffa06981de169ee3cdad79c29ecc1b5"
23
24
  }