{"version":3,"file":"index.cjs","sources":["../../src/types.ts","../../src/utils.ts","../../src/validation.ts","../../src/schema.js","../../src/form.ts","../../src/nullHelper.js","../../src/errorAccessHelper.ts","../../src/submissionHelper.ts"],"sourcesContent":["export const nonFieldError = Symbol('Non Field Error');\n\nexport const fieldDependencies = Symbol('Field Dependencies');\n\nexport const undefinedValue = Symbol('Undefined Value');\nexport const nullValue = Symbol('Null Value');\n\n// declare const undefindValue: unique symbol;\n// declare const nullValue: unique symbol;\n\ntype Intersects<A, B> = A extends B ? true : never;\n\nexport type Maybe<T> = T | undefined | null;\n\nexport type PartialForm<T, J extends string = 'uuid'> = T extends object ? (\n    T extends (infer K)[] ? (\n        PartialForm<K, J>[]\n    ) : (\n        Intersects<J, keyof T> extends true ? (\n            { [P in Exclude<keyof T, J>]?: PartialForm<T[P], J> }\n            & Pick<T, keyof T & J>\n        ) : (\n            { [P in keyof T]?: PartialForm<T[P], J> }\n        )\n    )\n) : T;\n\nexport type PurgeNull<T> = (\n    T extends (infer Z)[]\n        ? PurgeNull<Z>[]\n        : (\n            T extends object\n                ? { [K in keyof T]: PurgeNull<T[K]> }\n                : (T extends null ? undefined : T)\n        )\n)\n\nexport type SetValueArg<T> = T | ((value: T | undefined) => T);\n// NOTE: no undefined because we know the base value is always defined\nexport type SetBaseValueArg<T> = T | ((value: T) => T);\n\nexport type SetErrorArg<T> = T | undefined | ((value: T | undefined) => (T | undefined));\n\nexport type EntriesAsList<T> = {\n    [K in keyof T]-?: [SetValueArg<T[K]>, K, ...unknown[]];\n}[keyof T];\n\nexport type EntriesAsKeyValue<T> = {\n    [K in keyof T]: {key: K, value: SetValueArg<T[K]> };\n}[keyof T];\n","import {\n    isNotDefined,\n    isValidUrl as isValidRemoteUrl,\n} from '@togglecorp/fujs';\nimport {\n    Maybe,\n} from './types';\n\n// FIXME: check if this can be done without backward referencing\n// NOTE: used for validation\nconst localhostRegex = /(?<=\\/\\/)localhost(?=[:/]|$)/;\nexport function isLocalUrl(url: string) {\n    return localhostRegex.test(url);\n}\n\n// FIXME: move this to fujs\n// NOTE: used for validation\nexport function isValidUrl(url: string | undefined): url is string {\n    if (!url) {\n        return false;\n    }\n    const sanitizedUrl = url.replace(localhostRegex, 'localhost.com');\n    return isValidRemoteUrl(sanitizedUrl);\n}\n\n// NOTE: we are not using isDefined from fujs because it treats NaN as not defined\n// NOTE: used for validation\nexport function isDefined<T>(value: Maybe<T>): value is T {\n    return value !== undefined && value !== null;\n}\n\n// NOTE: used for validation\nexport function isDefinedString(value: Maybe<string>): value is string {\n    return isDefined(value) && value.trim() !== '';\n}\n\nexport function hasNoKeys(obj: Maybe<object>) {\n    return (\n        isNotDefined(obj)\n        || (Object.keys(obj).length + Object.getOwnPropertySymbols(obj).length) === 0\n    );\n}\n\nexport function hasNoValues(array: Maybe<unknown[]>) {\n    return (\n        isNotDefined(array)\n        || array.length <= 0\n        || array.every((e) => isNotDefined(e))\n    );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Func = (...args:any[]) => any;\nexport function isCallable<T, X extends Func>(value: T | X): value is X {\n    return typeof value === 'function';\n}\n","import { isValidEmail, isInteger } from '@togglecorp/fujs';\nimport { isValidUrl, isDefined, isDefinedString } from './utils';\nimport { Maybe } from './types';\n\nexport function requiredCondition(value: unknown) {\n    return !isDefined(value)\n        ? 'The field is required'\n        : undefined;\n}\n\nexport function requiredListCondition<T>(value: Maybe<T[]>) {\n    return !isDefined(value) || value.length === 0\n        ? 'The field is required'\n        : undefined;\n}\n\nexport function requiredStringCondition(value: Maybe<string>) {\n    return !isDefinedString(value)\n        ? 'The field is required'\n        : undefined;\n}\n\nexport function blacklistCondition<T>(x: T[]) {\n    return (value: Maybe<T>) => (\n        isDefined(value) && x.includes(value)\n            ? `The field cannot be ${value}`\n            : undefined\n    );\n}\n\nexport function whitelistCondition<T>(x: T[]) {\n    return (value: Maybe<T>) => (\n        isDefined(value) && !x.includes(value)\n            ? `The field cannot be ${value}`\n            : undefined\n    );\n}\n\nexport function lengthGreaterThanCondition(x: number) {\n    return (value: Maybe<string | unknown[]>) => (\n        isDefined(value) && value.length <= x\n            ? `Length must be greater than ${x}`\n            : undefined\n    );\n}\n\nexport function lengthSmallerThanCondition(x: number) {\n    // NOTE: isDefinedString is not really required here\n    return (value: Maybe<string | unknown[]>) => (\n        isDefined(value) && value.length >= x\n            ? `Length must be smaller than ${x}`\n            : undefined\n    );\n}\n\nexport function greaterThanCondition(x: number) {\n    return (value: Maybe<number>) => (\n        isDefined(value) && value <= x\n            ? `Field must be greater than ${x}`\n            : undefined\n    );\n}\nexport function smallerThanCondition(x: number) {\n    return (value: Maybe<number>) => (\n        isDefined(value) && value >= x\n            ? `The field must be smaller than ${x}`\n            : undefined\n    );\n}\n\nexport function greaterThanOrEqualToCondition(x: number) {\n    return (value: Maybe<number>) => (\n        isDefined(value) && value < x\n            ? `The field must be greater than or equal to ${x}`\n            : undefined\n    );\n}\n\nexport function lessThanOrEqualToCondition(x: number) {\n    return (value: Maybe<number>) => (\n        isDefined(value) && value > x\n            ? `The field must be smaller than or equal to ${x}`\n            : undefined\n    );\n}\n\nexport function integerCondition(value: Maybe<number>) {\n    return isDefined(value) && !isInteger(value)\n        ? 'The field must be an integer'\n        : undefined;\n}\n\nexport function emailCondition(value: Maybe<string>) {\n    return isDefinedString(value) && !isValidEmail(value)\n        ? 'The field must be a valid email'\n        : undefined;\n}\n\nexport function urlCondition(value: Maybe<string>) {\n    return isDefinedString(value) && !isValidUrl(value)\n        ? 'The field must be a valid url'\n        : undefined;\n}\n","import {\n    isObject,\n    isNotDefined,\n    findDifferenceInList,\n    pick,\n    unique,\n    listToMap,\n    isDefined,\n} from '@togglecorp/fujs';\nimport {\n    nonFieldError,\n    fieldDependencies,\n    undefinedValue,\n    nullValue,\n} from './types';\nimport {\n    requiredCondition as genericRequiredCondition,\n} from './validation';\nimport {\n    hasNoKeys,\n    hasNoValues,\n} from './utils';\n\nexport function accumulateValues(\n    obj,\n    schema,\n    baseValue = obj,\n    context = undefined,\n    settings = {},\n) {\n    const {\n        // FIXME: add a note on what nullable does\n        nullable = false,\n    } = settings;\n\n    // NOTE: if schema is array, the object is the node element\n    const {\n        fields,\n\n        member,\n        keySelector,\n    } = schema;\n\n    if (isDefined(schema.forceValue)) {\n        if (schema.forceValue === undefinedValue) {\n            return undefined;\n        }\n        if (schema.forceValue === nullValue) {\n            return null;\n        }\n        return schema.forceValue;\n    }\n\n    const isSchemaForArray = (!!member && !!keySelector);\n    const isSchemaForObject = !!fields;\n\n    if (isSchemaForArray) {\n        const values = (obj ?? []).map((element) => {\n            const localMember = member(element, baseValue, context);\n            const value = accumulateValues(\n                element,\n                localMember,\n                baseValue,\n                context,\n                settings,\n            );\n            return value;\n        });\n        if (hasNoValues(values)) {\n            if (isDefined(schema.defaultValue)) {\n                if (schema.defaultValue === undefinedValue) {\n                    return undefined;\n                }\n                if (schema.defaultValue === nullValue) {\n                    return null;\n                }\n                return schema.defaultValue;\n            }\n            // FIXME: should we instead use (return nullable ? null : undefined)?\n            return [];\n        }\n        return values;\n    }\n    if (isSchemaForObject) {\n        const localFields = fields(obj, baseValue, context);\n        const values = Object.keys(localFields).reduce(\n            (acc, fieldName) => {\n                const value = accumulateValues(\n                    obj?.[fieldName],\n                    localFields[fieldName],\n                    baseValue,\n                    context,\n                    settings,\n                );\n                if (value !== undefined) {\n                    return {\n                        ...acc,\n                        [fieldName]: value,\n                    };\n                }\n                return acc;\n            },\n            {},\n        );\n        if (hasNoKeys(values)) {\n            if (isDefined(schema.defaultValue)) {\n                if (schema.defaultValue === undefinedValue) {\n                    return undefined;\n                }\n                if (schema.defaultValue === nullValue) {\n                    return null;\n                }\n                return schema.defaultValue;\n            }\n            return nullable ? null : undefined;\n        }\n        return values;\n    }\n\n    const requiredCondition = schema.requiredValidation ?? genericRequiredCondition;\n\n    if (!requiredCondition(obj, baseValue, context)) {\n        return obj;\n    }\n    if (isDefined(schema.defaultValue)) {\n        if (schema.defaultValue === undefinedValue) {\n            return undefined;\n        }\n        if (schema.defaultValue === nullValue) {\n            return null;\n        }\n        return schema.defaultValue;\n    }\n    return nullable ? null : undefined;\n}\n\nexport function accumulateErrors(\n    obj,\n    schema,\n    baseValue = obj,\n    context = undefined,\n) {\n    const {\n        validation,\n\n        fields,\n\n        member,\n        keySelector,\n    } = schema;\n    const isSchemaForArray = (!!member && !!keySelector);\n    const isSchemaForObject = !!fields;\n\n    if (isSchemaForArray) {\n        const errors = {};\n        if (validation) {\n            const validationErrors = validation(obj, baseValue, context);\n            if (validationErrors) {\n                errors[nonFieldError] = validationErrors;\n            }\n        }\n\n        if (obj) {\n            obj.forEach((element) => {\n                const localMember = member(element, baseValue, context);\n                const fieldError = accumulateErrors(element, localMember, baseValue, context);\n                if (fieldError) {\n                    const index = keySelector(element);\n                    errors[index] = fieldError;\n                }\n            });\n        }\n        return hasNoKeys(errors) ? undefined : errors;\n    }\n\n    if (isSchemaForObject) {\n        const errors = {};\n        if (validation) {\n            const validationErrors = validation(obj, baseValue, context);\n            if (validationErrors) {\n                errors[nonFieldError] = validationErrors;\n            }\n        }\n\n        const localFields = fields(obj, baseValue, context);\n        Object.keys(localFields).forEach((fieldName) => {\n            const fieldError = accumulateErrors(\n                obj?.[fieldName],\n                localFields[fieldName],\n                baseValue,\n                context,\n            );\n            if (fieldError) {\n                errors[fieldName] = fieldError;\n            }\n        });\n        return hasNoKeys(errors) ? undefined : errors;\n    }\n\n    if (schema.required) {\n        const requiredCondition = schema.requiredValidation ?? genericRequiredCondition;\n        const error = requiredCondition(obj, baseValue, context);\n        if (error) {\n            return error;\n        }\n    }\n\n    let error;\n    schema.validations?.every((rule) => {\n        const message = rule(obj, baseValue, context);\n        if (message) {\n            error = message;\n        }\n        return !message;\n    });\n    return error;\n}\n\n// FIXME: only copy oldErrors when a change is detected\nexport function accumulateDifferentialErrors(\n    oldObj,\n    newObj,\n    oldError,\n    schema,\n    baseValue = newObj,\n    context = undefined,\n    depsChanged = false,\n) {\n    // NOTE: schema can be undefined if the schema changed\n    if (!schema) {\n        return undefined;\n    }\n    if (!depsChanged && oldObj === newObj) {\n        return oldError;\n    }\n    // NOTE: if schema is array, the object is the node element\n    const {\n        validation,\n\n        fields,\n\n        member,\n        keySelector,\n    } = schema;\n    const isSchemaForArray = !!member && !!keySelector;\n    const isSchemaForObject = !!fields;\n\n    if (isSchemaForArray) {\n        const errors = {};\n        // FIXME: make this more performant? deps?\n        if (validation) {\n            const validationErrors = validation(newObj, baseValue, context);\n            if (validationErrors) {\n                errors[nonFieldError] = validationErrors;\n            }\n        }\n\n        let {\n            unmodified,\n            modified,\n        } = findDifferenceInList(oldObj ?? [], newObj ?? [], keySelector);\n\n        if (depsChanged) {\n            modified = [\n                ...unmodified.map((item) => ({ new: item, old: item })),\n                ...modified,\n            ];\n            unmodified = [];\n        }\n\n        unmodified.forEach((e) => {\n            const index = keySelector(e);\n            if (oldError?.[index]) {\n                errors[index] = oldError?.[index];\n            }\n        });\n\n        modified.forEach((e) => {\n            const localMember = member(e.new);\n            const index = keySelector(e.new);\n\n            // console.warn(index, depsChanged);\n\n            const fieldError = accumulateDifferentialErrors(\n                e.old,\n                e.new,\n                oldError?.[index],\n                localMember,\n                baseValue,\n                context,\n                depsChanged,\n            );\n\n            if (fieldError) {\n                errors[index] = fieldError;\n            }\n        });\n\n        return hasNoKeys(errors) ? undefined : errors;\n    }\n\n    if (isSchemaForObject) {\n        const errors = {};\n        // FIXME: make this more performant? deps?\n        if (validation) {\n            const validationErrors = validation(newObj, baseValue, context);\n            if (validationErrors) {\n                errors[nonFieldError] = validationErrors;\n            }\n        }\n\n        const hasFieldDepsChanged = (deps) => deps?.some(\n            (key) => oldObj?.[key] !== newObj?.[key],\n        ) ?? false;\n\n        const localFields = fields(newObj, baseValue, context);\n        const dependenciesObj = localFields[fieldDependencies];\n\n        Object.keys(localFields).forEach((fieldName) => {\n            const depsChangedForField = (\n                hasFieldDepsChanged(dependenciesObj?.[fieldName])\n                // NOTE: if the dependency changed the parent then validation\n                // should be retriggered for all the children that are conditional\n                || (depsChanged && isDefined(dependenciesObj?.[fieldName]))\n            );\n\n            // console.warn(fieldName, depsChangedForField, dependenciesObj?.[fieldName]);\n\n            const fieldError = accumulateDifferentialErrors(\n                oldObj?.[fieldName],\n                newObj?.[fieldName],\n                oldError?.[fieldName],\n                localFields[fieldName],\n                baseValue,\n                context,\n                depsChangedForField,\n            );\n\n            if (fieldError) {\n                errors[fieldName] = fieldError;\n            }\n        });\n\n        return hasNoKeys(errors) ? undefined : errors;\n    }\n\n    if (schema.required) {\n        if (\n            (depsChanged && oldObj === newObj && !!oldError)\n            || (oldObj !== newObj)\n        ) {\n            const requiredCondition = schema.requiredValidation ?? genericRequiredCondition;\n            const error = requiredCondition(newObj, baseValue, context);\n            if (error) {\n                return error;\n            }\n        }\n    }\n\n    let error;\n    schema.validations?.every((rule) => {\n        const message = rule(newObj, baseValue, context);\n        if (message) {\n            error = message;\n        }\n        return !message;\n    });\n    return error;\n}\n\nexport function analyzeErrors(errors) {\n    // handles undefined, null\n    if (isNotDefined(errors)) {\n        return false;\n    }\n    if (typeof errors === 'string') {\n        return !!errors;\n    }\n    if (errors[nonFieldError]) {\n        return true;\n    }\n\n    // handles empty object {}\n    const keys = Object.keys(errors);\n    if (keys.length === 0) {\n        return false;\n    }\n    return keys.some((key) => {\n        const subErrors = errors[key];\n        // handles object\n        if (isObject(subErrors)) {\n            return analyzeErrors(subErrors);\n        }\n        // handles string or array of strings\n        return isDefined(subErrors);\n    });\n}\n\n// FIXME: move this to a helper\n// FIXME: check conditions for change in context and baseValue\nexport function addCondition(\n    schema,\n    value,\n    dependentKeys,\n    valueKeys,\n    updater,\n) {\n    const pickedValues = pick(value, dependentKeys);\n    const prevFieldDependencies = schema[fieldDependencies] ?? {};\n    return {\n        ...schema,\n        ...pick(updater(pickedValues), valueKeys),\n        [fieldDependencies]: {\n            ...prevFieldDependencies,\n\n            ...listToMap(\n                valueKeys,\n                (key) => key,\n                (key) => unique([\n                    ...(prevFieldDependencies[key] ?? []),\n                    ...dependentKeys,\n                ]),\n            ),\n        },\n    };\n}\n","import {\n    useReducer,\n    useCallback,\n} from 'react';\nimport { isNotDefined } from '@togglecorp/fujs';\nimport {\n    accumulateDifferentialErrors,\n    accumulateErrors,\n    analyzeErrors,\n    accumulateValues,\n} from './schema';\n\nimport type { Schema, Error } from './schema';\nimport type {\n    SetValueArg,\n    SetErrorArg,\n    SetBaseValueArg,\n    EntriesAsKeyValue,\n    EntriesAsList,\n} from './types';\nimport { isCallable } from './utils';\n\ninterface CreateRestorePointAction {\n    type: 'CREATE_RESTORE_POINT';\n}\ninterface RestoreRestorePointAction {\n    type: 'RESTORE_RESTORE_POINT';\n    retain: boolean,\n}\ninterface ClearRestorePointAction {\n    type: 'CLEAR_RESTORE_POINT';\n}\ninterface ErrorAction<T> {\n    type: 'SET_ERROR';\n    error: SetErrorArg<Error<T>> | undefined;\n}\ninterface ValueAction<T> {\n    type: 'SET_VALUE';\n    value: SetBaseValueArg<T>;\n    partialUpdate: boolean | undefined;\n}\ninterface PristineAction {\n    type: 'SET_PRISTINE';\n    value: boolean;\n}\ntype ValueFieldAction<T> = EntriesAsKeyValue<T> & { type: 'SET_VALUE_FIELD' };\n\ntype Actions<T> = ValueFieldAction<T>\n    | ErrorAction<T>\n    | ValueAction<T>\n    | PristineAction\n    | CreateRestorePointAction\n    | RestoreRestorePointAction\n    | ClearRestorePointAction;\n\nexport type ValidateFunc<T> = (accumulateOnError?: boolean) => (\n    { errored: true, error: Error<T>, value: unknown }\n    | { errored: false, value: T, error: undefined }\n)\n\ntype State<T> = {\n    value: T,\n    error: Error<T> | undefined,\n    pristine: boolean,\n} & ({\n    hasRestorePoint: true,\n    restorePointValue: T,\n    restorePointError: Error<T> | undefined,\n    restorePointPristine: boolean,\n} | {\n    hasRestorePoint: false,\n});\n\nfunction useForm<T>(\n    schema: Schema<T, T, undefined>,\n    initialState: {\n        value: T,\n        error?: Error<T>,\n        pristine?: boolean,\n    },\n    context?: never,\n): {\n    value: T,\n    error: Error<T> | undefined,\n    pristine: boolean,\n    validate: ValidateFunc<T>,\n\n    setPristine: (pristine: boolean) => void,\n    setError: (errors: SetErrorArg<Error<T>> | undefined) => void,\n    setValue: (value: SetBaseValueArg<T>, partialUpdate?: boolean) => void,\n    setFieldValue: (...entries: EntriesAsList<T>) => void,\n\n    hasRestorePoint: boolean,\n    restorePointValue: T,\n    restorePointError: Error<T> | undefined,\n    restorePointPristine: boolean,\n\n    createRestorePoint: () => void;\n    restore: () => void;\n    clearRestorePoint: () => void;\n};\nfunction useForm<T, C>(\n    schema: Schema<T, T, C>,\n    initialState: {\n        value: T,\n        error?: Error<T>,\n        pristine?: boolean,\n    },\n    context: C,\n): {\n    value: T,\n    error: Error<T> | undefined,\n    pristine: boolean,\n    validate: ValidateFunc<T>,\n\n    setPristine: (pristine: boolean) => void,\n    setError: (errors: SetErrorArg<Error<T>> | undefined) => void,\n    setValue: (value: SetBaseValueArg<T>, partialUpdate?: boolean) => void,\n    setFieldValue: (...entries: EntriesAsList<T>) => void,\n\n    hasRestorePoint: boolean,\n    restorePointValue: T,\n    restorePointError: Error<T> | undefined,\n    restorePointPristine: boolean,\n\n    createRestorePoint: () => void;\n    restore: () => void;\n    clearRestorePoint: () => void;\n};\nfunction useForm<T, C>(\n    schema: Schema<T, T, C>,\n    initialState: {\n        value: T,\n        error?: Error<T>,\n        pristine?: boolean,\n    },\n    context: C,\n): {\n    value: T,\n    error: Error<T> | undefined,\n    pristine: boolean,\n    validate: ValidateFunc<T>,\n\n    setPristine: (pristine: boolean) => void,\n    setError: (errors: SetErrorArg<Error<T>> | undefined) => void,\n    setValue: (value: SetBaseValueArg<T>, partialUpdate?: boolean) => void,\n    setFieldValue: (...entries: EntriesAsList<T>) => void,\n\n    hasRestorePoint: boolean,\n    restorePointValue: T,\n    restorePointError: Error<T> | undefined,\n    restorePointPristine: boolean,\n\n    createRestorePoint: () => void;\n    restore: () => void;\n    clearRestorePoint: () => void;\n} {\n    const {\n        value: initialFormValue,\n        error: initialError,\n        pristine: initialPristine = true,\n    } = initialState;\n    const formReducer = useCallback(\n        (prevState: State<T>, action: Actions<T>): State<T> => {\n            if (action.type === 'CREATE_RESTORE_POINT') {\n                return {\n                    ...prevState,\n                    hasRestorePoint: true,\n                    restorePointValue: prevState.value,\n                    restorePointError: prevState.error,\n                    restorePointPristine: prevState.pristine,\n                };\n            }\n            if (action.type === 'RESTORE_RESTORE_POINT') {\n                if (!prevState.hasRestorePoint) {\n                    return prevState;\n                }\n                if (action.retain) {\n                    return {\n                        ...prevState,\n                        value: prevState.restorePointValue,\n                        error: prevState.restorePointError,\n                        pristine: prevState.restorePointPristine,\n                    };\n                }\n                return {\n                    hasRestorePoint: false,\n                    value: prevState.restorePointValue,\n                    error: prevState.restorePointError,\n                    pristine: prevState.restorePointPristine,\n                };\n            }\n            if (action.type === 'CLEAR_RESTORE_POINT') {\n                if (!prevState.hasRestorePoint) {\n                    return prevState;\n                }\n                return {\n                    hasRestorePoint: false,\n                    value: prevState.value,\n                    error: prevState.error,\n                    pristine: prevState.pristine,\n                };\n            }\n            if (action.type === 'SET_PRISTINE') {\n                const { value } = action;\n                return {\n                    ...prevState,\n                    pristine: value,\n                };\n            }\n            if (action.type === 'SET_ERROR') {\n                const { error: errorFromAction } = action;\n\n                const newErr = isCallable(errorFromAction)\n                    ? errorFromAction(prevState.error)\n                    : errorFromAction;\n\n                return {\n                    ...prevState,\n                    error: newErr,\n                };\n            }\n            if (action.type === 'SET_VALUE') {\n                const {\n                    value: valueFromAction,\n                    partialUpdate,\n                } = action;\n\n                const newValue = isCallable(valueFromAction)\n                    ? valueFromAction(prevState.value)\n                    : valueFromAction;\n\n                if (partialUpdate) {\n                    const oldError = prevState.error;\n                    const oldValue = prevState.value;\n\n                    if (oldValue === newValue) {\n                        return prevState;\n                    }\n\n                    const newError = accumulateDifferentialErrors(\n                        oldValue,\n                        newValue,\n                        oldError,\n                        schema,\n                        newValue,\n                        context,\n                        false,\n                    );\n\n                    return {\n                        ...prevState,\n                        value: newValue,\n                        error: newError,\n                        pristine: false,\n                    };\n                }\n\n                return {\n                    ...prevState,\n                    value: newValue,\n                    error: undefined,\n                    pristine: true,\n                };\n            }\n            if (action.type === 'SET_VALUE_FIELD') {\n                const {\n                    key,\n                    value: valueFromAction,\n                } = action;\n                const oldValue = prevState.value;\n                const oldError = prevState.error;\n\n                const newVal = isCallable(valueFromAction)\n                    ? valueFromAction(oldValue[key])\n                    : valueFromAction;\n\n                // NOTE: just don't set anything if the value is not really changed\n                if (oldValue[key] === newVal) {\n                    return prevState;\n                }\n\n                const newValue = {\n                    ...oldValue,\n                    [key]: newVal,\n                };\n\n                const newError = accumulateDifferentialErrors(\n                    oldValue,\n                    newValue,\n                    oldError,\n                    schema,\n                    newValue,\n                    context,\n                    false,\n                );\n\n                return {\n                    ...prevState,\n                    value: newValue,\n                    error: newError,\n                    pristine: false,\n                };\n            }\n            // eslint-disable-next-line no-console\n            console.error('Action is not supported');\n            return prevState;\n        },\n        [schema, context],\n    );\n\n    const [state, dispatch] = useReducer(\n        formReducer,\n        {\n            value: initialFormValue,\n            error: initialError,\n            pristine: initialPristine,\n            hasRestorePoint: false,\n        },\n    );\n\n    const createRestorePoint = useCallback(\n        () => {\n            const action: CreateRestorePointAction = {\n                type: 'CREATE_RESTORE_POINT',\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const restore = useCallback(\n        (retain = false) => {\n            const action: RestoreRestorePointAction = {\n                type: 'RESTORE_RESTORE_POINT',\n                retain,\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const clearRestorePoint = useCallback(\n        () => {\n            const action: ClearRestorePointAction = {\n                type: 'CLEAR_RESTORE_POINT',\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const setPristine = useCallback(\n        (pristineValue: boolean) => {\n            const action: PristineAction = {\n                type: 'SET_PRISTINE',\n                value: pristineValue,\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const setError = useCallback(\n        (errors: SetErrorArg<Error<T>> | undefined) => {\n            const action: ErrorAction<T> = {\n                type: 'SET_ERROR',\n                error: errors,\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const setValue = useCallback(\n        (value: SetBaseValueArg<T>, partialUpdate: boolean | undefined) => {\n            const action: ValueAction<T> = {\n                type: 'SET_VALUE',\n                value,\n                partialUpdate,\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const setFieldValue = useCallback(\n        (...entries: EntriesAsList<T>) => {\n            const [value, key] = entries;\n            const action: ValueFieldAction<T> = {\n                type: 'SET_VALUE_FIELD',\n                key,\n                value,\n            };\n            dispatch(action);\n        },\n        [],\n    );\n\n    const validate: ValidateFunc<T> = useCallback(\n        (accumulateOnError?: boolean) => {\n            const stateErrors = accumulateErrors(state.value, schema, state.value, context);\n            const stateErrored = analyzeErrors(stateErrors);\n            if (stateErrored) {\n                const value = accumulateOnError\n                    ? accumulateValues(\n                        state.value,\n                        schema,\n                        state.value,\n                        context,\n                        { nullable: true },\n                    ) : undefined;\n                return { errored: true, error: stateErrors as Error<T>, value };\n            }\n            // NOTE: server needs `null` to identify that the value is not defined\n            const validatedValues = accumulateValues(\n                state.value,\n                schema,\n                state.value,\n                context,\n                { nullable: true },\n            );\n            return { errored: false, value: validatedValues, error: undefined };\n        },\n        [schema, state, context],\n    );\n\n    return {\n        value: state.value,\n        error: state.error,\n        pristine: state.pristine,\n\n        setError,\n        setValue,\n        setFieldValue,\n        setPristine,\n        validate,\n\n        hasRestorePoint: state.hasRestorePoint,\n        restorePointValue: state.hasRestorePoint ? state.restorePointValue : state.value,\n        restorePointError: state.hasRestorePoint ? state.restorePointError : state.error,\n        restorePointPristine: state.hasRestorePoint ? state.restorePointPristine : state.pristine,\n\n        createRestorePoint,\n        restore,\n        clearRestorePoint,\n    };\n}\n\nexport function useFormObject<K, T>(\n    name: K,\n    onChange: (value: SetValueArg<T>, name: K) => void,\n    defaultValue: NonNullable<T> | (() => NonNullable<T>),\n) {\n    const setFieldValue = useCallback(\n        (...entries: EntriesAsList<NonNullable<T>>) => {\n            // NOTE: there was a weird issue when using isCallable after\n            // typescript upgrade. So using a specific isNotCallable here\n            function isNotCallable(\n                value: SetValueArg<NonNullable<T>[keyof NonNullable<T>]>,\n            ): value is NonNullable<T>[keyof NonNullable<T>] {\n                return typeof value !== 'function';\n            }\n\n            // NOTE: may need to cast callableValue here\n            const [callableValue, key] = entries;\n            onChange(\n                (oldValue: T | undefined): T => {\n                    const baseValue = oldValue ?? (\n                        isCallable(defaultValue)\n                            ? defaultValue()\n                            : defaultValue\n                    );\n                    const val = baseValue[key];\n                    return {\n                        ...baseValue,\n                        [key]: isNotCallable(callableValue)\n                            ? callableValue\n                            : callableValue(val),\n                    };\n                },\n                name,\n            );\n        },\n        [name, defaultValue, onChange],\n    );\n\n    return setFieldValue;\n}\n\nexport function useFormArray<K, T>(\n    name: K,\n    onChange: (\n        newValue: SetValueArg<T[]>,\n        inputName: K,\n    ) => void,\n) {\n    const setValue = useCallback(\n        (val: SetValueArg<T>, index: number | undefined) => {\n            onChange(\n                (oldValue: T[] | undefined): T[] => {\n                    const newVal = [...(oldValue ?? [])];\n                    if (isNotDefined(index)) {\n                        newVal.push(isCallable(val) ? val(undefined) : val);\n                    } else {\n                        newVal[index] = isCallable(val)\n                            ? val(newVal[index])\n                            : val;\n                    }\n                    return newVal;\n                },\n                name,\n            );\n        },\n        [name, onChange],\n    );\n\n    const removeValue = useCallback(\n        (index: number) => {\n            onChange(\n                (oldValue: T[] | undefined): T[] => {\n                    if (!oldValue) {\n                        return [];\n                    }\n                    const newVal = [...oldValue];\n                    newVal.splice(index, 1);\n                    return newVal;\n                },\n                name,\n            );\n        },\n        [name, onChange],\n    );\n\n    return { setValue, removeValue };\n}\n\nexport default useForm;\n","import {\n    isObject,\n    isList,\n    isDefined,\n} from '@togglecorp/fujs';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function removeNull(\n    data,\n    ignoreKeys = ['__typename'],\n) {\n    if (data === null || data === undefined) {\n        return undefined;\n    }\n    if (isList(data)) {\n        return data\n            .map((item) => removeNull(item, ignoreKeys))\n            .filter(isDefined);\n    }\n    if (isObject(data)) {\n        return Object.keys(data).reduce(\n            (acc, key) => {\n                if (ignoreKeys && ignoreKeys.includes(key)) {\n                    return acc;\n                }\n\n                const val = data[key];\n                const newEntry = removeNull(val, ignoreKeys);\n                if (isDefined(newEntry)) {\n                    return {\n                        ...acc,\n                        [key]: newEntry,\n                    };\n                }\n                return acc;\n            },\n            {},\n        );\n    }\n    return data;\n}\n","import { isNotDefined } from '@togglecorp/fujs';\nimport { nonFieldError } from './types';\nimport type { ObjectError, ArrayError } from './schema';\n\nexport function getErrorObject<T>(\n    value: ObjectError<T> | string | undefined | null,\n): ObjectError<T> | undefined\nexport function getErrorObject<T>(\n    value: ArrayError<T> | string | undefined | null,\n): ArrayError<T> | undefined\nexport function getErrorObject<T>(\n    value: ArrayError<T> | ObjectError<T> | string | undefined | null,\n) {\n    if (isNotDefined(value)) {\n        return undefined;\n    }\n    if (typeof value === 'string') {\n        // FIXME: memoize this\n        return {\n            [nonFieldError]: value,\n        };\n    }\n    return value;\n}\n\nexport function getErrorString<T>(\n    value: ArrayError<T> | ObjectError<T> | string | undefined | null,\n) {\n    if (isNotDefined(value)) {\n        return undefined;\n    }\n    if (typeof value === 'string') {\n        return value;\n    }\n    return value[nonFieldError];\n}\n","import type { Error } from './schema';\nimport { ValidateFunc } from './form';\n\n// eslint-disable-next-line import/prefer-default-export\nexport function createSubmitHandler<T>(\n    validator: ValidateFunc<T>,\n    setError: (errors: Error<T> | undefined, value: unknown) => void,\n    successCallback: (value: T) => void,\n    failureCallback?: (value: unknown, errors: Error<T>) => void,\n) {\n    // NOTE: making event non-mandatory so that it can be used in other usecases\n    return (event?: React.FormEvent<HTMLFormElement>) => {\n        if (event) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n\n        // NOTE: accumulating value if failureCallback is defined\n        const value = validator(!!failureCallback);\n        // NOTE: Idk why !value.errored doesn't work here\n        if (value.errored === false) {\n            setError(value.error, value.value);\n            successCallback(value.value);\n        } else {\n            setError(value.error, value.value);\n            if (failureCallback) {\n                failureCallback(value.value, value.error);\n            }\n        }\n    };\n}\n"],"names":["nonFieldError","Symbol","fieldDependencies","undefinedValue","nullValue","localhostRegex","isLocalUrl","url","test","isValidUrl","sanitizedUrl","replace","isValidRemoteUrl","isDefined","value","undefined","isDefinedString","trim","hasNoKeys","obj","isNotDefined","Object","keys","length","getOwnPropertySymbols","hasNoValues","array","every","e","isCallable","requiredCondition","requiredListCondition","requiredStringCondition","blacklistCondition","x","includes","whitelistCondition","lengthGreaterThanCondition","lengthSmallerThanCondition","greaterThanCondition","smallerThanCondition","greaterThanOrEqualToCondition","lessThanOrEqualToCondition","integerCondition","isInteger","emailCondition","isValidEmail","urlCondition","accumulateValues","schema","baseValue","context","settings","nullable","fields","member","keySelector","forceValue","isSchemaForArray","isSchemaForObject","values","map","element","localMember","defaultValue","localFields","reduce","acc","fieldName","requiredValidation","genericRequiredCondition","accumulateErrors","validation","errors","validationErrors","forEach","fieldError","index","required","error","validations","rule","message","accumulateDifferentialErrors","oldObj","newObj","oldError","depsChanged","unmodified","modified","findDifferenceInList","item","new","old","hasFieldDepsChanged","deps","some","key","dependenciesObj","depsChangedForField","analyzeErrors","subErrors","isObject","addCondition","dependentKeys","valueKeys","updater","pickedValues","pick","prevFieldDependencies","listToMap","unique","useForm","initialState","initialFormValue","initialError","pristine","initialPristine","formReducer","useCallback","prevState","action","type","hasRestorePoint","restorePointValue","restorePointError","restorePointPristine","retain","errorFromAction","newErr","valueFromAction","partialUpdate","newValue","oldValue","newError","newVal","console","state","dispatch","useReducer","createRestorePoint","restore","clearRestorePoint","setPristine","pristineValue","setError","setValue","setFieldValue","entries","validate","accumulateOnError","stateErrors","stateErrored","errored","validatedValues","useFormObject","name","onChange","isNotCallable","callableValue","val","useFormArray","push","removeValue","splice","removeNull","data","ignoreKeys","isList","filter","newEntry","getErrorObject","getErrorString","createSubmitHandler","validator","successCallback","failureCallback","event","preventDefault","stopPropagation"],"mappings":"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"}