Skip to content

Commit fa90a2b

Browse files
Merge pull request #49 from sveltejs/allow-ts-modules
2 parents 8785ad2 + 73bf0c3 commit fa90a2b

File tree

5 files changed

+38
-4
lines changed

5 files changed

+38
-4
lines changed

.changeset/ready-lines-remain.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/mcp': patch
3+
---
4+
5+
fix: allow TS `.svelte.ts` modules

packages/mcp-server/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,18 @@
2828
"svelte": "^5.39.2",
2929
"svelte-eslint-parser": "^1.3.2",
3030
"tmcp": "^1.13.0",
31+
"ts-blank-space": "^0.6.2",
3132
"typescript-eslint": "^8.44.0",
3233
"valibot": "^1.1.0",
3334
"vitest": "^3.2.4",
3435
"zimmerframe": "^1.1.4"
3536
},
3637
"devDependencies": {
3738
"@anthropic-ai/sdk": "^0.65.0",
38-
"dotenv": "^17.2.3",
3939
"@sveltejs/kit": "^2.42.2",
4040
"@types/eslint-scope": "^8.3.2",
4141
"@types/estree": "^1.0.8",
42-
"@typescript-eslint/types": "^8.44.0"
42+
"@typescript-eslint/types": "^8.44.0",
43+
"dotenv": "^17.2.3"
4344
}
4445
}

packages/mcp-server/src/mcp/autofixers/add-compile-issues.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,28 @@
1-
import { compile } from 'svelte/compiler';
1+
import { compile as compile_component, compileModule } from 'svelte/compiler';
2+
import { extname } from 'path';
3+
import ts from 'ts-blank-space';
24

35
export function add_compile_issues(
46
content: { issues: string[]; suggestions: string[] },
57
code: string,
68
desired_svelte_version: number,
79
filename = 'Component.svelte',
810
) {
11+
let compile = compile_component;
12+
const extension = extname(filename);
13+
if (extension !== '.svelte') {
14+
compile = compileModule;
15+
// compile module doesn't accept .ts files so we need to transpile them first with ts-blank-space
16+
// a fast and lightweight typescript transpiler that can strips types replacing them with white spaces
17+
// so the code positions are not affected
18+
if (extension === '.ts') {
19+
code = ts(code, (node) => {
20+
content.issues.push(
21+
`The provided file is a module but it contains invalid TypeScript code: ${node.getText()} at ${node.getStart()}`,
22+
);
23+
});
24+
}
25+
}
926
const compilation_result = compile(code, {
1027
filename: filename || 'Component.svelte',
1128
generate: false,

packages/mcp-server/src/mcp/autofixers/add-eslint-issues.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function base_config(svelte_config: Config): ESLint.Options['baseConfig'] {
1212
return [
1313
...svelte.configs.recommended,
1414
{
15-
files: ['*.svelte'],
15+
files: ['*.svelte', '*.svelte.ts', '*.svelte.js'],
1616
rules: {
1717
'no-self-assign': 'warn',
1818
'svelte/infinite-reactive-loop': 'warn',

pnpm-lock.yaml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)