diff --git a/README.md b/README.md index e0c13b8..e4c383c 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,23 @@ parsed_source.module(); parsed_source.text_info(); ``` +## Versioning Strategy + +This crate does not follow semver so make sure to pin it to a patch version. +Instead a versioning strategy that optimizes for more efficient maintenance is +used: + +- Does [deno_graph](https://github.com/denoland/deno_graph), + [deno_doc](https://github.com/denoland/deno_doc), + [deno_lint](https://github.com/denoland/deno_lint), + [eszip](https://github.com/denoland/eszip), and + [dprint-plugin-typescript](https://github.com/dprint/dprint-plugin-typescript) + still compile in the [Deno](https://github.com/denoland/deno) repo? + - If yes, is this a change that would break something at runtime? + - If yes, it's recommended to do a minor release. + - If no, it's a patch release. + - If no, it's a minor release. + ## swc upgrades We upgrade swc about once a month. Upgrading swc is a very involved process that diff --git a/src/transpiling/mod.rs b/src/transpiling/mod.rs index 167a8c6..47b3c66 100644 --- a/src/transpiling/mod.rs +++ b/src/transpiling/mod.rs @@ -678,7 +678,6 @@ pub fn fold_program<'a>( proposal::decorator_2022_03::decorator_2022_03(), options.use_decorators_proposal, ), - proposal::explicit_resource_management::explicit_resource_management(), helpers::inject_helpers(marks.top_level), // transform imports to var decls before doing the typescript pass // so that swc doesn't do any optimizations on the import declarations @@ -983,113 +982,6 @@ var N; 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 program = parse_program(ParseParams { - specifier, - text: source.into(), - media_type: MediaType::TypeScript, - capture_tokens: false, - maybe_syntax: None, - scope_analysis: false, - }) - .unwrap(); - let transpiled_source = program - .transpile( - &TranspileOptions::default(), - &TranspileModuleOptions::default(), - &EmitOptions::default(), - ) - .unwrap() - .into_source(); - let expected_text = r#"function _ts_add_disposable_resource(env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { - try { - inner.call(this); - } catch (e) { - return Promise.reject(e); - } - }; - env.stack.push({ - value: value, - dispose: dispose, - async: async - }); - } else if (async) { - env.stack.push({ - async: true - }); - } - return value; -} -function _ts_dispose_resources(env) { - var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; - }; - return (_ts_dispose_resources = function _ts_dispose_resources(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while(r = env.stack.pop()){ - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { - fail(e); - return next(); - }); - } else s |= 1; - } catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); - })(env); -} -const env = { - stack: [], - error: void 0, - hasError: false -}; -try { - var data = _ts_add_disposable_resource(env, create(), false); - console.log(data); -} catch (e) { - env.error = e; - env.hasError = true; -} finally{ - _ts_dispose_resources(env); -}"#; - assert_eq!( - &transpiled_source.text[..expected_text.len()], - expected_text - ); - } - #[test] fn test_transpile_tsx() { let specifier =