import type Context from "../context.js"; import type CollectionItem from "./collection-item.js"; import type { ExtractFieldDecoded, ExtractFieldInput, ExtractFieldStorage, RequiredField } from "./field.js"; import type Field from "./field.js"; export type FieldNames>> = keyof T & string; export type FieldsetOutput>> = { [field in keyof T]: T[field] extends RequiredField ? ExtractFieldDecoded : ExtractFieldDecoded | null; }; export type FieldsetInput>> = { [field in keyof T & string as T[field] extends RequiredField ? field : never]: ExtractFieldInput; } & { [field in keyof T & string as T[field] extends RequiredField ? never : field]?: ExtractFieldInput | null; }; export type FieldsetInputWithAllKeys>> = { [field in keyof T & string as T[field] extends RequiredField ? field : never]: ExtractFieldInput; } & { [field in keyof T & string as T[field] extends RequiredField ? never : field]: ExtractFieldInput | undefined | null; }; export type FieldsetEncoded>> = { [field in keyof T]: ExtractFieldStorage; }; export declare class Fieldset>> { fields: Fields; raw_input: Partial>; decoded: Partial>; encoded: Partial>; changed_fields: Set; is_decoded: boolean; is_encoded: boolean; blessings: Partial>; constructor(fields: Fields, raw_input?: Partial>, decoded?: Partial>, encoded?: Partial>); getRequiredFields(): Field[]; set & string>(field_name: FieldName, field_value: FieldsetInput[FieldName], blessing_symbol?: symbol | null): this; clearChangedFields(): void; getDecoded(field_name: FieldName): Partial>[keyof Fields]; getInput>(field_name: FieldName): Partial>[FieldName]; getEncoded(field_name: FieldName): Partial>[FieldName]; /** Returns encoded values for every field */ encode(context: Context, original_body?: FieldsetInput, only_changed?: boolean): Promise>>; decode(context: Context, is_http_api_request?: boolean): Promise>; copy(): Fieldset; validate(context: Context, original_body: Fieldset, replace_mode: boolean, //if true, meaning that if a field has no value, it should be deleted item: CollectionItem | undefined): Promise<{ valid: boolean; errors: { [f in keyof Fields]?: { message: string; }; }; }>; getBlessing(field_name: FieldName): symbol | null; setMultiple(values: Partial>): this; }