/** * @module * * Types for constant types. */ import type { Arr } from './arr.js'; import type { ArrayBufferPointer, ArrayBufferType } from './native.js'; import type { Ptr } from './ptr.js'; /** * Constant type. * * @template T Type. */ // deno-lint-ignore ban-types export type Const = T extends Function | RegExp | Date ? T : T extends Arr ? ConstArr & Const> : T extends Ptr ? ConstPtr & Const> : T extends ArrayBufferPointer ? { readonly [K in keyof T]: ( K extends 'buffer' ? T[K] : Const ); } : T extends object ? { readonly [K in keyof T]: Const } : T; /** * Constant pointer. * * @template T Pointer type. */ export interface ConstPtr> extends Const, ArrayBufferType>, 'set'>> {} /** * Constant array. * * @template T Array type. */ export interface ConstArr> extends Const, ArrayBufferType>, 'set'>> {}