From 89fc24086142d019c9fad75fad31f97b21e0de73 Mon Sep 17 00:00:00 2001 From: Carter Snook Date: Mon, 27 Jun 2022 07:41:58 -0500 Subject: fix(dts/ffi): non-exact types break FFI inference (#14968) --- cli/dts/lib.deno.unstable.d.ts | 71 ++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 30 deletions(-) (limited to 'cli') diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index 643386ced..ab6f8634f 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -362,49 +362,60 @@ declare namespace Deno { export type NativeResultType = NativeType | NativeVoidType; + type ToNativeTypeMap = + & Record + & Record + & Record + & Record; + /** Type conversion for foreign symbol parameters and unsafe callback return types */ - type ToNativeType = T extends - NativeNumberType ? number - : T extends NativeBigIntType ? bigint | number - : T extends NativePointerType ? TypedArray | bigint | null - : T extends NativeFunctionType ? bigint | null - : never; + type ToNativeType = ToNativeTypeMap[T]; + + type ToNativeResultTypeMap = ToNativeTypeMap & Record; /** Type conversion for unsafe callback return types */ type ToNativeResultType = - T extends NativeType ? ToNativeType - : T extends NativeVoidType ? void + ToNativeResultTypeMap[T]; + + type ToNativeParameterTypes = + // + [(T[number])[]] extends [T] ? ToNativeType[] + : [readonly (T[number])[]] extends [T] + ? readonly ToNativeType[] + : T extends readonly [...NativeType[]] ? { + [K in keyof T]: ToNativeType; + } : never; - type ToNativeParameterTypes = T extends - readonly [] ? [] - : T extends readonly [ - infer U extends NativeType, - ...(infer V extends NativeType[]), - ] ? [ToNativeType, ...ToNativeParameterTypes] - : never; + type FromNativeTypeMap = + & Record + & Record + & Record + & Record; /** Type conversion for foreign symbol return types and unsafe callback parameters */ - type FromNativeType = T extends - NativeNumberType ? number - : T extends NativeBigIntType | NativePointerType | NativeFunctionType - ? bigint - : never; + type FromNativeType = FromNativeTypeMap[T]; + + type FromNativeResultTypeMap = + & FromNativeTypeMap + & Record; /** Type conversion for foregin symbol return types */ type FromNativeResultType = - T extends NativeType ? FromNativeType - : T extends NativeVoidType ? void + FromNativeResultTypeMap[T]; + + type FromNativeParameterTypes< + T extends readonly NativeType[], + > = + // + [(T[number])[]] extends [T] ? FromNativeType[] + : [readonly (T[number])[]] extends [T] + ? readonly FromNativeType[] + : T extends readonly [...NativeType[]] ? { + [K in keyof T]: FromNativeType; + } : never; - type FromNativeParameterTypes = T extends - readonly [] ? [] - : T extends readonly [ - infer U extends NativeType, - ...(infer V extends NativeType[]), - ] ? [FromNativeType, ...FromNativeParameterTypes] - : never; - /** A foreign function as defined by its parameter and result types */ export interface ForeignFunction< Parameters extends readonly NativeType[] = readonly NativeType[], -- cgit v1.2.3