import { defineComponent, withApiName, validateCustomApiName, type ComponentDefinition } from './component'; import { fieldReferences, manifestObject, manifestField, type ObjectReference, type DefinitionFieldReference, } from './custom-object'; import { Validation, type ValidationProps } from '../validation'; export type DefineValidationProps = Omit< ValidationProps, 'ruleId' | 'apiName' | 'fieldRef' > & { apiName: `${string}__c`; fieldRef?: NoInfer>; }; export function defineValidation( object: TObject, props: DefineValidationProps, ): Validation { validateCustomApiName(props.apiName); const { fieldRef, ...rest } = props; return validationComponent.register( withApiName( new Validation(manifestObject(object), { ...rest, ruleId: rest.apiName, ...(fieldRef != null ? { fieldRef: manifestField(object, fieldRef) } : {}), }), rest.apiName, ), object, props, ); } const validationComponent: ComponentDefinition = defineComponent({ type: 'CUSTOM_OBJECT_VALIDATION_RULE', define: defineValidation, references: (_definition, object, props) => [ object, ...(props.fieldRef == null ? [] : fieldReferences(object, props.fieldRef)), ], });