dia_core/compiler/
constructs.rs1use swc_common::DUMMY_SP;
2use swc_ecma_ast::*;
3
4pub fn ident(name: &str) -> Ident {
5 Ident::new(name.into(), DUMMY_SP)
6}
7
8pub fn var_name(name: &str) -> PropName {
9 PropName::Ident(ident(name))
10}
11
12pub fn const_declare(ident: Ident, value: Box<Expr>) -> Decl {
13 let declaration = VarDeclarator {
14 span: DUMMY_SP,
15 name: Pat::Ident(BindingIdent {
16 id: ident,
17 type_ann: None,
18 }),
19 init: Some(value),
20 definite: false,
21 };
22 Decl::Var(Box::new(VarDecl {
23 span: DUMMY_SP,
24 kind: VarDeclKind::Const,
25 declare: false,
26 decls: vec![declaration],
27 }))
28}
29
30pub fn expr_arrow_cb(body: Box<Expr>) -> Box<Expr> {
31 Box::new(Expr::Arrow(ArrowExpr {
32 span: DUMMY_SP,
33 is_async: false,
34 is_generator: false,
35 params: vec![],
36 body: Box::new(BlockStmtOrExpr::Expr(body)),
37 type_params: None,
38 return_type: None,
39 }))
40}
41
42pub fn string(value: &str) -> Box<Expr> {
43 Box::new(Expr::Lit(Lit::Str(Str {
44 span: DUMMY_SP,
45 value: value.into(),
46 raw: None,
47 })))
48}
49
50pub fn array(exprs: Vec<Box<Expr>>) -> Box<Expr> {
51 let elems = exprs
52 .into_iter()
53 .map(|expr| Some(ExprOrSpread { spread: None, expr }))
54 .collect();
55
56 Box::new(Expr::Array(ArrayLit {
57 span: DUMMY_SP,
58 elems,
59 }))
60}
61
62pub fn object(key_value_pairs: Vec<KeyValueProp>) -> Box<Expr> {
63 let props = key_value_pairs
64 .into_iter()
65 .map(|prop| PropOrSpread::Prop(Box::new(Prop::KeyValue(prop))))
66 .collect();
67
68 Box::new(Expr::Object(ObjectLit {
69 span: DUMMY_SP,
70 props,
71 }))
72}
73
74pub fn export(decl: Decl) -> ModuleItem {
75 ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl {
76 span: DUMMY_SP,
77 decl,
78 }))
79}
80
81pub fn satisfies(expr: Box<Expr>, type_ann: Box<TsType>) -> Box<Expr> {
82 Box::new(Expr::TsSatisfies(TsSatisfiesExpr {
83 span: DUMMY_SP,
84 expr,
85 type_ann,
86 }))
87}
88
89pub fn as_const(expr: Box<Expr>) -> Box<Expr> {
90 Box::new(Expr::TsConstAssertion(TsConstAssertion {
91 span: DUMMY_SP,
92 expr,
93 }))
94}
95
96pub fn paren(expr: Box<Expr>) -> Box<Expr> {
97 Box::new(Expr::Paren(ParenExpr {
98 span: DUMMY_SP,
99 expr,
100 }))
101}
102
103pub fn ts_type_ref(name: &str) -> Box<TsType> {
104 Box::new(TsType::TsTypeRef(TsTypeRef {
105 span: DUMMY_SP,
106 type_name: TsEntityName::Ident(ident(name)),
107 type_params: None,
108 }))
109}