@prismai/prism-ladle
Version:
Enhanced component development environment based on Ladle, with multi-project support
72 lines (68 loc) • 1.38 kB
JavaScript
import * as parser from "@babel/parser";
import { codeFrameColumns } from "@babel/code-frame";
/**
* @type {parser.ParserPlugin[]}
*/
const plugins = [
"jsx",
"asyncGenerators",
"classProperties",
"classPrivateProperties",
"classPrivateMethods",
[
"decorators",
{
decoratorsBeforeExport: true,
},
],
"doExpressions",
"dynamicImport",
"exportDefaultFrom",
"exportNamespaceFrom",
"functionBind",
"functionSent",
"importMeta",
"logicalAssignment",
"nullishCoalescingOperator",
"numericSeparator",
"objectRestSpread",
"optionalCatchBinding",
"optionalChaining",
"partialApplication",
"throwExpressions",
"topLevelAwait",
];
/**
* @param {string} code
* @param {string} filename
*/
const getAst = (code, filename) => {
try {
return parser.parse(code, {
sourceType: "module",
plugins: [
...plugins,
filename.endsWith(".ts") || filename.endsWith(".tsx")
? "typescript"
: "flow",
],
});
} catch (/** @type {any} */ e) {
console.log(" ");
console.log(" ");
console.log(`${e.toString()} in ${filename}`);
console.log("");
console.log(
codeFrameColumns(
code,
{ start: e.loc },
{
highlightCode: true,
},
),
);
console.log("");
throw e;
}
};
export default getAst;