FFI
Интерфейс для вызова внешних функций (Foreign Function Interface). Вызывайте функции из разделяемых библиотек (например, C/C++) напрямую из Deno.
Полезно для интеграции с существующим машинным кодом или доступа к низкоуровневым функциям системы.
Например: Deno.dlopen
класс Deno.UnsafeCallback
Небезопасный указатель на функцию для передачи функций JavaScript в качестве указателей на функции C при вызове внешних функций.
Указатель на функцию остается действительным до вызова метода close().
Все UnsafeCallback всегда потокобезопасны: их можно вызывать из внешних потоков без сбоев. Однако по умолчанию они не пробуждают цикл событий Deno.
Если обратный вызов должен вызываться из внешних потоков, используйте статический конструктор threadSafe() или явно вызовите ref(), чтобы обратный вызов пробуждал цикл событий Deno при вызове из внешних потоков. Это также не позволяет процессу Deno завершиться, пока обратный вызов существует и не снята его ссылка.
Затем используйте deref(), чтобы разрешить завершение процесса Deno. Вызов deref() для обратного вызова с установленной ссылкой не мешает ему пробуждать цикл событий Deno при вызове из внешних потоков.
Конструкторы
UnsafeCallback(
definition: Definition,
callback: UnsafeCallbackFunction<Definition["parameters"], Definition["result"]>,
) Параметры типа
Definition extends UnsafeCallbackDefinition = UnsafeCallbackDefinition Свойства
callback: UnsafeCallbackFunction<Definition["parameters"], Definition["result"]> Функция обратного вызова.
definition: Definition Определение небезопасного обратного вызова.
pointer: PointerObject<Definition> Указатель на небезопасный обратный вызов.
Методы
close(): void Удаляет указатель на функцию C, связанный с этим экземпляром.
Продолжение использования экземпляра или указателя на функцию C после закрытия UnsafeCallback приведет к ошибкам и сбоям.
Вызов этого метода обнуляет счетчик ссылок обратного вызова, прекращает пробуждение им цикла событий Deno при вызове из внешних потоков и больше не препятствует завершению процесса Deno.
ref(): number Увеличивает счетчик ссылок обратного вызова и возвращает новое значение счетчика.
После вызова ref() обратный вызов всегда пробуждает цикл событий Deno при вызове из внешних потоков.
Если счетчик ссылок обратного вызова не равен нулю, он препятствует завершению процесса Deno.
unref(): number Уменьшает счетчик ссылок обратного вызова и возвращает новое значение счетчика.
Вызов unref() не мешает обратному вызову пробуждать цикл событий Deno при вызове из внешних потоков.
Если счетчик ссылок обратного вызова равен нулю, он больше не препятствует завершению процесса Deno.
Статические методы
threadSafe<Definition extends UnsafeCallbackDefinition = UnsafeCallbackDefinition>(
definition: Definition,
callback: UnsafeCallbackFunction<Definition["parameters"], Definition["result"]>,
): UnsafeCallback<Definition> Создает UnsafeCallback и один раз вызывает ref(), чтобы тот мог пробуждать цикл событий Deno при вызове из внешних потоков.
Это также не позволяет процессу Deno завершиться, пока обратный вызов существует и не снята его ссылка.
класс Deno.UnsafeFnPointer
Небезопасный указатель на функцию для вызова функций, отсутствующих среди символов.
Конструкторы
UnsafeFnPointer(
pointer: PointerObject<NoInfer<Omit<Fn, "nonblocking">>>,
definition: Fn,
) Параметры типа
Fn extends ForeignFunction Свойства
Вызов внешней функции.
Определение функции.
Указатель на функцию.
класс Deno.UnsafePointer
Набор статических функций для работы с объектами-указателями.
Статические методы
create<T = unknown>(value: bigint): PointerValue<T> Создает указатель из числового значения. Это действительно опасно!
equals<T = unknown>(
a: PointerValue<T>,
b: PointerValue<T>,
): boolean Возвращает true, если оба указателя указывают на один адрес.
of<T = unknown>(value: Deno.UnsafeCallback | AllowSharedBufferSource): PointerValue<T> Возвращает прямой указатель на массив типизированных данных в памяти.
offset<T = unknown>(
value: PointerObject,
offset: number,
): PointerValue<T> Возвращает новый указатель со смещением относительно исходного на offset байт.
value(value: PointerValue): bigint Получает числовое значение указателя
класс Deno.UnsafePointerView
Небезопасное представление области памяти, на которую указывает значение pointer. API UnsafePointerView соответствует стандартному встроенному интерфейсу DataView для доступа к типам, хранящимся в области памяти (числам, строкам и необработанным байтам).
Конструкторы
UnsafePointerView(pointer: PointerObject) Свойства
Методы
copyInto(
destination: AllowSharedBufferSource,
offset?: number,
): void Копирует данные из памяти по указателю в массив типизированных данных.
Длина определяется по свойству byteLength массива типизированных данных.
Также принимает необязательное смещение в байтах относительно указателя.
getArrayBuffer(
byteLength: number,
offset?: number,
): ArrayBuffer Получает ArrayBuffer длиной byteLength по заданному смещению в байтах относительно указателя.
getBigInt64(offset?: number): bigint Получает знаковое 64-битное целое число по заданному смещению в байтах относительно указателя.
getBigUint64(offset?: number): bigint Получает беззнаковое 64-битное целое число по заданному смещению в байтах относительно указателя.
getBool(offset?: number): boolean Получает логическое значение по заданному смещению в байтах относительно указателя.
getCString(offset?: number): string Получает строку в кодировке UTF-8 по заданному смещению в байтах, до нулевого байта.
Возвращаемая строка не включает символ U+0000.
Некорректные символы UTF-8 в возвращаемой строке заменяются символом U+FFFD.
getFloat32(offset?: number): number Получает знаковое 32-битное число с плавающей запятой по заданному смещению в байтах относительно указателя.
getFloat64(offset?: number): number Получает знаковое 64-битное число с плавающей запятой по заданному смещению в байтах относительно указателя.
getInt16(offset?: number): number Получает знаковое 16-битное целое число по заданному смещению в байтах относительно указателя.
getInt32(offset?: number): number Получает знаковое 32-битное целое число по заданному смещению в байтах относительно указателя.
getInt8(offset?: number): number Получает знаковое 8-битное целое число по заданному смещению в байтах относительно указателя.
getPointer<T = unknown>(offset?: number): PointerValue<T> Получает указатель по заданному смещению в байтах относительно указателя
getUint16(offset?: number): number Получает беззнаковое 16-битное целое число по заданному смещению в байтах относительно указателя.
getUint32(offset?: number): number Получает беззнаковое 32-битное целое число по заданному смещению в байтах относительно указателя.
getUint8(offset?: number): number Получает беззнаковое 8-битное целое число по заданному смещению в байтах относительно указателя.
Статические методы
copyInto(): void Копирует данные из памяти по указанному указателю в массив типизированных данных.
Длина определяется по свойству byteLength массива типизированных данных.
Также принимает необязательное смещение в байтах относительно указателя.
getArrayBuffer(): ArrayBuffer Получает ArrayBuffer длиной byteLength по заданному смещению в байтах относительно указанного указателя.
getCString(
pointer: PointerObject,
offset?: number,
): string Получает строку в кодировке UTF-8 по заданному смещению в байтах относительно указанного указателя, до нулевого байта.
Возвращаемая строка не включает символ U+0000.
Некорректные символы UTF-8 в возвращаемой строке заменяются символом U+FFFD.
функция Deno.dlopen
dlopen<S extends ForeignLibraryInterface>(
filename: string | URL,
symbols: S,
): DynamicLibrary<S>Открывает внешнюю динамическую библиотеку и регистрирует символы, делая доступными для вызова внешние функции.
Требуется разрешение allow-ffi. Загрузка внешних динамических библиотек теоретически может обойти все разрешения песочницы. Хотя это отдельное разрешение, на практике пользователям следует учитывать, что оно фактически эквивалентно запуску с разрешением allow-all.
Примеры
// Determine library extension based on
// your OS.
let libSuffix = "";
switch (Deno.build.os) {
case "windows":
libSuffix = "dll";
break;
case "darwin":
libSuffix = "dylib";
break;
default:
libSuffix = "so";
break;
}
const libName = `./libadd.${libSuffix}`;
// Open library and define exported symbols
const dylib = Deno.dlopen(
libName,
{
"add": { parameters: ["isize", "isize"], result: "isize" },
} as const,
);
// Call the symbol `add`
const result = dylib.symbols.add(35n, 34n); // 69n
console.log(`Result from external addition of 35 and 34: ${result}`);
Параметры типа
S extends ForeignLibraryInterface Параметры
filename: string | URL symbols: S Возвращаемый тип
интерфейс Deno.DynamicLibrary
Ресурс динамической библиотеки. Используйте Deno.dlopen, чтобы загрузить динамическую библиотеку и получить этот интерфейс.
Параметры типа
S extends ForeignLibraryInterface Свойства
Все зарегистрированные символы библиотеки вместе с функциями для их вызова.
Методы
close(): void Удаляет указатели, связанные с символами библиотеки.
Продолжение использования символов, принадлежащих библиотеке, приведет к ошибкам и сбоям.
Вызов этого метода также немедленно обнуляет все ссылки и больше не препятствует завершению процесса Deno.
интерфейс Deno.ForeignFunction
Интерфейс внешней функции, определяемый типами ее параметров и результата.
Параметры типа
Parameters extends readonly NativeType[] = readonly NativeType[] Result extends NativeResultType = NativeResultType NonBlocking extends boolean = boolean Свойства
name: string Имя символа.
По умолчанию используется имя ключа в объекте symbols.
Параметры внешней функции.
nonblocking: NonBlocking Если true, вызовы функции будут выполняться в выделенном блокирующем потоке и возвращать Promise, разрешающийся в result.
optional: boolean = false Если true, dlopen не завершится с ошибкой, если символ не найден. Вместо этого символу будет присвоено значение null.
интерфейс Deno.ForeignLibraryInterface
Дескриптор интерфейса внешней библиотеки.
Сигнатуры индекса
интерфейс Deno.ForeignStatic
Параметры типа
Type extends NativeType = NativeType Свойства
интерфейс Deno.NativeStructType
Тип нативной структуры для взаимодействия с внешними функциями.
Свойства
struct: readonly NativeType[] интерфейс Deno.PointerObject
Ненулевой указатель, представленный во время выполнения в виде объекта. Прототип объекта — null; его нельзя изменить. Объект нельзя присвоить ни одному значению, поэтому он полностью доступен только для чтения.
Для взаимодействия с памятью через указатель используйте класс UnsafePointerView. Чтобы создать указатель по адресу или получить адрес указателя, используйте статические методы класса UnsafePointer.
Параметры типа
T = unknown Свойства
интерфейс Deno.UnsafeCallbackDefinition
Определение небезопасной функции обратного вызова.
Параметры типа
Parameters extends readonly NativeType[] = readonly NativeType[] Result extends NativeResultType = NativeResultType Свойства
Параметры функции обратного вызова.
псевдоним типа Deno.ConditionalAsync
псевдоним типа Deno.FromForeignFunction
Параметры типа
T extends ForeignFunction Определение
T["parameters"] extends readonly [] ? () => StaticForeignSymbolReturnType<T> : (...args: ToNativeParameterTypes<T["parameters"]>) => StaticForeignSymbolReturnType<T> псевдоним типа Deno.FromNativeParameterTypes
Параметры типа
T extends readonly NativeType[] Определение
[T[number][]] extends [T] ? FromNativeType<T[number]>[] : [readonly T[number][]] extends [T] ? readonly FromNativeType<T[number]>[] : T extends readonly [...NativeType[]] ? [K in keyof T]: FromNativeType<T[K]> : never псевдоним типа Deno.FromNativeResultType
Преобразование типов для возвращаемых значений внешних символов.
Параметры типа
T extends NativeResultType = NativeResultType Определение
T extends NativeStructType ? Uint8Array<ArrayBuffer> : T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U : T extends NativeI8Enum<infer U> ? U : T extends NativeU16Enum<infer U> ? U : T extends NativeI16Enum<infer U> ? U : T extends NativeU32Enum<infer U> ? U : T extends NativeI32Enum<infer U> ? U : number : T extends NativeBigIntType ? bigint : T extends NativeBooleanType ? boolean : T extends NativePointerType ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue : T extends NativeBufferType ? PointerValue : T extends NativeFunctionType ? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null : PointerValue : T extends NativeVoidType ? void : never псевдоним типа Deno.FromNativeType
Преобразование типов для возвращаемых значений внешних символов и параметров небезопасных функций обратного вызова.
Параметры типа
T extends NativeType = NativeType Определение
T extends NativeStructType ? Uint8Array<ArrayBuffer> : T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U : T extends NativeI8Enum<infer U> ? U : T extends NativeU16Enum<infer U> ? U : T extends NativeI16Enum<infer U> ? U : T extends NativeU32Enum<infer U> ? U : T extends NativeI32Enum<infer U> ? U : number : T extends NativeBigIntType ? bigint : T extends NativeBooleanType ? boolean : T extends NativePointerType ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue : T extends NativeBufferType ? PointerValue : T extends NativeFunctionType ? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null : PointerValue : never псевдоним типа Deno.NativeBigIntType
Все типы чисел BigInt для взаимодействия с внешними функциями.
Определение
"u64"
| "i64"
| "usize"
| "isize"
псевдоним типа Deno.NativeBooleanType
Нативный логический тип для взаимодействия с внешними функциями.
Определение
"bool" псевдоним типа Deno.NativeBufferType
Нативный тип буфера для взаимодействия с внешними функциями.
Определение
"buffer" псевдоним типа Deno.NativeFunctionType
Нативный тип функции для взаимодействия с внешними функциями.
Определение
"function" псевдоним типа Deno.NativeI16Enum
Параметры типа
T extends number Определение
"i16" & { [brand]: T; } псевдоним типа Deno.NativeI32Enum
Параметры типа
T extends number Определение
"i32" & { [brand]: T; } псевдоним типа Deno.NativeI8Enum
Параметры типа
T extends number Определение
"i8" & { [brand]: T; } псевдоним типа Deno.NativeNumberType
Все типы чисел для взаимодействия с внешними функциями.
Определение
"u8"
| "i8"
| "u16"
| "i16"
| "u32"
| "i32"
| "f32"
| "f64"
псевдоним типа Deno.NativePointerType
Нативный тип указателя для взаимодействия с внешними функциями.
Определение
"pointer" псевдоним типа Deno.NativeResultType
Определение
псевдоним типа Deno.NativeType
Все поддерживаемые типы для взаимодействия с внешними функциями.
Определение
псевдоним типа Deno.NativeTypedFunction
Параметры типа
T extends UnsafeCallbackDefinition Определение
"function" & { [brand]: T; } псевдоним типа Deno.NativeTypedPointer
Параметры типа
T extends PointerObject Определение
"pointer" & { [brand]: T; } псевдоним типа Deno.NativeU16Enum
Параметры типа
T extends number Определение
"u16" & { [brand]: T; } псевдоним типа Deno.NativeU32Enum
Параметры типа
T extends number Определение
"u32" & { [brand]: T; } псевдоним типа Deno.NativeU8Enum
Параметры типа
T extends number Определение
"u8" & { [brand]: T; } псевдоним типа Deno.NativeVoidType
Нативный тип void для взаимодействия с внешними функциями.
Определение
"void" псевдоним типа Deno.PointerValue
Указатели представлены либо объектом PointerObject, либо значением null, если указатель нулевой.
Параметры типа
T = unknown Определение
null | PointerObject<T> псевдоним типа Deno.StaticForeignLibraryInterface
Вспомогательный тип, определяющий интерфейс внешней библиотеки.
Параметры типа
T extends ForeignLibraryInterface Определение
[K in keyof T]: T[K]["optional"] extends true ? StaticForeignSymbol<T[K]> | null : StaticForeignSymbol<T[K]> псевдоним типа Deno.StaticForeignSymbol
Вспомогательный тип, определяющий внешний символ.
Параметры типа
T extends ForeignFunction | ForeignStatic Определение
T extends ForeignFunction ? FromForeignFunction<T> : T extends ForeignStatic ? FromNativeType<T["type"]> : never псевдоним типа Deno.StaticForeignSymbolReturnType
Параметры типа
T extends ForeignFunction Определение
ConditionalAsync<T["nonblocking"], FromNativeResultType<T["result"]>> псевдоним типа Deno.ToNativeParameterTypes
Вспомогательный тип для преобразования типов параметров внешних функций.
Параметры типа
T extends readonly NativeType[] Определение
[T[number][]] extends [T] ? ToNativeType<T[number]>[] : [readonly T[number][]] extends [T] ? readonly ToNativeType<T[number]>[] : T extends readonly [...NativeType[]] ? [K in keyof T]: ToNativeType<T[K]> : never псевдоним типа Deno.ToNativeResultType
Преобразование типов возвращаемых значений небезопасных обратных вызовов.
Параметры типа
T extends NativeResultType = NativeResultType Определение
T extends NativeStructType ? AllowSharedBufferSource : T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U : T extends NativeI8Enum<infer U> ? U : T extends NativeU16Enum<infer U> ? U : T extends NativeI16Enum<infer U> ? U : T extends NativeU32Enum<infer U> ? U : T extends NativeI32Enum<infer U> ? U : number : T extends NativeBigIntType ? bigint : T extends NativeBooleanType ? boolean : T extends NativePointerType ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue : T extends NativeFunctionType ? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null : PointerValue : T extends NativeBufferType ? AllowSharedBufferSource | null : T extends NativeVoidType ? void : never псевдоним типа Deno.ToNativeType
Преобразование типов параметров внешних символов и возвращаемых значений небезопасных обратных вызовов.
Параметры типа
T extends NativeType = NativeType Определение
T extends NativeStructType ? AllowSharedBufferSource : T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U : T extends NativeI8Enum<infer U> ? U : T extends NativeU16Enum<infer U> ? U : T extends NativeI16Enum<infer U> ? U : T extends NativeU32Enum<infer U> ? U : T extends NativeI32Enum<infer U> ? U : number : T extends NativeBigIntType ? bigint : T extends NativeBooleanType ? boolean : T extends NativePointerType ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue : T extends NativeFunctionType ? T extends NativeTypedFunction<infer U> ? PointerValue<U> | null : PointerValue : T extends NativeBufferType ? AllowSharedBufferSource | null : never псевдоним типа Deno.UnsafeCallbackFunction
Небезопасная функция обратного вызова.
Параметры типа
Parameters extends readonly NativeType[] = readonly NativeType[] Result extends NativeResultType = NativeResultType Определение
Parameters extends readonly [] ? () => ToNativeResultType<Result> : (...args: FromNativeParameterTypes<Parameters>) => ToNativeResultType<Result> переменная Deno.brand
Тип
unique symbol
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/ffi