From 57e962945542e5852406cd21687aa70498963298 Mon Sep 17 00:00:00 2001 From: HoonDongKang Date: Wed, 2 Sep 2026 17:51:13 +0900 Subject: [PATCH] typings: add ffi internal binding types Signed-off-by: HoonDongKang --- typings/globals.d.ts | 2 + typings/internalBinding/ffi.d.ts | 101 +++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 typings/internalBinding/ffi.d.ts diff --git a/typings/globals.d.ts b/typings/globals.d.ts index 66e27bfe9ab2..39d549319474 100644 --- a/typings/globals.d.ts +++ b/typings/globals.d.ts @@ -10,6 +10,7 @@ import { CryptoBinding } from './internalBinding/crypto'; import { DebugBinding } from './internalBinding/debug'; import { DiagnosticsChannelBinding } from './internalBinding/diagnostics_channel'; import { EncodingBinding } from './internalBinding/encoding_binding'; +import { FFIBinding } from './internalBinding/ffi'; import { FsBinding } from './internalBinding/fs'; import { FsDirBinding } from './internalBinding/fs_dir'; import { HeapUtilsBinding } from './internalBinding/heap_utils'; @@ -55,6 +56,7 @@ interface InternalBindingMap { debug: DebugBinding; diagnostics_channel: DiagnosticsChannelBinding; encoding_binding: EncodingBinding; + ffi: FFIBinding; fs: FsBinding; fs_dir: FsDirBinding; heap_utils: HeapUtilsBinding; diff --git a/typings/internalBinding/ffi.d.ts b/typings/internalBinding/ffi.d.ts new file mode 100644 index 000000000000..0294d1987b03 --- /dev/null +++ b/typings/internalBinding/ffi.d.ts @@ -0,0 +1,101 @@ +declare namespace InternalFFIBinding { + type Buffer = Uint8Array; + type BufferSource = Buffer | ArrayBuffer | ArrayBufferView | SharedArrayBuffer; + type VoidType = 'void'; + type NumberType = + | 'char' + | 'int8' | 'i8' + | 'uint8' | 'u8' | 'bool' + | 'int16' | 'i16' + | 'uint16' | 'u16' + | 'int32' | 'i32' + | 'uint32' | 'u32' + | 'float32' | 'f32' | 'float' + | 'float64' | 'f64' | 'double'; + type BigIntType = 'int64' | 'i64' | 'uint64' | 'u64'; + type PointerType = + | 'pointer' | 'ptr' + | 'string' | 'str' + | 'buffer' | 'arraybuffer' + | 'function'; + type ValueType = NumberType | BigIntType | PointerType; + type ReturnType = VoidType | ValueType; + type FFICallback = (...args: any[]) => unknown; + + interface FFIFunction { + (...args: unknown[]): unknown; + pointer: bigint; + } + interface FunctionSignature { + arguments?: readonly ValueType[]; + return?: ReturnType; + } + + class DynamicLibrary { + constructor(path: string | null); + + readonly path: string; + readonly symbols: Record; + readonly functions: Record; + + close(): void; + getFunction(name: string, signature: FunctionSignature): FFIFunction; + getFunctions(): Record; + getFunctions( + definitions: Record, + ): Record; + getSymbol(name: string): bigint; + getSymbols(): Record; + registerCallback(callback: FFICallback): bigint; + registerCallback( + signature: FunctionSignature, + callback: FFICallback + ): bigint; + unregisterCallback(pointer: bigint): void; + refCallback(pointer: bigint): void; + unrefCallback(pointer: bigint): void; + [Symbol.dispose](): void; + } +} +export interface FFIBinding { + DynamicLibrary: typeof InternalFFIBinding.DynamicLibrary; + toString(pointer: bigint): string | null; + toBuffer(pointer: bigint, length: number, copy?: boolean): InternalFFIBinding.Buffer; + toArrayBuffer(pointer: bigint, length: number, copy?: boolean): ArrayBuffer; + + exportBytes(source: InternalFFIBinding.BufferSource, pointer: bigint, length: number): void; + getRawPointer(source: InternalFFIBinding.BufferSource): bigint; + getCurrentEventLoop(): bigint; + + getInt8(pointer: bigint, offset?: number): number; + getUint8(pointer: bigint, offset?: number): number; + getInt16(pointer: bigint, offset?: number): number; + getUint16(pointer: bigint, offset?: number): number; + getInt32(pointer: bigint, offset?: number): number; + getUint32(pointer: bigint, offset?: number): number; + getInt64(pointer: bigint, offset?: number): bigint; + getUint64(pointer: bigint, offset?: number): bigint; + getFloat32(pointer: bigint, offset?: number): number; + getFloat64(pointer: bigint, offset?: number): number; + + setInt8(pointer: bigint, offset: number, value: number): void; + setUint8(pointer: bigint, offset: number, value: number): void; + setInt16(pointer: bigint, offset: number, value: number): void; + setUint16(pointer: bigint, offset: number, value: number): void; + setInt32(pointer: bigint, offset: number, value: number): void; + setUint32(pointer: bigint, offset: number, value: number): void; + setInt64(pointer: bigint, offset: number, value: number | bigint): void; + setUint64(pointer: bigint, offset: number, value: number | bigint): void; + setFloat32(pointer: bigint, offset: number, value: number): void; + setFloat64(pointer: bigint, offset: number, value: number): void; + + charIsSigned: boolean; + uintptrMax: bigint; + + kSbSharedBuffer: symbol; + kSbInvokeSlow: symbol; + kSbArguments: symbol; + kSbReturn: symbol; + kFastArguments: symbol; + kFastBufferInvoke: symbol; +}