diff --git a/src/transpiling/mod.rs b/src/transpiling/mod.rs index 8263030..4ddfac0 100644 --- a/src/transpiling/mod.rs +++ b/src/transpiling/mod.rs @@ -4,6 +4,7 @@ use std::rc::Rc; use anyhow::anyhow; use anyhow::Result; +use proposal::explicit_resource_management; use crate::swc::ast::Program; use crate::swc::codegen::text_writer::JsWriter; @@ -313,6 +314,7 @@ pub fn fold_program( ), options.transform_jsx ), + explicit_resource_management::explicit_resource_management(), Optional::new( react::react( source_map.clone(), @@ -537,6 +539,37 @@ export class A { assert!(transpiled_source.source_map.is_none()); } + #[test] + fn test_explicit_resource_management() { + let specifier = + ModuleSpecifier::parse("https://deno.land/x/mod.ts").unwrap(); + let source = "using data = create();\nconsole.log(data);"; + let module = parse_module(ParseParams { + specifier: specifier.as_str().to_string(), + text_info: SourceTextInfo::from_string(source.to_string()), + media_type: MediaType::TypeScript, + capture_tokens: false, + maybe_syntax: None, + scope_analysis: false, + }) + .unwrap(); + let transpiled_source = module.transpile(&EmitOptions::default()).unwrap(); + let expected_text = r#"try { + var _stack = []; + var data = _using(_stack, create()); + console.log(data); +} catch (_) { + var _error = _; + var _hasError = true; +} finally{ + _dispose(_stack, _error, _hasError); +}"#; + assert_eq!( + &transpiled_source.text[..expected_text.len()], + expected_text + ); + } + #[test] fn test_transpile_tsx() { let specifier =