@astrojs/ts-plugin 1.0.4 → 1.0.6
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +12 -0
- package/dist/astro-sys.js +7 -14
- package/dist/index.js +5 -2
- package/dist/language-service/diagnostics.js +6 -13
- package/dist/language-service/index.js +36 -13
- package/dist/module-loader.js +45 -4
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/src/astro-sys.ts +7 -7
- package/src/index.ts +6 -2
- package/src/language-service/diagnostics.ts +9 -7
- package/src/language-service/index.ts +38 -10
- package/src/module-loader.ts +64 -6
- package/src/utils.ts +2 -0
- package/tsconfig.json +1 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
@astrojs/ts-plugin:build: cache hit, replaying output
|
|
1
|
+
@astrojs/ts-plugin:build: cache hit, replaying output 3f3b3eeed56ebe05
|
|
2
2
|
@astrojs/ts-plugin:build:
|
|
3
|
-
@astrojs/ts-plugin:build: > @astrojs/ts-plugin@1.0.
|
|
3
|
+
@astrojs/ts-plugin:build: > @astrojs/ts-plugin@1.0.6 build /home/runner/work/language-tools/language-tools/packages/ts-plugin
|
|
4
4
|
@astrojs/ts-plugin:build: > astro-scripts build "src/**/*.ts"
|
|
5
5
|
@astrojs/ts-plugin:build:
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @astrojs/ts-plugin
|
|
2
2
|
|
|
3
|
+
## 1.0.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3fcbc1a: Fix TypeScript plugin crashing at start in certain circumstances
|
|
8
|
+
|
|
9
|
+
## 1.0.5
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- ae15420: Fix importing `.astro` files in `.ts` files not working with TypeScript 5.0+
|
|
14
|
+
|
|
3
15
|
## 1.0.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/astro-sys.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,31 +15,26 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
19
|
var astro_sys_exports = {};
|
|
26
20
|
__export(astro_sys_exports, {
|
|
27
21
|
createAstroSys: () => createAstroSys
|
|
28
22
|
});
|
|
29
23
|
module.exports = __toCommonJS(astro_sys_exports);
|
|
30
|
-
var import_typescript = __toESM(require("typescript"));
|
|
31
24
|
var import_utils = require("./utils.js");
|
|
32
|
-
function createAstroSys(logger) {
|
|
25
|
+
function createAstroSys(logger, typescript) {
|
|
33
26
|
const astroSys = {
|
|
34
|
-
...
|
|
27
|
+
...typescript.sys,
|
|
35
28
|
fileExists(path) {
|
|
36
|
-
return
|
|
29
|
+
return typescript.sys.fileExists((0, import_utils.ensureRealAstroFilePath)(path));
|
|
37
30
|
},
|
|
38
31
|
readDirectory(path, extensions, exclude, include, depth) {
|
|
39
32
|
const extensionsWithAstro = (extensions != null ? extensions : []).concat(".astro");
|
|
40
|
-
return
|
|
33
|
+
return typescript.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
|
|
41
34
|
}
|
|
42
35
|
};
|
|
43
|
-
if (
|
|
44
|
-
const realpath =
|
|
36
|
+
if (typescript.sys.realpath) {
|
|
37
|
+
const realpath = typescript.sys.realpath;
|
|
45
38
|
astroSys.realpath = function(path) {
|
|
46
39
|
if ((0, import_utils.isVirtualAstroFilePath)(path)) {
|
|
47
40
|
return realpath((0, import_utils.toRealAstroFilePath)(path)) + ".ts";
|
|
@@ -55,4 +48,4 @@ function createAstroSys(logger) {
|
|
|
55
48
|
0 && (module.exports = {
|
|
56
49
|
createAstroSys
|
|
57
50
|
});
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FzdHJvLXN5cy50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQSxtQkFBcUY7QUFLOUUsU0FBUyxlQUFlLFFBQWdCLFlBQTZEO0FBQzNHLFFBQU0sV0FBc0I7QUFBQSxJQUMzQixHQUFHLFdBQVc7QUFBQSxJQUNkLFdBQVcsTUFBYztBQUN4QixhQUFPLFdBQVcsSUFBSSxlQUFXLHNDQUF3QixJQUFJLENBQUM7QUFBQSxJQUMvRDtBQUFBLElBQ0EsY0FBYyxNQUFNLFlBQVksU0FBUyxTQUFTLE9BQU87QUFDeEQsWUFBTSx1QkFBdUIsa0NBQWMsQ0FBQyxHQUFHLE9BQU8sUUFBUTtBQUU5RCxhQUFPLFdBQVcsSUFBSSxjQUFjLE1BQU0scUJBQXFCLFNBQVMsU0FBUyxLQUFLO0FBQUEsSUFDdkY7QUFBQSxFQUNEO0FBRUEsTUFBSSxXQUFXLElBQUksVUFBVTtBQUM1QixVQUFNLFdBQVcsV0FBVyxJQUFJO0FBQ2hDLGFBQVMsV0FBVyxTQUFVLE1BQU07QUFDbkMsY0FBSSxxQ0FBdUIsSUFBSSxHQUFHO0FBQ2pDLGVBQU8sYUFBUyxrQ0FBb0IsSUFBSSxDQUFDLElBQUk7QUFBQSxNQUM5QztBQUNBLGFBQU8sU0FBUyxJQUFJO0FBQUEsSUFDckI7QUFBQSxFQUNEO0FBRUEsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,9 @@ function init(modules) {
|
|
|
15
15
|
logger.log("Detected that this is not an Astro project, abort patching TypeScript");
|
|
16
16
|
return info.languageService;
|
|
17
17
|
}
|
|
18
|
+
if ((0, import_language_service.isPatched)(info.languageService)) {
|
|
19
|
+
return info.languageService;
|
|
20
|
+
}
|
|
18
21
|
logger.log("Starting Astro plugin");
|
|
19
22
|
const snapshotManager = new import_astro_snapshots.AstroSnapshotManager(modules.typescript, info.project.projectService, logger);
|
|
20
23
|
if (parsedCommandLine) {
|
|
@@ -27,7 +30,7 @@ function init(modules) {
|
|
|
27
30
|
);
|
|
28
31
|
}
|
|
29
32
|
(0, import_module_loader.patchModuleLoader)(logger, snapshotManager, modules.typescript, info.languageServiceHost, info.project);
|
|
30
|
-
return (0, import_language_service.decorateLanguageService)(info.languageService, snapshotManager, logger);
|
|
33
|
+
return (0, import_language_service.decorateLanguageService)(info.languageService, snapshotManager, ts, logger);
|
|
31
34
|
}
|
|
32
35
|
function getExternalFiles(project) {
|
|
33
36
|
var _a, _b;
|
|
@@ -51,4 +54,4 @@ function init(modules) {
|
|
|
51
54
|
return { create, getExternalFiles };
|
|
52
55
|
}
|
|
53
56
|
module.exports = init;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLDZCQUFxQztBQUNyQyw4QkFBbUQ7QUFDbkQsb0JBQXVCO0FBQ3ZCLDJCQUFrQztBQUNsQyxpQ0FBeUM7QUFDekMsbUJBQXFFO0FBRXJFLFNBQVMsS0FBSyxTQUEwRTtBQUN2RixRQUFNLEtBQUssUUFBUTtBQUVuQixXQUFTLE9BQU8sTUFBc0Q7QUFYdkU7QUFZRSxVQUFNLFNBQVMsSUFBSSxxQkFBTyxLQUFLLFFBQVEsZUFBZSxNQUFNO0FBQzVELFVBQU0scUJBQW9CLGdCQUFLLHFCQUFvQix5QkFBekIsZ0NBQWdELHNDQUF3QixLQUFLLE9BQU87QUFFOUcsUUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLGlCQUFpQixHQUFHO0FBQ3JELGFBQU8sSUFBSSx1RUFBdUU7QUFDbEYsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUVBLFlBQUksbUNBQVUsS0FBSyxlQUFlLEdBQUc7QUFDcEMsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUVBLFdBQU8sSUFBSSx1QkFBdUI7QUFFbEMsVUFBTSxrQkFBa0IsSUFBSSw0Q0FBcUIsUUFBUSxZQUFZLEtBQUssUUFBUSxnQkFBZ0IsTUFBTTtBQUN4RyxRQUFJLG1CQUFtQjtBQUN0QixVQUFJO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLGdEQUFrQixRQUFRLGlCQUFpQixRQUFRLFlBQVksS0FBSyxxQkFBcUIsS0FBSyxPQUFPO0FBQ3JHLGVBQU8saURBQXdCLEtBQUssaUJBQWlCLGlCQUFpQixJQUFJLE1BQU07QUFBQSxFQUNqRjtBQUVBLFdBQVMsaUJBQWlCLFNBQXNDO0FBekNqRTtBQTBDRSxZQUFPLCtEQUF5QixZQUFZLFFBQVEsZUFBZSxDQUFDLE1BQTdELG1CQUFnRSxlQUFoRSxZQUE4RSxDQUFDO0FBQUEsRUFDdkY7QUFFQSxXQUFTLGVBQWUsU0FBNEIsbUJBQXFEO0FBQ3hHLFFBQUksbUJBQW1CO0FBQ3RCLFlBQU0saUJBQWEsMENBQTRCLElBQUksU0FBUyxpQkFBaUI7QUFFN0UsVUFBSSxXQUFXLFNBQVM7QUFBRyxlQUFPO0FBQUEsSUFDbkM7QUFFQSxRQUFJO0FBQ0gsWUFBTSxrQkFBa0IsUUFBUSxtQkFBbUI7QUFDbkQsWUFBTSxvQkFDTCxPQUFPLGdCQUFnQixtQkFBbUIsWUFDMUMsUUFBUSxRQUFRLFNBQVMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLGNBQWMsRUFBRSxDQUFDO0FBRXJFLGFBQU87QUFBQSxJQUNSLFNBQVMsR0FBUDtBQUNELGNBQVEsZUFBZSxPQUFPLEtBQUssQ0FBVztBQUM5QyxhQUFPO0FBQUEsSUFDUjtBQUFBLEVBQ0Q7QUFFQSxTQUFPLEVBQUUsUUFBUSxpQkFBaUI7QUFDbkM7QUFFQSxpQkFBUzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,10 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
19
|
var diagnostics_exports = {};
|
|
26
20
|
__export(diagnostics_exports, {
|
|
@@ -28,15 +22,14 @@ __export(diagnostics_exports, {
|
|
|
28
22
|
decorateDiagnostics: () => decorateDiagnostics
|
|
29
23
|
});
|
|
30
24
|
module.exports = __toCommonJS(diagnostics_exports);
|
|
31
|
-
var import_tsserverlibrary = __toESM(require("typescript/lib/tsserverlibrary"));
|
|
32
25
|
var import_utils = require("../utils.js");
|
|
33
26
|
var DiagnosticCodes = /* @__PURE__ */ ((DiagnosticCodes2) => {
|
|
34
27
|
DiagnosticCodes2[DiagnosticCodes2["CANNOT_FIND_MODULE"] = 2307] = "CANNOT_FIND_MODULE";
|
|
35
28
|
return DiagnosticCodes2;
|
|
36
29
|
})(DiagnosticCodes || {});
|
|
37
|
-
function decorateDiagnostics(ls) {
|
|
30
|
+
function decorateDiagnostics(ls, typescript) {
|
|
38
31
|
decorateSyntacticDiagnostics(ls);
|
|
39
|
-
decorateSemanticDiagnostics(ls);
|
|
32
|
+
decorateSemanticDiagnostics(ls, typescript);
|
|
40
33
|
decorateSuggestionDiagnostics(ls);
|
|
41
34
|
}
|
|
42
35
|
function decorateSyntacticDiagnostics(ls) {
|
|
@@ -48,7 +41,7 @@ function decorateSyntacticDiagnostics(ls) {
|
|
|
48
41
|
return getSyntacticDiagnostics(fileName);
|
|
49
42
|
};
|
|
50
43
|
}
|
|
51
|
-
function decorateSemanticDiagnostics(ls) {
|
|
44
|
+
function decorateSemanticDiagnostics(ls, typescript) {
|
|
52
45
|
const getSemanticDiagnostics = ls.getSemanticDiagnostics;
|
|
53
46
|
ls.getSemanticDiagnostics = (fileName) => {
|
|
54
47
|
if ((0, import_utils.isAstroFilePath)(fileName)) {
|
|
@@ -56,9 +49,9 @@ function decorateSemanticDiagnostics(ls) {
|
|
|
56
49
|
}
|
|
57
50
|
let diagnostics = getSemanticDiagnostics(fileName);
|
|
58
51
|
diagnostics = diagnostics.map((diag) => {
|
|
59
|
-
const message =
|
|
52
|
+
const message = typescript.flattenDiagnosticMessageText(diag.messageText, typescript.sys.newLine);
|
|
60
53
|
if (diag.code === 2307 /* CANNOT_FIND_MODULE */ && message.includes("astro:content") && !message.includes("content collections")) {
|
|
61
|
-
diag.messageText = message + `${
|
|
54
|
+
diag.messageText = message + `${typescript.sys.newLine}${typescript.sys.newLine}If you're using content collections, make sure to run \`astro dev\`, \`astro build\` or \`astro sync\` to first generate the types so you can import from them. If you already ran one of those commands, restarting the TS Server might be necessary in order for the change to take effect.`;
|
|
62
55
|
}
|
|
63
56
|
return diag;
|
|
64
57
|
});
|
|
@@ -79,4 +72,4 @@ function decorateSuggestionDiagnostics(ls) {
|
|
|
79
72
|
DiagnosticCodes,
|
|
80
73
|
decorateDiagnostics
|
|
81
74
|
});
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvZGlhZ25vc3RpY3MudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxtQkFBZ0M7QUFJekIsSUFBSyxrQkFBTCxrQkFBS0EscUJBQUw7QUFDTixFQUFBQSxrQ0FBQSx3QkFBcUIsUUFBckI7QUFEVyxTQUFBQTtBQUFBLEdBQUE7QUFJTCxTQUFTLG9CQUFvQixJQUF3QixZQUF1QjtBQUNsRiwrQkFBNkIsRUFBRTtBQUMvQiw4QkFBNEIsSUFBSSxVQUFVO0FBQzFDLGdDQUE4QixFQUFFO0FBQ2pDO0FBRUEsU0FBUyw2QkFBNkIsSUFBOEI7QUFDbkUsUUFBTSwwQkFBMEIsR0FBRztBQUNuQyxLQUFHLDBCQUEwQixDQUFDLGFBQXFCO0FBR2xELFlBQUksOEJBQWdCLFFBQVEsR0FBRztBQUM5QixhQUFPLENBQUM7QUFBQSxJQUNUO0FBQ0EsV0FBTyx3QkFBd0IsUUFBUTtBQUFBLEVBQ3hDO0FBQ0Q7QUFFQSxTQUFTLDRCQUE0QixJQUF3QixZQUF1QjtBQUNuRixRQUFNLHlCQUF5QixHQUFHO0FBQ2xDLEtBQUcseUJBQXlCLENBQUMsYUFBcUI7QUFHakQsWUFBSSw4QkFBZ0IsUUFBUSxHQUFHO0FBQzlCLGFBQU8sQ0FBQztBQUFBLElBQ1Q7QUFFQSxRQUFJLGNBQWMsdUJBQXVCLFFBQVE7QUFDakQsa0JBQWMsWUFBWSxJQUFJLENBQUMsU0FBUztBQUN2QyxZQUFNLFVBQVUsV0FBVyw2QkFBNkIsS0FBSyxhQUFhLFdBQVcsSUFBSSxPQUFPO0FBQ2hHLFVBQ0MsS0FBSyxTQUFTLGlDQUNkLFFBQVEsU0FBUyxlQUFlLEtBR2hDLENBQUMsUUFBUSxTQUFTLHFCQUFxQixHQUN0QztBQUNELGFBQUssY0FDSixVQUNBLEdBQUcsV0FBVyxJQUFJLFVBQVUsV0FBVyxJQUFJO0FBQUEsTUFFN0M7QUFFQSxhQUFPO0FBQUEsSUFDUixDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1I7QUFDRDtBQUVBLFNBQVMsOEJBQThCLElBQThCO0FBQ3BFLFFBQU0sMkJBQTJCLEdBQUc7QUFDcEMsS0FBRywyQkFBMkIsQ0FBQyxhQUFxQjtBQUduRCxZQUFJLDhCQUFnQixRQUFRLEdBQUc7QUFDOUIsYUFBTyxDQUFDO0FBQUEsSUFDVDtBQUNBLFdBQU8seUJBQXlCLFFBQVE7QUFBQSxFQUN6QztBQUNEOyIsCiAgIm5hbWVzIjogWyJEaWFnbm9zdGljQ29kZXMiXQp9Cg==
|
|
@@ -18,7 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var language_service_exports = {};
|
|
20
20
|
__export(language_service_exports, {
|
|
21
|
-
decorateLanguageService: () => decorateLanguageService
|
|
21
|
+
decorateLanguageService: () => decorateLanguageService,
|
|
22
|
+
isPatched: () => isPatched
|
|
22
23
|
});
|
|
23
24
|
module.exports = __toCommonJS(language_service_exports);
|
|
24
25
|
var import_completions = require("./completions.js");
|
|
@@ -29,19 +30,41 @@ var import_find_references = require("./find-references.js");
|
|
|
29
30
|
var import_implementation = require("./implementation.js");
|
|
30
31
|
var import_line_column_offset = require("./line-column-offset.js");
|
|
31
32
|
var import_rename = require("./rename.js");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
(0,
|
|
39
|
-
(0,
|
|
40
|
-
(0,
|
|
41
|
-
|
|
33
|
+
const astroPluginPatchSymbol = Symbol("astroPluginPatchSymbol");
|
|
34
|
+
function isPatched(ls) {
|
|
35
|
+
return ls[astroPluginPatchSymbol] === true;
|
|
36
|
+
}
|
|
37
|
+
function decorateLanguageService(ls, snapshotManager, ts, logger) {
|
|
38
|
+
const proxy = new Proxy(ls, createProxyHandler());
|
|
39
|
+
(0, import_line_column_offset.decorateLineColumnOffset)(proxy, snapshotManager);
|
|
40
|
+
(0, import_rename.decorateRename)(proxy, snapshotManager, logger);
|
|
41
|
+
(0, import_diagnostics.decorateDiagnostics)(proxy, ts);
|
|
42
|
+
(0, import_find_references.decorateFindReferences)(proxy, snapshotManager, logger);
|
|
43
|
+
(0, import_completions.decorateCompletions)(proxy, logger);
|
|
44
|
+
(0, import_definition.decorateGetDefinition)(proxy, snapshotManager);
|
|
45
|
+
(0, import_implementation.decorateGetImplementation)(proxy, snapshotManager);
|
|
46
|
+
(0, import_file_references.decorateGetFileReferences)(proxy, snapshotManager);
|
|
47
|
+
return proxy;
|
|
48
|
+
}
|
|
49
|
+
function createProxyHandler() {
|
|
50
|
+
const decorated = {};
|
|
51
|
+
return {
|
|
52
|
+
get(target, p) {
|
|
53
|
+
var _a;
|
|
54
|
+
if (p === astroPluginPatchSymbol) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return (_a = decorated[p]) != null ? _a : target[p];
|
|
58
|
+
},
|
|
59
|
+
set(_, p, value) {
|
|
60
|
+
decorated[p] = value;
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
42
64
|
}
|
|
43
65
|
// Annotate the CommonJS export names for ESM import in node:
|
|
44
66
|
0 && (module.exports = {
|
|
45
|
-
decorateLanguageService
|
|
67
|
+
decorateLanguageService,
|
|
68
|
+
isPatched
|
|
46
69
|
});
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvaW5kZXgudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQSx5QkFBb0M7QUFDcEMsd0JBQXNDO0FBQ3RDLHlCQUFvQztBQUNwQyw2QkFBMEM7QUFDMUMsNkJBQXVDO0FBQ3ZDLDRCQUEwQztBQUMxQyxnQ0FBeUM7QUFDekMsb0JBQStCO0FBRS9CLE1BQU0seUJBQXlCLE9BQU8sd0JBQXdCO0FBRXZELFNBQVMsVUFBVSxJQUF3QjtBQUNqRCxTQUFRLEdBQVcsNEJBQTRCO0FBQ2hEO0FBRU8sU0FBUyx3QkFDZixJQUNBLGlCQUNBLElBQ0EsUUFDcUI7QUFDckIsUUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLG1CQUFtQixDQUFDO0FBRWhELDBEQUF5QixPQUFPLGVBQWU7QUFDL0Msb0NBQWUsT0FBTyxpQkFBaUIsTUFBTTtBQUM3Qyw4Q0FBb0IsT0FBTyxFQUFFO0FBQzdCLHFEQUF1QixPQUFPLGlCQUFpQixNQUFNO0FBQ3JELDhDQUFvQixPQUFPLE1BQU07QUFDakMsK0NBQXNCLE9BQU8sZUFBZTtBQUM1Qyx1REFBMEIsT0FBTyxlQUFlO0FBQ2hELHdEQUEwQixPQUFPLGVBQWU7QUFFaEQsU0FBTztBQUNSO0FBRUEsU0FBUyxxQkFBdUQ7QUFDL0QsUUFBTSxZQUF5QyxDQUFDO0FBRWhELFNBQU87QUFBQSxJQUNOLElBQUksUUFBUSxHQUFHO0FBMUNqQjtBQTJDRyxVQUFJLE1BQU0sd0JBQXdCO0FBQ2pDLGVBQU87QUFBQSxNQUNSO0FBRUEsY0FBTyxlQUFVLE9BQVYsWUFBNEMsT0FBTztBQUFBLElBQzNEO0FBQUEsSUFDQSxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQ2hCLGdCQUFVLEtBQWlDO0FBRTNDLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUNEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/module-loader.js
CHANGED
|
@@ -48,11 +48,16 @@ class ModuleResolutionCache {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
function patchModuleLoader(logger, snapshotManager, typescript, lsHost, project) {
|
|
51
|
-
var _a;
|
|
52
|
-
const astroSys = (0, import_astro_sys.createAstroSys)(logger);
|
|
51
|
+
var _a, _b;
|
|
52
|
+
const astroSys = (0, import_astro_sys.createAstroSys)(logger, typescript);
|
|
53
53
|
const moduleCache = new ModuleResolutionCache();
|
|
54
54
|
const origResolveModuleNames = (_a = lsHost.resolveModuleNames) == null ? void 0 : _a.bind(lsHost);
|
|
55
|
-
lsHost.
|
|
55
|
+
const origResolveModuleNamLiterals = (_b = lsHost.resolveModuleNameLiterals) == null ? void 0 : _b.bind(lsHost);
|
|
56
|
+
if (lsHost.resolveModuleNameLiterals) {
|
|
57
|
+
lsHost.resolveModuleNameLiterals = resolveModuleNameLiterals;
|
|
58
|
+
} else {
|
|
59
|
+
lsHost.resolveModuleNames = resolveModuleNames;
|
|
60
|
+
}
|
|
56
61
|
const origRemoveFile = project.removeFile.bind(project);
|
|
57
62
|
project.removeFile = (info, fileExists, detachFromProject) => {
|
|
58
63
|
logger.log("File is being removed. Delete from cache: ", info.fileName);
|
|
@@ -102,9 +107,45 @@ function patchModuleLoader(logger, snapshotManager, typescript, lsHost, project)
|
|
|
102
107
|
};
|
|
103
108
|
return resolvedAstroModule;
|
|
104
109
|
}
|
|
110
|
+
function resolveModuleNameLiterals(moduleLiterals, containingFile, redirectedReference, options, containingSourceFile, reusedNames) {
|
|
111
|
+
var _a2;
|
|
112
|
+
logger.log("Resolving modules names for " + containingFile);
|
|
113
|
+
const resolved = (_a2 = origResolveModuleNamLiterals == null ? void 0 : origResolveModuleNamLiterals(
|
|
114
|
+
moduleLiterals,
|
|
115
|
+
containingFile,
|
|
116
|
+
redirectedReference,
|
|
117
|
+
options,
|
|
118
|
+
containingSourceFile,
|
|
119
|
+
reusedNames
|
|
120
|
+
)) != null ? _a2 : moduleLiterals.map(
|
|
121
|
+
() => ({
|
|
122
|
+
resolvedModule: void 0
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
return resolved.map((tsResolvedModule, idx) => {
|
|
126
|
+
const moduleName = moduleLiterals[idx].text;
|
|
127
|
+
if (tsResolvedModule.resolvedModule || !(0, import_utils.ensureRealAstroFilePath)(moduleName).endsWith(".astro")) {
|
|
128
|
+
return tsResolvedModule;
|
|
129
|
+
}
|
|
130
|
+
return resolveAstroModuleNameFromCache(moduleName, containingFile, options);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function resolveAstroModuleNameFromCache(moduleName, containingFile, options) {
|
|
134
|
+
const cachedModule = moduleCache.get(moduleName, containingFile);
|
|
135
|
+
if (cachedModule) {
|
|
136
|
+
return {
|
|
137
|
+
resolvedModule: cachedModule
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const resolvedModule = resolveModuleName(moduleName, containingFile, options);
|
|
141
|
+
moduleCache.set(moduleName, containingFile, resolvedModule);
|
|
142
|
+
return {
|
|
143
|
+
resolvedModule
|
|
144
|
+
};
|
|
145
|
+
}
|
|
105
146
|
}
|
|
106
147
|
// Annotate the CommonJS export names for ESM import in node:
|
|
107
148
|
0 && (module.exports = {
|
|
108
149
|
patchModuleLoader
|
|
109
150
|
});
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,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QXNCLFdBQVc7QUFBQSxNQUN0QztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0QsRUFBRTtBQUNGLFFBQUksQ0FBQyx1QkFBdUIsS0FBQyxxQ0FBdUIsb0JBQW9CLGdCQUFnQixHQUFHO0FBQzFGLGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSx1QkFBbUIsc0NBQXdCLG9CQUFvQixnQkFBZ0I7QUFDckYsV0FBTyxJQUFJLFlBQVksTUFBTSxpQkFBaUIsZ0JBQWdCO0FBQzlELFVBQU0sV0FBVyxnQkFBZ0IsT0FBTyxnQkFBZ0I7QUFDeEQsUUFBSSxDQUFDLFVBQVU7QUFDZCxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sc0JBQTZDO0FBQUEsTUFDbEQsV0FBVyxXQUFXLFVBQVU7QUFBQSxNQUNoQztBQUFBLElBQ0Q7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQUVBLFdBQVMsMEJBQ1IsZ0JBQ0EsZ0JBQ0EscUJBQ0EsU0FDQSxzQkFDQSxhQUN3RDtBQTdKMUQsUUFBQUE7QUE4SkUsV0FBTyxJQUFJLGlDQUFpQyxjQUFjO0FBSzFELFVBQU0sWUFDTEEsTUFBQTtBQUFBLE1BQ0M7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLFVBTkQsT0FBQUEsTUFRQSxlQUFlO0FBQUEsTUFDZCxPQUFtRDtBQUFBLFFBQ2xELGdCQUFnQjtBQUFBLE1BQ2pCO0FBQUEsSUFDRDtBQUVELFdBQU8sU0FBUyxJQUFJLENBQUMsa0JBQWtCLFFBQVE7QUFDOUMsWUFBTSxhQUFhLGVBQWUsS0FBSztBQUN2QyxVQUFJLGlCQUFpQixrQkFBa0IsS0FBQyxzQ0FBd0IsVUFBVSxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQy9GLGVBQU87QUFBQSxNQUNSO0FBRUEsYUFBTyxnQ0FBZ0MsWUFBWSxnQkFBZ0IsT0FBTztBQUFBLElBQzNFLENBQUM7QUFBQSxFQUNGO0FBRUEsV0FBUyxnQ0FBZ0MsWUFBb0IsZ0JBQXdCLFNBQTZCO0FBQ2pILFVBQU0sZUFBZSxZQUFZLElBQUksWUFBWSxjQUFjO0FBQy9ELFFBQUksY0FBYztBQUNqQixhQUFPO0FBQUEsUUFDTixnQkFBZ0I7QUFBQSxNQUNqQjtBQUFBLElBQ0Q7QUFFQSxVQUFNLGlCQUFpQixrQkFBa0IsWUFBWSxnQkFBZ0IsT0FBTztBQUM1RSxnQkFBWSxJQUFJLFlBQVksZ0JBQWdCLGNBQWM7QUFDMUQsV0FBTztBQUFBLE1BQ047QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNEOyIsCiAgIm5hbWVzIjogWyJfYSJdCn0K
|
package/dist/utils.js
CHANGED
|
@@ -84,4 +84,4 @@ function readProjectAstroFilesFromFs(ts, project, parsedCommandLine) {
|
|
|
84
84
|
replaceDeep,
|
|
85
85
|
toRealAstroFilePath
|
|
86
86
|
});
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRU8sU0FBUyxnQkFBZ0IsVUFBa0I7QUFDakQsU0FBTyxTQUFTLFNBQVMsUUFBUTtBQUNsQztBQUVPLFNBQVMsdUJBQXVCLFVBQWtCO0FBQ3hELFNBQU8sU0FBUyxTQUFTLFdBQVc7QUFDckM7QUFFTyxTQUFTLG9CQUFvQixVQUFrQjtBQUNyRCxTQUFPLFNBQVMsTUFBTSxHQUFHLENBQUMsTUFBTSxNQUFNO0FBQ3ZDO0FBRU8sU0FBUyx3QkFBd0IsVUFBa0I7QUFDekQsU0FBTyx1QkFBdUIsUUFBUSxJQUFJLG9CQUFvQixRQUFRLElBQUk7QUFDM0U7QUFFTyxTQUFTLHFCQUF3QixLQUFxQztBQUM1RSxTQUFPLFFBQVEsVUFBYSxRQUFRO0FBQ3JDO0FBS08sU0FBUyxZQUNmLEtBQ0EsV0FDQSxnQkFDSTtBQUNKLFNBQU8sYUFBYSxHQUFHO0FBRXZCLFdBQVMsYUFBYSxNQUFnQjtBQUNyQyxRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzdCLGFBQU8sS0FBSyxRQUFRLFdBQVcsY0FBYztBQUFBLElBQzlDO0FBQ0EsUUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3hCLGFBQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxhQUFhLEtBQUssQ0FBQztBQUFBLElBQy9DO0FBQ0EsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM3QixhQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksUUFBUTtBQUM1QyxXQUFHLE9BQU8sYUFBYSxLQUFLLElBQUk7QUFDaEMsZUFBTztBQUFBLE1BQ1IsR0FBRyxDQUFDLENBQVE7QUFBQSxJQUNiO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFDRDtBQUVPLFNBQVMsd0JBQXdCLFNBQTRCO0FBakRwRTtBQWtEQyxVQUNFLGFBQXdDLDRCQUF4QyxZQUNBLFFBQVEsbUJBQW1CLEVBQVU7QUFFeEM7QUFFTyxTQUFTLDRCQUNmLElBQ0EsU0FDQSxtQkFDQztBQUNELFFBQU0sV0FBd0Isa0JBQWtCO0FBQ2hELFFBQU0sRUFBRSxTQUFTLFFBQVEsSUFBSTtBQUU3QixPQUFJLG1DQUFTLFlBQVcsR0FBRztBQUMxQixXQUFPLENBQUM7QUFBQSxFQUNUO0FBRUEsU0FBTyxHQUFHLElBQ1IsY0FBYyxRQUFRLG9CQUFvQixLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsT0FBTyxFQUMxRixJQUFJLEdBQUcsT0FBTyxnQkFBZ0I7QUFDakM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
package/package.json
CHANGED
package/src/astro-sys.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import ts from 'typescript';
|
|
1
|
+
import type ts from 'typescript/lib/tsserverlibrary';
|
|
2
2
|
import type { Logger } from './logger.js';
|
|
3
3
|
import { ensureRealAstroFilePath, isVirtualAstroFilePath, toRealAstroFilePath } from './utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* This should only be accessed by TS astro module resolution.
|
|
7
7
|
*/
|
|
8
|
-
export function createAstroSys(logger: Logger) {
|
|
8
|
+
export function createAstroSys(logger: Logger, typescript: typeof import('typescript/lib/tsserverlibrary')) {
|
|
9
9
|
const astroSys: ts.System = {
|
|
10
|
-
...
|
|
10
|
+
...typescript.sys,
|
|
11
11
|
fileExists(path: string) {
|
|
12
|
-
return
|
|
12
|
+
return typescript.sys.fileExists(ensureRealAstroFilePath(path));
|
|
13
13
|
},
|
|
14
14
|
readDirectory(path, extensions, exclude, include, depth) {
|
|
15
15
|
const extensionsWithAstro = (extensions ?? []).concat('.astro');
|
|
16
16
|
|
|
17
|
-
return
|
|
17
|
+
return typescript.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
|
|
18
18
|
},
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
if (
|
|
22
|
-
const realpath =
|
|
21
|
+
if (typescript.sys.realpath) {
|
|
22
|
+
const realpath = typescript.sys.realpath;
|
|
23
23
|
astroSys.realpath = function (path) {
|
|
24
24
|
if (isVirtualAstroFilePath(path)) {
|
|
25
25
|
return realpath(toRealAstroFilePath(path)) + '.ts';
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type ts from 'typescript/lib/tsserverlibrary';
|
|
2
2
|
import { AstroSnapshotManager } from './astro-snapshots.js';
|
|
3
|
-
import { decorateLanguageService } from './language-service/index.js';
|
|
3
|
+
import { decorateLanguageService, isPatched } from './language-service/index.js';
|
|
4
4
|
import { Logger } from './logger.js';
|
|
5
5
|
import { patchModuleLoader } from './module-loader.js';
|
|
6
6
|
import { ProjectAstroFilesManager } from './project-astro-files.js';
|
|
@@ -18,6 +18,10 @@ function init(modules: { typescript: typeof import('typescript/lib/tsserverlibra
|
|
|
18
18
|
return info.languageService;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
if (isPatched(info.languageService)) {
|
|
22
|
+
return info.languageService;
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
logger.log('Starting Astro plugin');
|
|
22
26
|
|
|
23
27
|
const snapshotManager = new AstroSnapshotManager(modules.typescript, info.project.projectService, logger);
|
|
@@ -32,7 +36,7 @@ function init(modules: { typescript: typeof import('typescript/lib/tsserverlibra
|
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
patchModuleLoader(logger, snapshotManager, modules.typescript, info.languageServiceHost, info.project);
|
|
35
|
-
return decorateLanguageService(info.languageService, snapshotManager, logger);
|
|
39
|
+
return decorateLanguageService(info.languageService, snapshotManager, ts, logger);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
function getExternalFiles(project: ts.server.ConfiguredProject) {
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import ts from 'typescript/lib/tsserverlibrary';
|
|
1
|
+
import type ts from 'typescript/lib/tsserverlibrary';
|
|
2
2
|
import { isAstroFilePath } from '../utils.js';
|
|
3
3
|
|
|
4
|
+
type _ts = typeof ts;
|
|
5
|
+
|
|
4
6
|
export enum DiagnosticCodes {
|
|
5
7
|
CANNOT_FIND_MODULE = 2307, // Cannot find module '{0}' or its corresponding type declarations.
|
|
6
8
|
}
|
|
7
9
|
|
|
8
|
-
export function decorateDiagnostics(ls: ts.LanguageService): void {
|
|
10
|
+
export function decorateDiagnostics(ls: ts.LanguageService, typescript: _ts): void {
|
|
9
11
|
decorateSyntacticDiagnostics(ls);
|
|
10
|
-
decorateSemanticDiagnostics(ls);
|
|
12
|
+
decorateSemanticDiagnostics(ls, typescript);
|
|
11
13
|
decorateSuggestionDiagnostics(ls);
|
|
12
14
|
}
|
|
13
15
|
|
|
@@ -23,7 +25,7 @@ function decorateSyntacticDiagnostics(ls: ts.LanguageService): void {
|
|
|
23
25
|
};
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
function decorateSemanticDiagnostics(ls: ts.LanguageService): void {
|
|
28
|
+
function decorateSemanticDiagnostics(ls: ts.LanguageService, typescript: _ts): void {
|
|
27
29
|
const getSemanticDiagnostics = ls.getSemanticDiagnostics;
|
|
28
30
|
ls.getSemanticDiagnostics = (fileName: string) => {
|
|
29
31
|
// Diagnostics inside Astro files are done
|
|
@@ -34,7 +36,7 @@ function decorateSemanticDiagnostics(ls: ts.LanguageService): void {
|
|
|
34
36
|
|
|
35
37
|
let diagnostics = getSemanticDiagnostics(fileName);
|
|
36
38
|
diagnostics = diagnostics.map((diag) => {
|
|
37
|
-
const message =
|
|
39
|
+
const message = typescript.flattenDiagnosticMessageText(diag.messageText, typescript.sys.newLine);
|
|
38
40
|
if (
|
|
39
41
|
diag.code === DiagnosticCodes.CANNOT_FIND_MODULE &&
|
|
40
42
|
message.includes('astro:content') &&
|
|
@@ -44,8 +46,8 @@ function decorateSemanticDiagnostics(ls: ts.LanguageService): void {
|
|
|
44
46
|
) {
|
|
45
47
|
diag.messageText =
|
|
46
48
|
message +
|
|
47
|
-
`${
|
|
48
|
-
"If you're using content collections, make sure to run `astro dev`, `astro build` or `astro sync` to first generate the types so you can import from them. If you already ran one of those commands, restarting the TS Server might be necessary in order for the change to take effect";
|
|
49
|
+
`${typescript.sys.newLine}${typescript.sys.newLine}` +
|
|
50
|
+
"If you're using content collections, make sure to run `astro dev`, `astro build` or `astro sync` to first generate the types so you can import from them. If you already ran one of those commands, restarting the TS Server might be necessary in order for the change to take effect.";
|
|
49
51
|
}
|
|
50
52
|
|
|
51
53
|
return diag;
|
|
@@ -10,19 +10,47 @@ import { decorateGetImplementation } from './implementation.js';
|
|
|
10
10
|
import { decorateLineColumnOffset } from './line-column-offset.js';
|
|
11
11
|
import { decorateRename } from './rename.js';
|
|
12
12
|
|
|
13
|
+
const astroPluginPatchSymbol = Symbol('astroPluginPatchSymbol');
|
|
14
|
+
|
|
15
|
+
export function isPatched(ls: ts.LanguageService) {
|
|
16
|
+
return (ls as any)[astroPluginPatchSymbol] === true;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
export function decorateLanguageService(
|
|
14
20
|
ls: ts.LanguageService,
|
|
15
21
|
snapshotManager: AstroSnapshotManager,
|
|
22
|
+
ts: typeof import('typescript/lib/tsserverlibrary'),
|
|
16
23
|
logger: Logger
|
|
17
24
|
): ts.LanguageService {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const proxy = new Proxy(ls, createProxyHandler());
|
|
26
|
+
|
|
27
|
+
decorateLineColumnOffset(proxy, snapshotManager);
|
|
28
|
+
decorateRename(proxy, snapshotManager, logger);
|
|
29
|
+
decorateDiagnostics(proxy, ts);
|
|
30
|
+
decorateFindReferences(proxy, snapshotManager, logger);
|
|
31
|
+
decorateCompletions(proxy, logger);
|
|
32
|
+
decorateGetDefinition(proxy, snapshotManager);
|
|
33
|
+
decorateGetImplementation(proxy, snapshotManager);
|
|
34
|
+
decorateGetFileReferences(proxy, snapshotManager);
|
|
35
|
+
|
|
36
|
+
return proxy;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function createProxyHandler(): ProxyHandler<ts.LanguageService> {
|
|
40
|
+
const decorated: Partial<ts.LanguageService> = {};
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
get(target, p) {
|
|
44
|
+
if (p === astroPluginPatchSymbol) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return decorated[p as keyof ts.LanguageService] ?? target[p as keyof ts.LanguageService];
|
|
49
|
+
},
|
|
50
|
+
set(_, p, value) {
|
|
51
|
+
decorated[p as keyof ts.LanguageService] = value;
|
|
52
|
+
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
28
56
|
}
|
package/src/module-loader.ts
CHANGED
|
@@ -8,19 +8,19 @@ import { ensureRealAstroFilePath, isVirtualAstroFilePath } from './utils.js';
|
|
|
8
8
|
* Caches resolved modules.
|
|
9
9
|
*/
|
|
10
10
|
class ModuleResolutionCache {
|
|
11
|
-
private cache = new Map<string, ts.
|
|
11
|
+
private cache = new Map<string, ts.ResolvedModuleFull>();
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Tries to get a cached module.
|
|
15
15
|
*/
|
|
16
|
-
get(moduleName: string, containingFile: string): ts.
|
|
16
|
+
get(moduleName: string, containingFile: string): ts.ResolvedModuleFull | undefined {
|
|
17
17
|
return this.cache.get(this.getKey(moduleName, containingFile));
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Caches resolved module, if it is not undefined.
|
|
22
22
|
*/
|
|
23
|
-
set(moduleName: string, containingFile: string, resolvedModule: ts.
|
|
23
|
+
set(moduleName: string, containingFile: string, resolvedModule: ts.ResolvedModuleFull | undefined) {
|
|
24
24
|
if (!resolvedModule) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
@@ -60,11 +60,16 @@ export function patchModuleLoader(
|
|
|
60
60
|
lsHost: ts.LanguageServiceHost,
|
|
61
61
|
project: ts.server.Project
|
|
62
62
|
): void {
|
|
63
|
-
const astroSys = createAstroSys(logger);
|
|
63
|
+
const astroSys = createAstroSys(logger, typescript);
|
|
64
64
|
const moduleCache = new ModuleResolutionCache();
|
|
65
65
|
const origResolveModuleNames = lsHost.resolveModuleNames?.bind(lsHost);
|
|
66
|
+
const origResolveModuleNamLiterals = lsHost.resolveModuleNameLiterals?.bind(lsHost);
|
|
66
67
|
|
|
67
|
-
lsHost.
|
|
68
|
+
if (lsHost.resolveModuleNameLiterals) {
|
|
69
|
+
lsHost.resolveModuleNameLiterals = resolveModuleNameLiterals;
|
|
70
|
+
} else {
|
|
71
|
+
lsHost.resolveModuleNames = resolveModuleNames;
|
|
72
|
+
}
|
|
68
73
|
|
|
69
74
|
const origRemoveFile = project.removeFile.bind(project);
|
|
70
75
|
project.removeFile = (info, fileExists, detachFromProject) => {
|
|
@@ -118,7 +123,7 @@ export function patchModuleLoader(
|
|
|
118
123
|
name: string,
|
|
119
124
|
containingFile: string,
|
|
120
125
|
compilerOptions: ts.CompilerOptions
|
|
121
|
-
): ts.
|
|
126
|
+
): ts.ResolvedModuleFull | undefined {
|
|
122
127
|
const astroResolvedModule = typescript.resolveModuleName(
|
|
123
128
|
name,
|
|
124
129
|
containingFile,
|
|
@@ -142,4 +147,57 @@ export function patchModuleLoader(
|
|
|
142
147
|
};
|
|
143
148
|
return resolvedAstroModule;
|
|
144
149
|
}
|
|
150
|
+
|
|
151
|
+
function resolveModuleNameLiterals(
|
|
152
|
+
moduleLiterals: readonly ts.StringLiteralLike[],
|
|
153
|
+
containingFile: string,
|
|
154
|
+
redirectedReference: ts.ResolvedProjectReference | undefined,
|
|
155
|
+
options: ts.CompilerOptions,
|
|
156
|
+
containingSourceFile: ts.SourceFile,
|
|
157
|
+
reusedNames: readonly ts.StringLiteralLike[] | undefined
|
|
158
|
+
): readonly ts.ResolvedModuleWithFailedLookupLocations[] {
|
|
159
|
+
logger.log('Resolving modules names for ' + containingFile);
|
|
160
|
+
// Try resolving all module names with the original method first.
|
|
161
|
+
// The ones that are undefined will be re-checked if they are a
|
|
162
|
+
// Astro file and if so, are resolved, too. This way we can defer
|
|
163
|
+
// all module resolving logic except for Astro files to TypeScript.
|
|
164
|
+
const resolved =
|
|
165
|
+
origResolveModuleNamLiterals?.(
|
|
166
|
+
moduleLiterals,
|
|
167
|
+
containingFile,
|
|
168
|
+
redirectedReference,
|
|
169
|
+
options,
|
|
170
|
+
containingSourceFile,
|
|
171
|
+
reusedNames
|
|
172
|
+
) ??
|
|
173
|
+
moduleLiterals.map(
|
|
174
|
+
(): ts.ResolvedModuleWithFailedLookupLocations => ({
|
|
175
|
+
resolvedModule: undefined,
|
|
176
|
+
})
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
return resolved.map((tsResolvedModule, idx) => {
|
|
180
|
+
const moduleName = moduleLiterals[idx].text;
|
|
181
|
+
if (tsResolvedModule.resolvedModule || !ensureRealAstroFilePath(moduleName).endsWith('.astro')) {
|
|
182
|
+
return tsResolvedModule;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return resolveAstroModuleNameFromCache(moduleName, containingFile, options);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function resolveAstroModuleNameFromCache(moduleName: string, containingFile: string, options: ts.CompilerOptions) {
|
|
190
|
+
const cachedModule = moduleCache.get(moduleName, containingFile);
|
|
191
|
+
if (cachedModule) {
|
|
192
|
+
return {
|
|
193
|
+
resolvedModule: cachedModule,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const resolvedModule = resolveModuleName(moduleName, containingFile, options);
|
|
198
|
+
moduleCache.set(moduleName, containingFile, resolvedModule);
|
|
199
|
+
return {
|
|
200
|
+
resolvedModule: resolvedModule,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
145
203
|
}
|
package/src/utils.ts
CHANGED