Skip to content

Commit 57e9629

Browse files
committed
typings: add ffi internal binding types
Signed-off-by: HoonDongKang <d159123@naver.com>
1 parent e06b0f1 commit 57e9629

2 files changed

Lines changed: 103 additions & 0 deletions

File tree

typings/globals.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { CryptoBinding } from './internalBinding/crypto';
1010
import { DebugBinding } from './internalBinding/debug';
1111
import { DiagnosticsChannelBinding } from './internalBinding/diagnostics_channel';
1212
import { EncodingBinding } from './internalBinding/encoding_binding';
13+
import { FFIBinding } from './internalBinding/ffi';
1314
import { FsBinding } from './internalBinding/fs';
1415
import { FsDirBinding } from './internalBinding/fs_dir';
1516
import { HeapUtilsBinding } from './internalBinding/heap_utils';
@@ -55,6 +56,7 @@ interface InternalBindingMap {
5556
debug: DebugBinding;
5657
diagnostics_channel: DiagnosticsChannelBinding;
5758
encoding_binding: EncodingBinding;
59+
ffi: FFIBinding;
5860
fs: FsBinding;
5961
fs_dir: FsDirBinding;
6062
heap_utils: HeapUtilsBinding;

typings/internalBinding/ffi.d.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
declare namespace InternalFFIBinding {
2+
type Buffer = Uint8Array;
3+
type BufferSource = Buffer | ArrayBuffer | ArrayBufferView | SharedArrayBuffer;
4+
type VoidType = 'void';
5+
type NumberType =
6+
| 'char'
7+
| 'int8' | 'i8'
8+
| 'uint8' | 'u8' | 'bool'
9+
| 'int16' | 'i16'
10+
| 'uint16' | 'u16'
11+
| 'int32' | 'i32'
12+
| 'uint32' | 'u32'
13+
| 'float32' | 'f32' | 'float'
14+
| 'float64' | 'f64' | 'double';
15+
type BigIntType = 'int64' | 'i64' | 'uint64' | 'u64';
16+
type PointerType =
17+
| 'pointer' | 'ptr'
18+
| 'string' | 'str'
19+
| 'buffer' | 'arraybuffer'
20+
| 'function';
21+
type ValueType = NumberType | BigIntType | PointerType;
22+
type ReturnType = VoidType | ValueType;
23+
type FFICallback = (...args: any[]) => unknown;
24+
25+
interface FFIFunction {
26+
(...args: unknown[]): unknown;
27+
pointer: bigint;
28+
}
29+
interface FunctionSignature {
30+
arguments?: readonly ValueType[];
31+
return?: ReturnType;
32+
}
33+
34+
class DynamicLibrary {
35+
constructor(path: string | null);
36+
37+
readonly path: string;
38+
readonly symbols: Record<string, bigint>;
39+
readonly functions: Record<string, FFIFunction>;
40+
41+
close(): void;
42+
getFunction(name: string, signature: FunctionSignature): FFIFunction;
43+
getFunctions(): Record<string, FFIFunction>;
44+
getFunctions(
45+
definitions: Record<string, FunctionSignature>,
46+
): Record<string, FFIFunction>;
47+
getSymbol(name: string): bigint;
48+
getSymbols(): Record<string, bigint>;
49+
registerCallback(callback: FFICallback): bigint;
50+
registerCallback(
51+
signature: FunctionSignature,
52+
callback: FFICallback
53+
): bigint;
54+
unregisterCallback(pointer: bigint): void;
55+
refCallback(pointer: bigint): void;
56+
unrefCallback(pointer: bigint): void;
57+
[Symbol.dispose](): void;
58+
}
59+
}
60+
export interface FFIBinding {
61+
DynamicLibrary: typeof InternalFFIBinding.DynamicLibrary;
62+
toString(pointer: bigint): string | null;
63+
toBuffer(pointer: bigint, length: number, copy?: boolean): InternalFFIBinding.Buffer;
64+
toArrayBuffer(pointer: bigint, length: number, copy?: boolean): ArrayBuffer;
65+
66+
exportBytes(source: InternalFFIBinding.BufferSource, pointer: bigint, length: number): void;
67+
getRawPointer(source: InternalFFIBinding.BufferSource): bigint;
68+
getCurrentEventLoop(): bigint;
69+
70+
getInt8(pointer: bigint, offset?: number): number;
71+
getUint8(pointer: bigint, offset?: number): number;
72+
getInt16(pointer: bigint, offset?: number): number;
73+
getUint16(pointer: bigint, offset?: number): number;
74+
getInt32(pointer: bigint, offset?: number): number;
75+
getUint32(pointer: bigint, offset?: number): number;
76+
getInt64(pointer: bigint, offset?: number): bigint;
77+
getUint64(pointer: bigint, offset?: number): bigint;
78+
getFloat32(pointer: bigint, offset?: number): number;
79+
getFloat64(pointer: bigint, offset?: number): number;
80+
81+
setInt8(pointer: bigint, offset: number, value: number): void;
82+
setUint8(pointer: bigint, offset: number, value: number): void;
83+
setInt16(pointer: bigint, offset: number, value: number): void;
84+
setUint16(pointer: bigint, offset: number, value: number): void;
85+
setInt32(pointer: bigint, offset: number, value: number): void;
86+
setUint32(pointer: bigint, offset: number, value: number): void;
87+
setInt64(pointer: bigint, offset: number, value: number | bigint): void;
88+
setUint64(pointer: bigint, offset: number, value: number | bigint): void;
89+
setFloat32(pointer: bigint, offset: number, value: number): void;
90+
setFloat64(pointer: bigint, offset: number, value: number): void;
91+
92+
charIsSigned: boolean;
93+
uintptrMax: bigint;
94+
95+
kSbSharedBuffer: symbol;
96+
kSbInvokeSlow: symbol;
97+
kSbArguments: symbol;
98+
kSbReturn: symbol;
99+
kFastArguments: symbol;
100+
kFastBufferInvoke: symbol;
101+
}

0 commit comments

Comments
 (0)