mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
FUTURE: remove import assertions support for JavaScript (#23541)
Ref #17944, https://github.com/swc-project/swc/issues/8893 TypeScript removes the `assert` keywords in the transpile, so this PR only works for JavaScript files
This commit is contained in:
parent
4384a126bb
commit
783533d2e3
14 changed files with 43 additions and 20 deletions
|
@ -110,7 +110,7 @@ pub static DENO_DISABLE_PEDANTIC_NODE_WARNINGS: Lazy<bool> = Lazy::new(|| {
|
||||||
.is_some()
|
.is_some()
|
||||||
});
|
});
|
||||||
|
|
||||||
static DENO_FUTURE: Lazy<bool> =
|
pub static DENO_FUTURE: Lazy<bool> =
|
||||||
Lazy::new(|| std::env::var("DENO_FUTURE").ok().is_some());
|
Lazy::new(|| std::env::var("DENO_FUTURE").ok().is_some());
|
||||||
|
|
||||||
pub fn jsr_url() -> &'static Url {
|
pub fn jsr_url() -> &'static Url {
|
||||||
|
|
|
@ -4,6 +4,7 @@ use super::logging::lsp_log;
|
||||||
use crate::args::ConfigFile;
|
use crate::args::ConfigFile;
|
||||||
use crate::args::FmtOptions;
|
use crate::args::FmtOptions;
|
||||||
use crate::args::LintOptions;
|
use crate::args::LintOptions;
|
||||||
|
use crate::args::DENO_FUTURE;
|
||||||
use crate::cache::FastInsecureHasher;
|
use crate::cache::FastInsecureHasher;
|
||||||
use crate::file_fetcher::FileFetcher;
|
use crate::file_fetcher::FileFetcher;
|
||||||
use crate::lsp::logging::lsp_warn;
|
use crate::lsp::logging::lsp_warn;
|
||||||
|
@ -1324,7 +1325,7 @@ impl ConfigData {
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map(|c| c.has_unstable("byonm"))
|
.map(|c| c.has_unstable("byonm"))
|
||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
|| (std::env::var("DENO_FUTURE").is_ok()
|
|| (*DENO_FUTURE
|
||||||
&& package_json.is_some()
|
&& package_json.is_some()
|
||||||
&& config_file
|
&& config_file
|
||||||
.as_ref()
|
.as_ref()
|
||||||
|
|
11
cli/main.rs
11
cli/main.rs
|
@ -29,6 +29,7 @@ mod worker;
|
||||||
use crate::args::flags_from_vec;
|
use crate::args::flags_from_vec;
|
||||||
use crate::args::DenoSubcommand;
|
use crate::args::DenoSubcommand;
|
||||||
use crate::args::Flags;
|
use crate::args::Flags;
|
||||||
|
use crate::args::DENO_FUTURE;
|
||||||
use crate::util::display;
|
use crate::util::display;
|
||||||
use crate::util::v8::get_v8_flags_from_env;
|
use crate::util::v8::get_v8_flags_from_env;
|
||||||
use crate::util::v8::init_v8_flags;
|
use crate::util::v8::init_v8_flags;
|
||||||
|
@ -389,7 +390,15 @@ fn resolve_flags_and_init(
|
||||||
// Using same default as VSCode:
|
// Using same default as VSCode:
|
||||||
// https://github.com/microsoft/vscode/blob/48d4ba271686e8072fc6674137415bc80d936bc7/extensions/typescript-language-features/src/configuration/configuration.ts#L213-L214
|
// https://github.com/microsoft/vscode/blob/48d4ba271686e8072fc6674137415bc80d936bc7/extensions/typescript-language-features/src/configuration/configuration.ts#L213-L214
|
||||||
DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()],
|
DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()],
|
||||||
_ => vec![],
|
_ => {
|
||||||
|
if *DENO_FUTURE {
|
||||||
|
// deno_ast removes TypeScript `assert` keywords, so this flag only affects JavaScript
|
||||||
|
// TODO(petamoriken): Need to check TypeScript `assert` keywords in deno_ast
|
||||||
|
vec!["--no-harmony-import-assertions".to_string()]
|
||||||
|
} else {
|
||||||
|
vec![]
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
init_v8_flags(&default_v8_flags, &flags.v8_flags, get_v8_flags_from_env());
|
init_v8_flags(&default_v8_flags, &flags.v8_flags, get_v8_flags_from_env());
|
||||||
|
|
|
@ -1694,16 +1694,6 @@ fn type_directives_js_main() {
|
||||||
assert_not_contains!(output.combined_output(), "type_reference.d.ts");
|
assert_not_contains!(output.combined_output(), "type_reference.d.ts");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_deno_futures_env() {
|
|
||||||
let context = TestContextBuilder::new().add_future_env_vars().build();
|
|
||||||
let output = context
|
|
||||||
.new_command()
|
|
||||||
.args("run --quiet --reload run/deno_futures_env.ts")
|
|
||||||
.run();
|
|
||||||
output.assert_exit_code(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
itest!(type_directives_redirect {
|
itest!(type_directives_redirect {
|
||||||
args: "run --reload --check run/type_directives_redirect.ts",
|
args: "run --reload --check run/type_directives_redirect.ts",
|
||||||
output: "run/type_directives_redirect.ts.out",
|
output: "run/type_directives_redirect.ts.out",
|
||||||
|
|
16
tests/specs/future/import_assertions/__test__.jsonc
Normal file
16
tests/specs/future/import_assertions/__test__.jsonc
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"args": "run main.js",
|
||||||
|
"output": "error.out",
|
||||||
|
"exitCode": 1,
|
||||||
|
"envs": {
|
||||||
|
"DENO_FUTURE": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": "run main.js",
|
||||||
|
"output": "success.out"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
4
tests/specs/future/import_assertions/error.out
Normal file
4
tests/specs/future/import_assertions/error.out
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
error: Uncaught SyntaxError: Unexpected identifier 'assert'
|
||||||
|
import foo from "./main.json" assert { type: "json" };
|
||||||
|
^
|
||||||
|
at <anonymous> (file:///[WILDCARD]/main.js:[WILDCARD])
|
2
tests/specs/future/import_assertions/main.js
Normal file
2
tests/specs/future/import_assertions/main.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
import foo from "./main.json" assert { type: "json" };
|
||||||
|
console.log(foo);
|
3
tests/specs/future/import_assertions/main.json
Normal file
3
tests/specs/future/import_assertions/main.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"foo": "foo"
|
||||||
|
}
|
1
tests/specs/future/import_assertions/success.out
Normal file
1
tests/specs/future/import_assertions/success.out
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ foo: "foo" }
|
2
tests/testdata/npm/import_json/main.js
vendored
2
tests/testdata/npm/import_json/main.js
vendored
|
@ -1,4 +1,4 @@
|
||||||
import json from "npm:@denotest/binary-package@1/package.json" assert {
|
import json from "npm:@denotest/binary-package@1/package.json" with {
|
||||||
type: "json",
|
type: "json",
|
||||||
};
|
};
|
||||||
console.log(json);
|
console.log(json);
|
||||||
|
|
3
tests/testdata/run/deno_futures_env.ts
vendored
3
tests/testdata/run/deno_futures_env.ts
vendored
|
@ -1,3 +0,0 @@
|
||||||
if (typeof window !== "undefined") {
|
|
||||||
throw new Error("Window global available");
|
|
||||||
}
|
|
2
tests/testdata/subdir/mod7.js
vendored
2
tests/testdata/subdir/mod7.js
vendored
|
@ -1,3 +1,3 @@
|
||||||
import json1 from "./json_1.json" assert { type: "json" };
|
import json1 from "./json_1.json" with { type: "json" };
|
||||||
|
|
||||||
console.log(json1);
|
console.log(json1);
|
||||||
|
|
2
tests/testdata/subdir/mod8.js
vendored
2
tests/testdata/subdir/mod8.js
vendored
|
@ -1,3 +1,3 @@
|
||||||
import json3 from "./json_3.json" assert { type: "json" };
|
import json3 from "./json_3.json" with { type: "json" };
|
||||||
|
|
||||||
console.log(json3);
|
console.log(json3);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env -S deno run --allow-read --allow-write
|
#!/usr/bin/env -S deno run --allow-read --allow-write
|
||||||
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
import exports from "../../cli/napi/sym/symbol_exports.json" assert {
|
import exports from "../../cli/napi/sym/symbol_exports.json" with {
|
||||||
type: "json",
|
type: "json",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue