Skip to content

Commit

Permalink
feat(bindings/cli): Add --config (#6835)
Browse files Browse the repository at this point in the history
  • Loading branch information
titanous committed Feb 5, 2023
1 parent f2333e4 commit d993c4d
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
39 changes: 34 additions & 5 deletions bindings/swc_cli/src/commands/compile.rs
@@ -1,7 +1,7 @@
use std::{
fs::{self, File},
io::{self, Read, Write},
path::{Path, PathBuf},
path::{Component, Path, PathBuf},
sync::Arc,
};

Expand All @@ -13,7 +13,7 @@ use rayon::prelude::*;
use relative_path::RelativePath;
use swc_core::{
base::{
config::{ConfigFile, Options, SourceMapsConfig},
config::{Config, ConfigFile, Options, PluginConfig, SourceMapsConfig},
try_with_handler, Compiler, HandlerOpts, TransformOutput,
},
common::{
Expand All @@ -28,9 +28,12 @@ use crate::util::trace::init_trace;
/// Configuration option for transform files.
#[derive(Parser)]
pub struct CompileOptions {
/// Override a config from .swcrc file.
#[clap(long)]
config: Option<Vec<String>>,
/// Experimental: provide additional configuration to override the .swcrc.
/// Can be used to provide experimental plugin configuration,
/// including plugin imports that are explicitly relative, starting with `.`
/// or `..`
#[clap(long, value_parser = parse_config)]
config: Option<Config>,

/// Path to a .swcrc file to use
#[clap(long)]
Expand Down Expand Up @@ -107,6 +110,10 @@ pub struct CompileOptions {
*no_swcrc: bool, */
}

fn parse_config(s: &str) -> Result<Config, serde_json::Error> {
serde_json::from_str(s)
}

static COMPILER: Lazy<Arc<Compiler>> = Lazy::new(|| {
let cm = Arc::new(SourceMap::new(FilePathMapping::empty()));

Expand Down Expand Up @@ -277,10 +284,32 @@ impl CompileOptions {
});

let mut options = Options {
config: self.config.to_owned().unwrap_or_default(),
config_file,
..Options::default()
};

options.config.jsc.experimental.plugins =
options.config.jsc.experimental.plugins.map(|plugins| {
plugins
.into_iter()
.map(|p| {
// if the path starts with . or .., then turn it into an absolute path using
// the current working directory as the base
let path = Path::new(&p.0);
PluginConfig(
match path.components().next() {
Some(Component::CurDir) | Some(Component::ParentDir) => {
path.absolutize().unwrap().display().to_string()
}
_ => p.0,
},
p.1,
)
})
.collect()
});

if let Some(file_path) = *file_path {
options.filename = file_path.to_str().unwrap_or_default().to_owned();
}
Expand Down
4 changes: 2 additions & 2 deletions crates/swc/src/config/mod.rs
Expand Up @@ -70,9 +70,9 @@ use swc_ecma_transforms_compat::es2015::regenerator;
use swc_ecma_transforms_optimization::{inline_globals2, GlobalExprMap};
use swc_ecma_visit::{Fold, VisitMutWith};

pub use crate::plugin::PluginConfig;
use crate::{
builder::PassBuilder, dropped_comments_preserver::dropped_comments_preserver,
plugin::PluginConfig, SwcImportResolver,
builder::PassBuilder, dropped_comments_preserver::dropped_comments_preserver, SwcImportResolver,
};

#[cfg(test)]
Expand Down
2 changes: 1 addition & 1 deletion crates/swc/src/plugin.rs
Expand Up @@ -25,7 +25,7 @@ use swc_ecma_visit::{noop_fold_type, Fold};
/// plugin's entrypoint function.
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields, rename_all = "camelCase")]
pub struct PluginConfig(String, serde_json::Value);
pub struct PluginConfig(pub String, pub serde_json::Value);

#[cfg(any(feature = "plugin", feature = "plugin-bytecheck"))]
pub fn plugins(
Expand Down

1 comment on commit d993c4d

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: d993c4d Previous: 964dfba Ratio
es/full/bugs-1 306134 ns/iter (± 7732) 308355 ns/iter (± 8960) 0.99
es/full/minify/libraries/antd 1724082386 ns/iter (± 26711808) 1689702319 ns/iter (± 25098751) 1.02
es/full/minify/libraries/d3 296685000 ns/iter (± 6189349) 292472908 ns/iter (± 6927954) 1.01
es/full/minify/libraries/echarts 1279204658 ns/iter (± 15652527) 1279177507 ns/iter (± 15176225) 1.00
es/full/minify/libraries/jquery 90307187 ns/iter (± 1402552) 90092868 ns/iter (± 391843) 1.00
es/full/minify/libraries/lodash 104934466 ns/iter (± 925648) 106033333 ns/iter (± 554219) 0.99
es/full/minify/libraries/moment 52015748 ns/iter (± 447895) 52671311 ns/iter (± 453950) 0.99
es/full/minify/libraries/react 19045473 ns/iter (± 127558) 19063414 ns/iter (± 229306) 1.00
es/full/minify/libraries/terser 251695590 ns/iter (± 3903849) 248038178 ns/iter (± 2669174) 1.01
es/full/minify/libraries/three 440144209 ns/iter (± 16861689) 450875226 ns/iter (± 6626652) 0.98
es/full/minify/libraries/typescript 3129789526 ns/iter (± 35026422) 3198913127 ns/iter (± 24196575) 0.98
es/full/minify/libraries/victory 660162906 ns/iter (± 28217704) 671724300 ns/iter (± 12400795) 0.98
es/full/minify/libraries/vue 127451532 ns/iter (± 948634) 131596426 ns/iter (± 838995) 0.97
es/full/codegen/es3 26891 ns/iter (± 244) 27363 ns/iter (± 58) 0.98
es/full/codegen/es5 26984 ns/iter (± 246) 27351 ns/iter (± 136) 0.99
es/full/codegen/es2015 27233 ns/iter (± 241) 27342 ns/iter (± 92) 1.00
es/full/codegen/es2016 26957 ns/iter (± 266) 27373 ns/iter (± 38) 0.98
es/full/codegen/es2017 27075 ns/iter (± 272) 27386 ns/iter (± 58) 0.99
es/full/codegen/es2018 27021 ns/iter (± 184) 27412 ns/iter (± 33) 0.99
es/full/codegen/es2019 26738 ns/iter (± 282) 27342 ns/iter (± 88) 0.98
es/full/codegen/es2020 26689 ns/iter (± 249) 27452 ns/iter (± 57) 0.97
es/full/all/es3 170142741 ns/iter (± 3223163) 169707394 ns/iter (± 2685196) 1.00
es/full/all/es5 161942327 ns/iter (± 3247514) 161548358 ns/iter (± 3543630) 1.00
es/full/all/es2015 124118096 ns/iter (± 1416147) 123329433 ns/iter (± 2016676) 1.01
es/full/all/es2016 122924192 ns/iter (± 1192807) 122479689 ns/iter (± 1366717) 1.00
es/full/all/es2017 120180216 ns/iter (± 976584) 122194500 ns/iter (± 1426222) 0.98
es/full/all/es2018 119860222 ns/iter (± 702884) 119659717 ns/iter (± 1129749) 1.00
es/full/all/es2019 118724495 ns/iter (± 901320) 118670032 ns/iter (± 1335757) 1.00
es/full/all/es2020 113998403 ns/iter (± 792935) 114515771 ns/iter (± 1063568) 1.00
es/full/parser 529967 ns/iter (± 9454) 537954 ns/iter (± 8725) 0.99
es/full/base/fixer 21733 ns/iter (± 141) 22260 ns/iter (± 30) 0.98
es/full/base/resolver_and_hygiene 81781 ns/iter (± 414) 81923 ns/iter (± 203) 1.00
serialization of ast node 121 ns/iter (± 0) 123 ns/iter (± 0) 0.98
serialization of serde 126 ns/iter (± 0) 128 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 27213227 ns/iter (± 625873) 27841640 ns/iter (± 94939) 0.98
css/visitor/compare/clone 2047943 ns/iter (± 7038) 2054002 ns/iter (± 28981) 1.00
css/visitor/compare/visit_mut_span 2216302 ns/iter (± 32231) 2275403 ns/iter (± 2765) 0.97
css/visitor/compare/visit_mut_span_panic 2343935 ns/iter (± 10793) 2349296 ns/iter (± 4382) 1.00
css/visitor/compare/fold_span 2960708 ns/iter (± 23790) 3053423 ns/iter (± 17119) 0.97
css/visitor/compare/fold_span_panic 3062999 ns/iter (± 21341) 3183563 ns/iter (± 18085) 0.96
css/lexer/bootstrap_5_1_3 5068200 ns/iter (± 45656) 5180992 ns/iter (± 9444) 0.98
css/lexer/foundation_6_7_4 4252271 ns/iter (± 31842) 4356737 ns/iter (± 4567) 0.98
css/lexer/tailwind_3_1_1 829301 ns/iter (± 6083) 830684 ns/iter (± 1368) 1.00
css/parser/bootstrap_5_1_3 21387454 ns/iter (± 219549) 21646783 ns/iter (± 36807) 0.99
css/parser/foundation_6_7_4 17318183 ns/iter (± 371966) 17289750 ns/iter (± 11128) 1.00
css/parser/tailwind_3_1_1 3273976 ns/iter (± 20355) 3297235 ns/iter (± 4381) 0.99
es/codegen/colors 326447 ns/iter (± 186902) 331487 ns/iter (± 187975) 0.98
es/codegen/large 1218183 ns/iter (± 605066) 1229720 ns/iter (± 632488) 0.99
es/codegen/with-parser/colors 46660 ns/iter (± 284) 48088 ns/iter (± 437) 0.97
es/codegen/with-parser/large 531411 ns/iter (± 2608) 533616 ns/iter (± 1225) 1.00
es/minify/libraries/antd 1464040771 ns/iter (± 37234558) 1468761204 ns/iter (± 27205943) 1.00
es/minify/libraries/d3 245988727 ns/iter (± 3520423) 254234431 ns/iter (± 3019081) 0.97
es/minify/libraries/echarts 1098721997 ns/iter (± 16532214) 1089018001 ns/iter (± 19758369) 1.01
es/minify/libraries/jquery 77537164 ns/iter (± 625218) 77852392 ns/iter (± 613558) 1.00
es/minify/libraries/lodash 93268305 ns/iter (± 1021472) 94462267 ns/iter (± 715274) 0.99
es/minify/libraries/moment 46027813 ns/iter (± 825962) 45950338 ns/iter (± 492956) 1.00
es/minify/libraries/react 16740429 ns/iter (± 94319) 16858849 ns/iter (± 138119) 0.99
es/minify/libraries/terser 204333468 ns/iter (± 1133069) 208996160 ns/iter (± 1992209) 0.98
es/minify/libraries/three 351348835 ns/iter (± 18531146) 370223032 ns/iter (± 9560085) 0.95
es/minify/libraries/typescript 2709787246 ns/iter (± 52093640) 2757586652 ns/iter (± 37716099) 0.98
es/minify/libraries/victory 550775863 ns/iter (± 17054072) 570390727 ns/iter (± 8690164) 0.97
es/minify/libraries/vue 113401162 ns/iter (± 854566) 116399739 ns/iter (± 807691) 0.97
es/visitor/compare/clone 2362241 ns/iter (± 19639) 2422743 ns/iter (± 19393) 0.98
es/visitor/compare/visit_mut_span 2750415 ns/iter (± 37598) 2784788 ns/iter (± 5343) 0.99
es/visitor/compare/visit_mut_span_panic 2755528 ns/iter (± 13290) 2826171 ns/iter (± 7358) 0.98
es/visitor/compare/fold_span 3914879 ns/iter (± 47574) 3964177 ns/iter (± 9885) 0.99
es/visitor/compare/fold_span_panic 4014024 ns/iter (± 22376) 4072387 ns/iter (± 7009) 0.99
es/lexer/colors 17277 ns/iter (± 284) 17318 ns/iter (± 12) 1.00
es/lexer/angular 8139720 ns/iter (± 43432) 8256323 ns/iter (± 16707) 0.99
es/lexer/backbone 1084933 ns/iter (± 11279) 1081371 ns/iter (± 2443) 1.00
es/lexer/jquery 5845105 ns/iter (± 28822) 5981882 ns/iter (± 6717) 0.98
es/lexer/jquery mobile 9204891 ns/iter (± 154793) 9210715 ns/iter (± 7352) 1.00
es/lexer/mootools 4650781 ns/iter (± 47827) 4687579 ns/iter (± 3410) 0.99
es/lexer/underscore 904125 ns/iter (± 7305) 902677 ns/iter (± 574) 1.00
es/lexer/three 27543152 ns/iter (± 175446) 27915878 ns/iter (± 23724) 0.99
es/lexer/yui 5079652 ns/iter (± 1580) 5078760 ns/iter (± 6611) 1.00
es/parser/colors 30319 ns/iter (± 353) 31007 ns/iter (± 148) 0.98
es/parser/angular 15856544 ns/iter (± 247789) 15869601 ns/iter (± 115194) 1.00
es/parser/backbone 2309049 ns/iter (± 22177) 2315506 ns/iter (± 18851) 1.00
es/parser/jquery 12592102 ns/iter (± 219796) 12476288 ns/iter (± 77328) 1.01
es/parser/jquery mobile 19939014 ns/iter (± 767073) 19605331 ns/iter (± 346967) 1.02
es/parser/mootools 9358796 ns/iter (± 58317) 9553925 ns/iter (± 23234) 0.98
es/parser/underscore 1964252 ns/iter (± 9870) 1949411 ns/iter (± 11783) 1.01
es/parser/three 56234889 ns/iter (± 449004) 57367869 ns/iter (± 788922) 0.98
es/parser/yui 9487582 ns/iter (± 98162) 9618576 ns/iter (± 63492) 0.99
es/preset-env/usage/builtin_type 142687 ns/iter (± 32214) 138004 ns/iter (± 30614) 1.03
es/preset-env/usage/property 20381 ns/iter (± 136) 20787 ns/iter (± 110) 0.98
es/resolver/typescript 119758812 ns/iter (± 2914102) 127526156 ns/iter (± 4654518) 0.94
es/fixer/typescript 91442866 ns/iter (± 1065432) 96198265 ns/iter (± 2258609) 0.95
es/hygiene/typescript 188061358 ns/iter (± 2136096) 203461579 ns/iter (± 2341014) 0.92
es/resolver_with_hygiene/typescript 321888556 ns/iter (± 1855881) 341354457 ns/iter (± 1620149) 0.94
es/visitor/base-perf/module_clone 72882 ns/iter (± 1004) 75208 ns/iter (± 1444) 0.97
es/visitor/base-perf/fold_empty 84308 ns/iter (± 984) 85477 ns/iter (± 1099) 0.99
es/visitor/base-perf/fold_noop_impl_all 84225 ns/iter (± 1060) 86631 ns/iter (± 2476) 0.97
es/visitor/base-perf/fold_noop_impl_vec 84301 ns/iter (± 1010) 85887 ns/iter (± 1884) 0.98
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 81 ns/iter (± 3) 0.68
es/visitor/base-perf/boxing_unboxed_clone 57 ns/iter (± 0) 59 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 105 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed 110 ns/iter (± 4) 104 ns/iter (± 0) 1.06
es/visitor/base-perf/visit_contains_this 3441 ns/iter (± 74) 3485 ns/iter (± 80) 0.99
es/base/parallel/resolver/typescript 5719459325 ns/iter (± 523550938) 5224127626 ns/iter (± 387727239) 1.09
es/base/parallel/hygiene/typescript 2372921345 ns/iter (± 29426398) 2406707823 ns/iter (± 40095249) 0.99
misc/visitors/time-complexity/time 5 99 ns/iter (± 1) 101 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 10 313 ns/iter (± 0) 328 ns/iter (± 11) 0.95
misc/visitors/time-complexity/time 15 645 ns/iter (± 2) 653 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 20 1255 ns/iter (± 20) 1209 ns/iter (± 1) 1.04
misc/visitors/time-complexity/time 40 6421 ns/iter (± 60) 6583 ns/iter (± 7) 0.98
misc/visitors/time-complexity/time 60 16600 ns/iter (± 168) 17064 ns/iter (± 45) 0.97
es/full-target/es2016 186822 ns/iter (± 3813) 188522 ns/iter (± 490) 0.99
es/full-target/es2017 178423 ns/iter (± 1203) 183208 ns/iter (± 629) 0.97
es/full-target/es2018 171886 ns/iter (± 2350) 172976 ns/iter (± 508) 0.99
es2020_nullish_coalescing 64995 ns/iter (± 330) 66680 ns/iter (± 102) 0.97
es2020_optional_chaining 94338 ns/iter (± 5664) 95925 ns/iter (± 255) 0.98
es2022_class_properties 93484 ns/iter (± 760) 94034 ns/iter (± 264) 0.99
es2018_object_rest_spread 71120 ns/iter (± 337) 71151 ns/iter (± 162) 1.00
es2019_optional_catch_binding 60866 ns/iter (± 102) 60909 ns/iter (± 160) 1.00
es2017_async_to_generator 61370 ns/iter (± 148) 61460 ns/iter (± 110) 1.00
es2016_exponentiation 64814 ns/iter (± 96) 64794 ns/iter (± 139) 1.00
es2015_arrow 70447 ns/iter (± 249) 69956 ns/iter (± 246) 1.01
es2015_block_scoped_fn 64958 ns/iter (± 397) 66126 ns/iter (± 165) 0.98
es2015_block_scoping 152923 ns/iter (± 5914) 154923 ns/iter (± 9091) 0.99
es2015_classes 115891 ns/iter (± 745) 117051 ns/iter (± 582) 0.99
es2015_computed_props 60251 ns/iter (± 435) 61085 ns/iter (± 87) 0.99
es2015_destructuring 114778 ns/iter (± 808) 115934 ns/iter (± 307) 0.99
es2015_duplicate_keys 62461 ns/iter (± 456) 63574 ns/iter (± 87) 0.98
es2015_parameters 78028 ns/iter (± 485) 79014 ns/iter (± 181) 0.99
es2015_fn_name 66055 ns/iter (± 539) 66737 ns/iter (± 407) 0.99
es2015_for_of 62113 ns/iter (± 312) 64041 ns/iter (± 77) 0.97
es2015_instanceof 62617 ns/iter (± 930) 63005 ns/iter (± 128) 0.99
es2015_shorthand_property 59724 ns/iter (± 454) 60982 ns/iter (± 108) 0.98
es2015_spread 59225 ns/iter (± 465) 60613 ns/iter (± 149) 0.98
es2015_sticky_regex 60252 ns/iter (± 420) 61856 ns/iter (± 138) 0.97
es2015_typeof_symbol 62305 ns/iter (± 670) 62117 ns/iter (± 76) 1.00
es/transform/baseline/base 50126 ns/iter (± 233) 51674 ns/iter (± 105) 0.97
es/transform/baseline/common_reserved_word 61799 ns/iter (± 747) 62460 ns/iter (± 62) 0.99
es/transform/baseline/common_typescript 142862 ns/iter (± 4568) 150294 ns/iter (± 11080) 0.95
es/target/es3 170569 ns/iter (± 1910) 169588 ns/iter (± 403) 1.01
es/target/es2015 611876 ns/iter (± 5407) 627872 ns/iter (± 1367) 0.97
es/target/es2016 63655 ns/iter (± 1024) 65116 ns/iter (± 156) 0.98
es/target/es2017 59640 ns/iter (± 331) 61547 ns/iter (± 142) 0.97
es/target/es2018 79408 ns/iter (± 932) 81400 ns/iter (± 145) 0.98
es/target/es2020 129704 ns/iter (± 1394) 133273 ns/iter (± 251) 0.97
babelify-only 664729 ns/iter (± 1487) 667634 ns/iter (± 2151) 1.00
parse_and_babelify_angular 43262564 ns/iter (± 580975) 42866050 ns/iter (± 718283) 1.01
parse_and_babelify_backbone 5426420 ns/iter (± 56988) 5377794 ns/iter (± 29382) 1.01
parse_and_babelify_jquery 31290304 ns/iter (± 855554) 32335485 ns/iter (± 418328) 0.97
parse_and_babelify_jquery_mobile 53894739 ns/iter (± 514403) 56026309 ns/iter (± 893172) 0.96
parse_and_babelify_mootools 33045125 ns/iter (± 1463043) 33338465 ns/iter (± 167468) 0.99
parse_and_babelify_underscore 4296526 ns/iter (± 28891) 4369637 ns/iter (± 21741) 0.98
parse_and_babelify_yui 33726383 ns/iter (± 1782140) 32385932 ns/iter (± 394315) 1.04
html/minify/document/css_spec 41241018 ns/iter (± 1058344) 41400161 ns/iter (± 325872) 1.00
html/minify/document/github 17325055 ns/iter (± 88096) 17549855 ns/iter (± 36764) 0.99
html/minify/document/stackoverflow 15458999 ns/iter (± 113528) 15664986 ns/iter (± 12630) 0.99
html/minify/document_fragment/css_spec 39015565 ns/iter (± 262495) 39826789 ns/iter (± 353545) 0.98
html/minify/document_fragment/github 16394468 ns/iter (± 98525) 16761363 ns/iter (± 25070) 0.98
html/minify/document_fragment/stackoverflow 14972273 ns/iter (± 75854) 15362507 ns/iter (± 34037) 0.97
html/document/visitor/compare/clone 333389 ns/iter (± 3937) 344338 ns/iter (± 1710) 0.97
html/document/visitor/compare/visit_mut_span 362198 ns/iter (± 1648) 364044 ns/iter (± 1243) 0.99
html/document/visitor/compare/visit_mut_span_panic 372180 ns/iter (± 1991) 374667 ns/iter (± 2146) 0.99
html/document/visitor/compare/fold_span 396893 ns/iter (± 2575) 402769 ns/iter (± 2252) 0.99
html/document/visitor/compare/fold_span_panic 462309 ns/iter (± 2564) 458974 ns/iter (± 1721) 1.01
html/document_fragment/visitor/compare/clone 336028 ns/iter (± 2407) 337015 ns/iter (± 2600) 1.00
html/document_fragment/visitor/compare/visit_mut_span 369509 ns/iter (± 2644) 370300 ns/iter (± 1629) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 380461 ns/iter (± 1906) 373925 ns/iter (± 1526) 1.02
html/document_fragment/visitor/compare/fold_span 408855 ns/iter (± 4972) 404701 ns/iter (± 1826) 1.01
html/document_fragment/visitor/compare/fold_span_panic 456044 ns/iter (± 4592) 456100 ns/iter (± 2023) 1.00
html/lexer/css_2021_spec 15630058 ns/iter (± 32026) 15522367 ns/iter (± 14053) 1.01
html/lexer/github_com_17_05_2022 6035115 ns/iter (± 5025) 6017588 ns/iter (± 7041) 1.00
html/lexer/stackoverflow_com_17_05_2022 5648366 ns/iter (± 4692) 5626799 ns/iter (± 7415) 1.00
html/parser/parser_document/css_2021_spec 25371569 ns/iter (± 176646) 25541570 ns/iter (± 310657) 0.99
html/parser/parser_document/github_com_17_05_2022 8771671 ns/iter (± 18879) 8750819 ns/iter (± 20475) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7801702 ns/iter (± 18156) 7710530 ns/iter (± 7222) 1.01
html/parser/parser_document_fragment/css_2021_spec 25508860 ns/iter (± 258078) 25595666 ns/iter (± 388670) 1.00
html/parser/parser_document_fragment/github_com_17_05_2022 8724929 ns/iter (± 24498) 8800014 ns/iter (± 11027) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7725797 ns/iter (± 15889) 7733914 ns/iter (± 15155) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.