diff options
author | Asher Gomez <ashersaupingomez@gmail.com> | 2024-04-07 15:42:53 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-07 15:42:53 +1000 |
commit | d3f3e0d717fdbbf531fde0c9e7259f6bb887fa10 (patch) | |
tree | 71643d608635fb1eb1be9796bb5c01d83264ea03 | |
parent | b74a4f29f20c2435ea7c6d192353c1e99760edb0 (diff) |
FUTURE(ext/fs): make `Deno.FsFile` constructor illegal (#23235)
I'm unsure whether we're planning to make the `Deno.FsFile` constructor
illegal or remove `FsFile` from the `Deno.*` namspace in Deno 2. Either
way, this PR works towards the former. I'll create a superceding PR if
the latter is planned instead.
Towards #23089
-rw-r--r-- | ext/fs/30_fs.js | 6 | ||||
-rw-r--r-- | runtime/js/99_main.js | 10 | ||||
-rw-r--r-- | tests/specs/future/runtime_api/main.js | 12 | ||||
-rw-r--r-- | tests/specs/future/runtime_api/main.out | 1 |
4 files changed, 29 insertions, 0 deletions
diff --git a/ext/fs/30_fs.js b/ext/fs/30_fs.js index c2fb66528..b6cd2d1f1 100644 --- a/ext/fs/30_fs.js +++ b/ext/fs/30_fs.js @@ -90,6 +90,7 @@ const { SymbolAsyncIterator, SymbolIterator, SymbolFor, + TypeError, Uint32Array, } = primordials; @@ -673,6 +674,11 @@ class FsFile { new Error().stack, "Use `Deno.open` or `Deno.openSync` instead.", ); + if (internals.future) { + throw new TypeError( + "`Deno.FsFile` cannot be constructed, use `Deno.open()` or `Deno.openSync()` instead.", + ); + } } } diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index c66732331..a66a1660e 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -678,6 +678,11 @@ function bootstrapMainRuntime(runtimeOptions, warmup = false) { 9: future, } = runtimeOptions; + // TODO(iuioiua): remove in Deno v2. This allows us to dynamically delete + // class properties within constructors for classes that are not defined + // within the Deno namespace. + internals.future = future; + removeImportedOps(); deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning; @@ -840,6 +845,11 @@ function bootstrapWorkerRuntime( 9: future, } = runtimeOptions; + // TODO(iuioiua): remove in Deno v2. This allows us to dynamically delete + // class properties within constructors for classes that are not defined + // within the Deno namespace. + internals.future = future; + deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning; verboseDeprecatedApiWarning = shouldUseVerboseDeprecatedApiWarning; performance.setTimeOrigin(DateNow()); diff --git a/tests/specs/future/runtime_api/main.js b/tests/specs/future/runtime_api/main.js index ed60a7b7c..9d3b3ed6c 100644 --- a/tests/specs/future/runtime_api/main.js +++ b/tests/specs/future/runtime_api/main.js @@ -31,4 +31,16 @@ console.log("Deno.writeAllSync is", Deno.writeAllSync); console.log("Deno.write is", Deno.write); console.log("Deno.writeSync is", Deno.writeSync); +try { + new Deno.FsFile(0); +} catch (error) { + if ( + error instanceof TypeError && + error.message === + "`Deno.FsFile` cannot be constructed, use `Deno.open()` or `Deno.openSync()` instead." + ) { + console.log("Deno.FsFile constructor is illegal"); + } +} + self.close(); diff --git a/tests/specs/future/runtime_api/main.out b/tests/specs/future/runtime_api/main.out index c8ef8c62a..595ffd4a4 100644 --- a/tests/specs/future/runtime_api/main.out +++ b/tests/specs/future/runtime_api/main.out @@ -27,3 +27,4 @@ Deno.writeAll is undefined Deno.writeAllSync is undefined Deno.write is undefined Deno.writeSync is undefined +Deno.FsFile constructor is illegal |