@astrojs/ts-plugin 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -0
- package/CHANGELOG.md +19 -0
- package/README.md +3 -0
- package/dist/astro-snapshots.js +3 -2
- package/dist/astro2tsx.js +57 -0
- package/dist/index.js +1 -1
- package/dist/module-loader.js +2 -2
- package/package.json +27 -26
- package/src/astro-snapshots.ts +3 -3
- package/src/astro-sys.ts +1 -1
- package/src/astro2tsx.ts +53 -0
- package/src/index.ts +10 -10
- package/src/language-service/diagnostics.ts +2 -2
- package/src/module-loader.ts +9 -9
- package/src/source-mapper.ts +1 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @astrojs/ts-plugin
|
|
2
|
+
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d056cd5: Fixes production bugs in extension
|
|
8
|
+
|
|
9
|
+
## 0.2.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 6b6b47a: Remove internal astro.d.ts files, instead prefer the one provided by Astro itself
|
|
14
|
+
|
|
15
|
+
## 0.1.1
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- f1f3091: Fix commenting, namespaced elements, and Fragment typings
|
package/README.md
ADDED
package/dist/astro-snapshots.js
CHANGED
|
@@ -25,6 +25,7 @@ __export(exports, {
|
|
|
25
25
|
AstroSnapshot: () => AstroSnapshot,
|
|
26
26
|
AstroSnapshotManager: () => AstroSnapshotManager
|
|
27
27
|
});
|
|
28
|
+
var import_astro2tsx = __toModule(require("./astro2tsx.js"));
|
|
28
29
|
var import_source_mapper = __toModule(require("./source-mapper.js"));
|
|
29
30
|
var import_utils = __toModule(require("./utils.js"));
|
|
30
31
|
class AstroSnapshot {
|
|
@@ -219,7 +220,7 @@ class AstroSnapshotManager {
|
|
|
219
220
|
const astroCode = readFile(path) || "";
|
|
220
221
|
try {
|
|
221
222
|
const isTsFile = true;
|
|
222
|
-
const result =
|
|
223
|
+
const result = (0, import_astro2tsx.astro2tsx)(astroCode, {
|
|
223
224
|
filename: path.split("/").pop(),
|
|
224
225
|
isTsFile
|
|
225
226
|
});
|
|
@@ -246,4 +247,4 @@ class AstroSnapshotManager {
|
|
|
246
247
|
AstroSnapshot,
|
|
247
248
|
AstroSnapshotManager
|
|
248
249
|
});
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FzdHJvLXNuYXBzaG90cy50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQTBCO0FBRzFCLDJCQUE2QjtBQUM3QixtQkFBNkQ7QUFFdEQsb0JBQW9CO0FBQUEsRUFLdkIsWUFDWSxZQUNBLFVBQ0EsV0FDQSxRQUNBLFFBQ1EsVUFDbEI7QUFOVTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1E7QUFSWix3Q0FBK0I7QUFBQTtBQUFBLEVBV3ZDLE9BQU8sV0FBbUIsUUFBc0I7QUFDNUMsU0FBSyxZQUFZO0FBQ2pCLFNBQUssU0FBUztBQUNkLFNBQUssY0FBYztBQUNuQixTQUFLLElBQUk7QUFBQTtBQUFBLEVBR2Isb0JBQW9CLFVBQTJDO0FBQzNELFFBQUksQ0FBQyw4Q0FBNEIsS0FBSyxXQUFXLFdBQVc7QUFDeEQsYUFBTztBQUFBO0FBR1gsVUFBTSxRQUFRLEtBQUssa0JBQWtCLFNBQVM7QUFDOUMsUUFBSSxVQUFVLElBQUk7QUFDZCxhQUFPO0FBQUE7QUFJWCxXQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0EsUUFBUSxTQUFTO0FBQUE7QUFBQTtBQUFBLEVBSXpCLGtCQUFrQixpQkFBeUI7QUFDdkMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNsQixhQUFPO0FBQUE7QUFHWCxTQUFLLGtCQUFrQjtBQUN2QixVQUFNLGFBQWEsS0FBSyxXQUFXLHFCQUFxQjtBQUN4RCxTQUFLLE1BQU0sc0JBQXNCLGlCQUFpQixLQUFLO0FBQ3ZELFVBQU0sV0FBVyxLQUFLLE9BQU8sb0JBQW9CO0FBQUEsTUFDN0MsTUFBTSxXQUFXLE9BQU87QUFBQSxNQUN4QixXQUFXLFdBQVcsU0FBUztBQUFBO0FBRW5DLFNBQUssa0JBQWtCO0FBQ3ZCLFFBQUksU0FBUyxTQUFTLElBQUk7QUFDdEIsYUFBTztBQUFBO0FBR1gsVUFBTSxpQkFBaUIsS0FBSyxXQUFXLHFCQUNuQyxTQUFT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
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, {get: all[name], enumerable: true});
|
|
11
|
+
};
|
|
12
|
+
var __reExport = (target, module2, desc) => {
|
|
13
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(module2))
|
|
15
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
16
|
+
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
|
|
17
|
+
}
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
var __toModule = (module2) => {
|
|
21
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
|
|
22
|
+
};
|
|
23
|
+
__markAsModule(exports);
|
|
24
|
+
__export(exports, {
|
|
25
|
+
astro2tsx: () => astro2tsx
|
|
26
|
+
});
|
|
27
|
+
var import_ts_morph = __toModule(require("ts-morph"));
|
|
28
|
+
function astro2tsx(code, options) {
|
|
29
|
+
const compiled = transformContent(code);
|
|
30
|
+
const result = {
|
|
31
|
+
code: compiled,
|
|
32
|
+
map: {
|
|
33
|
+
mappings: []
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
function addProps(content) {
|
|
39
|
+
let defaultExportType = "Record<string, any>";
|
|
40
|
+
const project = new import_ts_morph.Project({});
|
|
41
|
+
const sourceFile = project.createSourceFile("testing.ts", content);
|
|
42
|
+
const declarations = sourceFile.getExportedDeclarations();
|
|
43
|
+
if (declarations.has("Props")) {
|
|
44
|
+
defaultExportType = "Props";
|
|
45
|
+
}
|
|
46
|
+
return `
|
|
47
|
+
export default function (props: ${defaultExportType}): string;`;
|
|
48
|
+
}
|
|
49
|
+
function transformContent(content) {
|
|
50
|
+
const ts = content.replace(/---/g, "///");
|
|
51
|
+
return ts + addProps(ts);
|
|
52
|
+
}
|
|
53
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
54
|
+
0 && (module.exports = {
|
|
55
|
+
astro2tsx
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FzdHJvMnRzeC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLHNCQUF3QjtBQWlCakIsbUJBQW1CLE1BQWMsU0FBNEM7QUFDbEYsUUFBTSxXQUFXLGlCQUFpQjtBQUVsQyxRQUFNLFNBQTBCO0FBQUEsSUFDOUIsTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLE1BQ0gsVUFBVTtBQUFBO0FBQUE7QUFJZCxTQUFPO0FBQUE7QUFJVCxrQkFBa0IsU0FBeUI7QUFDekMsTUFBSSxvQkFBb0I7QUFHeEIsUUFBTSxVQUFVLElBQUksd0JBQVE7QUFDNUIsUUFBTSxhQUFhLFFBQVEsaUJBQWlCLGNBQWM7QUFDMUQsUUFBTSxlQUFlLFdBQVc7QUFDaEMsTUFBRyxhQUFhLElBQUksVUFBVTtBQUM1Qix3QkFBb0I7QUFBQTtBQUV0QixTQUFPO0FBQUEsa0NBQTBDO0FBQUE7QUFHbkQsMEJBQTBCLFNBQWlCO0FBQ3pDLFFBQU0sS0FBSyxRQUFRLFFBQVEsUUFBUTtBQUNuQyxTQUNFLEtBRUEsU0FBUztBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/index.js
CHANGED
|
@@ -41,7 +41,7 @@ function init(modules) {
|
|
|
41
41
|
const compilerOptions = project.getCompilerOptions();
|
|
42
42
|
compilerOptions.jsx = modules.typescript.JsxEmit.Preserve;
|
|
43
43
|
if (!((_a = compilerOptions.jsxFactory) == null ? void 0 : _a.startsWith("astro"))) {
|
|
44
|
-
compilerOptions.jsxFactory = "
|
|
44
|
+
compilerOptions.jsxFactory = "astro.createElement";
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
function isAstroProject(info) {
|
package/dist/module-loader.js
CHANGED
|
@@ -85,7 +85,7 @@ function patchModuleLoader(logger, snapshotManager, typescript, lsHost, project)
|
|
|
85
85
|
return astroResolvedModule;
|
|
86
86
|
}
|
|
87
87
|
const resolvedFileName = (0, import_utils.ensureRealAstroFilePath)(astroResolvedModule.resolvedFileName);
|
|
88
|
-
logger.log("Resolved", name, "to
|
|
88
|
+
logger.log("Resolved", name, "to astro file", resolvedFileName);
|
|
89
89
|
const snapshot = snapshotManager.create(resolvedFileName);
|
|
90
90
|
if (!snapshot) {
|
|
91
91
|
return void 0;
|
|
@@ -101,4 +101,4 @@ function patchModuleLoader(logger, snapshotManager, typescript, lsHost, project)
|
|
|
101
101
|
0 && (module.exports = {
|
|
102
102
|
patchModuleLoader
|
|
103
103
|
});
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,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
|
package/package.json
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
2
|
+
"name": "@astrojs/ts-plugin",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "A TypeScript Plugin providing Astro intellisense",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "commonjs",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"astro",
|
|
9
|
+
"typescript",
|
|
10
|
+
"javascript",
|
|
11
|
+
"plugin"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "astro-scripts build \"src/**/*.ts\"",
|
|
15
|
+
"dev": "astro-scripts dev \"src/**/*.ts\""
|
|
16
|
+
},
|
|
17
|
+
"author": "withastro",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@tsconfig/node12": "^1.0.0",
|
|
21
|
+
"@types/node": "^13.9.0",
|
|
22
|
+
"typescript": "*"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"sourcemap-codec": "^1.4.8",
|
|
26
|
+
"ts-morph": "^12.0.0"
|
|
27
|
+
}
|
|
28
|
+
}
|
package/src/astro-snapshots.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { astro2tsx } from './astro2tsx.js';
|
|
2
2
|
import type ts from 'typescript/lib/tsserverlibrary';
|
|
3
3
|
import { Logger } from './logger.js';
|
|
4
4
|
import { SourceMapper } from './source-mapper.js';
|
|
@@ -262,8 +262,8 @@ export class AstroSnapshotManager {
|
|
|
262
262
|
this.logger.debug('Read Astro file:', path);
|
|
263
263
|
const astroCode = readFile(path) || '';
|
|
264
264
|
try {
|
|
265
|
-
const isTsFile = true;
|
|
266
|
-
const result =
|
|
265
|
+
const isTsFile = true;
|
|
266
|
+
const result = astro2tsx(astroCode, {
|
|
267
267
|
filename: path.split('/').pop(),
|
|
268
268
|
isTsFile
|
|
269
269
|
});
|
package/src/astro-sys.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Logger } from './logger.js';
|
|
|
3
3
|
import { ensureRealAstroFilePath, isVirtualAstroFilePath, toRealAstroFilePath } from './utils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* This should only be accessed by TS
|
|
6
|
+
* This should only be accessed by TS astro module resolution.
|
|
7
7
|
*/
|
|
8
8
|
export function createAstroSys(logger: Logger) {
|
|
9
9
|
const astroSys: ts.System = {
|
package/src/astro2tsx.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { FileMapping } from './source-mapper';
|
|
2
|
+
import { Project } from 'ts-morph';
|
|
3
|
+
|
|
4
|
+
// Note that this is a bit of a hack until the new compiler with proper
|
|
5
|
+
// source map support.
|
|
6
|
+
|
|
7
|
+
interface Astro2TSXOptions {
|
|
8
|
+
filename: string | undefined;
|
|
9
|
+
isTsFile: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Astro2TSXResult {
|
|
13
|
+
code: string;
|
|
14
|
+
map: {
|
|
15
|
+
mappings: FileMapping
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function astro2tsx(code: string, options: Astro2TSXOptions): Astro2TSXResult {
|
|
20
|
+
const compiled = transformContent(code);
|
|
21
|
+
|
|
22
|
+
const result: Astro2TSXResult = {
|
|
23
|
+
code: compiled,
|
|
24
|
+
map: {
|
|
25
|
+
mappings: []
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// This is hacky but it works for now
|
|
33
|
+
function addProps(content: string): string {
|
|
34
|
+
let defaultExportType = 'Record<string, any>';
|
|
35
|
+
|
|
36
|
+
// See if this has an interface already
|
|
37
|
+
const project = new Project({});
|
|
38
|
+
const sourceFile = project.createSourceFile("testing.ts", content);
|
|
39
|
+
const declarations = sourceFile.getExportedDeclarations();
|
|
40
|
+
if(declarations.has('Props')) {
|
|
41
|
+
defaultExportType = 'Props';
|
|
42
|
+
}
|
|
43
|
+
return '\n' + `export default function (props: ${defaultExportType}): string;`
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function transformContent(content: string) {
|
|
47
|
+
const ts = content.replace(/---/g, '///');
|
|
48
|
+
return (
|
|
49
|
+
ts +
|
|
50
|
+
// Add TypeScript definitions
|
|
51
|
+
addProps(ts)
|
|
52
|
+
);
|
|
53
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -35,27 +35,27 @@ function init(modules: { typescript: typeof ts }) {
|
|
|
35
35
|
|
|
36
36
|
function getExternalFiles(_project: ts.server.ConfiguredProject) {
|
|
37
37
|
// Needed so the ambient definitions are known inside the tsx files
|
|
38
|
-
/*const
|
|
39
|
-
const
|
|
40
|
-
'./
|
|
41
|
-
'./
|
|
42
|
-
'./
|
|
43
|
-
].map((f) => modules.typescript.sys.resolvePath(resolve(
|
|
44
|
-
return
|
|
38
|
+
/*const astroTsPath = dirname(require.resolve('astro2tsx'));
|
|
39
|
+
const astroTsxFiles = [
|
|
40
|
+
'./astro-shims.d.ts',
|
|
41
|
+
'./astro-jsx.d.ts',
|
|
42
|
+
'./astro-native-jsx.d.ts'
|
|
43
|
+
].map((f) => modules.typescript.sys.resolvePath(resolve(astroTsPath, f)));
|
|
44
|
+
return astroTsxFiles;*/
|
|
45
45
|
return [];
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function patchCompilerOptions(project: ts.server.Project) {
|
|
49
49
|
const compilerOptions = project.getCompilerOptions();
|
|
50
|
-
// Patch needed because
|
|
50
|
+
// Patch needed because astro2tsx creates jsx/tsx files
|
|
51
51
|
compilerOptions.jsx = modules.typescript.JsxEmit.Preserve;
|
|
52
52
|
|
|
53
53
|
// detect which JSX namespace to use (astro | astronative) if not specified or not compatible
|
|
54
54
|
if (!compilerOptions.jsxFactory?.startsWith('astro')) {
|
|
55
|
-
// Default to regular
|
|
55
|
+
// Default to regular astro, this causes the usage of the "astro.JSX" namespace
|
|
56
56
|
// We don't need to add a switch for astro-native because the jsx is only relevant
|
|
57
57
|
// within Astro files, which this plugin does not deal with.
|
|
58
|
-
compilerOptions.jsxFactory = '
|
|
58
|
+
compilerOptions.jsxFactory = 'astro.createElement';
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -12,7 +12,7 @@ function decorateSyntacticDiagnostics(ls: ts.LanguageService): void {
|
|
|
12
12
|
const getSyntacticDiagnostics = ls.getSyntacticDiagnostics;
|
|
13
13
|
ls.getSyntacticDiagnostics = (fileName: string) => {
|
|
14
14
|
// Diagnostics inside Astro files are done
|
|
15
|
-
// by the
|
|
15
|
+
// by the @astrojs/language-server / Astro for VS Code extension
|
|
16
16
|
if (isAstroFilePath(fileName)) {
|
|
17
17
|
return [];
|
|
18
18
|
}
|
|
@@ -35,7 +35,7 @@ function decorateSemanticDiagnostics(ls: ts.LanguageService): void {
|
|
|
35
35
|
function decorateSuggestionDiagnostics(ls: ts.LanguageService): void {
|
|
36
36
|
const getSuggestionDiagnostics = ls.getSuggestionDiagnostics;
|
|
37
37
|
ls.getSuggestionDiagnostics = (fileName: string) => {
|
|
38
|
-
// Diagnostics inside
|
|
38
|
+
// Diagnostics inside Astro files are done
|
|
39
39
|
// by the @astrojs/language-server / Astro for VS Code extension
|
|
40
40
|
if (isAstroFilePath(fileName)) {
|
|
41
41
|
return [];
|
package/src/module-loader.ts
CHANGED
|
@@ -45,13 +45,13 @@ class ModuleResolutionCache {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
|
-
* Creates a module loader than can also resolve `.
|
|
48
|
+
* Creates a module loader than can also resolve `.astro` files.
|
|
49
49
|
*
|
|
50
|
-
* The typescript language service tries to look up other files that are referenced in the currently open
|
|
51
|
-
* For `.ts`/`.js` files this works, for `.
|
|
52
|
-
* Reason: The typescript language service does not know about the `.
|
|
53
|
-
* so it assumes it's a normal typescript file and searches for files like `../Component.
|
|
54
|
-
* In order to fix this, we need to wrap typescript's module resolution and reroute all `.
|
|
50
|
+
* The typescript language service tries to look up other files that are referenced in the currently open astro file.
|
|
51
|
+
* For `.ts`/`.js` files this works, for `.astro` files it does not by default.
|
|
52
|
+
* Reason: The typescript language service does not know about the `.astro` file ending,
|
|
53
|
+
* so it assumes it's a normal typescript file and searches for files like `../Component.astro.ts`, which is wrong.
|
|
54
|
+
* In order to fix this, we need to wrap typescript's module resolution and reroute all `.astro.ts` file lookups to .astro.
|
|
55
55
|
*/
|
|
56
56
|
export function patchModuleLoader(
|
|
57
57
|
logger: Logger,
|
|
@@ -83,8 +83,8 @@ export function patchModuleLoader(
|
|
|
83
83
|
logger.log('Resolving modules names for ' + containingFile);
|
|
84
84
|
// Try resolving all module names with the original method first.
|
|
85
85
|
// The ones that are undefined will be re-checked if they are a
|
|
86
|
-
//
|
|
87
|
-
// all module resolving logic except for
|
|
86
|
+
// astro file and if so, are resolved, too. This way we can defer
|
|
87
|
+
// all module resolving logic except for astro files to TypeScript.
|
|
88
88
|
const resolved =
|
|
89
89
|
origResolveModuleNames?.(
|
|
90
90
|
moduleNames,
|
|
@@ -130,7 +130,7 @@ export function patchModuleLoader(
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
const resolvedFileName = ensureRealAstroFilePath(astroResolvedModule.resolvedFileName);
|
|
133
|
-
logger.log('Resolved', name, 'to
|
|
133
|
+
logger.log('Resolved', name, 'to astro file', resolvedFileName);
|
|
134
134
|
const snapshot = snapshotManager.create(resolvedFileName);
|
|
135
135
|
if (!snapshot) {
|
|
136
136
|
return undefined;
|
package/src/source-mapper.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type ts from 'typescript/lib/tsserverlibrary';
|
|
|
3
3
|
|
|
4
4
|
type LineChar = ts.LineAndCharacter;
|
|
5
5
|
|
|
6
|
-
type FileMapping = LineMapping[];
|
|
6
|
+
export type FileMapping = LineMapping[];
|
|
7
7
|
|
|
8
8
|
type LineMapping = CharacterMapping[]; // FileMapping[generated_line_index] = LineMapping
|
|
9
9
|
|