summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/dts/lib.esnext.d.ts1
-rw-r--r--cli/dts/lib.esnext.weakref.d.ts72
-rw-r--r--cli/op_fetch_asset.rs1
-rw-r--r--cli/tests/integration_tests.rs5
-rw-r--r--cli/tests/performance_stats.out2
-rw-r--r--cli/tests/weakref.ts1
-rw-r--r--cli/tests/weakref.ts.out1
-rw-r--r--cli/tsc.rs1
-rw-r--r--cli/tsc/99_main_compiler.js4
9 files changed, 87 insertions, 1 deletions
diff --git a/cli/dts/lib.esnext.d.ts b/cli/dts/lib.esnext.d.ts
index c03ea0b11..ae7aaecd7 100644
--- a/cli/dts/lib.esnext.d.ts
+++ b/cli/dts/lib.esnext.d.ts
@@ -22,3 +22,4 @@ and limitations under the License.
/// <reference lib="esnext.intl" />
/// <reference lib="esnext.string" />
/// <reference lib="esnext.promise" />
+/// <reference lib="esnext.weakref" />
diff --git a/cli/dts/lib.esnext.weakref.d.ts b/cli/dts/lib.esnext.weakref.d.ts
new file mode 100644
index 000000000..c0b9b8508
--- /dev/null
+++ b/cli/dts/lib.esnext.weakref.d.ts
@@ -0,0 +1,72 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+this file except in compliance with the License. You may obtain a copy of the
+License at http://www.apache.org/licenses/LICENSE-2.0
+
+THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+MERCHANTABLITY OR NON-INFRINGEMENT.
+
+See the Apache Version 2.0 License for specific language governing permissions
+and limitations under the License.
+***************************************************************************** */
+
+/// <reference no-default-lib="true"/>
+
+interface WeakRef<T extends object> {
+ readonly [Symbol.toStringTag]: "WeakRef";
+
+ /**
+ * Returns the WeakRef instance's target object, or undefined if the target object has been
+ * reclaimed.
+ */
+ deref(): T | undefined;
+}
+
+interface WeakRefConstructor {
+ readonly prototype: WeakRef<any>;
+
+ /**
+ * Creates a WeakRef instance for the given target object.
+ * @param target The target object for the WeakRef instance.
+ */
+ new <T extends object>(target?: T): WeakRef<T>;
+}
+
+declare var WeakRef: WeakRefConstructor;
+
+interface FinalizationRegistry {
+ readonly [Symbol.toStringTag]: "FinalizationRegistry";
+
+ /**
+ * Registers an object with the registry.
+ * @param target The target object to register.
+ * @param heldValue The value to pass to the finalizer for this object. This cannot be the
+ * target object.
+ * @param unregisterToken The token to pass to the unregister method to unregister the target
+ * object. If provided (and not undefined), this must be an object. If not provided, the target
+ * cannot be unregistered.
+ */
+ register(target: object, heldValue: any, unregisterToken?: object): void;
+
+ /**
+ * Unregisters an object from the registry.
+ * @param unregisterToken The token that was used as the unregisterToken argument when calling
+ * register to register the target object.
+ */
+ unregister(unregisterToken: object): void;
+}
+
+interface FinalizationRegistryConstructor {
+ readonly prototype: FinalizationRegistry;
+
+ /**
+ * Creates a finalization registry with an associated cleanup callback
+ * @param cleanupCallback The callback to call after an object in the registry has been reclaimed.
+ */
+ new (cleanupCallback: (heldValue: any) => void): FinalizationRegistry;
+}
+
+declare var FinalizationRegistry: FinalizationRegistryConstructor;
diff --git a/cli/op_fetch_asset.rs b/cli/op_fetch_asset.rs
index 3370b765f..4ed77d423 100644
--- a/cli/op_fetch_asset.rs
+++ b/cli/op_fetch_asset.rs
@@ -73,6 +73,7 @@ fn get_asset(name: &str) -> Option<&'static str> {
"lib.esnext.intl.d.ts" => inc!("lib.esnext.intl.d.ts"),
"lib.esnext.promise.d.ts" => inc!("lib.esnext.promise.d.ts"),
"lib.esnext.string.d.ts" => inc!("lib.esnext.string.d.ts"),
+ "lib.esnext.weakref.d.ts" => inc!("lib.esnext.weakref.d.ts"),
"lib.scripthost.d.ts" => inc!("lib.scripthost.d.ts"),
"lib.webworker.d.ts" => inc!("lib.webworker.d.ts"),
"lib.webworker.importscripts.d.ts" => {
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index f7edf5a42..8956d3f7b 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -2641,6 +2641,11 @@ itest!(wasm_unreachable {
exit_code: 1,
});
+itest!(weakref {
+ args: "run --quiet --reload weakref.ts",
+ output: "weakref.ts.out",
+});
+
itest!(top_level_await_order {
args: "run --allow-read top_level_await_order.js",
output: "top_level_await_order.out",
diff --git a/cli/tests/performance_stats.out b/cli/tests/performance_stats.out
index a18e59da9..0fe7ba7f0 100644
--- a/cli/tests/performance_stats.out
+++ b/cli/tests/performance_stats.out
@@ -1,5 +1,5 @@
[WILDCARD]
-DEBUG RS - [WILDCARD] - Files: 46
+DEBUG RS - [WILDCARD] - Files: [WILDCARD]
DEBUG RS - [WILDCARD] - Nodes: [WILDCARD]
DEBUG RS - [WILDCARD] - Identifiers: [WILDCARD]
DEBUG RS - [WILDCARD] - Symbols: [WILDCARD]
diff --git a/cli/tests/weakref.ts b/cli/tests/weakref.ts
new file mode 100644
index 000000000..47c3985fe
--- /dev/null
+++ b/cli/tests/weakref.ts
@@ -0,0 +1 @@
+console.log(WeakRef, FinalizationRegistry);
diff --git a/cli/tests/weakref.ts.out b/cli/tests/weakref.ts.out
new file mode 100644
index 000000000..32bafcf2d
--- /dev/null
+++ b/cli/tests/weakref.ts.out
@@ -0,0 +1 @@
+[Function: WeakRef] [Function: FinalizationRegistry]
diff --git a/cli/tsc.rs b/cli/tsc.rs
index 9fcf4e1d4..ac73e8886 100644
--- a/cli/tsc.rs
+++ b/cli/tsc.rs
@@ -106,6 +106,7 @@ pub const AVAILABLE_LIBS: &[&str] = &[
"esnext.promise",
"esnext.string",
"esnext.symbol",
+ "esnext.weakref",
"scripthost",
"webworker",
"webworker.importscripts",
diff --git a/cli/tsc/99_main_compiler.js b/cli/tsc/99_main_compiler.js
index 4bef1bd8b..91bce61e3 100644
--- a/cli/tsc/99_main_compiler.js
+++ b/cli/tsc/99_main_compiler.js
@@ -488,6 +488,10 @@ delete Object.prototype.__proto__;
ts.libMap.set("deno.shared_globals", "lib.deno.shared_globals.d.ts");
ts.libMap.set("deno.unstable", "lib.deno.unstable.d.ts");
+ // TODO(@kitsonk) remove once added to TypeScript
+ ts.libs.push("esnext.weakref");
+ ts.libMap.set("esnext.weakref", "lib.esnext.weakref.d.ts");
+
// this pre-populates the cache at snapshot time of our library files, so they
// are available in the future when needed.
host.getSourceFile(