1
0
Fork 0
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:
Kenta Moriuchi 2024-04-30 05:43:05 +09:00 committed by GitHub
parent 4384a126bb
commit 783533d2e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 43 additions and 20 deletions

View file

@ -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 {

View file

@ -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()

View file

@ -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());

View file

@ -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",

View 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"
}
]
}

View 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])

View file

@ -0,0 +1,2 @@
import foo from "./main.json" assert { type: "json" };
console.log(foo);

View file

@ -0,0 +1,3 @@
{
"foo": "foo"
}

View file

@ -0,0 +1 @@
{ foo: "foo" }

View file

@ -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);

View file

@ -1,3 +0,0 @@
if (typeof window !== "undefined") {
throw new Error("Window global available");
}

View file

@ -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);

View file

@ -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);

View file

@ -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",
}; };