@jsforce/jsforce-node
Version:
Salesforce API Library for JavaScript
27 lines (26 loc) • 1.62 kB
TypeScript
import { SObjectDefinition, Schema } from './schema';
import { StringKeys } from './util';
/**
*
*/
type FieldPath_3<SO extends SObjectDefinition> = '*' | Array<StringKeys<SO['Fields']>>;
type FieldPath_2<SO extends SObjectDefinition, PSOR extends SO['ParentReferences'] = SO['ParentReferences']> = '*' | StringKeys<SO['Fields']> | {
[K in StringKeys<PSOR>]?: '*' | Array<FieldPath_3<Extract<PSOR[K], SObjectDefinition>>>;
};
type FieldPath_1<SO extends SObjectDefinition, PSOR extends SO['ParentReferences'] = SO['ParentReferences']> = '*' | StringKeys<SO['Fields']> | {
[K in StringKeys<PSOR>]?: '*' | Array<FieldPath_2<Extract<PSOR[K], SObjectDefinition>>>;
};
type FieldPathSpecifier_<S extends Schema, N extends string, SO extends SObjectDefinition = S['SObjects'][N], PSOR extends SO['ParentReferences'] = SO['ParentReferences']> = '*' | StringKeys<SO['Fields']> | {
[K in StringKeys<PSOR>]?: '*' | Array<FieldPath_1<Extract<PSOR[K], SObjectDefinition>>>;
};
export type FieldPathSpecifier<S extends Schema, N extends string> = FieldPathSpecifier_<S, N>;
export type FieldProjectionConfigObject = {
[name: string]: 1 | true | FieldProjectionConfig | undefined;
};
export type FieldProjectionConfig = string | null | FieldProjectionConfigObject;
export type FieldPathScopedProjection<S extends Schema, N extends string, FPS extends FieldPathSpecifier<S, N>> = FPS extends {
[name: string]: any;
} ? {
[K in StringKeys<FPS>]: FPS[K] extends '*' ? '*' : FPS[K] extends Array<infer U> ? U extends FieldProjectionConfig ? U : never : never;
} : FPS extends string ? FPS : never;
export {};