- web/: Vue 3 + Vite + UnoCSS + Pinia, dark tactical theme (amber/#0d1117) - AppNav, ListingCard, SearchView with filters/sort, composables (useSnipeMode, useKonamiCode, useMotion), Pinia search store - Steal shimmer, auction countdown, Snipe Mode easter egg all native in Vue - docker/web/: nginx + multi-stage Dockerfile (node build → nginx serve) - compose.yml: api (8510) + web (8509) services - Dockerfile CMD updated to uvicorn for upcoming FastAPI layer - Clean build: 0 TS errors, 380 modules
89 lines
3.4 KiB
TypeScript
89 lines
3.4 KiB
TypeScript
/**
|
|
* TypedArray utils and conversions.
|
|
*
|
|
* ```js
|
|
* import { typedCopyBytes, typedView } from '@exodus/bytes/array.js'
|
|
* ```
|
|
*
|
|
* @module @exodus/bytes/array.js
|
|
*/
|
|
|
|
/// <reference types="node" />
|
|
|
|
// >= TypeScript 5.9 made Uint8Array templated with <> and defaulted to ArrayBufferLike
|
|
// which would incorrectly accept SharedArrayBuffer instances.
|
|
// < TypeScript 5.7 doesn't support templates for Uint8Array.
|
|
// So this type is defined as a workaround to evaluate to Uint8Array<ArrayBuffer> on all versions of TypeScript.
|
|
|
|
/**
|
|
* This is `Uint8Array<ArrayBuffer>`
|
|
* (as opposed to `Uint8Array<SharedArrayBuffer>` and `Uint8Array<ArrayBufferLike>`)
|
|
* on TypeScript versions that support that distinction.
|
|
*
|
|
* On TypeScript < 5.7, this is just `Uint8Array`, as it's not a template there.
|
|
*/
|
|
export type Uint8ArrayBuffer = ReturnType<typeof Uint8Array.from>;
|
|
|
|
/**
|
|
* This is `Uint16Array<ArrayBuffer>`
|
|
* (as opposed to `Uint16Array<SharedArrayBuffer>` and `Uint16Array<ArrayBufferLike>`)
|
|
* on TypeScript versions that support that distinction.
|
|
*
|
|
* On TypeScript < 5.7, this is just `Uint16Array`, as it's not a template there.
|
|
*/
|
|
export type Uint16ArrayBuffer = ReturnType<typeof Uint16Array.from>;
|
|
|
|
/**
|
|
* This is `Uint32Array<ArrayBuffer>`
|
|
* (as opposed to `Uint32Array<SharedArrayBuffer>` and `Uint32Array<ArrayBufferLike>`)
|
|
* on TypeScript versions that support that distinction.
|
|
*
|
|
* On TypeScript < 5.7, this is just `Uint32Array`, as it's not a template there.
|
|
*/
|
|
export type Uint32ArrayBuffer = ReturnType<typeof Uint32Array.from>;
|
|
|
|
/**
|
|
* Output format for typed array conversions
|
|
*/
|
|
export type OutputFormat = 'uint8' | 'arraybuffer' | 'buffer';
|
|
|
|
/**
|
|
* Create a view of a TypedArray in the specified format (`'uint8'` or `'buffer'`)
|
|
*
|
|
* > [!IMPORTANT]
|
|
* > Does not copy data, returns a view on the same underlying buffer
|
|
*
|
|
* > [!WARNING]
|
|
* > Viewing `Uint16Array` (or other with `BYTES_PER_ELEMENT > 1`) as bytes
|
|
* > is platform endianness-dependent.
|
|
*
|
|
* @param arr - The input TypedArray
|
|
* @param format - The desired output format (`'uint8'` or `'buffer'`)
|
|
* @returns A view on the same underlying buffer
|
|
*/
|
|
export function typedView(arr: ArrayBufferView, format: 'uint8'): Uint8Array;
|
|
export function typedView(arr: ArrayBufferView, format: 'buffer'): Buffer;
|
|
export function typedView(arr: ArrayBufferView, format: 'uint8' | 'buffer'): Uint8Array | Buffer;
|
|
|
|
/**
|
|
* Create a copy of TypedArray underlying bytes in the specified format (`'uint8'`, `'buffer'`, or `'arraybuffer'`)
|
|
*
|
|
* This does not copy _values_, but copies the underlying bytes.
|
|
* The result is similar to that of `typedView()`, but this function provides a copy, not a view of the same memory.
|
|
*
|
|
* > [!WARNING]
|
|
* > Copying underlying bytes from `Uint16Array` (or other with `BYTES_PER_ELEMENT > 1`)
|
|
* > is platform endianness-dependent.
|
|
*
|
|
* > [!NOTE]
|
|
* > Buffer might be pooled.
|
|
* > Uint8Array return values are not pooled and match their underlying ArrayBuffer.
|
|
*
|
|
* @param arr - The input TypedArray
|
|
* @param format - The desired output format (`'uint8'`, `'buffer'`, or `'arraybuffer'`)
|
|
* @returns A copy of the underlying buffer
|
|
*/
|
|
export function typedCopyBytes(arr: ArrayBufferView, format: 'uint8'): Uint8Array;
|
|
export function typedCopyBytes(arr: ArrayBufferView, format: 'arraybuffer'): ArrayBuffer;
|
|
export function typedCopyBytes(arr: ArrayBufferView, format: 'buffer'): Buffer;
|
|
export function typedCopyBytes(arr: ArrayBufferView, format: OutputFormat): Uint8Array | ArrayBuffer | Buffer;
|