summaryrefslogtreecommitdiff
path: root/runtime/js/98_global_scope_shared.js
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2024-01-22 12:08:01 +0100
committerGitHub <noreply@github.com>2024-01-22 12:08:01 +0100
commit8f767627938ef10802864419061e58a8a75db567 (patch)
tree81f61ba0f8c14fb820a72500840eb0c619d54362 /runtime/js/98_global_scope_shared.js
parentb4990d1aa233db662cf22d7f872d45b3a947e0f6 (diff)
feat(web): ImageBitmap (#21898)
Diffstat (limited to 'runtime/js/98_global_scope_shared.js')
-rw-r--r--runtime/js/98_global_scope_shared.js62
1 files changed, 60 insertions, 2 deletions
diff --git a/runtime/js/98_global_scope_shared.js b/runtime/js/98_global_scope_shared.js
index 04a6e4bd3..8ef269539 100644
--- a/runtime/js/98_global_scope_shared.js
+++ b/runtime/js/98_global_scope_shared.js
@@ -31,11 +31,67 @@ import * as messagePort from "ext:deno_web/13_message_port.js";
import * as webidl from "ext:deno_webidl/00_webidl.js";
import { DOMException } from "ext:deno_web/01_dom_exception.js";
import * as abortSignal from "ext:deno_web/03_abort_signal.js";
-import * as imageData from "ext:deno_web/16_image_data.js";
import { webgpu, webGPUNonEnumerable } from "ext:deno_webgpu/00_init.js";
import * as webgpuSurface from "ext:deno_webgpu/02_surface.js";
import { unstableIds } from "ext:runtime/90_deno_ns.js";
+const { op_lazy_load_esm } = core.ensureFastOps(true);
+let image;
+
+function ImageNonEnumerable(getter) {
+ let valueIsSet = false;
+ let value;
+
+ return {
+ get() {
+ loadImage();
+
+ if (valueIsSet) {
+ return value;
+ } else {
+ return getter();
+ }
+ },
+ set(v) {
+ loadImage();
+
+ valueIsSet = true;
+ value = v;
+ },
+ enumerable: false,
+ configurable: true,
+ };
+}
+function ImageWritable(getter) {
+ let valueIsSet = false;
+ let value;
+
+ return {
+ get() {
+ loadImage();
+
+ if (valueIsSet) {
+ return value;
+ } else {
+ return getter();
+ }
+ },
+ set(v) {
+ loadImage();
+
+ valueIsSet = true;
+ value = v;
+ },
+ enumerable: true,
+ configurable: true,
+ };
+}
+function loadImage() {
+ if (!image) {
+ image = op_lazy_load_esm("ext:deno_canvas/01_image.js");
+ }
+}
+
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope
const windowOrWorkerGlobalScope = {
AbortController: util.nonEnumerable(abortSignal.AbortController),
@@ -60,7 +116,8 @@ const windowOrWorkerGlobalScope = {
FileReader: util.nonEnumerable(fileReader.FileReader),
FormData: util.nonEnumerable(formData.FormData),
Headers: util.nonEnumerable(headers.Headers),
- ImageData: util.nonEnumerable(imageData.ImageData),
+ ImageData: ImageNonEnumerable(() => image.ImageData),
+ ImageBitmap: ImageNonEnumerable(() => image.ImageBitmap),
MessageEvent: util.nonEnumerable(event.MessageEvent),
Performance: util.nonEnumerable(performance.Performance),
PerformanceEntry: util.nonEnumerable(performance.PerformanceEntry),
@@ -110,6 +167,7 @@ const windowOrWorkerGlobalScope = {
),
atob: util.writable(base64.atob),
btoa: util.writable(base64.btoa),
+ createImageBitmap: ImageWritable(() => image.createImageBitmap),
clearInterval: util.writable(timers.clearInterval),
clearTimeout: util.writable(timers.clearTimeout),
caches: {