@jsforce/jsforce-node
Version:
Salesforce API Library for JavaScript
51 lines (50 loc) • 2.36 kB
TypeScript
import { StringKeys } from './util';
/**
*
*/
export type DateString = string & {
__DateBrand: never;
};
export type BlobString = string & {
__BlobBrand: never;
};
export type Address = {
city: string | null;
country: string | null;
geocodeAccuracy: string | null;
latitude: number | null;
longitude: number | null;
postalCode: string | null;
state: string | null;
street: string | null;
};
export type SObjectFieldType = number | boolean | DateString | BlobString | string | Address;
export type SObjectDefinition<N extends string = string> = {
Name: N;
Fields: {
[name: string]: SObjectFieldType | null;
};
ParentReferences: {
[name: string]: SObjectDefinition | null;
};
ChildRelationships: {
[name: string]: SObjectDefinition;
};
};
export type Schema = {
SObjects: {
[name: string]: SObjectDefinition;
};
};
/**
*
*/
export type SObjectNames<S extends Schema> = StringKeys<S['SObjects']>;
export type SObjectFieldNames<S extends Schema, N extends SObjectNames<S>> = StringKeys<S['SObjects'][N]['Fields']>;
export type ParentReferenceNames<S extends Schema, N extends SObjectNames<S>> = StringKeys<S['SObjects'][N]['ParentReferences']>;
type ParentReferenceSObjectName_<S extends Schema, N extends SObjectNames<S>, PRN extends ParentReferenceNames<S, N>, PSO extends SObjectDefinition = NonNullable<S['SObjects'][N]['ParentReferences'][PRN]>, SK extends keyof S['SObjects'] = keyof S['SObjects']> = Extract<SK extends PSO['Name'] ? SK : never, string>;
export type ParentReferenceSObjectName<S extends Schema, N extends SObjectNames<S>, PRN extends ParentReferenceNames<S, N>> = ParentReferenceSObjectName_<S, N, PRN>;
export type ChildRelationshipNames<S extends Schema, N extends SObjectNames<S>> = StringKeys<S['SObjects'][N]['ChildRelationships']>;
type ChildRelationshipSObjectName_<S extends Schema, N extends SObjectNames<S>, CRN extends ChildRelationshipNames<S, N>, CSO extends SObjectDefinition = S['SObjects'][N]['ChildRelationships'][CRN], SK extends keyof S['SObjects'] = keyof S['SObjects']> = Extract<SK extends CSO['Name'] ? SK : never, string>;
export type ChildRelationshipSObjectName<S extends Schema, N extends SObjectNames<S>, CRN extends ChildRelationshipNames<S, N>> = ChildRelationshipSObjectName_<S, N, CRN>;
export {};