@jsforce/jsforce-node
Version:
Salesforce API Library for JavaScript
44 lines (43 loc) • 2.29 kB
TypeScript
/**
*
*/
export type SoapSchemaDef = {
type: string;
extends?: string;
props: {
readonly [key: string]: SoapSchema;
};
};
export type SoapSchema = readonly ['?', SoapSchema] | readonly [SoapSchema] | readonly SoapSchema[] | {
readonly '?': {
readonly [key: string]: SoapSchema;
};
} | {
readonly [key: string]: SoapSchema;
} | string | null;
type UndefKey<T extends {}, K extends keyof T = keyof T> = K extends keyof T ? undefined extends T[K] ? K : never : never;
type PartialForUndefined<T extends {}, UK extends keyof T = UndefKey<T>, RK extends keyof T = Exclude<keyof T, UK>> = [UK] extends [never] ? {
-readonly [K in RK]-?: T[K];
} : [RK] extends [never] ? {
-readonly [K in UK]+?: T[K];
} : {
-readonly [K in UK]+?: T[K];
} & {
-readonly [K in RK]-?: T[K];
};
type SchemaTypeDict = {
[name: string]: {};
};
export type SoapSchemaType<T extends SoapSchemaDef, TypeDict extends SchemaTypeDict = SchemaTypeDict> = T['extends'] extends string ? TypeDict[T['extends']] & SoapSchemaElementType<T['props'], TypeDict, T['type']> : SoapSchemaElementType<T['props'], TypeDict, T['type']>;
export type SoapSchemaElementType<T extends SoapSchema, TypeDict extends SchemaTypeDict = SchemaTypeDict, N extends string = ''> = T extends readonly ['?', any] ? Array<SoapSchemaElementType<T[1], TypeDict, N>> | null | undefined : T extends readonly [any] ? Array<SoapSchemaElementType<T[0], TypeDict, N>> : T extends readonly any[] ? Array<SoapSchemaElementType<T[number], TypeDict, N>> : T extends {
readonly '?': {
readonly [key: string]: any;
};
} ? PartialForUndefined<{
[K in keyof T['?']]: SoapSchemaElementType<T['?'][K], TypeDict, N>;
}> | null | undefined : T extends {
readonly [key: string]: any;
} ? PartialForUndefined<{
[K in keyof T]: SoapSchemaElementType<T[K], TypeDict, N>;
}> : T extends 'string' ? string : T extends 'number' ? number : T extends 'boolean' ? boolean : T extends 'any' ? any : T extends '?string' ? string | null | undefined : T extends '?number' ? number | null | undefined : T extends '?boolean' ? boolean | null | undefined : T extends '?any' ? any | null | undefined : T extends N ? any : T extends keyof TypeDict ? TypeDict[T] : T extends null ? null : never;
export {};