import { parse as babelParse } from "@babel/parser";
import getBabelOptions, { Overrides } from "./_babel_options";
type BabelParser = { parse: typeof babelParse };
export const parser = (function (): BabelParser {
try {
return require("@babel/parser");
} catch {
try {
return require("babylon");
} catch {
throw new Error(
"Install @babel/parser to use the `typescript`, `flow`, or `babel` parsers",
);
}
}
})();
export function parse(source: string, options?: Overrides) {
const babelOptions = getBabelOptions(options);
babelOptions.plugins.push("jsx", "flow", "decoratorAutoAccessors");
return parser.parse(source, babelOptions);
}