@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.
@@ -1,5 +1,5 @@
1
- @astrojs/ts-plugin:build: cache hit, replaying output 00614ff6501ebd18
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.4 build /home/runner/work/language-tools/language-tools/packages/ts-plugin
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
- ...import_typescript.default.sys,
27
+ ...typescript.sys,
35
28
  fileExists(path) {
36
- return import_typescript.default.sys.fileExists((0, import_utils.ensureRealAstroFilePath)(path));
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 import_typescript.default.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
33
+ return typescript.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
41
34
  }
42
35
  };
43
- if (import_typescript.default.sys.realpath) {
44
- const realpath = import_typescript.default.sys.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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FzdHJvLXN5cy50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFBZTtBQUVmLG1CQUFxRjtBQUs5RSxTQUFTLGVBQWUsUUFBZ0I7QUFDOUMsUUFBTSxXQUFzQjtBQUFBLElBQzNCLEdBQUcsa0JBQUFBLFFBQUc7QUFBQSxJQUNOLFdBQVcsTUFBYztBQUN4QixhQUFPLGtCQUFBQSxRQUFHLElBQUksZUFBVyxzQ0FBd0IsSUFBSSxDQUFDO0FBQUEsSUFDdkQ7QUFBQSxJQUNBLGNBQWMsTUFBTSxZQUFZLFNBQVMsU0FBUyxPQUFPO0FBQ3hELFlBQU0sdUJBQXVCLGtDQUFjLENBQUMsR0FBRyxPQUFPLFFBQVE7QUFFOUQsYUFBTyxrQkFBQUEsUUFBRyxJQUFJLGNBQWMsTUFBTSxxQkFBcUIsU0FBUyxTQUFTLEtBQUs7QUFBQSxJQUMvRTtBQUFBLEVBQ0Q7QUFFQSxNQUFJLGtCQUFBQSxRQUFHLElBQUksVUFBVTtBQUNwQixVQUFNLFdBQVcsa0JBQUFBLFFBQUcsSUFBSTtBQUN4QixhQUFTLFdBQVcsU0FBVSxNQUFNO0FBQ25DLGNBQUkscUNBQXVCLElBQUksR0FBRztBQUNqQyxlQUFPLGFBQVMsa0NBQW9CLElBQUksQ0FBQyxJQUFJO0FBQUEsTUFDOUM7QUFDQSxhQUFPLFNBQVMsSUFBSTtBQUFBLElBQ3JCO0FBQUEsRUFDRDtBQUVBLFNBQU87QUFDUjsiLAogICJuYW1lcyI6IFsidHMiXQp9Cg==
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLDZCQUFxQztBQUNyQyw4QkFBd0M7QUFDeEMsb0JBQXVCO0FBQ3ZCLDJCQUFrQztBQUNsQyxpQ0FBeUM7QUFDekMsbUJBQXFFO0FBRXJFLFNBQVMsS0FBSyxTQUEwRTtBQUN2RixRQUFNLEtBQUssUUFBUTtBQUVuQixXQUFTLE9BQU8sTUFBc0Q7QUFYdkU7QUFZRSxVQUFNLFNBQVMsSUFBSSxxQkFBTyxLQUFLLFFBQVEsZUFBZSxNQUFNO0FBQzVELFVBQU0scUJBQW9CLGdCQUFLLHFCQUFvQix5QkFBekIsZ0NBQWdELHNDQUF3QixLQUFLLE9BQU87QUFFOUcsUUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLGlCQUFpQixHQUFHO0FBQ3JELGFBQU8sSUFBSSx1RUFBdUU7QUFDbEYsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUVBLFdBQU8sSUFBSSx1QkFBdUI7QUFFbEMsVUFBTSxrQkFBa0IsSUFBSSw0Q0FBcUIsUUFBUSxZQUFZLEtBQUssUUFBUSxnQkFBZ0IsTUFBTTtBQUN4RyxRQUFJLG1CQUFtQjtBQUN0QixVQUFJO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLGdEQUFrQixRQUFRLGlCQUFpQixRQUFRLFlBQVksS0FBSyxxQkFBcUIsS0FBSyxPQUFPO0FBQ3JHLGVBQU8saURBQXdCLEtBQUssaUJBQWlCLGlCQUFpQixNQUFNO0FBQUEsRUFDN0U7QUFFQSxXQUFTLGlCQUFpQixTQUFzQztBQXJDakU7QUFzQ0UsWUFBTywrREFBeUIsWUFBWSxRQUFRLGVBQWUsQ0FBQyxNQUE3RCxtQkFBZ0UsZUFBaEUsWUFBOEUsQ0FBQztBQUFBLEVBQ3ZGO0FBRUEsV0FBUyxlQUFlLFNBQTRCLG1CQUFxRDtBQUN4RyxRQUFJLG1CQUFtQjtBQUN0QixZQUFNLGlCQUFhLDBDQUE0QixJQUFJLFNBQVMsaUJBQWlCO0FBRTdFLFVBQUksV0FBVyxTQUFTO0FBQUcsZUFBTztBQUFBLElBQ25DO0FBRUEsUUFBSTtBQUNILFlBQU0sa0JBQWtCLFFBQVEsbUJBQW1CO0FBQ25ELFlBQU0sb0JBQ0wsT0FBTyxnQkFBZ0IsbUJBQW1CLFlBQzFDLFFBQVEsUUFBUSxTQUFTLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsQ0FBQztBQUVyRSxhQUFPO0FBQUEsSUFDUixTQUFTLEdBQVA7QUFDRCxjQUFRLGVBQWUsT0FBTyxLQUFLLENBQVc7QUFDOUMsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBRUEsU0FBTyxFQUFFLFFBQVEsaUJBQWlCO0FBQ25DO0FBRUEsaUJBQVM7IiwKICAibmFtZXMiOiBbXQp9Cg==
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 = import_tsserverlibrary.default.flattenDiagnosticMessageText(diag.messageText, import_tsserverlibrary.default.sys.newLine);
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 + `${import_tsserverlibrary.default.sys.newLine}${import_tsserverlibrary.default.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`;
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvZGlhZ25vc3RpY3MudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSw2QkFBZTtBQUNmLG1CQUFnQztBQUV6QixJQUFLLGtCQUFMLGtCQUFLQSxxQkFBTDtBQUNOLEVBQUFBLGtDQUFBLHdCQUFxQixRQUFyQjtBQURXLFNBQUFBO0FBQUEsR0FBQTtBQUlMLFNBQVMsb0JBQW9CLElBQThCO0FBQ2pFLCtCQUE2QixFQUFFO0FBQy9CLDhCQUE0QixFQUFFO0FBQzlCLGdDQUE4QixFQUFFO0FBQ2pDO0FBRUEsU0FBUyw2QkFBNkIsSUFBOEI7QUFDbkUsUUFBTSwwQkFBMEIsR0FBRztBQUNuQyxLQUFHLDBCQUEwQixDQUFDLGFBQXFCO0FBR2xELFlBQUksOEJBQWdCLFFBQVEsR0FBRztBQUM5QixhQUFPLENBQUM7QUFBQSxJQUNUO0FBQ0EsV0FBTyx3QkFBd0IsUUFBUTtBQUFBLEVBQ3hDO0FBQ0Q7QUFFQSxTQUFTLDRCQUE0QixJQUE4QjtBQUNsRSxRQUFNLHlCQUF5QixHQUFHO0FBQ2xDLEtBQUcseUJBQXlCLENBQUMsYUFBcUI7QUFHakQsWUFBSSw4QkFBZ0IsUUFBUSxHQUFHO0FBQzlCLGFBQU8sQ0FBQztBQUFBLElBQ1Q7QUFFQSxRQUFJLGNBQWMsdUJBQXVCLFFBQVE7QUFDakQsa0JBQWMsWUFBWSxJQUFJLENBQUMsU0FBUztBQUN2QyxZQUFNLFVBQVUsdUJBQUFDLFFBQUcsNkJBQTZCLEtBQUssYUFBYSx1QkFBQUEsUUFBRyxJQUFJLE9BQU87QUFDaEYsVUFDQyxLQUFLLFNBQVMsaUNBQ2QsUUFBUSxTQUFTLGVBQWUsS0FHaEMsQ0FBQyxRQUFRLFNBQVMscUJBQXFCLEdBQ3RDO0FBQ0QsYUFBSyxjQUNKLFVBQ0EsR0FBRyx1QkFBQUEsUUFBRyxJQUFJLFVBQVUsdUJBQUFBLFFBQUcsSUFBSTtBQUFBLE1BRTdCO0FBRUEsYUFBTztBQUFBLElBQ1IsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBQ0Q7QUFFQSxTQUFTLDhCQUE4QixJQUE4QjtBQUNwRSxRQUFNLDJCQUEyQixHQUFHO0FBQ3BDLEtBQUcsMkJBQTJCLENBQUMsYUFBcUI7QUFHbkQsWUFBSSw4QkFBZ0IsUUFBUSxHQUFHO0FBQzlCLGFBQU8sQ0FBQztBQUFBLElBQ1Q7QUFDQSxXQUFPLHlCQUF5QixRQUFRO0FBQUEsRUFDekM7QUFDRDsiLAogICJuYW1lcyI6IFsiRGlhZ25vc3RpY0NvZGVzIiwgInRzIl0KfQo=
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
- function decorateLanguageService(ls, snapshotManager, logger) {
33
- (0, import_line_column_offset.decorateLineColumnOffset)(ls, snapshotManager);
34
- (0, import_rename.decorateRename)(ls, snapshotManager, logger);
35
- (0, import_diagnostics.decorateDiagnostics)(ls);
36
- (0, import_find_references.decorateFindReferences)(ls, snapshotManager, logger);
37
- (0, import_completions.decorateCompletions)(ls, logger);
38
- (0, import_definition.decorateGetDefinition)(ls, snapshotManager);
39
- (0, import_implementation.decorateGetImplementation)(ls, snapshotManager);
40
- (0, import_file_references.decorateGetFileReferences)(ls, snapshotManager);
41
- return ls;
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvaW5kZXgudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0EseUJBQW9DO0FBQ3BDLHdCQUFzQztBQUN0Qyx5QkFBb0M7QUFDcEMsNkJBQTBDO0FBQzFDLDZCQUF1QztBQUN2Qyw0QkFBMEM7QUFDMUMsZ0NBQXlDO0FBQ3pDLG9CQUErQjtBQUV4QixTQUFTLHdCQUNmLElBQ0EsaUJBQ0EsUUFDcUI7QUFDckIsMERBQXlCLElBQUksZUFBZTtBQUM1QyxvQ0FBZSxJQUFJLGlCQUFpQixNQUFNO0FBQzFDLDhDQUFvQixFQUFFO0FBQ3RCLHFEQUF1QixJQUFJLGlCQUFpQixNQUFNO0FBQ2xELDhDQUFvQixJQUFJLE1BQU07QUFDOUIsK0NBQXNCLElBQUksZUFBZTtBQUN6Qyx1REFBMEIsSUFBSSxlQUFlO0FBQzdDLHdEQUEwQixJQUFJLGVBQWU7QUFFN0MsU0FBTztBQUNSOyIsCiAgIm5hbWVzIjogW10KfQo=
70
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvaW5kZXgudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQSx5QkFBb0M7QUFDcEMsd0JBQXNDO0FBQ3RDLHlCQUFvQztBQUNwQyw2QkFBMEM7QUFDMUMsNkJBQXVDO0FBQ3ZDLDRCQUEwQztBQUMxQyxnQ0FBeUM7QUFDekMsb0JBQStCO0FBRS9CLE1BQU0seUJBQXlCLE9BQU8sd0JBQXdCO0FBRXZELFNBQVMsVUFBVSxJQUF3QjtBQUNqRCxTQUFRLEdBQVcsNEJBQTRCO0FBQ2hEO0FBRU8sU0FBUyx3QkFDZixJQUNBLGlCQUNBLElBQ0EsUUFDcUI7QUFDckIsUUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLG1CQUFtQixDQUFDO0FBRWhELDBEQUF5QixPQUFPLGVBQWU7QUFDL0Msb0NBQWUsT0FBTyxpQkFBaUIsTUFBTTtBQUM3Qyw4Q0FBb0IsT0FBTyxFQUFFO0FBQzdCLHFEQUF1QixPQUFPLGlCQUFpQixNQUFNO0FBQ3JELDhDQUFvQixPQUFPLE1BQU07QUFDakMsK0NBQXNCLE9BQU8sZUFBZTtBQUM1Qyx1REFBMEIsT0FBTyxlQUFlO0FBQ2hELHdEQUEwQixPQUFPLGVBQWU7QUFFaEQsU0FBTztBQUNSO0FBRUEsU0FBUyxxQkFBdUQ7QUFDL0QsUUFBTSxZQUF5QyxDQUFDO0FBRWhELFNBQU87QUFBQSxJQUNOLElBQUksUUFBUSxHQUFHO0FBMUNqQjtBQTJDRyxVQUFJLE1BQU0sd0JBQXdCO0FBQ2pDLGVBQU87QUFBQSxNQUNSO0FBRUEsY0FBTyxlQUFVLE9BQVYsWUFBNEMsT0FBTztBQUFBLElBQzNEO0FBQUEsSUFDQSxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQ2hCLGdCQUFVLEtBQWlDO0FBRTNDLGFBQU87QUFBQSxJQUNSO0FBQUEsRUFDRDtBQUNEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -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.resolveModuleNames = resolveModuleNames;
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZHVsZS1sb2FkZXIudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsdUJBQStCO0FBRS9CLG1CQUFnRTtBQUtoRSxNQUFNLHNCQUFzQjtBQUFBLEVBQTVCO0FBQ0MsU0FBUSxRQUFRLG9CQUFJLElBQStCO0FBQUE7QUFBQSxFQUtuRCxJQUFJLFlBQW9CLGdCQUF1RDtBQUM5RSxXQUFPLEtBQUssTUFBTSxJQUFJLEtBQUssT0FBTyxZQUFZLGNBQWMsQ0FBQztBQUFBLEVBQzlEO0FBQUEsRUFLQSxJQUFJLFlBQW9CLGdCQUF3QixnQkFBK0M7QUFDOUYsUUFBSSxDQUFDLGdCQUFnQjtBQUNwQjtBQUFBLElBQ0Q7QUFDQSxTQUFLLE1BQU0sSUFBSSxLQUFLLE9BQU8sWUFBWSxjQUFjLEdBQUcsY0FBYztBQUFBLEVBQ3ZFO0FBQUEsRUFNQSxPQUFPLG9CQUFrQztBQUN4QyxTQUFLLE1BQU0sUUFBUSxDQUFDLEtBQUssUUFBUTtBQUNoQyxVQUFJLElBQUkscUJBQXFCLG9CQUFvQjtBQUNoRCxhQUFLLE1BQU0sT0FBTyxHQUFHO0FBQUEsTUFDdEI7QUFBQSxJQUNELENBQUM7QUFBQSxFQUNGO0FBQUEsRUFFUSxPQUFPLFlBQW9CLGdCQUF3QjtBQUMxRCxXQUFPLGlCQUFpQixZQUFRLHNDQUF3QixVQUFVO0FBQUEsRUFDbkU7QUFDRDtBQVdPLFNBQVMsa0JBQ2YsUUFDQSxpQkFDQSxZQUNBLFFBQ0EsU0FDTztBQTdEUjtBQThEQyxRQUFNLGVBQVcsaUNBQWUsTUFBTTtBQUN0QyxRQUFNLGNBQWMsSUFBSSxzQkFBc0I7QUFDOUMsUUFBTSwwQkFBeUIsWUFBTyx1QkFBUCxtQkFBMkIsS0FBSztBQUUvRCxTQUFPLHFCQUFxQjtBQUU1QixRQUFNLGlCQUFpQixRQUFRLFdBQVcsS0FBSyxPQUFPO0FBQ3RELFVBQVEsYUFBYSxDQUFDLE1BQU0sWUFBWSxzQkFBc0I7QUFDN0QsV0FBTyxJQUFJLDhDQUE4QyxLQUFLLFFBQVE7QUFDdEUsZ0JBQVksT0FBTyxLQUFLLFFBQVE7QUFDaEMsV0FBTyxlQUFlLE1BQU0sWUFBWSxpQkFBaUI7QUFBQSxFQUMxRDtBQUdBLFFBQU0sb0JBQW9CLFFBQVEsY0FBYyxLQUFLLE9BQU87QUFDNUQsVUFBUSxnQkFBZ0IsQ0FBQyxNQUFNLFlBQVksU0FBUyxTQUFTLFVBQVU7QUFDdEUsVUFBTSx1QkFBdUIsa0NBQWMsQ0FBQyxHQUFHLE9BQU8sVUFBVSxPQUFPLE1BQU07QUFDN0UsV0FBTyxrQkFBa0IsTUFBTSxxQkFBcUIsU0FBUyxTQUFTLEtBQUs7QUFBQSxFQUM1RTtBQUVBLFdBQVMsbUJBQ1IsYUFDQSxnQkFDQSxhQUNBLHFCQUNBLGlCQUN1QztBQU92QyxVQUFNLFlBQ0wsaUVBQXlCLGFBQWEsZ0JBQWdCLGFBQWEscUJBQXFCLHFCQUN4RixNQUFNLEtBQWdCLE1BQU0sWUFBWSxNQUFNLENBQUM7QUFFaEQsV0FBTyxTQUFTLElBQUksQ0FBQyxZQUFZLFFBQVE7QUFDeEMsWUFBTSxXQUFXLFlBQVk7QUFDN0IsVUFBSSxjQUFjLEtBQUMsc0NBQXdCLFFBQVEsRUFBRSxTQUFTLFFBQVEsR0FBRztBQUN4RSxlQUFPO0FBQUEsTUFDUjtBQUVBLFlBQU0sZUFBZSxZQUFZLElBQUksVUFBVSxjQUFjO0FBQzdELFVBQUksY0FBYztBQUNqQixlQUFPO0FBQUEsTUFDUjtBQUVBLFlBQU0saUJBQWlCLGtCQUFrQixVQUFVLGdCQUFnQixlQUFlO0FBQ2xGLGtCQUFZLElBQUksVUFBVSxnQkFBZ0IsY0FBYztBQUN4RCxhQUFPO0FBQUEsSUFDUixDQUFDO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQ1IsTUFDQSxnQkFDQSxpQkFDZ0M7QUFDaEMsVUFBTSxzQkFBc0IsV0FBVztBQUFBLE1BQ3RDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRCxFQUFFO0FBQ0YsUUFBSSxDQUFDLHVCQUF1QixLQUFDLHFDQUF1QixvQkFBb0IsZ0JBQWdCLEdBQUc7QUFDMUYsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLHVCQUFtQixzQ0FBd0Isb0JBQW9CLGdCQUFnQjtBQUNyRixXQUFPLElBQUksWUFBWSxNQUFNLGlCQUFpQixnQkFBZ0I7QUFDOUQsVUFBTSxXQUFXLGdCQUFnQixPQUFPLGdCQUFnQjtBQUN4RCxRQUFJLENBQUMsVUFBVTtBQUNkLGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSxzQkFBNkM7QUFBQSxNQUNsRCxXQUFXLFdBQVcsVUFBVTtBQUFBLE1BQ2hDO0FBQUEsSUFDRDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBQ0Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQU8sU0FBUyxnQkFBZ0IsVUFBa0I7QUFDakQsU0FBTyxTQUFTLFNBQVMsUUFBUTtBQUNsQztBQUVPLFNBQVMsdUJBQXVCLFVBQWtCO0FBQ3hELFNBQU8sU0FBUyxTQUFTLFdBQVc7QUFDckM7QUFFTyxTQUFTLG9CQUFvQixVQUFrQjtBQUNyRCxTQUFPLFNBQVMsTUFBTSxHQUFHLENBQUMsTUFBTSxNQUFNO0FBQ3ZDO0FBRU8sU0FBUyx3QkFBd0IsVUFBa0I7QUFDekQsU0FBTyx1QkFBdUIsUUFBUSxJQUFJLG9CQUFvQixRQUFRLElBQUk7QUFDM0U7QUFFTyxTQUFTLHFCQUF3QixLQUFxQztBQUM1RSxTQUFPLFFBQVEsVUFBYSxRQUFRO0FBQ3JDO0FBS08sU0FBUyxZQUNmLEtBQ0EsV0FDQSxnQkFDSTtBQUNKLFNBQU8sYUFBYSxHQUFHO0FBRXZCLFdBQVMsYUFBYSxNQUFnQjtBQUNyQyxRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzdCLGFBQU8sS0FBSyxRQUFRLFdBQVcsY0FBYztBQUFBLElBQzlDO0FBQ0EsUUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3hCLGFBQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxhQUFhLEtBQUssQ0FBQztBQUFBLElBQy9DO0FBQ0EsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM3QixhQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksUUFBUTtBQUM1QyxXQUFHLE9BQU8sYUFBYSxLQUFLLElBQUk7QUFDaEMsZUFBTztBQUFBLE1BQ1IsR0FBRyxDQUFDLENBQVE7QUFBQSxJQUNiO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFDRDtBQUVPLFNBQVMsd0JBQXdCLFNBQTRCO0FBL0NwRTtBQWdEQyxVQUNFLGFBQXdDLDRCQUF4QyxZQUNBLFFBQVEsbUJBQW1CLEVBQVU7QUFFeEM7QUFFTyxTQUFTLDRCQUNmLElBQ0EsU0FDQSxtQkFDQztBQUNELFFBQU0sV0FBd0Isa0JBQWtCO0FBQ2hELFFBQU0sRUFBRSxTQUFTLFFBQVEsSUFBSTtBQUU3QixPQUFJLG1DQUFTLFlBQVcsR0FBRztBQUMxQixXQUFPLENBQUM7QUFBQSxFQUNUO0FBRUEsU0FBTyxHQUFHLElBQ1IsY0FBYyxRQUFRLG9CQUFvQixLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsT0FBTyxFQUMxRixJQUFJLEdBQUcsT0FBTyxnQkFBZ0I7QUFDakM7IiwKICAibmFtZXMiOiBbXQp9Cg==
87
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3V0aWxzLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRU8sU0FBUyxnQkFBZ0IsVUFBa0I7QUFDakQsU0FBTyxTQUFTLFNBQVMsUUFBUTtBQUNsQztBQUVPLFNBQVMsdUJBQXVCLFVBQWtCO0FBQ3hELFNBQU8sU0FBUyxTQUFTLFdBQVc7QUFDckM7QUFFTyxTQUFTLG9CQUFvQixVQUFrQjtBQUNyRCxTQUFPLFNBQVMsTUFBTSxHQUFHLENBQUMsTUFBTSxNQUFNO0FBQ3ZDO0FBRU8sU0FBUyx3QkFBd0IsVUFBa0I7QUFDekQsU0FBTyx1QkFBdUIsUUFBUSxJQUFJLG9CQUFvQixRQUFRLElBQUk7QUFDM0U7QUFFTyxTQUFTLHFCQUF3QixLQUFxQztBQUM1RSxTQUFPLFFBQVEsVUFBYSxRQUFRO0FBQ3JDO0FBS08sU0FBUyxZQUNmLEtBQ0EsV0FDQSxnQkFDSTtBQUNKLFNBQU8sYUFBYSxHQUFHO0FBRXZCLFdBQVMsYUFBYSxNQUFnQjtBQUNyQyxRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzdCLGFBQU8sS0FBSyxRQUFRLFdBQVcsY0FBYztBQUFBLElBQzlDO0FBQ0EsUUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3hCLGFBQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxhQUFhLEtBQUssQ0FBQztBQUFBLElBQy9DO0FBQ0EsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM3QixhQUFPLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksUUFBUTtBQUM1QyxXQUFHLE9BQU8sYUFBYSxLQUFLLElBQUk7QUFDaEMsZUFBTztBQUFBLE1BQ1IsR0FBRyxDQUFDLENBQVE7QUFBQSxJQUNiO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFDRDtBQUVPLFNBQVMsd0JBQXdCLFNBQTRCO0FBakRwRTtBQWtEQyxVQUNFLGFBQXdDLDRCQUF4QyxZQUNBLFFBQVEsbUJBQW1CLEVBQVU7QUFFeEM7QUFFTyxTQUFTLDRCQUNmLElBQ0EsU0FDQSxtQkFDQztBQUNELFFBQU0sV0FBd0Isa0JBQWtCO0FBQ2hELFFBQU0sRUFBRSxTQUFTLFFBQVEsSUFBSTtBQUU3QixPQUFJLG1DQUFTLFlBQVcsR0FBRztBQUMxQixXQUFPLENBQUM7QUFBQSxFQUNUO0FBRUEsU0FBTyxHQUFHLElBQ1IsY0FBYyxRQUFRLG9CQUFvQixLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsT0FBTyxFQUMxRixJQUFJLEdBQUcsT0FBTyxnQkFBZ0I7QUFDakM7IiwKICAibmFtZXMiOiBbXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrojs/ts-plugin",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "A TypeScript Plugin providing Astro intellisense",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
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
- ...ts.sys,
10
+ ...typescript.sys,
11
11
  fileExists(path: string) {
12
- return ts.sys.fileExists(ensureRealAstroFilePath(path));
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 ts.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
17
+ return typescript.sys.readDirectory(path, extensionsWithAstro, exclude, include, depth);
18
18
  },
19
19
  };
20
20
 
21
- if (ts.sys.realpath) {
22
- const realpath = ts.sys.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 = ts.flattenDiagnosticMessageText(diag.messageText, ts.sys.newLine);
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
- `${ts.sys.newLine}${ts.sys.newLine}` +
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
- decorateLineColumnOffset(ls, snapshotManager);
19
- decorateRename(ls, snapshotManager, logger);
20
- decorateDiagnostics(ls);
21
- decorateFindReferences(ls, snapshotManager, logger);
22
- decorateCompletions(ls, logger);
23
- decorateGetDefinition(ls, snapshotManager);
24
- decorateGetImplementation(ls, snapshotManager);
25
- decorateGetFileReferences(ls, snapshotManager);
26
-
27
- return ls;
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
  }
@@ -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.ResolvedModule>();
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.ResolvedModule | undefined {
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.ResolvedModule | undefined) {
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.resolveModuleNames = resolveModuleNames;
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.ResolvedModule | undefined {
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
@@ -1,3 +1,5 @@
1
+ import type ts from 'typescript/lib/tsserverlibrary';
2
+
1
3
  export function isAstroFilePath(filePath: string) {
2
4
  return filePath.endsWith('.astro');
3
5
  }
package/tsconfig.json CHANGED
@@ -5,6 +5,7 @@
5
5
  "rootDir": "src",
6
6
  "target": "ES2020",
7
7
  "module": "CommonJS",
8
+ "ignoreDeprecations": "5.0",
8
9
  "importsNotUsedAsValues": "error"
9
10
  },
10
11
  "include": ["src"],