swc updates

This commit is contained in:
Robin Appelman 2026-03-28 17:26:29 +01:00
commit c971fe6d79
9 changed files with 4737 additions and 4545 deletions

3333
Cargo.lock generated

File diff suppressed because it is too large Load diff

3014
build/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -12,6 +12,6 @@ name = "script"
[dependencies] [dependencies]
demostf-build-derive = {version = "0.1", path = "./derive"} demostf-build-derive = {version = "0.1", path = "./derive"}
demostf-build-bundlers = {version = "0.1", path = "./bundlers"} demostf-build-bundlers = {version = "0.1", path = "./bundlers"}
rand = "0.8.5" rand = "0.10.0"
tracing-subscriber = "0.3.16" tracing-subscriber = "0.3.16"

2992
build/bundlers/Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -7,23 +7,21 @@ edition = "2021"
lightningcss = { version = "1.0.0-alpha.61", features = ["browserslist", "visitor"] } lightningcss = { version = "1.0.0-alpha.61", features = ["browserslist", "visitor"] }
base64 = "0.21.0" base64 = "0.21.0"
urlencoding = "2.1.2" urlencoding = "2.1.2"
swc = "0.273.28" swc_common = { version = "18.0.0", features = ["tty-emitter", "concurrent"] }
swc_config = "=0.1.14" swc_core = { version = "53.0.1" }
swc_common = { version = "0.33", features = ["tty-emitter", "concurrent"] } swc_bundler = { version = "39.0.0" }
swc_core = { version = "0.90" } swc_ecma_loader = { version = "18.0.0", features = ["node", "cache"] }
swc_bundler = { version = "0.225.19" } swc_ecma_ast = { version = "19.0.0" }
swc_ecma_loader = { version = "0.45.28", features = ["node", "cache"] } swc_atoms = { version = "9.0.0", features = [] }
swc_ecma_ast = { version = "0.112.8" } swc_ecma_parser = { version = "31.0.0", features = ["typescript"] }
swc_atoms = { version = "0.6.7" } swc_ecma_codegen = { version = "21.0.0" }
swc_ecma_parser = { version = "0.143.16", features = ["typescript"] } swc_ecma_transforms_base = { version = "34.0.0" }
swc_ecma_codegen = { version = "0.148.18" } swc_ecma_transforms_typescript = { version = "37.0.0" }
swc_ecma_transforms_base = { version = "0.137.21" } swc_ecma_visit = { version = "19.0.0" }
swc_ecma_transforms_typescript = { version = "0.188.19" }
swc_ecma_visit = { version = "0.98.7" }
anyhow = "1.0.70" anyhow = "1.0.70"
jsx-dom-expressions = { version = "0.1", git = "https://github.com/icewind1991/swc-plugin-jsx-dom-expressions", branch = "fix-builtin-import" } jsx-dom-expressions = { version = "0.1", git = "https://github.com/icewind1991/swc-plugin-jsx-dom-expressions", branch = "fix-builtin-import" }
#jsx-dom-expressions = { version = "0.1", git = "https://github.com/milomg/swc-plugin-jsx-dom-expressions" } #jsx-dom-expressions = { version = "0.1", git = "https://github.com/milomg/swc-plugin-jsx-dom-expressions" }
#jsx-dom-expressions = { version = "0.1", path = "../../../../rust/swc-plugin-jsx-dom-expressions" } #jsx-dom-expressions = { version = "0.1", path = "../../../../rust/swc-plugin-jsx-dom-expressions" }
rand = "0.8.5" rand = "0.10.0"
fnv = "1.0.7" fnv = "1.0.7"

View file

@ -46,7 +46,7 @@ pub fn guess_mime(path: &str) -> &'static str {
{ {
return "text/javascript"; return "text/javascript";
} }
return "text/plain"; "text/plain"
} }
fn inline_url(path: &str) -> String { fn inline_url(path: &str) -> String {

View file

@ -27,7 +27,7 @@ impl VisitMut for InlineVisitor {
if callee.sym.as_ref() == "require" { if callee.sym.as_ref() == "require" {
if let Some(arg) = args.first() { if let Some(arg) = args.first() {
if let Expr::Lit(Lit::Str(arg)) = arg.expr.as_ref() { if let Expr::Lit(Lit::Str(arg)) = arg.expr.as_ref() {
let path = arg.value.to_string(); let path = arg.value.to_string_lossy().into_owned();
self.visit_require(expr, &path) self.visit_require(expr, &path)
} }
} }

View file

@ -6,7 +6,7 @@ use jsx_dom_expressions::TransformVisitor;
use std::collections::HashMap; use std::collections::HashMap;
use std::io::Write; use std::io::Write;
use std::sync::Arc; use std::sync::Arc;
use swc_atoms::js_word; use swc_atoms::Atom;
use swc_bundler::{Bundler, Load, ModuleData, ModuleRecord}; use swc_bundler::{Bundler, Load, ModuleData, ModuleRecord};
use swc_common::comments::NoopComments; use swc_common::comments::NoopComments;
use swc_common::sync::Lrc; use swc_common::sync::Lrc;
@ -20,11 +20,11 @@ use swc_ecma_codegen::Emitter;
use swc_ecma_loader::resolvers::lru::CachingResolver; use swc_ecma_loader::resolvers::lru::CachingResolver;
use swc_ecma_loader::resolvers::node::NodeModulesResolver; use swc_ecma_loader::resolvers::node::NodeModulesResolver;
use swc_ecma_loader::TargetEnv; use swc_ecma_loader::TargetEnv;
use swc_ecma_parser::{parse_file_as_module, Syntax, TsConfig}; use swc_ecma_parser::{parse_file_as_module, Syntax, TsSyntax};
use swc_ecma_transforms_base::fixer::fixer; use swc_ecma_transforms_base::fixer::fixer;
use swc_ecma_transforms_base::hygiene::hygiene; use swc_ecma_transforms_base::hygiene::hygiene;
use swc_ecma_transforms_typescript::strip; use swc_ecma_transforms_typescript::strip;
use swc_ecma_visit::{as_folder, FoldWith}; use swc_ecma_visit::visit_mut_pass;
pub fn bundle_script(script: &str) -> Vec<u8> { pub fn bundle_script(script: &str) -> Vec<u8> {
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
@ -95,7 +95,7 @@ impl swc_bundler::Hook for Hook {
Ok(vec![ Ok(vec![
KeyValueProp { KeyValueProp {
key: PropName::Ident(Ident::new(js_word!("url"), span)), key: PropName::Ident(IdentName::new(Atom::new("url"), span)),
value: Box::new(Expr::Lit(Lit::Str(Str { value: Box::new(Expr::Lit(Lit::Str(Str {
span, span,
raw: None, raw: None,
@ -103,7 +103,7 @@ impl swc_bundler::Hook for Hook {
}))), }))),
}, },
KeyValueProp { KeyValueProp {
key: PropName::Ident(Ident::new(js_word!("main"), span)), key: PropName::Ident(IdentName::new(Atom::new("main"), span)),
value: Box::new(if module_record.is_entry { value: Box::new(if module_record.is_entry {
Expr::Member(MemberExpr { Expr::Member(MemberExpr {
span, span,
@ -111,7 +111,7 @@ impl swc_bundler::Hook for Hook {
span, span,
kind: MetaPropKind::ImportMeta, kind: MetaPropKind::ImportMeta,
})), })),
prop: MemberProp::Ident(Ident::new(js_word!("main"), span)), prop: MemberProp::Ident(IdentName::new(Atom::new("main"), span)),
}) })
} else { } else {
Expr::Lit(Lit::Bool(Bool { span, value: false })) Expr::Lit(Lit::Bool(Bool { span, value: false }))
@ -134,9 +134,9 @@ impl Load for Loader {
let module = parse_file_as_module( let module = parse_file_as_module(
&fm, &fm,
Syntax::Typescript(TsConfig { Syntax::Typescript(TsSyntax {
tsx: true, tsx: true,
..TsConfig::default() ..TsSyntax::default()
}), }),
EsVersion::Es5, EsVersion::Es5,
None, None,
@ -152,11 +152,12 @@ impl Load for Loader {
let program = Program::Module(module); let program = Program::Module(module);
let top_level_mark = Mark::new(); let top_level_mark = Mark::new();
let unresolved_mark = Mark::new();
let program = program let program = program
.fold_with(&mut strip(top_level_mark)) .apply(strip(unresolved_mark, top_level_mark))
.fold_with(&mut as_folder(InlineVisitor {})) .apply(visit_mut_pass(InlineVisitor {}))
.fold_with(&mut as_folder(TransformVisitor::new( .apply(visit_mut_pass(TransformVisitor::new(
jsx_dom_expressions::config::Config { jsx_dom_expressions::config::Config {
module_name: "solid-js/web".to_string(), module_name: "solid-js/web".to_string(),
built_ins: vec![ built_ins: vec![
@ -175,8 +176,8 @@ impl Load for Loader {
}, },
NoopComments, NoopComments,
))) )))
.fold_with(&mut hygiene()) .apply(hygiene())
.fold_with(&mut fixer(None)); .apply(fixer(None));
let module = program.module().unwrap(); let module = program.module().unwrap();

View file

@ -2,7 +2,7 @@ pub use demostf_build_bundlers::bundle_raw;
pub use demostf_build_bundlers::bundle_script; pub use demostf_build_bundlers::bundle_script;
pub use demostf_build_bundlers::bundle_style; pub use demostf_build_bundlers::bundle_style;
pub use demostf_build_derive::Asset; pub use demostf_build_derive::Asset;
use rand::{distributions::Alphanumeric, Rng}; use rand::{distr::Alphanumeric, RngExt};
use std::borrow::Cow; use std::borrow::Cow;
pub trait Asset { pub trait Asset {
@ -15,7 +15,7 @@ pub trait Asset {
} }
pub fn random_cache_buster() -> String { pub fn random_cache_buster() -> String {
rand::thread_rng() rand::rng()
.sample_iter(&Alphanumeric) .sample_iter(&Alphanumeric)
.take(8) .take(8)
.map(char::from) .map(char::from)