@dgac/nmb2b-client
Version:
EUROCONTROL Network Manager B2B SOAP client
16 lines (15 loc) • 1.03 kB
text/typescript
import { OptionalKeysOf, Primitive } from "type-fest";
//#region src/utils/types.d.ts
type SoapDeserializer<TInput> = TInput extends Primitive | Date ? TInput : TInput extends Array<infer T> ? Array<Exclude<SoapDeserializer<T>, null | undefined>> | null | undefined : EmptyObjectToNullish<{ [TKey in keyof TInput]: SoapDeserializer<TInput[TKey]> }>;
type EmptyObjectToNullish<T extends object> = Exclude<keyof T, NullishKeysOf<T>> extends never ? T | null | undefined : T;
type NullishKeysOf<T extends object> = UndefinedKeysOf<T> | NullKeysOf<T> | OptionalKeysOf<T>;
type UndefinedKeysOf<T extends object> = keyof { [TKey in keyof T as undefined extends T[TKey] ? TKey : never]: T[TKey] };
type NullKeysOf<T extends object> = keyof { [TKey in keyof T as null extends T[TKey] ? TKey : never]: T[TKey] };
/**
* Type helper to recursively make potentially empty objects nullable.
*
* {@see https://github.com/DGAC/nmb2b-client-js/issues/149}
*/
//#endregion
export { SoapDeserializer };
//# sourceMappingURL=types.d.mts.map