From 249db0f7d91d5e895906078f92b7d31c76b96121 Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Wed, 4 Sep 2019 11:12:21 +0900 Subject: [PATCH] Handle typescript version in rust (#2855) --- cli/main.rs | 8 +++++++- cli/ops/os.rs | 1 + cli/version.rs | 11 +++++++++++ deno_typescript/compiler_main.js | 1 - js/main.ts | 13 +------------ js/os.ts | 1 + js/version.ts | 12 ++++++++---- 7 files changed, 29 insertions(+), 18 deletions(-) diff --git a/cli/main.rs b/cli/main.rs index 682d1055fe..948f8544ee 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -398,6 +398,12 @@ fn run_script(flags: DenoFlags, argv: Vec) { } } +fn version_command() { + println!("deno: {}", version::DENO); + println!("v8: {}", version::v8()); + println!("typescript: {}", version::typescript()); +} + fn main() { #[cfg(windows)] ansi_term::enable_ansi_support().ok(); // For Windows 10 @@ -425,7 +431,7 @@ fn main() { DenoSubcommand::Repl => run_repl(flags, argv), DenoSubcommand::Run => run_script(flags, argv), DenoSubcommand::Types => types_command(), - DenoSubcommand::Version => run_repl(flags, argv), + DenoSubcommand::Version => version_command(), DenoSubcommand::Xeval => xeval_command(flags, argv), } } diff --git a/cli/ops/os.rs b/cli/ops/os.rs index afb87539f4..d644d893b2 100644 --- a/cli/ops/os.rs +++ b/cli/ops/os.rs @@ -28,6 +28,7 @@ pub fn op_start( "versionFlag": state.flags.version, "v8Version": version::v8(), "denoVersion": version::DENO, + "tsVersion": version::typescript(), "noColor": !ansi::use_color(), "xevalDelim": state.flags.xeval_delim.clone(), }))) diff --git a/cli/version.rs b/cli/version.rs index 4b9509af96..2c98a96d47 100644 --- a/cli/version.rs +++ b/cli/version.rs @@ -1,6 +1,17 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. +use serde_json; pub const DENO: &str = env!("CARGO_PKG_VERSION"); pub fn v8() -> &'static str { deno::v8_version() } + +pub fn typescript() -> String { + // TODO: By using include_str! we are including the package.json into + // the deno binary using serde to decode it at runtime. This is suboptimal + // in space and time. We need to extract the TypeScript version at compile + // time instead. This will be easier after #2608. + let data = include_str!("../node_modules/typescript/package.json"); + let pkg: serde_json::Value = serde_json::from_str(data).unwrap(); + pkg["version"].as_str().unwrap().to_string() +} diff --git a/deno_typescript/compiler_main.js b/deno_typescript/compiler_main.js index 74b6a8dd57..1cc42072ab 100644 --- a/deno_typescript/compiler_main.js +++ b/deno_typescript/compiler_main.js @@ -10,7 +10,6 @@ function main(configText, rootNames, replacements_) { println(`>>> rootNames ${rootNames}`); replacements = replacements_; - replacements["DENO_REPLACE_TS_VERSION"] = ts.version; println(`>>> replacements ${JSON.stringify(replacements)}`); const host = new Host(); diff --git a/js/main.ts b/js/main.ts index 31a7647dfc..6ce3551acf 100644 --- a/js/main.ts +++ b/js/main.ts @@ -1,5 +1,4 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. - import "./globals.ts"; import { assert, log } from "./util.ts"; @@ -11,21 +10,11 @@ import { xevalMain, XevalFunc } from "./xeval.ts"; import { setVersions } from "./version.ts"; import { window } from "./window.ts"; import { setLocation } from "./location.ts"; -import * as Deno from "./deno.ts"; function denoMain(preserveDenoNamespace: boolean = true, name?: string): void { const s = os.start(preserveDenoNamespace, name); - setVersions(s.denoVersion, s.v8Version); - - // handle `--version` - if (s.versionFlag) { - const { console } = window; - console.log("deno:", Deno.version.deno); - console.log("v8:", Deno.version.v8); - console.log("typescript:", Deno.version.typescript); - os.exit(0); - } + setVersions(s.denoVersion, s.v8Version, s.tsVersion); setPrepareStackTrace(Error); diff --git a/js/os.ts b/js/os.ts index dbfbf3c884..b5392fc338 100644 --- a/js/os.ts +++ b/js/os.ts @@ -59,6 +59,7 @@ interface Start { versionFlag: boolean; denoVersion: string; v8Version: string; + tsVersion: string; noColor: boolean; xevalDelim: string; } diff --git a/js/version.ts b/js/version.ts index 3ceade24e3..08ac581220 100644 --- a/js/version.ts +++ b/js/version.ts @@ -8,17 +8,21 @@ interface Version { export const version: Version = { deno: "", v8: "", - // This string will be replaced by rollup - typescript: `DENO_REPLACE_TS_VERSION` + typescript: "" }; /** - * Sets the deno and v8 versions and freezes the version object. + * Sets the deno, v8, and typescript versions and freezes the version object. * @internal */ -export function setVersions(denoVersion: string, v8Version: string): void { +export function setVersions( + denoVersion: string, + v8Version: string, + tsVersion: string +): void { version.deno = denoVersion; version.v8 = v8Version; + version.typescript = tsVersion; Object.freeze(version); }