swc_node_bundler/v1/
resolve.rs

1use std::{collections::HashMap, path::PathBuf};
2
3use serde::Deserialize;
4use swc_atoms::{atom, Atom};
5
6/// https://webpack.js.org/configuration/resolve/
7#[derive(Debug, Deserialize)]
8#[serde(rename = "Resolve", rename_all = "camelCase")]
9pub struct ResolveConfig {
10    #[serde(default)]
11    pub alias: Option<AliasConfig>,
12
13    #[serde(default)]
14    pub alias_fields: Vec<Atom>,
15
16    #[serde(default)]
17    pub description_files: Vec<Atom>,
18
19    #[serde(default)]
20    pub enforce_extension: bool,
21
22    #[serde(default = "default_extensions")]
23    pub extensions: Vec<Atom>,
24
25    #[serde(default)]
26    pub main_fields: Vec<Atom>,
27
28    #[serde(default = "default_symlinks")]
29    pub symlinks: bool,
30}
31
32fn default_extensions() -> Vec<Atom> {
33    vec![
34        atom!(".wasm"),
35        atom!(".mjs"),
36        atom!(".js"),
37        atom!(".json"),
38        atom!(".ts"),
39        atom!(".tsc"),
40    ]
41}
42
43fn default_symlinks() -> bool {
44    true
45}
46
47#[derive(Debug, Deserialize)]
48#[serde(rename = "Resolve.Alias", rename_all = "camelCase")]
49pub struct AliasConfig {
50    #[serde(flatten)]
51    pub map: HashMap<Atom, PathBuf>,
52}