forked from ritz078/transform
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathflow-to-javascript.ts
More file actions
32 lines (28 loc) · 904 Bytes
/
flow-to-javascript.ts
File metadata and controls
32 lines (28 loc) · 904 Bytes
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
28
29
30
31
32
import { NextApiRequest, NextApiResponse } from "next";
import { parse, print } from "recast";
import { transformFromAstSync, parseSync } from "@babel/core";
import transformFlow from "@babel/plugin-transform-flow-strip-types";
export default (req: NextApiRequest, res: NextApiResponse) => {
try {
const ast = parse(req.body, {
parser: require("recast/parsers/flow")
});
const options = {
cloneInputAst: false, // recast stores metadata in AST nodes, so disable cloning will preserve the original code style
code: false,
ast: true,
plugins: [transformFlow],
configFile: false
};
const { ast: transformedAST } = transformFromAstSync(
ast,
req.body,
options
);
const result = print(transformedAST).code;
res.status(200).send(result);
} catch (e) {
console.log(e);
res.status(500).send(e.message);
}
};