summaryrefslogtreecommitdiff
path: root/ext/web/09_file.js
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2023-05-09 12:37:13 +0200
committerGitHub <noreply@github.com>2023-05-09 12:37:13 +0200
commitf34fcd16ea4d504c8a87c0873c65598d70bb1d07 (patch)
treedb7eb7b1dd7f082fc28eb16f8cb3760296bed8e5 /ext/web/09_file.js
parent723d4b038203e35f5be6d11088a7288e6d709869 (diff)
fix(core): let V8 drive extension ESM loads (#18997)
This now allows circular imports across extensions. Instead of load + eval of all ESM files in declaration order, all files are only loaded. Eval is done recursively by V8, only evaluating files that are listed in `Extension::esm_entry_point` fields. --------- Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/web/09_file.js')
-rw-r--r--ext/web/09_file.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/ext/web/09_file.js b/ext/web/09_file.js
index a81176b38..d65a512f9 100644
--- a/ext/web/09_file.js
+++ b/ext/web/09_file.js
@@ -14,6 +14,7 @@ const core = globalThis.Deno.core;
const ops = core.ops;
import * as webidl from "ext:deno_webidl/00_webidl.js";
import { ReadableStream } from "ext:deno_web/06_streams.js";
+import { URL } from "ext:deno_url/00_url.js";
const primordials = globalThis.__bootstrap.primordials;
const {
ArrayBufferPrototype,
@@ -653,6 +654,33 @@ function blobFromObjectUrl(url) {
return blob;
}
+/**
+ * @param {Blob} blob
+ * @returns {string}
+ */
+function createObjectURL(blob) {
+ const prefix = "Failed to execute 'createObjectURL' on 'URL'";
+ webidl.requiredArguments(arguments.length, 1, prefix);
+ blob = webidl.converters["Blob"](blob, prefix, "Argument 1");
+
+ return ops.op_blob_create_object_url(blob.type, getParts(blob));
+}
+
+/**
+ * @param {string} url
+ * @returns {void}
+ */
+function revokeObjectURL(url) {
+ const prefix = "Failed to execute 'revokeObjectURL' on 'URL'";
+ webidl.requiredArguments(arguments.length, 1, prefix);
+ url = webidl.converters["DOMString"](url, prefix, "Argument 1");
+
+ ops.op_blob_revoke_object_url(url);
+}
+
+URL.createObjectURL = createObjectURL;
+URL.revokeObjectURL = revokeObjectURL;
+
export {
Blob,
blobFromObjectUrl,