node-hitomi
Version:
Hitomi.la API for Node.js
179 lines (176 loc) • 4.46 kB
TypeScript
import { Base } from '../internal/base.js';
import { Gallery } from './gallery.js';
/**
* Supported image file formats.
*
* @enum {string}
* @readonly
*/
declare enum Extension {
Avif = 'avif',
Webp = 'webp',
Jxl = 'jxl'
}
/**
* Available thumbnail size presets.
*
* @enum {string}
* @readonly
*/
declare enum ThumbnailSize {
Small = 'small',
Medium = 'smallbig',
Big = 'big'
}
/**
* An abstract base class for media resources with shared dimension properties.
*
* @abstract
* @see {@link Image}
* @see {@link Video}
*/
declare abstract class Media extends Base {
/**
* The width of the media in pixels.
*
* @type {number}
* @readonly
*/
readonly width: number;
/**
* The height of the media in pixels.
*
* @type {number}
* @readonly
*/
readonly height: number;
}
/**
* An image file belonging to a gallery.
*
* @see {@link Gallery}
*/
declare class Image extends Media {
/**
* The unique hash identifying the image.
*
* @type {string}
* @readonly
*/
readonly hash: string;
/**
* The original filename of the image.
*
* @type {string}
* @readonly
*/
readonly name: string;
/**
* Whether this image is available in AVIF format.
*
* @type {boolean}
* @readonly
*/
readonly hasAvif: boolean;
/**
* Whether this image is available in WebP format.
*
* @deprecated Always `true`.
* @type {boolean}
* @readonly
*/
readonly hasWebp: boolean;
/**
* Whether this image is available in JPEG XL format.
*
* @deprecated Always `false`.
* @type {boolean}
* @readonly
*/
readonly hasJxl: boolean;
/**
* Whether thumbnail variants are available for this image.
*
* @type {boolean}
* @readonly
*/
readonly hasThumbnail: boolean;
/**
* Resolves a URL for this image in the specified format, optionally using a thumbnail size.
*
* Only the following combinations are valid:
*
* | Thumbnail Size | Extension | Requirement (must be `true`) |
* | :------------- | :-------- | :------------------------------- |
* | *(none)* | *(all)* | `has{Extension}` |
* | `Small` | *(all)* | `has{Extension}` |
* | `Medium` | `Avif` | `hasThumbnail && has{Extension}` |
* | `Big` | *(all)* | `hasThumbnail && has{Extension}` |
*
* @param {Extension} extension The desired image format.
* @param {ThumbnailSize} [thumbnailSize] The thumbnail size preset. Omit for a full-size image URL.
* @returns {Promise<string>} A `Promise` that resolves to the image URL.
* @throws {HitomiError} If the `extension` and `thumbnailSize` combination is invalid.
* @see {@link Extension}
* @see {@link ThumbnailSize}
* @see {@link Image.hasAvif}
* @see {@link Image.hasWebp}
* @see {@link Image.hasJxl}
* @see {@link Image.hasThumbnail}
*/
resolveUrl(extension: Extension, thumbnailSize?: ThumbnailSize): Promise<string>;
/**
* Fetches the image in the specified format and optional thumbnail size.
*
* The same `extension` and `thumbnailSize` restrictions as {@link Image.resolveUrl} apply.
*
* @param {Extension} extension The desired image format.
* @param {ThumbnailSize} [thumbnailSize] The thumbnail size preset. Omit for a full-size image.
* @returns {Promise<Uint8Array>} A `Promise` that resolves to the image as a `Uint8Array`.
* @throws {HitomiError} If the `extension` and `thumbnailSize` combination is invalid.
* @see {@link Extension}
* @see {@link ThumbnailSize}
*/
fetch(extension: Extension, thumbnailSize?: ThumbnailSize): Promise<Uint8Array>;
}
/**
* A video file belonging to a gallery.
*
* @see {@link Gallery}
*/
declare class Video extends Media {
/**
* The file name of the video.
*
* @type {string}
* @readonly
*/
readonly fileName: string;
/**
* The streaming URL of the video.
*
* @type {string}
* @readonly
*/
readonly url: string;
/**
* The URL of the poster (video thumbnail).
*
* @type {string}
* @readonly
*/
readonly posterUrl: string;
/**
* Fetches the video in MP4 format.
*
* @returns {Promise<Uint8Array>} A `Promise` that resolves to the video as a `Uint8Array`.
*/
fetch(): Promise<Uint8Array>;
/**
* Fetches the poster (video thumbnail) in WebP format.
*
* @returns {Promise<Uint8Array>} A `Promise` that resolves to the poster as a `Uint8Array`.
*/
fetchPoster(): Promise<Uint8Array>;
}
export { Extension, Image, ThumbnailSize, Video };