Skip to content

Commit 308fd21

Browse files
committed
refactor: use @babel/types over estree
1 parent b54fdcf commit 308fd21

File tree

7 files changed

+26
-29
lines changed

7 files changed

+26
-29
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ mod.exports.default.foo.push("b");
8181
mod.exports.default.foo.unshift("a");
8282

8383
// Generate code
84-
const { code, map } = generateCode(_module);
84+
const { code, map } = generateCode(mod);
8585
```
8686

8787
Generated code:

build.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { defineBuildConfig } from "unbuild";
22

33
export default defineBuildConfig({
4-
externals: ["estree", "@babel/types"],
4+
externals: ["@babel/types"],
55
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
"dependencies": {
3232
"@babel/parser": "^7.20.15",
33-
"@types/estree": "^1.0.0",
33+
"@babel/types": "^7.20.7",
3434
"recast": "^0.22.0"
3535
},
3636
"devDependencies": {

pnpm-lock.yaml

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

src/proxy/module.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
import * as recast from "recast";
2-
import { ESNode, ParsedFileNode } from "../types";
2+
import { Program } from "@babel/types";
3+
import { ParsedFileNode } from "../types";
34
import { ProxifiedModule } from "./types";
45
import { createProxy, literalToAst, proxify } from "./_utils";
56

67
export function proxifyModule<T>(ast: ParsedFileNode): ProxifiedModule<T> {
7-
const root = ast.program as ESNode;
8+
const root = ast.program;
89
if (root.type !== "Program") {
910
throw new Error(`Cannot proxify ${ast.type} as module`);
1011
}
1112

13+
return {
14+
$ast: root,
15+
$type: "module",
16+
exports: createExportsProxy(root),
17+
get imports() {
18+
throw new Error("Not implemented");
19+
},
20+
} as any;
21+
}
22+
23+
function createExportsProxy(root: Program) {
1224
const findExport = (key: string) => {
1325
const type =
1426
key === "default" ? "ExportDefaultDeclaration" : "ExportNamedDeclaration";
@@ -63,7 +75,7 @@ export function proxifyModule<T>(ast: ParsedFileNode): ProxifiedModule<T> {
6375
);
6476
};
6577

66-
const exportsProxy = createProxy(
78+
return createProxy(
6779
root,
6880
{},
6981
{
@@ -103,13 +115,4 @@ export function proxifyModule<T>(ast: ParsedFileNode): ProxifiedModule<T> {
103115
},
104116
}
105117
);
106-
107-
return {
108-
$ast: root,
109-
$type: "module",
110-
exports: exportsProxy,
111-
get imports() {
112-
throw new Error("Not implemented");
113-
},
114-
} as any;
115118
}

src/proxy/object.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export function proxifyObject<T>(node: ESNode): Proxified<T> {
1010
const getProp = (key: string | symbol) => {
1111
for (const prop of node.properties) {
1212
if ("key" in prop && "name" in prop.key && prop.key.name === key) {
13-
return prop.value;
13+
// TODO:
14+
return (prop as any).value;
1415
}
1516
}
1617
};

src/types.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import * as recast from "recast";
22

3-
import type { Node as ESNode } from "estree";
3+
import type { Program } from "@babel/types";
4+
export type { Node as ESNode } from "@babel/types";
45

56
export * from "./proxy/types";
6-
export type { Node as ESNode } from "estree";
77

88
export interface Loc {
99
start?: { line?: number; column?: number; token?: number };
@@ -17,17 +17,9 @@ export interface Token {
1717
loc?: Loc;
1818
}
1919

20-
export interface ProgramNode extends recast.types.ASTNode {
21-
type: "Program";
22-
body: ESNode[];
23-
sourceType: "script" | "module";
24-
loc: Loc;
25-
errors: any[];
26-
}
27-
2820
export interface ParsedFileNode extends recast.types.ASTNode {
2921
type: "file";
30-
program: ProgramNode;
22+
program: Program;
3123
name?: string;
3224
loc: Loc;
3325
comments: null | any;

0 commit comments

Comments
 (0)