mirror of
https://github.com/denoland/deno.git
synced 2025-02-21 21:03:16 -05:00
53 lines
1.7 KiB
Rust
53 lines
1.7 KiB
Rust
// Copyright 2018-2025 the Deno authors. MIT license.
|
|
|
|
use std::path::PathBuf;
|
|
|
|
mod image_ops;
|
|
mod op_create_image_bitmap;
|
|
use image::ColorType;
|
|
use op_create_image_bitmap::op_create_image_bitmap;
|
|
|
|
#[derive(Debug, thiserror::Error, deno_error::JsError)]
|
|
pub enum CanvasError {
|
|
/// Image formats that is 32-bit depth are not supported currently due to the following reasons:
|
|
/// - e.g. OpenEXR, it's not covered by the spec.
|
|
/// - JPEG XL supported by WebKit, but it cannot be called a standard today.
|
|
/// https://github.com/whatwg/mimesniff/issues/143
|
|
///
|
|
#[class(type)]
|
|
#[error("Unsupported color type and bit depth: '{0:?}'")]
|
|
UnsupportedColorType(ColorType),
|
|
#[class("DOMExceptionInvalidStateError")]
|
|
#[error("Cannot decode image '{0}'")]
|
|
InvalidImage(image::ImageError),
|
|
#[class("DOMExceptionInvalidStateError")]
|
|
#[error("The chunk data is not big enough with the specified width: {0} and height: {1}")]
|
|
NotBigEnoughChunk(u32, u32),
|
|
#[class("DOMExceptionInvalidStateError")]
|
|
#[error("The width: {0} or height: {1} could not be zero")]
|
|
InvalidSizeZero(u32, u32),
|
|
#[class(generic)]
|
|
#[error(transparent)]
|
|
Lcms(#[from] lcms2::Error),
|
|
#[class(generic)]
|
|
#[error(transparent)]
|
|
Image(#[from] image::ImageError),
|
|
}
|
|
|
|
impl CanvasError {
|
|
/// Convert an [`image::ImageError`] to an [`CanvasError::InvalidImage`].
|
|
fn image_error_to_invalid_image(error: image::ImageError) -> Self {
|
|
CanvasError::InvalidImage(error)
|
|
}
|
|
}
|
|
|
|
deno_core::extension!(
|
|
deno_canvas,
|
|
deps = [deno_webidl, deno_web, deno_webgpu],
|
|
ops = [op_create_image_bitmap],
|
|
lazy_loaded_esm = ["01_image.js"],
|
|
);
|
|
|
|
pub fn get_declaration() -> PathBuf {
|
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_canvas.d.ts")
|
|
}
|