summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tsc/dts/lib.deno.ns.d.ts87
-rw-r--r--tests/ffi/tests/ffi_types.ts234
2 files changed, 138 insertions, 183 deletions
diff --git a/cli/tsc/dts/lib.deno.ns.d.ts b/cli/tsc/dts/lib.deno.ns.d.ts
index e287f7afc..337baf4fe 100644
--- a/cli/tsc/dts/lib.deno.ns.d.ts
+++ b/cli/tsc/dts/lib.deno.ns.d.ts
@@ -536,10 +536,7 @@ declare namespace Deno {
* set of permissions to the test context.
*
* @category Permissions */
- export type PermissionOptions =
- | "inherit"
- | "none"
- | PermissionOptionsObject;
+ export type PermissionOptions = "inherit" | "none" | PermissionOptionsObject;
/**
* A set of options which can define the permissions within a test or worker
@@ -944,10 +941,7 @@ declare namespace Deno {
*
* @category Testing
*/
- (
- name: string,
- fn: (t: TestContext) => void | Promise<void>,
- ): void;
+ (name: string, fn: (t: TestContext) => void | Promise<void>): void;
/** Register a test which will be run when `deno test` is used on the command
* line and the containing module looks like a test module.
@@ -1079,10 +1073,7 @@ declare namespace Deno {
*
* @category Testing
*/
- ignore(
- name: string,
- fn: (t: TestContext) => void | Promise<void>,
- ): void;
+ ignore(name: string, fn: (t: TestContext) => void | Promise<void>): void;
/** Shorthand property for ignoring a particular test case.
*
@@ -1128,10 +1119,7 @@ declare namespace Deno {
*
* @category Testing
*/
- only(
- name: string,
- fn: (t: TestContext) => void | Promise<void>,
- ): void;
+ only(name: string, fn: (t: TestContext) => void | Promise<void>): void;
/** Shorthand property for focusing a particular test case.
*
@@ -3964,10 +3952,7 @@ declare namespace Deno {
*
* @category Permissions
*/
- export type PermissionState =
- | "granted"
- | "denied"
- | "prompt";
+ export type PermissionState = "granted" | "denied" | "prompt";
/** The permission descriptor for the `allow-run` and `deny-run` permissions, which controls
* access to what sub-processes can be executed by Deno. The option `command`
@@ -4107,7 +4092,7 @@ declare namespace Deno {
*
* @category Permissions */
export interface PermissionStatusEventMap {
- "change": Event;
+ change: Event;
}
/** An {@linkcode EventTarget} returned from the {@linkcode Deno.permissions}
@@ -5311,9 +5296,7 @@ declare namespace Deno {
* @category HTTP Server
*/
export function serve(
- options:
- | ServeTcpOptions
- | (ServeTcpOptions & TlsCertifiedKeyPem),
+ options: ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem),
handler: ServeHandler<Deno.NetAddr>,
): HttpServer<Deno.NetAddr>;
/** Serves HTTP requests with the given option bag.
@@ -5392,11 +5375,7 @@ declare namespace Deno {
*
* @category FFI
*/
- export type NativeBigIntType =
- | "u64"
- | "i64"
- | "usize"
- | "isize";
+ export type NativeBigIntType = "u64" | "i64" | "usize" | "isize";
/** The native boolean type for interfacing to foreign functions.
*
@@ -5512,7 +5491,8 @@ declare namespace Deno {
: T extends NativeBigIntType ? bigint
: T extends NativeBooleanType ? boolean
: T extends NativePointerType
- ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue
+ ? T extends NativeTypedPointer<infer U> ? U | null
+ : PointerValue
: T extends NativeFunctionType
? T extends NativeTypedFunction<infer U> ? PointerValue<U> | null
: PointerValue
@@ -5536,7 +5516,8 @@ declare namespace Deno {
: T extends NativeBigIntType ? bigint
: T extends NativeBooleanType ? boolean
: T extends NativePointerType
- ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue
+ ? T extends NativeTypedPointer<infer U> ? U | null
+ : PointerValue
: T extends NativeFunctionType
? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null
: PointerValue
@@ -5550,9 +5531,8 @@ declare namespace Deno {
*/
export type ToNativeParameterTypes<T extends readonly NativeType[]> =
//
- [(T[number])[]] extends [T] ? ToNativeType<T[number]>[]
- : [readonly (T[number])[]] extends [T]
- ? readonly ToNativeType<T[number]>[]
+ [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]>;
}
@@ -5575,7 +5555,8 @@ declare namespace Deno {
: T extends NativeBigIntType ? bigint
: T extends NativeBooleanType ? boolean
: T extends NativePointerType
- ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue
+ ? T extends NativeTypedPointer<infer U> ? U | null
+ : PointerValue
: T extends NativeBufferType ? PointerValue
: T extends NativeFunctionType
? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null
@@ -5599,7 +5580,8 @@ declare namespace Deno {
: T extends NativeBigIntType ? bigint
: T extends NativeBooleanType ? boolean
: T extends NativePointerType
- ? T extends NativeTypedPointer<infer U> ? U | null : PointerValue
+ ? T extends NativeTypedPointer<infer U> ? U | null
+ : PointerValue
: T extends NativeBufferType ? PointerValue
: T extends NativeFunctionType
? T extends NativeTypedFunction<infer U> ? PointerObject<U> | null
@@ -5609,12 +5591,10 @@ declare namespace Deno {
/** @category FFI
*/
- export type FromNativeParameterTypes<
- T extends readonly NativeType[],
- > =
+ export type FromNativeParameterTypes<T extends readonly NativeType[]> =
//
- [(T[number])[]] extends [T] ? FromNativeType<T[number]>[]
- : [readonly (T[number])[]] extends [T]
+ [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]>;
@@ -5695,8 +5675,10 @@ declare namespace Deno {
/** @category FFI
*/
- export type ConditionalAsync<IsAsync extends boolean | undefined, T> =
- IsAsync extends true ? Promise<T> : T;
+ export type ConditionalAsync<
+ IsAsync extends boolean | undefined,
+ T,
+ > = IsAsync extends true ? Promise<T> : T;
/** A utility type that infers a foreign library interface.
*
@@ -5804,10 +5786,7 @@ declare namespace Deno {
getCString(offset?: number): string;
/** Gets a C string (`null` terminated string) at the specified byte offset
* from the specified pointer. */
- static getCString(
- pointer: PointerObject,
- offset?: number,
- ): string;
+ static getCString(pointer: PointerObject, offset?: number): string;
/** Gets an `ArrayBuffer` of length `byteLength` at the specified byte
* offset from the pointer. */
getArrayBuffer(byteLength: number, offset?: number): ArrayBuffer;
@@ -5847,9 +5826,10 @@ declare namespace Deno {
/** The definition of the function. */
definition: Fn;
- constructor(pointer: PointerObject<NoInfer<Fn>>, definition: Fn);
- /** @deprecated Properly type {@linkcode pointer} using {@linkcode NativeTypedFunction} or {@linkcode UnsafeCallbackDefinition} types. */
- constructor(pointer: PointerObject, definition: Fn);
+ constructor(
+ pointer: PointerObject<NoInfer<Omit<Fn, "nonblocking">>>,
+ definition: Fn,
+ );
/** Call the foreign function. */
call: FromForeignFunction<Fn>;
@@ -5876,9 +5856,10 @@ declare namespace Deno {
export type UnsafeCallbackFunction<
Parameters extends readonly NativeType[] = readonly NativeType[],
Result extends NativeResultType = NativeResultType,
- > = Parameters extends readonly [] ? () => ToNativeResultType<Result> : (
- ...args: FromNativeParameterTypes<Parameters>
- ) => ToNativeResultType<Result>;
+ > = Parameters extends readonly [] ? () => ToNativeResultType<Result>
+ : (
+ ...args: FromNativeParameterTypes<Parameters>
+ ) => ToNativeResultType<Result>;
/** An unsafe function pointer for passing JavaScript functions as C function
* pointers to foreign function calls.
diff --git a/tests/ffi/tests/ffi_types.ts b/tests/ffi/tests/ffi_types.ts
index 590af9369..de2f4e405 100644
--- a/tests/ffi/tests/ffi_types.ts
+++ b/tests/ffi/tests/ffi_types.ts
@@ -2,86 +2,78 @@
// deno-lint-ignore-file
// Only for testing types. Invoke with `deno cache`
-const remote = Deno.dlopen(
- "dummy_lib.so",
- {
- method1: { parameters: ["usize", "bool"], result: "void" },
- method2: { parameters: [], result: "void" },
- method3: { parameters: ["usize"], result: "void" },
- method4: { parameters: ["isize"], result: "void" },
- method5: { parameters: ["u8"], result: "void" },
- method6: { parameters: ["u16"], result: "void" },
- method7: { parameters: ["u32"], result: "void" },
- method8: { parameters: ["u64"], result: "void" },
- method9: { parameters: ["i8"], result: "void" },
- method10: { parameters: ["i16"], result: "void" },
- method11: { parameters: ["i32"], result: "void" },
- method12: { parameters: ["i64"], result: "void" },
- method13: { parameters: ["f32"], result: "void" },
- method14: { parameters: ["f64"], result: "void" },
- method15: { parameters: ["pointer"], result: "void" },
- method16: { parameters: [], result: "usize" },
- method17: { parameters: [], result: "usize", nonblocking: true },
- method18: { parameters: [], result: "pointer" },
- method19: { parameters: [], result: "pointer", nonblocking: true },
- method20: {
- parameters: ["pointer"],
- result: "void",
- },
- method21: {
- parameters: [
- "pointer",
- ],
- result: "void",
- },
- method22: {
- parameters: ["pointer"],
- result: "void",
- },
- method23: {
- parameters: ["buffer"],
- result: "void",
- },
- method24: {
- parameters: ["bool"],
- result: "bool",
- },
- method25: {
- parameters: [],
- result: "void",
- optional: true,
- },
- static1: { type: "usize" },
- static2: { type: "pointer" },
- static3: { type: "usize" },
- static4: { type: "isize" },
- static5: { type: "u8" },
- static6: { type: "u16" },
- static7: { type: "u32" },
- static8: { type: "u64" },
- static9: { type: "i8" },
- static10: { type: "i16" },
- static11: { type: "i32" },
- static12: { type: "i64" },
- static13: { type: "f32" },
- static14: { type: "f64" },
- static15: { type: "bool" },
- static16: {
- type: "bool",
- optional: true,
- },
+const remote = Deno.dlopen("dummy_lib.so", {
+ method1: { parameters: ["usize", "bool"], result: "void" },
+ method2: { parameters: [], result: "void" },
+ method3: { parameters: ["usize"], result: "void" },
+ method4: { parameters: ["isize"], result: "void" },
+ method5: { parameters: ["u8"], result: "void" },
+ method6: { parameters: ["u16"], result: "void" },
+ method7: { parameters: ["u32"], result: "void" },
+ method8: { parameters: ["u64"], result: "void" },
+ method9: { parameters: ["i8"], result: "void" },
+ method10: { parameters: ["i16"], result: "void" },
+ method11: { parameters: ["i32"], result: "void" },
+ method12: { parameters: ["i64"], result: "void" },
+ method13: { parameters: ["f32"], result: "void" },
+ method14: { parameters: ["f64"], result: "void" },
+ method15: { parameters: ["pointer"], result: "void" },
+ method16: { parameters: [], result: "usize" },
+ method17: { parameters: [], result: "usize", nonblocking: true },
+ method18: { parameters: [], result: "pointer" },
+ method19: { parameters: [], result: "pointer", nonblocking: true },
+ method20: {
+ parameters: ["pointer"],
+ result: "void",
},
-);
+ method21: {
+ parameters: ["pointer"],
+ result: "void",
+ },
+ method22: {
+ parameters: ["pointer"],
+ result: "void",
+ },
+ method23: {
+ parameters: ["buffer"],
+ result: "void",
+ },
+ method24: {
+ parameters: ["bool"],
+ result: "bool",
+ },
+ method25: {
+ parameters: [],
+ result: "void",
+ optional: true,
+ },
+ static1: { type: "usize" },
+ static2: { type: "pointer" },
+ static3: { type: "usize" },
+ static4: { type: "isize" },
+ static5: { type: "u8" },
+ static6: { type: "u16" },
+ static7: { type: "u32" },
+ static8: { type: "u64" },
+ static9: { type: "i8" },
+ static10: { type: "i16" },
+ static11: { type: "i32" },
+ static12: { type: "i64" },
+ static13: { type: "f32" },
+ static14: { type: "f64" },
+ static15: { type: "bool" },
+ static16: {
+ type: "bool",
+ optional: true,
+ },
+});
-Deno.dlopen(
- "dummy_lib_2.so",
- {
- wrong_method1: {
- parameters: [],
- result: "function",
- },
+Deno.dlopen("dummy_lib_2.so", {
+ wrong_method1: {
+ parameters: [],
+ result: "function",
},
-);
+});
// @ts-expect-error: Invalid argument
remote.symbols.method1(0);
@@ -173,7 +165,7 @@ result4.then((_0: Deno.BufferSource) => {});
result4.then((_1: null | Deno.UnsafePointer) => {});
const fnptr = new Deno.UnsafeFnPointer(
- {} as Deno.PointerObject,
+ {} as Deno.PointerObject<Deno.ForeignFunction<["u32", "pointer"], "void">>,
{
parameters: ["u32", "pointer"],
result: "void",
@@ -340,16 +332,18 @@ const static16_right: boolean | null = remote.symbols.static16;
// Adapted from https://stackoverflow.com/a/53808212/10873797
type Equal<T, U> = (<G>() => G extends T ? 1 : 2) extends
- (<G>() => G extends U ? 1 : 2) ? true
+ <G>() => G extends U ? 1 : 2 ? true
: false;
type AssertEqual<
Expected extends $,
Got extends $$,
$ = [Equal<Got, Expected>] extends [true] ? Expected
- : ([Expected] extends [Got] ? never : Got),
+ : [Expected] extends [Got] ? never
+ : Got,
$$ = [Equal<Expected, Got>] extends [true] ? Got
- : ([Got] extends [Expected] ? never : Got),
+ : [Got] extends [Expected] ? never
+ : Got,
> = never;
type AssertNotEqual<
@@ -372,9 +366,7 @@ type MyFunctionDefinition = Deno.UnsafeCallbackDefinition<
[typeof foo, "u32"],
typeof myPointer
>;
-const myFunction = "function" as Deno.NativeTypedFunction<
- MyFunctionDefinition
->;
+const myFunction = "function" as Deno.NativeTypedFunction<MyFunctionDefinition>;
type __Tests__ = [
empty: AssertEqual<
@@ -396,14 +388,12 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- {
- pushBuf: {
- parameters: ["buffer", "pointer", "function"];
- result: "void";
- };
- }
- >
+ Deno.DynamicLibrary<{
+ pushBuf: {
+ parameters: ["buffer", "pointer", "function"];
+ result: "void";
+ };
+ }>
>,
higher_order_returns: AssertEqual<
{
@@ -416,27 +406,23 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- {
- pushBuf: {
- parameters: ["buffer", "pointer", "function"];
- result: "pointer";
- };
- }
- >
+ Deno.DynamicLibrary<{
+ pushBuf: {
+ parameters: ["buffer", "pointer", "function"];
+ result: "pointer";
+ };
+ }>
>,
non_exact_params: AssertEqual<
{
symbols: {
- foo: (
- ...args: (number | Deno.PointerValue | null)[]
- ) => bigint;
+ foo: (...args: (number | Deno.PointerValue | null)[]) => bigint;
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: ("i32" | "pointer")[]; result: "u64" } }
- >
+ Deno.DynamicLibrary<{
+ foo: { parameters: ("i32" | "pointer")[]; result: "u64" };
+ }>
>,
non_exact_params_empty: AssertEqual<
{
@@ -445,9 +431,7 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: []; result: "i32" } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: []; result: "i32" } }>
>,
non_exact_params_empty: AssertNotEqual<
{
@@ -456,9 +440,7 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: []; result: "i32" } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: []; result: "i32" } }>
>,
enum_param: AssertEqual<
{
@@ -467,9 +449,7 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: [typeof foo]; result: "void" } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: [typeof foo]; result: "void" } }>
>,
enum_return: AssertEqual<
{
@@ -478,9 +458,7 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: []; result: typeof foo } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: []; result: typeof foo } }>
>,
typed_pointer_param: AssertEqual<
{
@@ -489,9 +467,9 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: [typeof myPointer]; result: "void" } }
- >
+ Deno.DynamicLibrary<{
+ foo: { parameters: [typeof myPointer]; result: "void" };
+ }>
>,
typed_pointer_return: AssertEqual<
{
@@ -500,9 +478,7 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: []; result: typeof myPointer } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: []; result: typeof myPointer } }>
>,
typed_function_param: AssertEqual<
{
@@ -511,9 +487,9 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: [typeof myFunction]; result: "void" } }
- >
+ Deno.DynamicLibrary<{
+ foo: { parameters: [typeof myFunction]; result: "void" };
+ }>
>,
typed_function_return: AssertEqual<
{
@@ -522,8 +498,6 @@ type __Tests__ = [
};
close(): void;
},
- Deno.DynamicLibrary<
- { foo: { parameters: []; result: typeof myFunction } }
- >
+ Deno.DynamicLibrary<{ foo: { parameters: []; result: typeof myFunction } }>
>,
];