@astrojs/ts-plugin 1.0.3 → 1.0.5

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 2f848fcabbf412ed
1
+ @astrojs/ts-plugin:build: cache hit, replaying output 295b71fd393768a9
2
2
  @astrojs/ts-plugin:build:
3
- @astrojs/ts-plugin:build: > @astrojs/ts-plugin@1.0.3 build /home/runner/work/language-tools/language-tools/packages/ts-plugin
3
+ @astrojs/ts-plugin:build: > @astrojs/ts-plugin@1.0.5 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.5
4
+
5
+ ### Patch Changes
6
+
7
+ - ae15420: Fix importing `.astro` files in `.ts` files not working with TypeScript 5.0+
8
+
9
+ ## 1.0.4
10
+
11
+ ### Patch Changes
12
+
13
+ - eaefe96: Fix packaging error
14
+
3
15
  ## 1.0.3
4
16
 
5
17
  ### Patch Changes
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) {
@@ -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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLDZCQUFxQztBQUNyQyw4QkFBbUQ7QUFDbkQsb0JBQXVCO0FBQ3ZCLDJCQUFrQztBQUNsQyxpQ0FBeUM7QUFDekMsbUJBQXFFO0FBRXJFLFNBQVMsS0FBSyxTQUEwRTtBQUN2RixRQUFNLEtBQUssUUFBUTtBQUVuQixXQUFTLE9BQU8sTUFBc0Q7QUFYdkU7QUFZRSxVQUFNLFNBQVMsSUFBSSxxQkFBTyxLQUFLLFFBQVEsZUFBZSxNQUFNO0FBQzVELFVBQU0scUJBQW9CLGdCQUFLLHFCQUFvQix5QkFBekIsZ0NBQWdELHNDQUF3QixLQUFLLE9BQU87QUFFOUcsUUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLGlCQUFpQixHQUFHO0FBQ3JELGFBQU8sSUFBSSx1RUFBdUU7QUFDbEYsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUVBLFlBQUksbUNBQVUsS0FBSyxlQUFlLEdBQUc7QUFDcEMsYUFBTyxLQUFLO0FBQUEsSUFDYjtBQUVBLFdBQU8sSUFBSSx1QkFBdUI7QUFFbEMsVUFBTSxrQkFBa0IsSUFBSSw0Q0FBcUIsUUFBUSxZQUFZLEtBQUssUUFBUSxnQkFBZ0IsTUFBTTtBQUN4RyxRQUFJLG1CQUFtQjtBQUN0QixVQUFJO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLGdEQUFrQixRQUFRLGlCQUFpQixRQUFRLFlBQVksS0FBSyxxQkFBcUIsS0FBSyxPQUFPO0FBQ3JHLGVBQU8saURBQXdCLEtBQUssaUJBQWlCLGlCQUFpQixNQUFNO0FBQUEsRUFDN0U7QUFFQSxXQUFTLGlCQUFpQixTQUFzQztBQXpDakU7QUEwQ0UsWUFBTywrREFBeUIsWUFBWSxRQUFRLGVBQWUsQ0FBQyxNQUE3RCxtQkFBZ0UsZUFBaEUsWUFBOEUsQ0FBQztBQUFBLEVBQ3ZGO0FBRUEsV0FBUyxlQUFlLFNBQTRCLG1CQUFxRDtBQUN4RyxRQUFJLG1CQUFtQjtBQUN0QixZQUFNLGlCQUFhLDBDQUE0QixJQUFJLFNBQVMsaUJBQWlCO0FBRTdFLFVBQUksV0FBVyxTQUFTO0FBQUcsZUFBTztBQUFBLElBQ25DO0FBRUEsUUFBSTtBQUNILFlBQU0sa0JBQWtCLFFBQVEsbUJBQW1CO0FBQ25ELFlBQU0sb0JBQ0wsT0FBTyxnQkFBZ0IsbUJBQW1CLFlBQzFDLFFBQVEsUUFBUSxTQUFTLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsQ0FBQztBQUVyRSxhQUFPO0FBQUEsSUFDUixTQUFTLEdBQVA7QUFDRCxjQUFRLGVBQWUsT0FBTyxLQUFLLENBQVc7QUFDOUMsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBRUEsU0FBTyxFQUFFLFFBQVEsaUJBQWlCO0FBQ25DO0FBRUEsaUJBQVM7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -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");
33
+ const astroPluginPatchSymbol = Symbol("astroPluginPatchSymbol");
34
+ function isPatched(ls) {
35
+ return ls[astroPluginPatchSymbol] === true;
36
+ }
32
37
  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;
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);
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,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xhbmd1YWdlLXNlcnZpY2UvaW5kZXgudHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQSx5QkFBb0M7QUFDcEMsd0JBQXNDO0FBQ3RDLHlCQUFvQztBQUNwQyw2QkFBMEM7QUFDMUMsNkJBQXVDO0FBQ3ZDLDRCQUEwQztBQUMxQyxnQ0FBeUM7QUFDekMsb0JBQStCO0FBRS9CLE1BQU0seUJBQXlCLE9BQU8sd0JBQXdCO0FBRXZELFNBQVMsVUFBVSxJQUF3QjtBQUNqRCxTQUFRLEdBQVcsNEJBQTRCO0FBQ2hEO0FBRU8sU0FBUyx3QkFDZixJQUNBLGlCQUNBLFFBQ3FCO0FBQ3JCLFFBQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQztBQUVoRCwwREFBeUIsT0FBTyxlQUFlO0FBQy9DLG9DQUFlLE9BQU8saUJBQWlCLE1BQU07QUFDN0MsOENBQW9CLEtBQUs7QUFDekIscURBQXVCLE9BQU8saUJBQWlCLE1BQU07QUFDckQsOENBQW9CLE9BQU8sTUFBTTtBQUNqQywrQ0FBc0IsT0FBTyxlQUFlO0FBQzVDLHVEQUEwQixPQUFPLGVBQWU7QUFDaEQsd0RBQTBCLE9BQU8sZUFBZTtBQUVoRCxTQUFPO0FBQ1I7QUFFQSxTQUFTLHFCQUF1RDtBQUMvRCxRQUFNLFlBQXlDLENBQUM7QUFFaEQsU0FBTztBQUFBLElBQ04sSUFBSSxRQUFRLEdBQUc7QUF6Q2pCO0FBMENHLFVBQUksTUFBTSx3QkFBd0I7QUFDakMsZUFBTztBQUFBLE1BQ1I7QUFFQSxjQUFPLGVBQVUsT0FBVixZQUE0QyxPQUFPO0FBQUEsSUFDM0Q7QUFBQSxJQUNBLElBQUksR0FBRyxHQUFHLE9BQU87QUFDaEIsZ0JBQVUsS0FBaUM7QUFFM0MsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBQ0Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -48,11 +48,16 @@ class ModuleResolutionCache {
48
48
  }
49
49
  }
50
50
  function patchModuleLoader(logger, snapshotManager, typescript, lsHost, project) {
51
- var _a;
51
+ var _a, _b;
52
52
  const astroSys = (0, import_astro_sys.createAstroSys)(logger);
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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QUFXO0FBQUEsTUFDdEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNELEVBQUU7QUFDRixRQUFJLENBQUMsdUJBQXVCLEtBQUMscUNBQXVCLG9CQUFvQixnQkFBZ0IsR0FBRztBQUMxRixhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sdUJBQW1CLHNDQUF3QixvQkFBb0IsZ0JBQWdCO0FBQ3JGLFdBQU8sSUFBSSxZQUFZLE1BQU0saUJBQWlCLGdCQUFnQjtBQUM5RCxVQUFNLFdBQVcsZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQ3hELFFBQUksQ0FBQyxVQUFVO0FBQ2QsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLHNCQUE2QztBQUFBLE1BQ2xELFdBQVcsV0FBVyxVQUFVO0FBQUEsTUFDaEM7QUFBQSxJQUNEO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFFQSxXQUFTLDBCQUNSLGdCQUNBLGdCQUNBLHFCQUNBLFNBQ0Esc0JBQ0EsYUFDd0Q7QUE3SjFELFFBQUFBO0FBOEpFLFdBQU8sSUFBSSxpQ0FBaUMsY0FBYztBQUsxRCxVQUFNLFlBQ0xBLE1BQUE7QUFBQSxNQUNDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxVQU5ELE9BQUFBLE1BUUEsZUFBZTtBQUFBLE1BQ2QsT0FBbUQ7QUFBQSxRQUNsRCxnQkFBZ0I7QUFBQSxNQUNqQjtBQUFBLElBQ0Q7QUFFRCxXQUFPLFNBQVMsSUFBSSxDQUFDLGtCQUFrQixRQUFRO0FBQzlDLFlBQU0sYUFBYSxlQUFlLEtBQUs7QUFDdkMsVUFBSSxpQkFBaUIsa0JBQWtCLEtBQUMsc0NBQXdCLFVBQVUsRUFBRSxTQUFTLFFBQVEsR0FBRztBQUMvRixlQUFPO0FBQUEsTUFDUjtBQUVBLGFBQU8sZ0NBQWdDLFlBQVksZ0JBQWdCLE9BQU87QUFBQSxJQUMzRSxDQUFDO0FBQUEsRUFDRjtBQUVBLFdBQVMsZ0NBQWdDLFlBQW9CLGdCQUF3QixTQUE2QjtBQUNqSCxVQUFNLGVBQWUsWUFBWSxJQUFJLFlBQVksY0FBYztBQUMvRCxRQUFJLGNBQWM7QUFDakIsYUFBTztBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsTUFDakI7QUFBQSxJQUNEO0FBRUEsVUFBTSxpQkFBaUIsa0JBQWtCLFlBQVksZ0JBQWdCLE9BQU87QUFDNUUsZ0JBQVksSUFBSSxZQUFZLGdCQUFnQixjQUFjO0FBQzFELFdBQU87QUFBQSxNQUNOO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFDRDsiLAogICJuYW1lcyI6IFsiX2EiXQp9Cg==
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.3",
3
+ "version": "1.0.5",
4
4
  "description": "A TypeScript Plugin providing Astro intellisense",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
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);
@@ -10,19 +10,46 @@ 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,
16
22
  logger: Logger
17
23
  ): 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;
24
+ const proxy = new Proxy(ls, createProxyHandler());
25
+
26
+ decorateLineColumnOffset(proxy, snapshotManager);
27
+ decorateRename(proxy, snapshotManager, logger);
28
+ decorateDiagnostics(proxy);
29
+ decorateFindReferences(proxy, snapshotManager, logger);
30
+ decorateCompletions(proxy, logger);
31
+ decorateGetDefinition(proxy, snapshotManager);
32
+ decorateGetImplementation(proxy, snapshotManager);
33
+ decorateGetFileReferences(proxy, snapshotManager);
34
+
35
+ return proxy;
36
+ }
37
+
38
+ function createProxyHandler(): ProxyHandler<ts.LanguageService> {
39
+ const decorated: Partial<ts.LanguageService> = {};
40
+
41
+ return {
42
+ get(target, p) {
43
+ if (p === astroPluginPatchSymbol) {
44
+ return true;
45
+ }
46
+
47
+ return decorated[p as keyof ts.LanguageService] ?? target[p as keyof ts.LanguageService];
48
+ },
49
+ set(_, p, value) {
50
+ decorated[p as keyof ts.LanguageService] = value;
51
+
52
+ return true;
53
+ },
54
+ };
28
55
  }
@@ -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
  }
@@ -63,8 +63,13 @@ export function patchModuleLoader(
63
63
  const astroSys = createAstroSys(logger);
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
  }