mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -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()
|
||||
});
|
||||
|
||||
static DENO_FUTURE: Lazy<bool> =
|
||||
pub static DENO_FUTURE: Lazy<bool> =
|
||||
Lazy::new(|| std::env::var("DENO_FUTURE").ok().is_some());
|
||||
|
||||
pub fn jsr_url() -> &'static Url {
|
||||
|
|
|
@ -4,6 +4,7 @@ use super::logging::lsp_log;
|
|||
use crate::args::ConfigFile;
|
||||
use crate::args::FmtOptions;
|
||||
use crate::args::LintOptions;
|
||||
use crate::args::DENO_FUTURE;
|
||||
use crate::cache::FastInsecureHasher;
|
||||
use crate::file_fetcher::FileFetcher;
|
||||
use crate::lsp::logging::lsp_warn;
|
||||
|
@ -1324,7 +1325,7 @@ impl ConfigData {
|
|||
.as_ref()
|
||||
.map(|c| c.has_unstable("byonm"))
|
||||
.unwrap_or(false)
|
||||
|| (std::env::var("DENO_FUTURE").is_ok()
|
||||
|| (*DENO_FUTURE
|
||||
&& package_json.is_some()
|
||||
&& config_file
|
||||
.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::DenoSubcommand;
|
||||
use crate::args::Flags;
|
||||
use crate::args::DENO_FUTURE;
|
||||
use crate::util::display;
|
||||
use crate::util::v8::get_v8_flags_from_env;
|
||||
use crate::util::v8::init_v8_flags;
|
||||
|
@ -389,7 +390,15 @@ fn resolve_flags_and_init(
|
|||
// Using same default as VSCode:
|
||||
// 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()],
|
||||
_ => 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());
|
||||
|
|
|
@ -1694,16 +1694,6 @@ fn type_directives_js_main() {
|
|||
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 {
|
||||
args: "run --reload --check run/type_directives_redirect.ts",
|
||||
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",
|
||||
};
|
||||
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);
|
||||
|
|
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);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env -S deno run --allow-read --allow-write
|
||||
// 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",
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue