UNPKG

enhance-data-view

Version:

Reactive DataView extension with chainable API for type-safe binary data manipulation.

96 lines (95 loc) 3.61 kB
import type { TypeDefinition, OperationGetter, OperationSetter, OperationReactive } from "./core"; /** * Immutable primitive type definition (frozen state) * @template T - JavaScript type represented by this primitive */ export interface PrimitiveDefinitionFreezed<T> extends TypeDefinition<T> { /** * Creates a mutable clone of the type definition * @param name - Optional new name for the cloned definition * @returns New mutable primitive type definition * @example * const cloned = frozenType.clone('MyRenamedType'); */ clone(name?: string): PrimitiveDefinition<T>; } /** * Mutable primitive type definition with chainable configuration * @template T - JavaScript type represented by this primitive * @remarks Use chainable methods to configure properties before freezing */ export interface PrimitiveDefinition<T> extends PrimitiveDefinitionFreezed<T> { /** * Sets the type name (for debugging/identification) * @param name - New name for the type * @returns Current instance for chaining * @example * .setName('ColorRGBA') */ setName(name?: string): PrimitiveDefinition<T>; /** * Sets the byte size of the type * @param size - Size in bytes (default: 0) * @returns Current instance for chaining * @example * .setSize(4) */ setSize(size?: number): PrimitiveDefinition<T>; /** * Sets the memory alignment requirement * @param align - Alignment value (default: 1) * @returns Current instance for chaining * @example * .setAlign(4) // DWORD alignment */ setAlign(align?: number): PrimitiveDefinition<T>; /** * Sets the read operation implementation * @param getter - Read function (default: throws error) * @returns Current instance for chaining * @example * .setGetter(ctx => ctx.view.getUint32(ctx.offset)) */ setGetter(getter?: OperationGetter<T>): PrimitiveDefinition<T>; /** * Sets the write operation implementation * @param setter - Write function (default: throws error) * @returns Current instance for chaining * @example * .setSetter((ctx, value) => ctx.view.setUint32(ctx.offset, value)) */ setSetter(setter?: OperationSetter<T>): PrimitiveDefinition<T>; /** * Sets the reactive conversion implementation * @param reactive - Reactive converter (default: basic getter-based) * @returns Current instance for chaining * @example * .setReactive(ctx => createReactiveProxy(...)) */ setReactive(reactive?: OperationReactive<T>): PrimitiveDefinition<T>; /** * Freezes the type definition to prevent modification * @returns Immutable version of the type definition * @remarks * - Improves performance by preventing runtime changes * - Should be called after final configuration * @example * const finalType = mutableType.freeze(); */ freeze(): PrimitiveDefinitionFreezed<T>; } /** * Creates a configurable primitive type definition * @param name - Initial type name (optional) * @returns Mutable primitive type definition * @remarks * - Start with this to define custom binary types * - Chain configuration methods before freezing * @example * const Float32 = definePrimitive<number>('float32') * .setSize(4) * .setGetter(ctx => ctx.view.getFloat32(ctx.offset, ctx.littleEndian)) * .setSetter((ctx, value) => ctx.view.setFloat32(ctx.offset, value, ctx.littleEndian)) * .freeze(); */ export declare function definePrimitive<T>(name?: string): PrimitiveDefinition<T>;