swc_node_bundler/loaders/
json.rs1use std::sync::Arc;
2
3use anyhow::{anyhow, Error};
4use swc_atoms::atom;
5use swc_common::{SourceFile, DUMMY_SP};
6use swc_ecma_ast::*;
7use swc_ecma_parser::{parse_file_as_expr, Syntax};
8
9pub(super) fn load_json_as_module(fm: &Arc<SourceFile>) -> Result<Module, Error> {
10 let expr = parse_file_as_expr(
11 fm,
12 Syntax::default(),
13 EsVersion::Es2020,
14 None,
15 &mut Vec::new(),
16 )
17 .map_err(|err| anyhow!("failed parse json as javascript object: {:#?}", err))?;
18
19 let export = ExprStmt {
20 span: DUMMY_SP,
21 expr: AssignExpr {
22 span: DUMMY_SP,
23 op: op!("="),
24 left: MemberExpr {
25 span: DUMMY_SP,
26 obj: Box::new(Ident::new_no_ctxt(atom!("module"), DUMMY_SP).into()),
27 prop: MemberProp::Ident(IdentName::new(atom!("exports"), DUMMY_SP)),
28 }
29 .into(),
30 right: expr,
31 }
32 .into(),
33 }
34 .into();
35
36 Ok(Module {
37 span: DUMMY_SP,
38 body: vec![export],
39 shebang: None,
40 })
41}