typesaurus
Version:
Type-safe ODM for Firestore
204 lines (203 loc) • 24.5 kB
text/typescript
import type { TypesaurusUtils as Utils } from "./utils.js";
import type { TypesaurusCore as Core } from "./core.js";
export declare namespace TypesaurusUpdate {
interface CollectionFunction<Def extends Core.DocDef> {
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(id: Def["Id"], data: ArgData<Def, Props>, options?: Core.OperationOptions<Environment>): Promise<Core.Ref<Def>>;
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(id: Def["Id"], data: ArgGetterResolved<Core.DocModel<Def>, Def["WideModel"], Props>, options?: Core.OperationOptions<Environment>): Promise<Core.Ref<Def>>;
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(id: Def["Id"], data: ArgGetterUnresolved<Core.DocModel<Def>, Props>, options?: Core.OperationOptions<Environment>): undefined;
build<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(id: Def["Id"], options?: Core.OperationOptions<Environment>): Builder<Def, Props>;
}
/**
* The update doc function, used to define `update` method in the doc and ref
* types.
*/
interface DocFunction<Def extends Core.DocDef> {
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(data: ArgData<Def, Props>, options?: Core.OperationOptions<Environment>): Promise<Core.Ref<Def>>;
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(data: ArgGetterResolved<Core.DocModel<Def>, Def["WideModel"], Props>, options?: Core.OperationOptions<Environment>): Promise<Core.Ref<Def>>;
<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(data: ArgGetterUnresolved<Core.DocModel<Def>, Props>, options?: Core.OperationOptions<Environment>): undefined;
build<Environment extends Core.RuntimeEnvironment, Props extends Core.DocProps & {
environment: Environment;
}>(options?: Core.OperationOptions<Environment>): Builder<Def, Props>;
}
/**
* The update argument type. It can be update data or a function that returns
* update data.
*/
type Arg<Def extends Core.DocDef, Props extends Core.DocProps> = Core.WriteData<Core.UnionVariableModelType<Def["WideModel"]>, Props> | MinimalData<Def, Props> | Data<Core.DocModel<Def>, Props> | ArgGetter<Def, Props>;
/**
* The update argument data type. It excludes the getter function, so that
* the type can be used in the update function signature. Keeping the getter
* separate allows to infer the result without inferring the model shape.
*/
type ArgData<Def extends Core.DocDef, Props extends Core.DocProps> = Core.WriteData<Core.UnionVariableModelType<Def["WideModel"]>, Props> | MinimalData<Def, Props> | Data<Core.DocModel<Def>, Props>;
/**
* Update data getter, accepts helper functions and returns the update data.
*/
type ArgGetter<Def extends Core.DocDef, Props extends Core.DocProps> = Core.DocModel<Def> extends infer Model extends Core.ModelObjectType ? ($: Helpers<Model, Props>) => Core.WriteData<Core.UnionVariableModelType<Def["WideModel"]>, Props> | Data<Model, Props> | UpdateField<Model> | Array<UpdateField<Model> | Utils.Falsy> | Utils.Falsy : never;
/**
* Update data getter, accepts helper functions and returns the update data.
* The type assumes that the return type is resolved making it possible to
* define separate update signatures.
*/
type ArgGetterResolved<Model extends Core.ModelObjectType, WideModel extends Core.ModelType, Props extends Core.DocProps> = ($: Helpers<Model, Props>) => Core.WriteData<Core.UnionVariableModelType<WideModel>, Props> | Data<Model, Props> | UpdateField<Model> | Array<UpdateField<Model> | Utils.Falsy>;
/**
* Update data getter, accepts helper functions and returns the update data.
* The type assumes that the return type is falsy making it possible to
* define separate update signatures.
*/
type ArgGetterUnresolved<Model extends Core.ModelObjectType, Props extends Core.DocProps> = ($: Helpers<Model, Props>) => Utils.Falsy | string | boolean | number;
/**
* The update field interface. It contains path to the property and property value.
*/
interface UpdateField<_Model> {
key: string | string[];
value: any;
}
/**
* The update data type. It extends the model allowing to set specific values,
* such as server dates, increment, etc. The data is also nullified allowing
* to pass nulls instead of undefined.
*/
type Data<Model, Props extends Core.DocProps> = {
[Key in keyof Model]?: Core.WriteField<Model, Key, Model[Key], Props>;
};
/**
* The type resolves the minimal required data to update the variable
* document. It includes unions each variable model type omitting the shared
* properties. The shared properties are added back as optional.
*/
type MinimalData<Def extends Core.DocDef, Props extends Core.DocProps> = Def["Flags"]["Reduced"] extends true ? never : Def["WideModel"] extends infer Model ? Core.DocModel<Def> extends infer DocModel extends Core.ModelObjectType ? Model extends Core.ModelObjectType ? never : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType,
infer F extends Core.ModelObjectType,
infer G extends Core.ModelObjectType,
infer H extends Core.ModelObjectType,
infer I extends Core.ModelObjectType,
infer J extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props> | Core.WriteData<Omit<F, keyof DocModel>, Props> | Core.WriteData<Omit<G, keyof DocModel>, Props> | Core.WriteData<Omit<H, keyof DocModel>, Props> | Core.WriteData<Omit<I, keyof DocModel>, Props> | Core.WriteData<Omit<J, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType,
infer F extends Core.ModelObjectType,
infer G extends Core.ModelObjectType,
infer H extends Core.ModelObjectType,
infer I extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props> | Core.WriteData<Omit<F, keyof DocModel>, Props> | Core.WriteData<Omit<G, keyof DocModel>, Props> | Core.WriteData<Omit<H, keyof DocModel>, Props> | Core.WriteData<Omit<I, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType,
infer F extends Core.ModelObjectType,
infer G extends Core.ModelObjectType,
infer H extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props> | Core.WriteData<Omit<F, keyof DocModel>, Props> | Core.WriteData<Omit<G, keyof DocModel>, Props> | Core.WriteData<Omit<H, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType,
infer F extends Core.ModelObjectType,
infer G extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props> | Core.WriteData<Omit<F, keyof DocModel>, Props> | Core.WriteData<Omit<G, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType,
infer F extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props> | Core.WriteData<Omit<F, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType,
infer E extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props> | Core.WriteData<Omit<E, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType,
infer D extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props> | Core.WriteData<Omit<D, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType,
infer C extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props> | Core.WriteData<Omit<C, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType,
infer B extends Core.ModelObjectType
] ? (Core.WriteData<Omit<A, keyof DocModel>, Props> | Core.WriteData<Omit<B, keyof DocModel>, Props>) & Partial<Core.WriteData<DocModel, Props>> : Model extends [
infer A extends Core.ModelObjectType
] ? Core.WriteData<Omit<A, keyof DocModel>, Props> & Partial<Core.WriteData<DocModel, Props>> : never : never : never;
/**
* Update helpers which allow to set specific values, such as server dates,
* increment, etc.
*/
interface Helpers<Model extends Core.ModelObjectType, Props extends Core.DocProps> extends CommonHelpers<Model, Props, UpdateField<Model>> {
}
interface Builder<Def extends Core.DocDef, Props extends Core.DocProps> extends CommonHelpers<Core.DocModel<Def>, Props, void> {
run(): Promise<Core.Ref<Def>>;
}
interface FieldHelpers<Props extends Core.DocProps, Parent, Key extends keyof Parent, SetResult> {
set(value: Core.WriteField<Parent, Key, Parent[Key], Props>): SetResult;
}
interface CommonHelpers<Model extends Core.ModelObjectType, Props extends Core.DocProps, SetResult> extends Core.WriteHelpers<Model> {
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model>(key: Key1): FieldHelpers<Props, Model, Key1, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never): FieldHelpers<Props, Utils.AllRequired<Model>[Key1], Key2, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key3, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key4, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key5, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key6 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never, key6: Utils.SafePath6<Model, Key1, Key2, Key3, Key4, Key5, Key6> extends true ? Key6 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5], Key6, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key6 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5], Key7 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never, key6: Utils.SafePath6<Model, Key1, Key2, Key3, Key4, Key5, Key6> extends true ? Key6 : never, key7: Utils.SafePath7<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7> extends true ? Key7 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6], Key7, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key6 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5], Key7 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6], Key8 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never, key6: Utils.SafePath6<Model, Key1, Key2, Key3, Key4, Key5, Key6> extends true ? Key6 : never, key7: Utils.SafePath7<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7> extends true ? Key7 : never, key8: Utils.SafePath8<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8> extends true ? Key8 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7], Key8, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key6 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5], Key7 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6], Key8 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7], Key9 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>[Key8]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never, key6: Utils.SafePath6<Model, Key1, Key2, Key3, Key4, Key5, Key6> extends true ? Key6 : never, key7: Utils.SafePath7<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7> extends true ? Key7 : never, key8: Utils.SafePath8<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8> extends true ? Key8 : never, key9: Utils.SafePath9<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9> extends true ? Key9 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>[Key8], Key9, SetResult>;
/**
* Field selector, allows updating a specific field.
*/
field<Key1 extends keyof Model, Key2 extends keyof Utils.AllRequired<Model>[Key1], Key3 extends keyof Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2], Key4 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3], Key5 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4], Key6 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5], Key7 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6], Key8 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7], Key9 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>[Key8], Key10 extends keyof Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>[Key8]>[Key9]>(key1: Key1, key2: Utils.SafePath2<Model, Key1, Key2> extends true ? Key2 : never, key3: Utils.SafePath3<Model, Key1, Key2, Key3> extends true ? Key3 : never, key4: Utils.SafePath4<Model, Key1, Key2, Key3, Key4> extends true ? Key4 : never, key5: Utils.SafePath5<Model, Key1, Key2, Key3, Key4, Key5> extends true ? Key5 : never, key6: Utils.SafePath6<Model, Key1, Key2, Key3, Key4, Key5, Key6> extends true ? Key6 : never, key7: Utils.SafePath7<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7> extends true ? Key7 : never, key8: Utils.SafePath8<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8> extends true ? Key8 : never, key9: Utils.SafePath9<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9> extends true ? Key9 : never, key10: Utils.SafePath10<Model, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10> extends true ? Key10 : never): FieldHelpers<Props, Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Utils.AllRequired<Model>[Key1]>[Key2]>[Key3]>[Key4]>[Key5]>[Key6]>[Key7]>[Key8]>[Key9], Key10, SetResult>;
}
}