mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
parent
74584eef04
commit
33eea0400d
8 changed files with 67 additions and 2 deletions
46
cli/ast.rs
46
cli/ast.rs
|
@ -182,6 +182,13 @@ pub fn get_syntax(media_type: &MediaType) -> Syntax {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum ImportsNotUsedAsValues {
|
||||||
|
Remove,
|
||||||
|
Preserve,
|
||||||
|
Error,
|
||||||
|
}
|
||||||
|
|
||||||
/// Options which can be adjusted when transpiling a module.
|
/// Options which can be adjusted when transpiling a module.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct EmitOptions {
|
pub struct EmitOptions {
|
||||||
|
@ -191,6 +198,10 @@ pub struct EmitOptions {
|
||||||
/// When emitting a legacy decorator, also emit experimental decorator meta
|
/// When emitting a legacy decorator, also emit experimental decorator meta
|
||||||
/// data. Defaults to `false`.
|
/// data. Defaults to `false`.
|
||||||
pub emit_metadata: bool,
|
pub emit_metadata: bool,
|
||||||
|
/// What to do with import statements that only import types i.e. whether to
|
||||||
|
/// remove them (`Remove`), keep them as side-effect imports (`Preserve`)
|
||||||
|
/// or error (`Error`). Defaults to `Remove`.
|
||||||
|
pub imports_not_used_as_values: ImportsNotUsedAsValues,
|
||||||
/// Should the source map be inlined in the emitted code file, or provided
|
/// Should the source map be inlined in the emitted code file, or provided
|
||||||
/// as a separate file. Defaults to `true`.
|
/// as a separate file. Defaults to `true`.
|
||||||
pub inline_source_map: bool,
|
pub inline_source_map: bool,
|
||||||
|
@ -209,6 +220,7 @@ impl Default for EmitOptions {
|
||||||
EmitOptions {
|
EmitOptions {
|
||||||
check_js: false,
|
check_js: false,
|
||||||
emit_metadata: false,
|
emit_metadata: false,
|
||||||
|
imports_not_used_as_values: ImportsNotUsedAsValues::Remove,
|
||||||
inline_source_map: true,
|
inline_source_map: true,
|
||||||
jsx_factory: "React.createElement".into(),
|
jsx_factory: "React.createElement".into(),
|
||||||
jsx_fragment_factory: "React.Fragment".into(),
|
jsx_fragment_factory: "React.Fragment".into(),
|
||||||
|
@ -221,9 +233,16 @@ impl From<tsc_config::TsConfig> for EmitOptions {
|
||||||
fn from(config: tsc_config::TsConfig) -> Self {
|
fn from(config: tsc_config::TsConfig) -> Self {
|
||||||
let options: tsc_config::EmitConfigOptions =
|
let options: tsc_config::EmitConfigOptions =
|
||||||
serde_json::from_value(config.0).unwrap();
|
serde_json::from_value(config.0).unwrap();
|
||||||
|
let imports_not_used_as_values =
|
||||||
|
match options.imports_not_used_as_values.as_str() {
|
||||||
|
"preserve" => ImportsNotUsedAsValues::Preserve,
|
||||||
|
"error" => ImportsNotUsedAsValues::Error,
|
||||||
|
_ => ImportsNotUsedAsValues::Remove,
|
||||||
|
};
|
||||||
EmitOptions {
|
EmitOptions {
|
||||||
check_js: options.check_js,
|
check_js: options.check_js,
|
||||||
emit_metadata: options.emit_decorator_metadata,
|
emit_metadata: options.emit_decorator_metadata,
|
||||||
|
imports_not_used_as_values,
|
||||||
inline_source_map: options.inline_source_map,
|
inline_source_map: options.inline_source_map,
|
||||||
jsx_factory: options.jsx_factory,
|
jsx_factory: options.jsx_factory,
|
||||||
jsx_fragment_factory: options.jsx_fragment_factory,
|
jsx_fragment_factory: options.jsx_fragment_factory,
|
||||||
|
@ -232,6 +251,25 @@ impl From<tsc_config::TsConfig> for EmitOptions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn strip_config_from_emit_options(
|
||||||
|
options: &EmitOptions,
|
||||||
|
) -> typescript::strip::Config {
|
||||||
|
let mut config = typescript::strip::Config::default();
|
||||||
|
config.import_not_used_as_values = match options.imports_not_used_as_values {
|
||||||
|
ImportsNotUsedAsValues::Remove => {
|
||||||
|
typescript::strip::ImportNotUsedAsValues::Remove
|
||||||
|
}
|
||||||
|
ImportsNotUsedAsValues::Preserve => {
|
||||||
|
typescript::strip::ImportNotUsedAsValues::Preserve
|
||||||
|
}
|
||||||
|
// `Error` only affects the type-checking stage. Fall back to `Remove` here.
|
||||||
|
ImportsNotUsedAsValues::Error => {
|
||||||
|
typescript::strip::ImportNotUsedAsValues::Remove
|
||||||
|
}
|
||||||
|
};
|
||||||
|
config
|
||||||
|
}
|
||||||
|
|
||||||
/// A logical structure to hold the value of a parsed module for further
|
/// A logical structure to hold the value of a parsed module for further
|
||||||
/// processing.
|
/// processing.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -299,7 +337,9 @@ impl ParsedModule {
|
||||||
emit_metadata: options.emit_metadata
|
emit_metadata: options.emit_metadata
|
||||||
}),
|
}),
|
||||||
helpers::inject_helpers(),
|
helpers::inject_helpers(),
|
||||||
typescript::strip(),
|
typescript::strip::strip_with_config(strip_config_from_emit_options(
|
||||||
|
options
|
||||||
|
)),
|
||||||
fixer(Some(&self.comments)),
|
fixer(Some(&self.comments)),
|
||||||
hygiene(),
|
hygiene(),
|
||||||
);
|
);
|
||||||
|
@ -513,7 +553,9 @@ pub fn transpile_module(
|
||||||
emit_metadata: emit_options.emit_metadata
|
emit_metadata: emit_options.emit_metadata
|
||||||
}),
|
}),
|
||||||
helpers::inject_helpers(),
|
helpers::inject_helpers(),
|
||||||
typescript::strip(),
|
typescript::strip::strip_with_config(strip_config_from_emit_options(
|
||||||
|
emit_options
|
||||||
|
)),
|
||||||
fixer(Some(&parsed_module.comments)),
|
fixer(Some(&parsed_module.comments)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -773,6 +773,7 @@ impl Graph {
|
||||||
let mut ts_config = TsConfig::new(json!({
|
let mut ts_config = TsConfig::new(json!({
|
||||||
"checkJs": false,
|
"checkJs": false,
|
||||||
"emitDecoratorMetadata": false,
|
"emitDecoratorMetadata": false,
|
||||||
|
"importsNotUsedAsValues": "remove",
|
||||||
"inlineSourceMap": true,
|
"inlineSourceMap": true,
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"jsxFactory": "React.createElement",
|
"jsxFactory": "React.createElement",
|
||||||
|
@ -814,6 +815,7 @@ impl Graph {
|
||||||
// TODO(@kitsonk) consider enabling this by default
|
// TODO(@kitsonk) consider enabling this by default
|
||||||
// see: https://github.com/denoland/deno/issues/7732
|
// see: https://github.com/denoland/deno/issues/7732
|
||||||
"emitDecoratorMetadata": false,
|
"emitDecoratorMetadata": false,
|
||||||
|
"importsNotUsedAsValues": "remove",
|
||||||
"inlineSourceMap": true,
|
"inlineSourceMap": true,
|
||||||
"outDir": "deno://",
|
"outDir": "deno://",
|
||||||
"removeComments": true,
|
"removeComments": true,
|
||||||
|
@ -942,6 +944,7 @@ impl Graph {
|
||||||
"emitDecoratorMetadata": false,
|
"emitDecoratorMetadata": false,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
|
"importsNotUsedAsValues": "remove",
|
||||||
"inlineSourceMap": false,
|
"inlineSourceMap": false,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
|
@ -1589,6 +1592,7 @@ impl Graph {
|
||||||
let mut ts_config = TsConfig::new(json!({
|
let mut ts_config = TsConfig::new(json!({
|
||||||
"checkJs": false,
|
"checkJs": false,
|
||||||
"emitDecoratorMetadata": false,
|
"emitDecoratorMetadata": false,
|
||||||
|
"importsNotUsedAsValues": "remove",
|
||||||
"inlineSourceMap": true,
|
"inlineSourceMap": true,
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"jsxFactory": "React.createElement",
|
"jsxFactory": "React.createElement",
|
||||||
|
|
2
cli/tests/087_hello.ts
Normal file
2
cli/tests/087_hello.ts
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export type SomeType = unknown;
|
||||||
|
console.log("Hello, world!");
|
4
cli/tests/087_no_check_imports_not_used_as_values.ts
Normal file
4
cli/tests/087_no_check_imports_not_used_as_values.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import { SomeType } from "./087_hello.ts";
|
||||||
|
|
||||||
|
const string: SomeType = "Hi!";
|
||||||
|
console.log(string);
|
2
cli/tests/087_no_check_imports_not_used_as_values.ts.out
Normal file
2
cli/tests/087_no_check_imports_not_used_as_values.ts.out
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[WILDCARD]Hello, world!
|
||||||
|
Hi!
|
|
@ -2837,6 +2837,11 @@ console.log("finish");
|
||||||
output: "086_dynamic_import_already_rejected.ts.out",
|
output: "086_dynamic_import_already_rejected.ts.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
itest!(_087_no_check_imports_not_used_as_values {
|
||||||
|
args: "run --config preserve_imports.tsconfig.json --no-check 087_no_check_imports_not_used_as_values.ts",
|
||||||
|
output: "087_no_check_imports_not_used_as_values.ts.out",
|
||||||
|
});
|
||||||
|
|
||||||
itest!(js_import_detect {
|
itest!(js_import_detect {
|
||||||
args: "run --quiet --reload js_import_detect.ts",
|
args: "run --quiet --reload js_import_detect.ts",
|
||||||
output: "js_import_detect.ts.out",
|
output: "js_import_detect.ts.out",
|
||||||
|
|
5
cli/tests/preserve_imports.tsconfig.json
Normal file
5
cli/tests/preserve_imports.tsconfig.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"importsNotUsedAsValues": "preserve"
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ use std::str::FromStr;
|
||||||
pub struct EmitConfigOptions {
|
pub struct EmitConfigOptions {
|
||||||
pub check_js: bool,
|
pub check_js: bool,
|
||||||
pub emit_decorator_metadata: bool,
|
pub emit_decorator_metadata: bool,
|
||||||
|
pub imports_not_used_as_values: String,
|
||||||
pub inline_source_map: bool,
|
pub inline_source_map: bool,
|
||||||
pub jsx: String,
|
pub jsx: String,
|
||||||
pub jsx_factory: String,
|
pub jsx_factory: String,
|
||||||
|
|
Loading…
Reference in a new issue