diff --git a/package-lock.json b/package-lock.json index c51951a..bc84df4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2684,6 +2684,15 @@ "@babel/types": "^7.26.0" } }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.36.1.tgz", + "integrity": "sha512-ycduwJbvdvIMmVvlAZqGggS+pm5Eu4Bk9pcV9Sm2Z4PJNRVsKkv0g7vHj+LeuC1gHTeF67sJXFOq61IlqCa2hA==", + "license": "MIT", + "dependencies": { + "hermes-parser": "0.36.1" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4476,6 +4485,21 @@ "he": "bin/he" } }, + "node_modules/hermes-estree": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.36.1.tgz", + "integrity": "sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==", + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.36.1.tgz", + "integrity": "sha512-GApNk4zLHi2UWoWZZkx7LNCOSzLSc5lB55pZ/PhK7ycFeg7u5LcF88p/WbpIi1XUDtE0MpHE3uRR3u3KB7TjSQ==", + "license": "MIT", + "dependencies": { + "hermes-estree": "0.36.1" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -8107,6 +8131,7 @@ "@babel/parser": "^7.26.2", "@babel/preset-typescript": "^7.26.0", "babel-plugin-react-compiler": "1.0.0", + "babel-plugin-syntax-hermes-parser": "^0.36.1", "ignore": "^7.0.3", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.12" diff --git a/packages/server/package.json b/packages/server/package.json index 408568e..d33bcfe 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -19,6 +19,7 @@ "@babel/parser": "^7.26.2", "@babel/preset-typescript": "^7.26.0", "babel-plugin-react-compiler": "1.0.0", + "babel-plugin-syntax-hermes-parser": "^0.36.1", "ignore": "^7.0.3", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.12" diff --git a/packages/server/src/checkReactCompiler.ts b/packages/server/src/checkReactCompiler.ts index fa4cbe1..3465db0 100644 --- a/packages/server/src/checkReactCompiler.ts +++ b/packages/server/src/checkReactCompiler.ts @@ -1,5 +1,6 @@ -import { PluginObj, transformFromAstSync } from "@babel/core"; -import * as BabelParser from "@babel/parser"; +import { PluginObj, transformSync } from "@babel/core"; +// @ts-expect-error - no types +import BabelPluginSyntaxHermesParser from "babel-plugin-syntax-hermes-parser"; import * as path from "path"; import { LRUCache } from "./cache"; @@ -103,16 +104,14 @@ function runBabelPluginReactCompiler( noEmit: true, }; - const ast = BabelParser.parse(text, { - sourceFilename: file, - plugins: [language, "jsx"], - sourceType: "module", - }); - const result = transformFromAstSync(ast, text, { + const result = transformSync(text, { filename: file, highlightCode: false, retainLines: true, - plugins: [[BabelPluginReactCompiler, COMPILER_OPTIONS]], + plugins: [BabelPluginSyntaxHermesParser, [BabelPluginReactCompiler, COMPILER_OPTIONS]], + parserOpts: { + plugins: language === "typescript" ? ["typescript", "jsx"] : [], + }, sourceType: "module", configFile: false, babelrc: false, @@ -218,16 +217,17 @@ export async function getCompiledOutput( try { const language = getLanguageFromFilename(filename); - const ast = BabelParser.parse(sourceCode, { - sourceFilename: filename, - plugins: [language, "jsx"], - sourceType: "module", - }); - const result = transformFromAstSync(ast, sourceCode, { + const result = transformSync(sourceCode, { filename, highlightCode: false, retainLines: true, - plugins: [[BabelPluginReactCompiler, DEFAULT_COMPILER_OPTIONS]], + plugins: [ + BabelPluginSyntaxHermesParser, + [BabelPluginReactCompiler, DEFAULT_COMPILER_OPTIONS], + ], + parserOpts: { + plugins: language === "typescript" ? ["typescript", "jsx"] : [], + }, sourceType: "module", configFile: false, babelrc: false,