validated-changeset
Version:
Changesets for your local state
142 lines • 4.71 kB
TypeScript
export interface ProxyHandler {
changes: Record<string, any>;
content: unknown;
proxy: any;
children: Record<string, any>;
safeGet: (obj: any, key: string) => any;
unwrap: (...args: unknown[]) => unknown;
[key: string]: any;
}
export type Config = {
skipValidate?: boolean;
initValidate?: boolean;
changesetKeys?: string[];
};
export type ValidationOk = boolean | [boolean];
export type ValidationErr = string | string[];
export type ValidationResult = ValidationOk | ValidationErr;
export interface INotifier {
listeners: (...args: unknown[]) => unknown[];
addListener(callback: (...args: unknown[]) => unknown): (...args: unknown[]) => unknown;
removeListener(callback: (...args: unknown[]) => unknown): void;
trigger(...args: any[]): void;
}
export interface IEvented {
on(eventName: string, callback: (key: string) => unknown): INotifier;
off(eventName: string, callback: (key: string) => unknown): INotifier;
trigger(eventName: string, ...args: any[]): void;
_eventedNotifiers: {
[key: string]: any;
};
}
export type ValidatorAction = {
(params: {
key: string;
newValue: unknown;
oldValue: unknown;
changes: unknown;
content: object;
}): ValidationResult | Promise<ValidationResult>;
} | null | undefined;
export type ValidatorMapFunc = {
(key: string, newValue: unknown, oldValue: unknown, changes: unknown, content: object): ValidationResult | Promise<ValidationResult>;
};
export interface ValidatorClass {
validate: ValidatorMapFunc;
[s: string]: any;
}
export type ValidatorMap = {
[s: string]: ValidatorMapFunc | ValidatorMapFunc[] | any;
} | null | undefined;
export interface Changes {
[s: string]: any;
}
export interface Content {
save?: (...args: unknown[]) => unknown | undefined;
[key: string]: any;
}
export interface IErr<T> {
value: T;
validation: ValidationErr | ValidationErr[];
}
export type Errors<T> = {
[s: string]: IErr<T>;
};
export type PublicErrors = {
key: string;
value: any;
validation: ValidationErr | ValidationErr[];
}[];
export type RunningValidations = {
[s: string]: number;
};
export type InternalMap = Changes | Errors<any> | RunningValidations;
export interface NewProperty<T> {
key: string;
value: T;
oldValue?: any;
}
export type InternalMapKey = '_changes' | '_errors' | '_runningValidations';
export type Snapshot = {
changes: {
[s: string]: any;
};
errors: {
[s: string]: IErr<any>;
};
};
export type PrepareChangesFn = (obj: {
[s: string]: any;
}) => {
[s: string]: any;
} | null;
export interface ChangesetDef {
__changeset__: string;
_content: object;
_changes: Changes;
_errors: Errors<any>;
_validator: ValidatorAction;
_options: Config;
_runningValidations: RunningValidations;
_bareChanges: {
[s: string]: any;
};
changes: Record<string, any>[];
errors: PublicErrors;
error: object;
change: object;
data: object;
isValid: boolean;
isPristine: boolean;
isInvalid: boolean;
isDirty: boolean;
get: (key: string) => any;
set: <T>(key: string, value: T) => void | T | IErr<T> | Promise<T> | Promise<ValidationResult | T | IErr<T>> | ValidationResult;
maybeUnwrapProxy: (content: Content) => any;
getDeep: any;
setDeep: any;
safeGet: (obj: any, key: string) => any;
prepare(preparedChangedFn: PrepareChangesFn): this;
execute: () => this;
save: (options: object) => Promise<ChangesetDef | any>;
merge: (changeset: this) => this;
rollback: () => this;
rollbackInvalid: (key: string | void) => this;
rollbackProperty: (key: string) => this;
validate: (key: string) => Promise<null> | Promise<any | IErr<any>> | Promise<Array<any | IErr<any>>>;
addError: <T>(key: string, error: IErr<T> | ValidationErr) => IErr<T> | ValidationErr;
pushErrors: (key: string, newErrors: string[]) => IErr<any>;
snapshot: () => Snapshot;
restore: (obj: Snapshot) => this;
cast: (allowed: Array<string>) => this;
isValidating: (key: string | void) => boolean;
_validate: (key: string, newValue: any, oldValue: any) => ValidationResult | Promise<ValidationResult>;
_setProperty: <T>(obj: NewProperty<T>) => void;
_setIsValidating: (key: string, value: Promise<ValidationResult>) => void;
_notifyVirtualProperties: (keys?: string[]) => string[] | undefined;
_rollbackKeys: () => Array<string>;
_deleteKey: (objName: InternalMapKey, key: string) => InternalMap;
}
export interface IChangeset extends ChangesetDef, IEvented {
}
//# sourceMappingURL=index.d.ts.map