/** * @module * * Type types. */ import type { Class } from '@hqtsm/class'; import type { Endian, EndianConstructor } from './endian.js'; import type { MembersClass } from './members.js'; import type { ArrayBufferType } from './native.js'; /** * Type. * * @template TArrayBuffer Buffer type. */ export interface Type extends Endian, ArrayBufferView {} /** * Type constructor. * * @template T Type. * @template TArrayBuffer Buffer type. */ export interface TypeConstructor< T extends Type = Type, TArrayBuffer extends ArrayBufferType = ArrayBufferType, > extends Omit, never>, Omit { /** * Create instance for buffer. * * @template _TArrayBuffer Buffer type. * @param buffer Buffer data. * @param byteOffset Byte offset into buffer. * @param littleEndian Host endian, little endian, big endian. */ new <_TArrayBuffer extends TArrayBuffer>( buffer: _TArrayBuffer, byteOffset?: number, littleEndian?: boolean | null, ): T & Type<_TArrayBuffer>; /** * Create instance for buffer. * * @param buffer Buffer data. * @param byteOffset Byte offset into buffer. * @param littleEndian Host endian, little endian, big endian. */ new ( buffer: TArrayBuffer, byteOffset?: number, littleEndian?: boolean | null, ): T & Type; /** * Type prototype. */ readonly prototype: T & Type; /** * Instance size in bytes. */ readonly BYTE_LENGTH: number; } /** * Type class. * * @template T Type. */ export type TypeClass = Class>;