remix-validated-form 5.1.0 → 5.1.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +152 -8
- package/dist/index.cjs.js +898 -63
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +876 -15
- package/dist/index.esm.js.map +1 -1
- package/package.json +4 -4
package/dist/index.esm.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/hooks.ts","../src/internal/getInputProps.ts","../src/internal/logic/getCheckboxChecked.ts","../src/internal/logic/getRadioChecked.ts","../src/internal/hooks.ts","../../set-get/src/stringToPathArray.ts","../../set-get/src/setPath.ts","../../set-get/src/getPath.ts","../src/internal/constants.ts","../src/internal/formContext.ts","../src/internal/hydratable.ts","../src/internal/state/createFormStore.ts","../src/internal/logic/requestSubmit.ts","../src/internal/state/arrayUtil.ts","../src/internal/state/storeHooks.ts","../src/internal/state/controlledFields.ts","../src/server.ts","../src/ValidatedForm.tsx","../src/internal/MultiValueMap.ts","../src/internal/submissionCallbacks.ts","../src/internal/util.ts","../src/validation/createValidator.ts","../src/internal/flatten.ts","../src/userFacingFormContext.ts","../src/unreleased/formStateHooks.ts","../src/internal/state/fieldArray.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport {\n createGetInputProps,\n GetInputProps,\n ValidationBehaviorOptions,\n} from \"./internal/getInputProps\";\nimport {\n useInternalFormContext,\n useFieldTouched,\n useFieldError,\n useFieldDefaultValue,\n useClearError,\n useInternalIsSubmitting,\n useInternalIsValid,\n useInternalHasBeenSubmitted,\n useRegisterReceiveFocus,\n useSmartValidate,\n} from \"./internal/hooks\";\nimport {\n useControllableValue,\n useUpdateControllableValue,\n} from \"./internal/state/controlledFields\";\n\n/**\n * Returns whether or not the parent form is currently being submitted.\n * This is different from Remix's `useNavigation()` in that it\n * is aware of what form it's in and when _that_ form is being submitted.\n *\n * @param formId\n */\nexport const useIsSubmitting = (formId?: string) => {\n const formContext = useInternalFormContext(formId, \"useIsSubmitting\");\n return useInternalIsSubmitting(formContext.formId);\n};\n\n/**\n * Returns whether or not the current form is valid.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useIsValid = (formId?: string) => {\n const formContext = useInternalFormContext(formId, \"useIsValid\");\n return useInternalIsValid(formContext.formId);\n};\n\nexport type FieldProps = {\n /**\n * The validation error message if there is one.\n */\n error?: string;\n /**\n * Clears the error message.\n */\n clearError: () => void;\n /**\n * Validates the field.\n */\n validate: () => void;\n /**\n * The default value of the field, if there is one.\n */\n defaultValue?: any;\n /**\n * Whether or not the field has been touched.\n */\n touched: boolean;\n /**\n * Helper to set the touched state of the field.\n */\n setTouched: (touched: boolean) => void;\n /**\n * Helper to get all the props necessary for a regular input.\n */\n getInputProps: GetInputProps;\n};\n\n/**\n * Provides the data and helpers necessary to set up a field.\n */\nexport const useField = (\n name: string,\n options?: {\n /**\n * Allows you to configure a custom function that will be called\n * when the input needs to receive focus due to a validation error.\n * This is useful for custom components that use a hidden input.\n */\n handleReceiveFocus?: () => void;\n /**\n * Allows you to specify when a field gets validated (when using getInputProps)\n */\n validationBehavior?: Partial<ValidationBehaviorOptions>;\n /**\n * The formId of the form you want to use.\n * This is not necesary if the input is used inside a form.\n */\n formId?: string;\n }\n): FieldProps => {\n const { formId: providedFormId, handleReceiveFocus } = options ?? {};\n const formContext = useInternalFormContext(providedFormId, \"useField\");\n\n const defaultValue = useFieldDefaultValue(name, formContext);\n const [touched, setTouched] = useFieldTouched(name, formContext);\n const error = useFieldError(name, formContext);\n const clearError = useClearError(formContext);\n\n const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);\n const smartValidate = useSmartValidate(formContext.formId);\n const registerReceiveFocus = useRegisterReceiveFocus(formContext.formId);\n\n useEffect(() => {\n if (handleReceiveFocus)\n return registerReceiveFocus(name, handleReceiveFocus);\n }, [handleReceiveFocus, name, registerReceiveFocus]);\n\n const field = useMemo<FieldProps>(() => {\n const helpers = {\n error,\n clearError: () => clearError(name),\n validate: () => smartValidate({ alwaysIncludeErrorsFromFields: [name] }),\n defaultValue,\n touched,\n setTouched,\n };\n const getInputProps = createGetInputProps({\n ...helpers,\n name,\n hasBeenSubmitted,\n validationBehavior: options?.validationBehavior,\n });\n return {\n ...helpers,\n getInputProps,\n };\n }, [\n error,\n clearError,\n defaultValue,\n touched,\n setTouched,\n name,\n hasBeenSubmitted,\n options?.validationBehavior,\n smartValidate,\n ]);\n\n return field;\n};\n\nexport const useControlField = <T>(name: string, formId?: string) => {\n const context = useInternalFormContext(formId, \"useControlField\");\n const [value, setValue] = useControllableValue(context, name);\n return [value as T, setValue as (value: T) => void] as const;\n};\n\nexport const useUpdateControlledField = (formId?: string) => {\n const context = useInternalFormContext(formId, \"useControlField\");\n return useUpdateControllableValue(context.formId);\n};\n","import * as R from \"remeda\";\nimport { getCheckboxChecked } from \"./logic/getCheckboxChecked\";\nimport { getRadioChecked } from \"./logic/getRadioChecked\";\n\nexport type ValidationBehavior = \"onBlur\" | \"onChange\" | \"onSubmit\";\n\nexport type ValidationBehaviorOptions = {\n initial: ValidationBehavior;\n whenTouched: ValidationBehavior;\n whenSubmitted: ValidationBehavior;\n};\n\nexport type CreateGetInputPropsOptions = {\n clearError: () => void;\n validate: () => void;\n defaultValue?: any;\n touched: boolean;\n setTouched: (touched: boolean) => void;\n hasBeenSubmitted: boolean;\n validationBehavior?: Partial<ValidationBehaviorOptions>;\n name: string;\n};\n\ntype HandledProps = \"name\" | \"defaultValue\" | \"defaultChecked\";\ntype Callbacks = \"onChange\" | \"onBlur\";\n\ntype MinimalInputProps = {\n onChange?: ((...args: any[]) => void) | undefined;\n onBlur?: ((...args: any[]) => void) | undefined;\n defaultValue?: any;\n defaultChecked?: boolean | undefined;\n name?: string | undefined;\n type?: string | undefined;\n};\n\nexport type GetInputProps = <T extends MinimalInputProps>(\n props?: Omit<T, HandledProps | Callbacks> & Partial<Pick<T, Callbacks>>\n) => T;\n\nconst defaultValidationBehavior: ValidationBehaviorOptions = {\n initial: \"onBlur\",\n whenTouched: \"onChange\",\n whenSubmitted: \"onChange\",\n};\n\nexport const createGetInputProps = ({\n clearError,\n validate,\n defaultValue,\n touched,\n setTouched,\n hasBeenSubmitted,\n validationBehavior,\n name,\n}: CreateGetInputPropsOptions): GetInputProps => {\n const validationBehaviors = {\n ...defaultValidationBehavior,\n ...validationBehavior,\n };\n\n return <T extends MinimalInputProps>(props = {} as any) => {\n const behavior = hasBeenSubmitted\n ? validationBehaviors.whenSubmitted\n : touched\n ? validationBehaviors.whenTouched\n : validationBehaviors.initial;\n\n const inputProps: MinimalInputProps = {\n ...props,\n onChange: (...args: unknown[]) => {\n if (behavior === \"onChange\") validate();\n else clearError();\n return props?.onChange?.(...args);\n },\n onBlur: (...args: unknown[]) => {\n if (behavior === \"onBlur\") validate();\n setTouched(true);\n return props?.onBlur?.(...args);\n },\n name,\n };\n\n if (props.type === \"checkbox\") {\n inputProps.defaultChecked = getCheckboxChecked(props.value, defaultValue);\n } else if (props.type === \"radio\") {\n inputProps.defaultChecked = getRadioChecked(props.value, defaultValue);\n } else if (props.value === undefined) {\n // We should only set the defaultValue if the input is uncontrolled.\n inputProps.defaultValue = defaultValue;\n }\n\n return R.omitBy(inputProps, (value) => value === undefined) as T;\n };\n};\n","export const getCheckboxChecked = (\n checkboxValue: string | undefined = \"on\",\n newValue: unknown\n): boolean | undefined => {\n if (Array.isArray(newValue))\n return newValue.some((val) => val === true || val === checkboxValue);\n if (typeof newValue === \"boolean\") return newValue;\n if (typeof newValue === \"string\") return newValue === checkboxValue;\n return undefined;\n};\n","export const getRadioChecked = (\n radioValue: string | undefined = \"on\",\n newValue: unknown\n) => {\n if (typeof newValue === \"string\") return newValue === radioValue;\n return undefined;\n};\n\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest;\n it(\"getRadioChecked\", () => {\n expect(getRadioChecked(\"on\", \"on\")).toBe(true);\n expect(getRadioChecked(\"on\", undefined)).toBe(undefined);\n expect(getRadioChecked(\"trueValue\", undefined)).toBe(undefined);\n expect(getRadioChecked(\"trueValue\", \"bob\")).toBe(false);\n expect(getRadioChecked(\"trueValue\", \"trueValue\")).toBe(true);\n });\n}\n","import { useActionData, useMatches, useNavigation } from \"@remix-run/react\";\nimport { useCallback, useContext } from \"react\";\nimport { getPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\nimport { FieldErrors, ValidationErrorResponseData } from \"..\";\nimport { formDefaultValuesKey } from \"./constants\";\nimport { InternalFormContext, InternalFormContextValue } from \"./formContext\";\nimport { Hydratable, hydratable } from \"./hydratable\";\nimport { useFormStore } from \"./state/storeHooks\";\nimport { InternalFormId } from \"./state/types\";\n\nexport const useInternalFormContext = (\n formId?: string | symbol,\n hookName?: string\n) => {\n const formContext = useContext(InternalFormContext);\n\n if (formId) return { formId };\n if (formContext) return formContext;\n\n throw new Error(\n `Unable to determine form for ${hookName}. Please use it inside a ValidatedForm or pass a 'formId'.`\n );\n};\n\nexport function useErrorResponseForForm({\n fetcher,\n subaction,\n formId,\n}: InternalFormContextValue): ValidationErrorResponseData | null {\n const actionData = useActionData<any>();\n if (fetcher) {\n if ((fetcher.data as any)?.fieldErrors) return fetcher.data as any;\n return null;\n }\n\n if (!actionData?.fieldErrors) return null;\n\n // If there's an explicit id, we should ignore data that has the wrong id\n if (typeof formId === \"string\" && actionData.formId)\n return actionData.formId === formId ? actionData : null;\n\n if (\n (!subaction && !actionData.subaction) ||\n actionData.subaction === subaction\n )\n return actionData;\n\n return null;\n}\n\nexport const useFieldErrorsForForm = (\n context: InternalFormContextValue\n): Hydratable<FieldErrors | undefined> => {\n const response = useErrorResponseForForm(context);\n const hydrated = useFormStore(context.formId, (state) => state.isHydrated);\n return hydratable.from(response?.fieldErrors, hydrated);\n};\n\nexport const useDefaultValuesFromLoader = ({\n formId,\n}: InternalFormContextValue) => {\n const matches = useMatches();\n if (typeof formId === \"string\") {\n const dataKey = formDefaultValuesKey(formId);\n // If multiple loaders declare the same default values,\n // we should use the data from the deepest route.\n const match = matches\n .reverse()\n .find(\n (match) =>\n match.data && typeof match.data === \"object\" && dataKey in match.data\n );\n return match?.data[dataKey];\n }\n\n return null;\n};\n\nexport const useDefaultValuesForForm = (\n context: InternalFormContextValue\n): Hydratable<{ [fieldName: string]: any }> => {\n const { formId, defaultValuesProp } = context;\n const hydrated = useFormStore(formId, (state) => state.isHydrated);\n const errorResponse = useErrorResponseForForm(context);\n const defaultValuesFromLoader = useDefaultValuesFromLoader(context);\n\n // Typical flow is:\n // - Default values only available from props or server\n // - Props have a higher priority than server\n // - State gets hydrated with default values\n // - After submit, we may need to use values from the error\n\n if (hydrated) return hydratable.hydratedData();\n if (errorResponse?.repopulateFields) {\n invariant(\n typeof errorResponse.repopulateFields === \"object\",\n \"repopulateFields returned something other than an object\"\n );\n return hydratable.serverData(errorResponse.repopulateFields);\n }\n if (defaultValuesProp) return hydratable.serverData(defaultValuesProp);\n\n return hydratable.serverData(defaultValuesFromLoader);\n};\n\nexport const useHasActiveFormSubmit = ({\n fetcher,\n}: InternalFormContextValue): boolean => {\n let navigation = useNavigation();\n const hasActiveSubmission = fetcher\n ? fetcher.state === \"submitting\"\n : navigation.state === \"submitting\" || navigation.state === \"loading\";\n return hasActiveSubmission;\n};\n\nexport const useFieldTouched = (\n field: string,\n { formId }: InternalFormContextValue\n) => {\n const touched = useFormStore(formId, (state) => state.touchedFields[field]);\n const setFieldTouched = useFormStore(formId, (state) => state.setTouched);\n const setTouched = useCallback(\n (touched: boolean) => setFieldTouched(field, touched),\n [field, setFieldTouched]\n );\n return [touched, setTouched] as const;\n};\n\nexport const useFieldError = (\n name: string,\n context: InternalFormContextValue\n) => {\n const fieldErrors = useFieldErrorsForForm(context);\n const state = useFormStore(\n context.formId,\n (state) => state.fieldErrors[name]\n );\n return fieldErrors.map((fieldErrors) => fieldErrors?.[name]).hydrateTo(state);\n};\n\nexport const useClearError = (context: InternalFormContextValue) => {\n const { formId } = context;\n return useFormStore(formId, (state) => state.clearFieldError);\n};\n\nexport const useCurrentDefaultValueForField = (\n formId: InternalFormId,\n field: string\n) =>\n useFormStore(formId, (state) => getPath(state.currentDefaultValues, field));\n\nexport const useFieldDefaultValue = (\n name: string,\n context: InternalFormContextValue\n) => {\n const defaultValues = useDefaultValuesForForm(context);\n const state = useCurrentDefaultValueForField(context.formId, name);\n\n return defaultValues.map((val) => getPath(val, name)).hydrateTo(state);\n};\n\nexport const useInternalIsSubmitting = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.isSubmitting);\n\nexport const useInternalIsValid = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.isValid());\n\nexport const useInternalHasBeenSubmitted = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.hasBeenSubmitted);\n\nexport const useSmartValidate = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.smartValidate);\n\nexport const useValidate = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.validate);\n\nconst noOpReceiver = () => () => {};\nexport const useRegisterReceiveFocus = (formId: InternalFormId) =>\n useFormStore(\n formId,\n (state) => state.formProps?.registerReceiveFocus ?? noOpReceiver\n );\n\nconst defaultDefaultValues = {};\nexport const useSyncedDefaultValues = (formId: InternalFormId) =>\n useFormStore(\n formId,\n (state) => state.formProps?.defaultValues ?? defaultDefaultValues\n );\n\nexport const useSetTouched = ({ formId }: InternalFormContextValue) =>\n useFormStore(formId, (state) => state.setTouched);\n\nexport const useTouchedFields = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.touchedFields);\n\nexport const useFieldErrors = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.fieldErrors);\n\nexport const useSetFieldErrors = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.setFieldErrors);\n\nexport const useResetFormElement = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.resetFormElement);\n\nexport const useSubmitForm = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.submit);\n\nexport const useFormActionProp = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.formProps?.action);\n\nexport const useFormSubactionProp = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.formProps?.subaction);\n\nexport const useFormValues = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.getValues);\n","export const stringToPathArray = <T extends string>(\n path: T\n): (string | number)[] => {\n if (path.length === 0) return [];\n\n const match =\n path.match(/^\\[(.+?)\\](.*)$/) || path.match(/^\\.?([^\\.\\[\\]]+)(.*)$/);\n if (match) {\n const [_, key, rest] = match;\n return [/^\\d+$/.test(key) ? Number(key) : key, ...stringToPathArray(rest)];\n }\n return [path];\n};\n","import { stringToPathArray } from \"./stringToPathArray\";\n\nexport function setPath<T>(object: T, path: string, defaultValue: any) {\n return _setPathNormalized(object, stringToPathArray(path), defaultValue);\n}\n\nfunction _setPathNormalized(\n object: any,\n path: (string | number)[],\n value: any\n): any {\n const leadingSegments = path.slice(0, -1);\n const lastSegment = path[path.length - 1];\n\n let obj = object;\n for (let i = 0; i < leadingSegments.length; i++) {\n const segment = leadingSegments[i];\n if (obj[segment] === undefined) {\n const nextSegment = leadingSegments[i + 1] ?? lastSegment;\n obj[segment] = typeof nextSegment === \"number\" ? [] : {};\n }\n obj = obj[segment];\n }\n obj[lastSegment] = value;\n return object;\n}\n","import get from \"lodash.get\";\n\nexport const getPath = (object: any, path: string) => {\n return get(object, path);\n};\n","export const FORM_ID_FIELD = \"__rvfInternalFormId\" as const;\nexport const FORM_DEFAULTS_FIELD = \"__rvfInternalFormDefaults\" as const;\nexport const formDefaultValuesKey = (formId: string) =>\n `${FORM_DEFAULTS_FIELD}_${formId}`;\n","import { FetcherWithComponents } from \"@remix-run/react\";\nimport { createContext } from \"react\";\n\nexport type InternalFormContextValue = {\n formId: string | symbol;\n action?: string;\n subaction?: string;\n defaultValuesProp?: { [fieldName: string]: any };\n fetcher?: FetcherWithComponents<unknown>;\n};\n\nexport const InternalFormContext =\n createContext<InternalFormContextValue | null>(null);\n","/**\n * The purpose of this type is to simplify the logic\n * around data that needs to come from the server initially,\n * but from the internal state after hydration.\n */\nexport type Hydratable<T> = {\n hydrateTo: (data: T) => T;\n map: <U>(fn: (data: T) => U) => Hydratable<U>;\n};\n\nconst serverData = <T>(data: T): Hydratable<T> => ({\n hydrateTo: () => data,\n map: (fn) => serverData(fn(data)),\n});\n\nconst hydratedData = <T>(): Hydratable<T> => ({\n hydrateTo: (hydratedData: T) => hydratedData,\n map: <U>() => hydratedData<U>(),\n});\n\nconst from = <T>(data: T, hydrated: boolean): Hydratable<T> =>\n hydrated ? hydratedData<T>() : serverData<T>(data);\n\nexport const hydratable = {\n serverData,\n hydratedData,\n from,\n};\n","import { WritableDraft } from \"immer/dist/internal\";\nimport { getPath, setPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\nimport { create, GetState } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n Validator,\n} from \"../../validation/types\";\nimport { requestSubmit } from \"../logic/requestSubmit\";\nimport * as arrayUtil from \"./arrayUtil\";\nimport { InternalFormId } from \"./types\";\n\nexport type SyncedFormProps = {\n formId?: string;\n action?: string;\n subaction?: string;\n defaultValues: { [fieldName: string]: any };\n registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;\n validator: Validator<unknown>;\n};\n\nexport type SmartValidateOpts = {\n alwaysIncludeErrorsFromFields?: string[];\n};\n\nexport type FormStoreState = {\n forms: { [formId: InternalFormId]: FormState };\n form: (formId: InternalFormId) => FormState;\n registerForm: (formId: InternalFormId) => void;\n cleanupForm: (formId: InternalFormId) => void;\n};\n\nexport type FormState = {\n isHydrated: boolean;\n isSubmitting: boolean;\n hasBeenSubmitted: boolean;\n fieldErrors: FieldErrors;\n touchedFields: TouchedFields;\n formProps?: SyncedFormProps;\n formElement: HTMLFormElement | null;\n currentDefaultValues: Record<string, any>;\n\n isValid: () => boolean;\n startSubmit: () => void;\n endSubmit: () => void;\n setTouched: (field: string, touched: boolean) => void;\n setFieldError: (field: string, error: string) => void;\n setFieldErrors: (errors: FieldErrors) => void;\n clearFieldError: (field: string) => void;\n reset: () => void;\n syncFormProps: (props: SyncedFormProps) => void;\n setFormElement: (formElement: HTMLFormElement | null) => void;\n validate: () => Promise<ValidationResult<unknown>>;\n smartValidate: (\n opts?: SmartValidateOpts\n ) => Promise<ValidationResult<unknown>>;\n resetFormElement: () => void;\n submit: () => void;\n getValues: () => FormData;\n\n controlledFields: {\n values: { [fieldName: string]: any };\n refCounts: { [fieldName: string]: number };\n valueUpdatePromises: { [fieldName: string]: Promise<void> };\n valueUpdateResolvers: { [fieldName: string]: () => void };\n\n register: (fieldName: string) => void;\n unregister: (fieldName: string) => void;\n setValue: (fieldName: string, value: unknown) => void;\n kickoffValueUpdate: (fieldName: string) => void;\n getValue: (fieldName: string) => unknown;\n awaitValueUpdate: (fieldName: string) => Promise<void>;\n\n array: {\n push: (fieldName: string, value: unknown) => void;\n swap: (fieldName: string, indexA: number, indexB: number) => void;\n move: (fieldName: string, fromIndex: number, toIndex: number) => void;\n insert: (fieldName: string, index: number, value: unknown) => void;\n unshift: (fieldName: string, value: unknown) => void;\n remove: (fieldName: string, index: number) => void;\n pop: (fieldName: string) => void;\n replace: (fieldName: string, index: number, value: unknown) => void;\n };\n };\n};\n\nconst noOp = () => {};\nconst defaultFormState: FormState = {\n isHydrated: false,\n isSubmitting: false,\n hasBeenSubmitted: false,\n touchedFields: {},\n fieldErrors: {},\n formElement: null,\n isValid: () => true,\n startSubmit: noOp,\n endSubmit: noOp,\n setTouched: noOp,\n setFieldError: noOp,\n setFieldErrors: noOp,\n clearFieldError: noOp,\n currentDefaultValues: {},\n\n reset: () => noOp,\n syncFormProps: noOp,\n setFormElement: noOp,\n\n validate: async () => {\n throw new Error(\"Validate called before form was initialized.\");\n },\n\n smartValidate: async () => {\n throw new Error(\"Validate called before form was initialized.\");\n },\n\n submit: async () => {\n throw new Error(\"Submit called before form was initialized.\");\n },\n\n resetFormElement: noOp,\n getValues: () => new FormData(),\n\n controlledFields: {\n values: {},\n refCounts: {},\n valueUpdatePromises: {},\n valueUpdateResolvers: {},\n\n register: noOp,\n unregister: noOp,\n setValue: noOp,\n getValue: noOp,\n kickoffValueUpdate: noOp,\n awaitValueUpdate: async () => {\n throw new Error(\"AwaitValueUpdate called before form was initialized.\");\n },\n\n array: {\n push: noOp,\n swap: noOp,\n move: noOp,\n insert: noOp,\n unshift: noOp,\n remove: noOp,\n pop: noOp,\n replace: noOp,\n },\n },\n};\n\nconst createFormState = (\n set: (setter: (draft: WritableDraft<FormState>) => void) => void,\n get: GetState<FormState>\n): FormState => ({\n // It's not \"hydrated\" until the form props are synced\n isHydrated: false,\n isSubmitting: false,\n hasBeenSubmitted: false,\n touchedFields: {},\n fieldErrors: {},\n formElement: null,\n currentDefaultValues: {},\n\n isValid: () => Object.keys(get().fieldErrors).length === 0,\n startSubmit: () =>\n set((state) => {\n state.isSubmitting = true;\n state.hasBeenSubmitted = true;\n }),\n endSubmit: () =>\n set((state) => {\n state.isSubmitting = false;\n }),\n setTouched: (fieldName, touched) =>\n set((state) => {\n state.touchedFields[fieldName] = touched;\n }),\n setFieldError: (fieldName: string, error: string) =>\n set((state) => {\n state.fieldErrors[fieldName] = error;\n }),\n setFieldErrors: (errors: FieldErrors) =>\n set((state) => {\n state.fieldErrors = errors;\n }),\n clearFieldError: (fieldName: string) =>\n set((state) => {\n delete state.fieldErrors[fieldName];\n }),\n reset: () =>\n set((state) => {\n state.fieldErrors = {};\n state.touchedFields = {};\n state.hasBeenSubmitted = false;\n const nextDefaults = state.formProps?.defaultValues ?? {};\n state.controlledFields.values = nextDefaults;\n state.currentDefaultValues = nextDefaults;\n }),\n syncFormProps: (props: SyncedFormProps) =>\n set((state) => {\n if (!state.isHydrated) {\n state.controlledFields.values = props.defaultValues;\n state.currentDefaultValues = props.defaultValues;\n }\n\n state.formProps = props;\n state.isHydrated = true;\n }),\n setFormElement: (formElement: HTMLFormElement | null) => {\n // This gets called frequently, so we want to avoid calling set() every time\n // Or else we wind up with an infinite loop\n if (get().formElement === formElement) return;\n set((state) => {\n // weird type issue here\n // seems to be because formElement is a writable draft\n state.formElement = formElement as any;\n });\n },\n validate: async () => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n const validator = get().formProps?.validator;\n invariant(\n validator,\n \"Cannot find validator. This is probably a bug in remix-validated-form.\"\n );\n\n const result = await validator.validate(new FormData(formElement));\n if (result.error) get().setFieldErrors(result.error.fieldErrors);\n return result;\n },\n\n smartValidate: async ({ alwaysIncludeErrorsFromFields = [] } = {}) => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n const validator = get().formProps?.validator;\n invariant(\n validator,\n \"Cannot find validator. This is probably a bug in remix-validated-form.\"\n );\n\n await Promise.all(\n alwaysIncludeErrorsFromFields.map((field) =>\n get().controlledFields.awaitValueUpdate?.(field)\n )\n );\n\n const validationResult = await validator.validate(\n new FormData(formElement)\n );\n if (!validationResult.error) {\n // Only update the field errors if it hasn't changed\n const hadErrors = Object.keys(get().fieldErrors).length > 0;\n if (hadErrors) get().setFieldErrors({});\n return validationResult;\n }\n\n const {\n error: { fieldErrors },\n } = validationResult;\n const errorFields = new Set<string>();\n const incomingErrors = new Set<string>();\n const prevErrors = new Set<string>();\n\n Object.keys(fieldErrors).forEach((field) => {\n errorFields.add(field);\n incomingErrors.add(field);\n });\n\n Object.keys(get().fieldErrors).forEach((field) => {\n errorFields.add(field);\n prevErrors.add(field);\n });\n\n const fieldsToUpdate = new Set<string>();\n const fieldsToDelete = new Set<string>();\n\n errorFields.forEach((field) => {\n // If an error has been cleared, remove it.\n if (!incomingErrors.has(field)) {\n fieldsToDelete.add(field);\n return;\n }\n\n // If an error has changed, we should update it.\n if (prevErrors.has(field) && incomingErrors.has(field)) {\n // Only update if the error has changed to avoid unnecessary rerenders\n if (fieldErrors[field] !== get().fieldErrors[field])\n fieldsToUpdate.add(field);\n return;\n }\n\n // If the error is always included, then we should update it.\n if (alwaysIncludeErrorsFromFields.includes(field)) {\n fieldsToUpdate.add(field);\n return;\n }\n\n // If the error is new, then only update if the field has been touched\n // or if the form has been submitted\n if (!prevErrors.has(field)) {\n const fieldTouched = get().touchedFields[field];\n const formHasBeenSubmitted = get().hasBeenSubmitted;\n if (fieldTouched || formHasBeenSubmitted) fieldsToUpdate.add(field);\n return;\n }\n });\n\n if (fieldsToDelete.size === 0 && fieldsToUpdate.size === 0) {\n return { ...validationResult, error: { fieldErrors: get().fieldErrors } };\n }\n\n set((state) => {\n fieldsToDelete.forEach((field) => {\n delete state.fieldErrors[field];\n });\n\n fieldsToUpdate.forEach((field) => {\n state.fieldErrors[field] = fieldErrors[field];\n });\n });\n\n return { ...validationResult, error: { fieldErrors: get().fieldErrors } };\n },\n\n submit: () => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n requestSubmit(formElement);\n },\n\n getValues: () => new FormData(get().formElement ?? undefined),\n\n resetFormElement: () => get().formElement?.reset(),\n\n controlledFields: {\n values: {},\n refCounts: {},\n valueUpdatePromises: {},\n valueUpdateResolvers: {},\n\n register: (fieldName) => {\n set((state) => {\n const current = state.controlledFields.refCounts[fieldName] ?? 0;\n state.controlledFields.refCounts[fieldName] = current + 1;\n });\n },\n unregister: (fieldName) => {\n // For this helper in particular, we may run into a case where state is undefined.\n // When the whole form unmounts, the form state may be cleaned up before the fields are.\n if (get() === null || get() === undefined) return;\n set((state) => {\n const current = state.controlledFields.refCounts[fieldName] ?? 0;\n if (current > 1) {\n state.controlledFields.refCounts[fieldName] = current - 1;\n return;\n }\n\n const isNested = Object.keys(state.controlledFields.refCounts).some(\n (key) => fieldName.startsWith(key) && key !== fieldName\n );\n\n // When nested within a field array, we should leave resetting up to the field array\n if (!isNested) {\n setPath(\n state.controlledFields.values,\n fieldName,\n getPath(state.formProps?.defaultValues, fieldName)\n );\n setPath(\n state.currentDefaultValues,\n fieldName,\n getPath(state.formProps?.defaultValues, fieldName)\n );\n }\n\n delete state.controlledFields.refCounts[fieldName];\n });\n },\n getValue: (fieldName) => getPath(get().controlledFields.values, fieldName),\n setValue: (fieldName, value) => {\n set((state) => {\n setPath(state.controlledFields.values, fieldName, value);\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n kickoffValueUpdate: (fieldName) => {\n const clear = () =>\n set((state) => {\n delete state.controlledFields.valueUpdateResolvers[fieldName];\n delete state.controlledFields.valueUpdatePromises[fieldName];\n });\n set((state) => {\n const promise = new Promise<void>((resolve) => {\n state.controlledFields.valueUpdateResolvers[fieldName] = resolve;\n }).then(clear);\n state.controlledFields.valueUpdatePromises[fieldName] = promise;\n });\n },\n\n awaitValueUpdate: async (fieldName) => {\n await get().controlledFields.valueUpdatePromises[fieldName];\n },\n\n array: {\n push: (fieldName, item) => {\n set((state) => {\n arrayUtil\n .getArray(state.controlledFields.values, fieldName)\n .push(item);\n arrayUtil.getArray(state.currentDefaultValues, fieldName).push(item);\n // New item added to the end, no need to update touched or error\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n\n swap: (fieldName, indexA, indexB) => {\n set((state) => {\n arrayUtil.swap(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n indexA,\n indexB\n );\n arrayUtil.swap(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n indexA,\n indexB\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.swap(array, indexA, indexB)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.swap(array, indexA, indexB)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n\n move: (fieldName, from, to) => {\n set((state) => {\n arrayUtil.move(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n from,\n to\n );\n arrayUtil.move(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n from,\n to\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.move(array, from, to)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.move(array, from, to)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n insert: (fieldName, index, item) => {\n set((state) => {\n arrayUtil.insert(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index,\n item\n );\n arrayUtil.insert(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index,\n item\n );\n // Even though this is a new item, we need to push around other items.\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.insertEmpty(array, index)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.insertEmpty(array, index)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n remove: (fieldName, index) => {\n set((state) => {\n arrayUtil.remove(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index\n );\n arrayUtil.remove(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.remove(array, index)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.remove(array, index)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n pop: (fieldName) => {\n set((state) => {\n arrayUtil.getArray(state.controlledFields.values, fieldName).pop();\n arrayUtil.getArray(state.currentDefaultValues, fieldName).pop();\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n array.pop()\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n array.pop()\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n unshift: (fieldName, value) => {\n set((state) => {\n arrayUtil\n .getArray(state.controlledFields.values, fieldName)\n .unshift(value);\n arrayUtil\n .getArray(state.currentDefaultValues, fieldName)\n .unshift(value);\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.insertEmpty(array, 0)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.insertEmpty(array, 0)\n );\n });\n },\n replace: (fieldName, index, item) => {\n set((state) => {\n arrayUtil.replace(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index,\n item\n );\n arrayUtil.replace(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index,\n item\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.replace(array, index, item)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.replace(array, index, item)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n },\n },\n});\n\nexport const useRootFormStore = create<FormStoreState>()(\n immer((set, get) => ({\n forms: {},\n form: (formId) => {\n return get().forms[formId] ?? defaultFormState;\n },\n cleanupForm: (formId: InternalFormId) => {\n set((state) => {\n delete state.forms[formId];\n });\n },\n registerForm: (formId: InternalFormId) => {\n if (get().forms[formId]) return;\n set((state) => {\n state.forms[formId] = createFormState(\n (setter) => set((state) => setter(state.forms[formId])),\n () => get().forms[formId]\n ) as WritableDraft<FormState>;\n });\n },\n }))\n);\n","/**\n * Ponyfill of the HTMLFormElement.requestSubmit() method.\n * Based on polyfill from: https://github.com/javan/form-request-submit-polyfill/blob/main/form-request-submit-polyfill.js\n */\nexport const requestSubmit = (\n element: HTMLFormElement,\n submitter?: HTMLElement\n) => {\n // In vitest, let's test the polyfill.\n // Cypress will test the native implementation by nature of using chrome.\n if (\n typeof Object.getPrototypeOf(element).requestSubmit === \"function\" &&\n !import.meta.vitest\n ) {\n element.requestSubmit(submitter);\n return;\n }\n\n if (submitter) {\n validateSubmitter(element, submitter);\n submitter.click();\n return;\n }\n\n const dummySubmitter = document.createElement(\"input\");\n dummySubmitter.type = \"submit\";\n dummySubmitter.hidden = true;\n element.appendChild(dummySubmitter);\n dummySubmitter.click();\n element.removeChild(dummySubmitter);\n};\n\nfunction validateSubmitter(element: HTMLFormElement, submitter: HTMLElement) {\n // Should be redundant, but here for completeness\n const isHtmlElement = submitter instanceof HTMLElement;\n if (!isHtmlElement) {\n raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n }\n\n const hasSubmitType =\n \"type\" in submitter && (submitter as HTMLInputElement).type === \"submit\";\n if (!hasSubmitType)\n raise(TypeError, \"The specified element is not a submit button\");\n\n const isForCorrectForm =\n \"form\" in submitter && (submitter as HTMLInputElement).form === element;\n if (!isForCorrectForm)\n raise(\n DOMException,\n \"The specified element is not owned by this form element\",\n \"NotFoundError\"\n );\n}\n\ninterface ErrorConstructor {\n new (message: string, name?: string): Error;\n}\n\nfunction raise(\n errorConstructor: ErrorConstructor,\n message: string,\n name?: string\n): never {\n throw new errorConstructor(\n \"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\",\n name\n );\n}\n\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest;\n it(\"should validate the submitter\", () => {\n const form = document.createElement(\"form\");\n document.body.appendChild(form);\n\n const submitter = document.createElement(\"input\");\n expect(() => validateSubmitter(null as any, null as any)).toThrow();\n expect(() => validateSubmitter(form, null as any)).toThrow();\n expect(() => validateSubmitter(form, submitter)).toThrow();\n expect(() =>\n validateSubmitter(form, document.createElement(\"div\"))\n ).toThrow();\n\n submitter.type = \"submit\";\n expect(() => validateSubmitter(form, submitter)).toThrow();\n\n form.appendChild(submitter);\n expect(() => validateSubmitter(form, submitter)).not.toThrow();\n\n form.removeChild(submitter);\n expect(() => validateSubmitter(form, submitter)).toThrow();\n\n document.body.appendChild(submitter);\n form.id = \"test-form\";\n submitter.setAttribute(\"form\", \"test-form\");\n expect(() => validateSubmitter(form, submitter)).not.toThrow();\n\n const button = document.createElement(\"button\");\n button.type = \"submit\";\n form.appendChild(button);\n expect(() => validateSubmitter(form, button)).not.toThrow();\n });\n}\n","import { getPath, setPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\n\n////\n// All of these array helpers are written in a way that mutates the original array.\n// This is because we're working with immer.\n////\n\nexport const getArray = (values: any, field: string): unknown[] => {\n const value = getPath(values, field);\n if (value === undefined || value === null) {\n const newValue: unknown[] = [];\n setPath(values, field, newValue);\n return newValue;\n }\n invariant(\n Array.isArray(value),\n `FieldArray: defaultValue value for ${field} must be an array, null, or undefined`\n );\n return value;\n};\n\nexport const sparseCopy = <T>(array: T[]): T[] => array.slice();\n\nexport const swap = (array: unknown[], indexA: number, indexB: number) => {\n const itemA = array[indexA];\n const itemB = array[indexB];\n\n const hasItemA = indexA in array;\n const hasItemB = indexB in array;\n\n // If we're dealing with a sparse array (i.e. one of the indeces doesn't exist),\n // we should keep it sparse\n if (hasItemA) {\n array[indexB] = itemA;\n } else {\n delete array[indexB];\n }\n\n if (hasItemB) {\n array[indexA] = itemB;\n } else {\n delete array[indexA];\n }\n};\n\n// A splice that can handle sparse arrays\nfunction sparseSplice(\n array: unknown[],\n start: number,\n deleteCount?: number,\n item?: unknown\n) {\n // Inserting an item into an array won't behave as we need it to if the array isn't\n // at least as long as the start index. We can force the array to be long enough like this.\n if (array.length < start && item) {\n array.length = start;\n }\n\n // If we just pass item in, it'll be undefined and splice will delete the item.\n if (arguments.length === 4) return array.splice(start, deleteCount!, item);\n else if (arguments.length === 3) return array.splice(start, deleteCount);\n return array.splice(start);\n}\n\nexport const move = (array: unknown[], from: number, to: number) => {\n const [item] = sparseSplice(array, from, 1);\n sparseSplice(array, to, 0, item);\n};\n\nexport const insert = (array: unknown[], index: number, value: unknown) => {\n sparseSplice(array, index, 0, value);\n};\n\nexport const insertEmpty = (array: unknown[], index: number) => {\n const tail = sparseSplice(array, index);\n tail.forEach((item, i) => {\n sparseSplice(array, index + i + 1, 0, item);\n });\n};\n\nexport const remove = (array: unknown[], index: number) => {\n sparseSplice(array, index, 1);\n};\n\nexport const replace = (array: unknown[], index: number, value: unknown) => {\n sparseSplice(array, index, 1, value);\n};\n\n/**\n * The purpose of this helper is to make it easier to update `fieldErrors` and `touchedFields`.\n * We key those objects by full paths to the fields.\n * When we're doing array mutations, that makes it difficult to update those objects.\n */\nexport const mutateAsArray = (\n field: string,\n obj: Record<string, any>,\n mutate: (arr: any[]) => void\n) => {\n const beforeKeys = new Set<string>();\n const arr: any[] = [];\n\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith(field) && key !== field) {\n beforeKeys.add(key);\n setPath(arr, key.substring(field.length), value);\n }\n }\n\n mutate(arr);\n for (const key of beforeKeys) {\n delete obj[key];\n }\n\n const newKeys = getDeepArrayPaths(arr);\n for (const key of newKeys) {\n const val = getPath(arr, key);\n if (val !== undefined) {\n obj[`${field}${key}`] = val;\n }\n }\n};\n\nconst getDeepArrayPaths = (obj: any, basePath: string = \"\"): string[] => {\n // This only needs to handle arrays and plain objects\n // and we can assume the first call is always an array.\n\n if (Array.isArray(obj)) {\n return obj.flatMap((item, index) =>\n getDeepArrayPaths(item, `${basePath}[${index}]`)\n );\n }\n\n if (typeof obj === \"object\") {\n return Object.keys(obj).flatMap((key) =>\n getDeepArrayPaths(obj[key], `${basePath}.${key}`)\n );\n }\n\n return [basePath];\n};\n\nif (import.meta.vitest) {\n const { describe, expect, it } = import.meta.vitest;\n\n // Count the actual number of items in the array\n // instead of just getting the length.\n // This is useful for validating that sparse arrays are handled correctly.\n const countArrayItems = (arr: any[]) => {\n let count = 0;\n arr.forEach(() => count++);\n return count;\n };\n\n describe(\"getArray\", () => {\n it(\"shoud get a deeply nested array that can be mutated to update the nested value\", () => {\n const values = {\n d: [\n { foo: \"bar\", baz: [true, false] },\n { e: true, f: \"hi\" },\n ],\n };\n const result = getArray(values, \"d[0].baz\");\n const finalValues = {\n d: [\n { foo: \"bar\", baz: [true, false, true] },\n { e: true, f: \"hi\" },\n ],\n };\n\n expect(result).toEqual([true, false]);\n result.push(true);\n expect(values).toEqual(finalValues);\n });\n\n it(\"should return an empty array that can be mutated if result is null or undefined\", () => {\n const values = {};\n const result = getArray(values, \"a.foo[0].bar\");\n const finalValues = {\n a: { foo: [{ bar: [\"Bob ross\"] }] },\n };\n\n expect(result).toEqual([]);\n result.push(\"Bob ross\");\n expect(values).toEqual(finalValues);\n });\n\n it(\"should throw if the value is defined and not an array\", () => {\n const values = { foo: \"foo\" };\n expect(() => getArray(values, \"foo\")).toThrow();\n });\n });\n\n describe(\"swap\", () => {\n it(\"should swap two items\", () => {\n const array = [1, 2, 3];\n swap(array, 0, 1);\n expect(array).toEqual([2, 1, 3]);\n });\n\n it(\"should work for sparse arrays\", () => {\n // A bit of a sanity check for native array behavior\n const arr = [] as any[];\n arr[0] = true;\n swap(arr, 0, 2);\n\n expect(countArrayItems(arr)).toEqual(1);\n expect(0 in arr).toBe(false);\n expect(2 in arr).toBe(true);\n expect(arr[2]).toEqual(true);\n });\n });\n\n describe(\"move\", () => {\n it(\"should move an item to a new index\", () => {\n const array = [1, 2, 3];\n move(array, 0, 1);\n expect(array).toEqual([2, 1, 3]);\n });\n\n it(\"should work with sparse arrays\", () => {\n const array = [1];\n move(array, 0, 2);\n\n expect(countArrayItems(array)).toEqual(1);\n expect(array).toEqual([undefined, undefined, 1]);\n });\n });\n\n describe(\"insert\", () => {\n it(\"should insert an item at a new index\", () => {\n const array = [1, 2, 3];\n insert(array, 1, 4);\n expect(array).toEqual([1, 4, 2, 3]);\n });\n\n it(\"should be able to insert falsey values\", () => {\n const array = [1, 2, 3];\n insert(array, 1, null);\n expect(array).toEqual([1, null, 2, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n insert(array, 0, true);\n\n expect(countArrayItems(array)).toEqual(2);\n expect(array).toEqual([true, undefined, undefined, true]);\n });\n });\n\n describe(\"insertEmpty\", () => {\n it(\"should insert an empty item at a given index\", () => {\n const array = [1, 2, 3];\n insertEmpty(array, 1);\n // eslint-disable-next-line no-sparse-arrays\n expect(array).toStrictEqual([1, , 2, 3]);\n expect(array).not.toStrictEqual([1, undefined, 2, 3]);\n });\n\n it(\"should work with already sparse arrays\", () => {\n // eslint-disable-next-line no-sparse-arrays\n const array = [, , 1, , 2, , 3];\n insertEmpty(array, 3);\n // eslint-disable-next-line no-sparse-arrays\n expect(array).toStrictEqual([, , 1, , , 2, , 3]);\n expect(array).not.toStrictEqual([\n undefined,\n undefined,\n 1,\n undefined,\n undefined,\n 2,\n undefined,\n 3,\n ]);\n });\n });\n\n describe(\"remove\", () => {\n it(\"should remove an item at a given index\", () => {\n const array = [1, 2, 3];\n remove(array, 1);\n expect(array).toEqual([1, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n remove(array, 0);\n\n expect(countArrayItems(array)).toEqual(1);\n expect(array).toEqual([undefined, true]);\n });\n });\n\n describe(\"replace\", () => {\n it(\"should replace an item at a given index\", () => {\n const array = [1, 2, 3];\n replace(array, 1, 4);\n expect(array).toEqual([1, 4, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n replace(array, 0, true);\n expect(countArrayItems(array)).toEqual(2);\n expect(array).toEqual([true, undefined, true]);\n });\n });\n\n describe(\"mutateAsArray\", () => {\n it(\"should handle swap\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[2]\": \"bar\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"bar\",\n \"myField[2]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should swap sparse arrays\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[2]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should handle arrays with nested values\", () => {\n const values = {\n myField: \"something\",\n \"myField[0].title\": \"foo\",\n \"myField[0].note\": \"bar\",\n \"myField[2].title\": \"other\",\n \"myField[2].note\": \"other\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0].title\": \"other\",\n \"myField[0].note\": \"other\",\n \"myField[2].title\": \"foo\",\n \"myField[2].note\": \"bar\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should handle move\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"bar\",\n \"myField[2]\": \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n move(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"bar\",\n \"myField[1]\": \"baz\",\n \"myField[2]\": \"foo\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should not create keys for `undefined`\", () => {\n const values = {\n \"myField[0]\": \"foo\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n arr.unshift(undefined);\n });\n expect(Object.keys(values)).toHaveLength(1);\n expect(values).toEqual({\n \"myField[1]\": \"foo\",\n });\n });\n\n it(\"should handle remove\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"bar\",\n \"myField[2]\": \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n remove(arr, 1);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"baz\",\n \"otherField[0]\": \"something else\",\n });\n expect(\"myField[2]\" in values).toBe(false);\n });\n });\n\n describe(\"getDeepArrayPaths\", () => {\n it(\"should return all paths recursively\", () => {\n const obj = [\n true,\n true,\n [true, true],\n { foo: true, bar: { baz: true, test: [true] } },\n ];\n\n expect(getDeepArrayPaths(obj, \"myField\")).toEqual([\n \"myField[0]\",\n \"myField[1]\",\n \"myField[2][0]\",\n \"myField[2][1]\",\n \"myField[3].foo\",\n \"myField[3].bar.baz\",\n \"myField[3].bar.test[0]\",\n ]);\n });\n });\n}\n","import { FormState, useRootFormStore } from \"./createFormStore\";\nimport { InternalFormId } from \"./types\";\n\nexport const useFormStore = <T>(\n formId: InternalFormId,\n selector: (state: FormState) => T\n) => {\n return useRootFormStore((state) => selector(state.form(formId)));\n};\n","import { useCallback, useEffect } from \"react\";\nimport { InternalFormContextValue } from \"../formContext\";\nimport { useFieldDefaultValue } from \"../hooks\";\nimport { useFormStore } from \"./storeHooks\";\nimport { InternalFormId } from \"./types\";\n\nexport const useControlledFieldValue = (\n context: InternalFormContextValue,\n field: string\n) => {\n const value = useFormStore(context.formId, (state) =>\n state.controlledFields.getValue(field)\n );\n const isFormHydrated = useFormStore(\n context.formId,\n (state) => state.isHydrated\n );\n const defaultValue = useFieldDefaultValue(field, context);\n\n return isFormHydrated ? value : defaultValue;\n};\n\nexport const useRegisterControlledField = (\n context: InternalFormContextValue,\n field: string\n) => {\n const resolveUpdate = useFormStore(\n context.formId,\n (state) => state.controlledFields.valueUpdateResolvers[field]\n );\n useEffect(() => {\n resolveUpdate?.();\n }, [resolveUpdate]);\n\n const register = useFormStore(\n context.formId,\n (state) => state.controlledFields.register\n );\n const unregister = useFormStore(\n context.formId,\n (state) => state.controlledFields.unregister\n );\n useEffect(() => {\n register(field);\n return () => unregister(field);\n }, [context.formId, field, register, unregister]);\n};\n\nexport const useControllableValue = (\n context: InternalFormContextValue,\n field: string\n) => {\n useRegisterControlledField(context, field);\n\n const setControlledFieldValue = useFormStore(\n context.formId,\n (state) => state.controlledFields.setValue\n );\n const setValue = useCallback(\n (value: unknown) => setControlledFieldValue(field, value),\n [field, setControlledFieldValue]\n );\n\n const value = useControlledFieldValue(context, field);\n\n return [value, setValue] as const;\n};\n\nexport const useUpdateControllableValue = (formId: InternalFormId) => {\n const setValue = useFormStore(\n formId,\n (state) => state.controlledFields.setValue\n );\n return useCallback(\n (field: string, value: unknown) => setValue(field, value),\n [setValue]\n );\n};\n\nexport const useAwaitValue = (formId: InternalFormId) => {\n const awaitValue = useFormStore(\n formId,\n (state) => state.controlledFields.awaitValueUpdate\n );\n return useCallback((field: string) => awaitValue(field), [awaitValue]);\n};\n","import { json } from \"@remix-run/server-runtime\";\nimport {\n formDefaultValuesKey,\n FORM_DEFAULTS_FIELD,\n} from \"./internal/constants\";\nimport {\n ValidatorError,\n ValidationErrorResponseData,\n} from \"./validation/types\";\n\n/**\n * Takes the errors from a `Validator` and returns a `Response`.\n * When you return this from your action, `ValidatedForm` on the frontend will automatically\n * display the errors on the correct fields on the correct form.\n *\n * You can also provide a second argument to `validationError`\n * to specify how to repopulate the form when JS is disabled.\n *\n * @example\n * ```ts\n * const result = validator.validate(await request.formData());\n * if (result.error) return validationError(result.error, result.submittedData);\n * ```\n */\nexport function validationError(\n error: ValidatorError,\n repopulateFields?: unknown,\n init?: ResponseInit\n) {\n return json<ValidationErrorResponseData>(\n {\n fieldErrors: error.fieldErrors,\n subaction: error.subaction,\n repopulateFields,\n formId: error.formId,\n },\n { status: 422, ...init }\n );\n}\n\nexport type FormDefaults = {\n [formDefaultsKey: `${typeof FORM_DEFAULTS_FIELD}_${string}`]: any;\n};\n\n// FIXME: Remove after https://github.com/egoist/tsup/issues/813 is fixed\nexport type internal_FORM_DEFAULTS_FIELD = typeof FORM_DEFAULTS_FIELD;\n\nexport const setFormDefaults = <DataType = any>(\n formId: string,\n defaultValues: Partial<DataType>\n): FormDefaults => ({\n [formDefaultValuesKey(formId)]: defaultValues,\n});\n","import {\n FetcherWithComponents,\n Form as RemixForm,\n FormMethod,\n useSubmit,\n SubmitOptions,\n FormEncType,\n} from \"@remix-run/react\";\nimport React, {\n ComponentProps,\n FormEvent,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport * as R from \"remeda\";\nimport { useIsSubmitting, useIsValid } from \"./hooks\";\nimport { FORM_ID_FIELD } from \"./internal/constants\";\nimport {\n InternalFormContext,\n InternalFormContextValue,\n} from \"./internal/formContext\";\nimport {\n useDefaultValuesFromLoader,\n useErrorResponseForForm,\n useHasActiveFormSubmit,\n useSetFieldErrors,\n} from \"./internal/hooks\";\nimport { MultiValueMap, useMultiValueMap } from \"./internal/MultiValueMap\";\nimport {\n SyncedFormProps,\n useRootFormStore,\n} from \"./internal/state/createFormStore\";\nimport { useFormStore } from \"./internal/state/storeHooks\";\nimport { useSubmitComplete } from \"./internal/submissionCallbacks\";\nimport {\n mergeRefs,\n useDeepEqualsMemo,\n useIsomorphicLayoutEffect as useLayoutEffect,\n} from \"./internal/util\";\nimport { FieldErrors, Validator } from \"./validation/types\";\n\ntype DeepPartial<T> = T extends object\n ? {\n [P in keyof T]?: DeepPartial<T[P]>;\n }\n : T;\n\ntype SubactionData<\n DataType,\n Subaction extends string | undefined\n> = DataType & { subaction: Subaction };\n\n// Not all validation libraries support encoding a literal value in the schema type (e.g. yup).\n// This condition here allows us to provide strictness for users who are using a validation library that does support it,\n// but also allows us to support users who are using a validation library that doesn't support it.\ntype DataForSubaction<\n DataType,\n Subaction extends string | undefined\n> = Subaction extends string // Not all validation libraries support encoding a literal value in the schema type.\n ? SubactionData<DataType, Subaction> extends undefined\n ? DataType\n : SubactionData<DataType, Subaction>\n : DataType;\n\nexport type FormProps<DataType, Subaction extends string | undefined> = {\n /**\n * A `Validator` object that describes how to validate the form.\n */\n validator: Validator<DataType>;\n /**\n * A submit callback that gets called when the form is submitted\n * after all validations have been run.\n */\n onSubmit?: (\n data: DataForSubaction<DataType, Subaction>,\n event: React.FormEvent<HTMLFormElement>\n ) => void | Promise<void>;\n /**\n * Allows you to provide a `fetcher` from Remix's `useFetcher` hook.\n * The form will use the fetcher for loading states, action data, etc\n * instead of the default form action.\n */\n fetcher?: FetcherWithComponents<any>;\n /**\n * Accepts an object of default values for the form\n * that will automatically be propagated to the form fields via `useField`.\n */\n defaultValues?: DeepPartial<DataForSubaction<DataType, Subaction>>;\n /**\n * A ref to the form element.\n */\n formRef?: React.RefObject<HTMLFormElement>;\n /**\n * An optional sub-action to use for the form.\n * Setting a value here will cause the form to be submitted with an extra `subaction` value.\n * This can be useful when there are multiple forms on the screen handled by the same action.\n */\n subaction?: Subaction;\n /**\n * Reset the form to the default values after the form has been successfully submitted.\n * This is useful if you want to submit the same form multiple times,\n * and don't redirect in-between submissions.\n */\n resetAfterSubmit?: boolean;\n /**\n * Normally, the first invalid input will be focused when the validation fails on form submit.\n * Set this to `false` to disable this behavior.\n */\n disableFocusOnError?: boolean;\n} & Omit<ComponentProps<typeof RemixForm>, \"onSubmit\">;\n\nconst getDataFromForm = (el: HTMLFormElement) => new FormData(el);\n\nfunction nonNull<T>(value: T | null | undefined): value is T {\n return value !== null;\n}\n\nconst focusFirstInvalidInput = (\n fieldErrors: FieldErrors,\n customFocusHandlers: MultiValueMap<string, () => void>,\n formElement: HTMLFormElement\n) => {\n const namesInOrder = [...formElement.elements]\n .map((el) => {\n const input = el instanceof RadioNodeList ? el[0] : el;\n if (input instanceof HTMLElement && \"name\" in input)\n return (input as any).name;\n return null;\n })\n .filter(nonNull)\n .filter((name) => name in fieldErrors);\n const uniqueNamesInOrder = R.uniq(namesInOrder);\n\n for (const fieldName of uniqueNamesInOrder) {\n if (customFocusHandlers.has(fieldName)) {\n customFocusHandlers.getAll(fieldName).forEach((handler) => {\n handler();\n });\n break;\n }\n\n const elem = formElement.elements.namedItem(fieldName);\n if (!elem) continue;\n\n if (elem instanceof RadioNodeList) {\n const selectedRadio =\n [...elem]\n .filter(\n (item): item is HTMLInputElement => item instanceof HTMLInputElement\n )\n .find((item) => item.value === elem.value) ?? elem[0];\n if (selectedRadio && selectedRadio instanceof HTMLInputElement) {\n selectedRadio.focus();\n break;\n }\n }\n\n if (elem instanceof HTMLElement) {\n if (elem instanceof HTMLInputElement && elem.type === \"hidden\") {\n continue;\n }\n\n elem.focus();\n break;\n }\n }\n};\n\nconst useFormId = (providedId?: string): string | symbol => {\n // We can use a `Symbol` here because we only use it after hydration\n const [symbolId] = useState(() => Symbol(\"remix-validated-form-id\"));\n return providedId ?? symbolId;\n};\n\n/**\n * Use a component to access the state so we don't cause\n * any extra rerenders of the whole form.\n */\nconst FormResetter = ({\n resetAfterSubmit,\n formRef,\n}: {\n resetAfterSubmit: boolean;\n formRef: RefObject<HTMLFormElement>;\n}) => {\n const isSubmitting = useIsSubmitting();\n const isValid = useIsValid();\n useSubmitComplete(isSubmitting, () => {\n if (isValid && resetAfterSubmit) {\n formRef.current?.reset();\n }\n });\n return null;\n};\n\nfunction formEventProxy<T extends object>(event: T): T {\n let defaultPrevented = false;\n return new Proxy(event, {\n get: (target, prop) => {\n if (prop === \"preventDefault\") {\n return () => {\n defaultPrevented = true;\n };\n }\n\n if (prop === \"defaultPrevented\") {\n return defaultPrevented;\n }\n\n return target[prop as keyof T];\n },\n }) as T;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n SubmitEvent,\n Event,\n HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * The primary form component of `remix-validated-form`.\n */\nexport function ValidatedForm<\n DataType extends { [fieldName: string]: any },\n Subaction extends string | undefined\n>({\n validator,\n onSubmit,\n children,\n fetcher,\n action,\n defaultValues: unMemoizedDefaults,\n formRef: formRefProp,\n onReset,\n subaction,\n resetAfterSubmit = false,\n disableFocusOnError,\n method,\n replace,\n id,\n preventScrollReset,\n relative,\n encType,\n ...rest\n}: FormProps<DataType, Subaction>) {\n const formId = useFormId(id);\n const providedDefaultValues = useDeepEqualsMemo(unMemoizedDefaults);\n const contextValue = useMemo<InternalFormContextValue>(\n () => ({\n formId,\n action,\n subaction,\n defaultValuesProp: providedDefaultValues,\n fetcher,\n }),\n [action, fetcher, formId, providedDefaultValues, subaction]\n );\n const backendError = useErrorResponseForForm(contextValue);\n const backendDefaultValues = useDefaultValuesFromLoader(contextValue);\n const hasActiveSubmission = useHasActiveFormSubmit(contextValue);\n const formRef = useRef<HTMLFormElement>(null);\n const Form = fetcher?.Form ?? RemixForm;\n\n const submit = useSubmit();\n const setFieldErrors = useSetFieldErrors(formId);\n const setFieldError = useFormStore(formId, (state) => state.setFieldError);\n const reset = useFormStore(formId, (state) => state.reset);\n const startSubmit = useFormStore(formId, (state) => state.startSubmit);\n const endSubmit = useFormStore(formId, (state) => state.endSubmit);\n const syncFormProps = useFormStore(formId, (state) => state.syncFormProps);\n const setFormElementInState = useFormStore(\n formId,\n (state) => state.setFormElement\n );\n const cleanupForm = useRootFormStore((state) => state.cleanupForm);\n const registerForm = useRootFormStore((state) => state.registerForm);\n\n const customFocusHandlers = useMultiValueMap<string, () => void>();\n const registerReceiveFocus: SyncedFormProps[\"registerReceiveFocus\"] =\n useCallback(\n (fieldName, handler) => {\n customFocusHandlers().add(fieldName, handler);\n return () => {\n customFocusHandlers().remove(fieldName, handler);\n };\n },\n [customFocusHandlers]\n );\n\n // TODO: all these hooks running at startup cause extra, unnecessary renders\n // There must be a nice way to avoid this.\n useLayoutEffect(() => {\n registerForm(formId);\n return () => cleanupForm(formId);\n }, [cleanupForm, formId, registerForm]);\n\n useLayoutEffect(() => {\n syncFormProps({\n action,\n defaultValues: providedDefaultValues ?? backendDefaultValues ?? {},\n subaction,\n registerReceiveFocus,\n validator,\n });\n }, [\n action,\n providedDefaultValues,\n registerReceiveFocus,\n subaction,\n syncFormProps,\n backendDefaultValues,\n validator,\n ]);\n\n useLayoutEffect(() => {\n setFormElementInState(formRef.current);\n }, [setFormElementInState]);\n\n useEffect(() => {\n setFieldErrors(backendError?.fieldErrors ?? {});\n if (!disableFocusOnError && backendError?.fieldErrors) {\n focusFirstInvalidInput(\n backendError.fieldErrors,\n customFocusHandlers(),\n formRef.current!\n );\n }\n }, [\n backendError?.fieldErrors,\n customFocusHandlers,\n disableFocusOnError,\n setFieldErrors,\n setFieldError,\n ]);\n\n useSubmitComplete(hasActiveSubmission, () => {\n endSubmit();\n });\n\n const handleSubmit = async (\n e: FormEvent<HTMLFormElement>,\n target: typeof e.currentTarget,\n nativeEvent: HTMLSubmitEvent[\"nativeEvent\"]\n ) => {\n startSubmit();\n const submitter = nativeEvent.submitter as HTMLFormSubmitter | null;\n const formMethod = (submitter?.formMethod as FormMethod) || method;\n const formData = getDataFromForm(target);\n if (submitter?.name) {\n formData.append(submitter.name, submitter.value);\n }\n\n const result = await validator.validate(formData);\n if (result.error) {\n setFieldErrors(result.error.fieldErrors);\n endSubmit();\n if (!disableFocusOnError) {\n focusFirstInvalidInput(\n result.error.fieldErrors,\n customFocusHandlers(),\n formRef.current!\n );\n }\n } else {\n setFieldErrors({});\n const eventProxy = formEventProxy(e);\n await onSubmit?.(result.data as any, eventProxy);\n if (eventProxy.defaultPrevented) {\n endSubmit();\n return;\n }\n\n const opts: SubmitOptions = {\n method: formMethod,\n replace,\n preventScrollReset,\n relative,\n action,\n encType: encType as FormEncType | undefined,\n };\n\n // We deviate from the Remix code here a bit because of our async submit.\n // In Remix's `FormImpl`, they use `event.currentTarget` to get the form,\n // but we already have the form in `formRef.current` so we can just use that.\n // If we use `event.currentTarget` here, it will break because `currentTarget`\n // will have changed since the start of the submission.\n if (fetcher) fetcher.submit(formData, opts);\n else submit(formData, opts);\n }\n };\n\n return (\n <Form\n ref={mergeRefs([formRef, formRefProp])}\n {...rest}\n id={id}\n action={action}\n method={method}\n encType={encType}\n replace={replace}\n preventScrollReset={preventScrollReset}\n relative={relative}\n onSubmit={(e) => {\n e.preventDefault();\n handleSubmit(\n e,\n e.currentTarget,\n (e as unknown as HTMLSubmitEvent).nativeEvent\n );\n }}\n onReset={(event) => {\n onReset?.(event);\n if (event.defaultPrevented) return;\n reset();\n }}\n >\n <InternalFormContext.Provider value={contextValue}>\n <>\n <FormResetter formRef={formRef} resetAfterSubmit={resetAfterSubmit} />\n {subaction && (\n <input type=\"hidden\" value={subaction} name=\"subaction\" />\n )}\n {id && <input type=\"hidden\" value={id} name={FORM_ID_FIELD} />}\n {children}\n </>\n </InternalFormContext.Provider>\n </Form>\n );\n}\n","import { useCallback, useRef } from \"react\";\n\nexport class MultiValueMap<Key, Value> {\n private dict: Map<Key, Value[]> = new Map();\n\n add = (key: Key, value: Value) => {\n if (this.dict.has(key)) {\n this.dict.get(key)!.push(value);\n } else {\n this.dict.set(key, [value]);\n }\n };\n\n delete = (key: Key) => {\n this.dict.delete(key);\n };\n\n remove = (key: Key, value: Value) => {\n if (!this.dict.has(key)) return;\n const array = this.dict.get(key)!;\n const index = array.indexOf(value);\n if (index !== -1) array.splice(index, 1);\n if (array.length === 0) this.dict.delete(key);\n };\n\n getAll = (key: Key): Value[] => {\n return this.dict.get(key) ?? [];\n };\n\n entries = (): IterableIterator<[Key, Value[]]> => this.dict.entries();\n\n values = (): IterableIterator<Value[]> => this.dict.values();\n\n has = (key: Key): boolean => this.dict.has(key);\n}\n\nexport const useMultiValueMap = <Key, Value>() => {\n const ref = useRef<MultiValueMap<Key, Value> | null>(null);\n return useCallback(() => {\n if (ref.current) return ref.current;\n ref.current = new MultiValueMap();\n return ref.current;\n }, []);\n};\n","import { useEffect, useRef } from \"react\";\n\nexport function useSubmitComplete(isSubmitting: boolean, callback: () => void) {\n const isPending = useRef(false);\n useEffect(() => {\n if (isSubmitting) {\n isPending.current = true;\n }\n\n if (!isSubmitting && isPending.current) {\n isPending.current = false;\n callback();\n }\n });\n}\n","import type React from \"react\";\nimport { useEffect, useLayoutEffect, useRef } from \"react\";\nimport * as R from \"remeda\";\n\nexport const omit = (obj: any, ...keys: string[]) => {\n const result = { ...obj };\n for (const key of keys) {\n delete result[key];\n }\n return result;\n};\n\nexport const mergeRefs = <T = any>(\n refs: Array<React.MutableRefObject<T> | React.LegacyRef<T> | undefined>\n): React.RefCallback<T> => {\n return (value: T) => {\n refs.filter(Boolean).forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n};\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\nexport const useDeepEqualsMemo = <T>(item: T): T => {\n const ref = useRef<T>(item);\n const areEqual = ref.current === item || R.equals(ref.current, item);\n useEffect(() => {\n if (!areEqual) {\n ref.current = item;\n }\n });\n return areEqual ? ref.current : item;\n};\n","import * as R from \"remeda\";\nimport { CreateValidatorArg, GenericObject, Validator } from \"..\";\nimport { FORM_ID_FIELD } from \"../internal/constants\";\nimport { objectFromPathEntries } from \"../internal/flatten\";\n\nconst preprocessFormData = (data: GenericObject | FormData): GenericObject => {\n // A slightly janky way of determining if the data is a FormData object\n // since node doesn't really have FormData\n if (\"entries\" in data && typeof data.entries === \"function\")\n return objectFromPathEntries([...data.entries()]);\n return objectFromPathEntries(Object.entries(data));\n};\n\nconst omitInternalFields = (data: GenericObject): GenericObject =>\n R.omit(data, [FORM_ID_FIELD]);\n\n/**\n * Used to create a validator for a form.\n * It provides built-in handling for unflattening nested objects and\n * extracting the values from FormData.\n */\nexport function createValidator<T>(\n validator: CreateValidatorArg<T>\n): Validator<T> {\n return {\n validate: async (value) => {\n const data = preprocessFormData(value);\n const result = await validator.validate(omitInternalFields(data));\n\n if (result.error) {\n return {\n data: undefined,\n error: {\n fieldErrors: result.error,\n subaction: data.subaction,\n formId: data[FORM_ID_FIELD],\n },\n submittedData: data,\n formId: data[FORM_ID_FIELD],\n };\n }\n\n return {\n data: result.data,\n error: undefined,\n submittedData: data,\n formId: data[FORM_ID_FIELD],\n };\n },\n validateField: (data: GenericObject | FormData, field: string) =>\n validator.validateField(preprocessFormData(data), field),\n };\n}\n","import { setPath } from \"set-get\";\nimport { MultiValueMap } from \"./MultiValueMap\";\n\nexport const objectFromPathEntries = (entries: [string, any][]) => {\n const map = new MultiValueMap<string, any>();\n entries.forEach(([key, value]) => map.add(key, value));\n return [...map.entries()].reduce(\n (acc, [key, value]) =>\n setPath(acc, key, value.length === 1 ? value[0] : value),\n {} as Record<string, any>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useInternalFormContext,\n useRegisterReceiveFocus,\n} from \"./internal/hooks\";\nimport { useFormHelpers, useFormState } from \"./unreleased/formStateHooks\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n} from \"./validation/types\";\n\nexport type FormContextValue = {\n /**\n * All the errors in all the fields in the form.\n */\n fieldErrors: FieldErrors;\n /**\n * Clear the errors of the specified fields.\n */\n clearError: (...names: string[]) => void;\n /**\n * Validate the specified field.\n */\n validateField: (fieldName: string) => Promise<string | null>;\n /**\n * The `action` prop of the form.\n */\n action?: string;\n /**\n * The `subaction` prop of the form.\n */\n subaction?: string;\n /**\n * Whether or not the form is submitting.\n */\n isSubmitting: boolean;\n /**\n * Whether or not a submission has been attempted.\n * This is true once the form has been submitted, even if there were validation errors.\n * Resets to false when the form is reset.\n */\n hasBeenSubmitted: boolean;\n /**\n * Whether or not the form is valid.\n */\n isValid: boolean;\n /**\n * The default values of the form.\n */\n defaultValues?: { [fieldName: string]: any };\n /**\n * Register a custom focus handler to be used when\n * the field needs to receive focus due to a validation error.\n */\n registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;\n /**\n * Any fields that have been touched by the user.\n */\n touchedFields: TouchedFields;\n /**\n * Change the touched state of the specified field.\n */\n setFieldTouched: (fieldName: string, touched: boolean) => void;\n /**\n * Validate the whole form and populate any errors.\n */\n validate: () => Promise<ValidationResult<unknown>>;\n /**\n * Clears all errors on the form.\n */\n clearAllErrors: () => void;\n /**\n * Resets the form.\n *\n * _Note_: The equivalent behavior can be achieved by calling formElement.reset()\n * or clicking a button element with `type=\"reset\"`.\n */\n reset: () => void;\n /**\n * Submits the form, running all validations first.\n *\n * _Note_: This is equivalent to clicking a button element with `type=\"submit\"` or calling formElement.submit().\n */\n submit: () => void;\n /**\n * Returns the current form values as FormData\n */\n getValues: () => FormData;\n};\n\n/**\n * Provides access to some of the internal state of the form.\n */\nexport const useFormContext = (formId?: string): FormContextValue => {\n // Try to access context so we get our error specific to this hook if it's not there\n const context = useInternalFormContext(formId, \"useFormContext\");\n const state = useFormState(formId);\n const {\n clearError: internalClearError,\n setTouched,\n validateField,\n clearAllErrors,\n validate,\n reset,\n submit,\n getValues,\n } = useFormHelpers(formId);\n\n const registerReceiveFocus = useRegisterReceiveFocus(context.formId);\n\n const clearError = useCallback(\n (...names: string[]) => {\n names.forEach((name) => {\n internalClearError(name);\n });\n },\n [internalClearError]\n );\n\n return useMemo(\n () => ({\n ...state,\n setFieldTouched: setTouched,\n validateField,\n clearError,\n registerReceiveFocus,\n clearAllErrors,\n validate,\n reset,\n submit,\n getValues,\n }),\n [\n clearAllErrors,\n clearError,\n registerReceiveFocus,\n reset,\n setTouched,\n state,\n submit,\n validate,\n validateField,\n getValues,\n ]\n );\n};\n","import { useMemo } from \"react\";\nimport {} from \"../internal/getInputProps\";\nimport {\n useInternalFormContext,\n useClearError,\n useSetTouched,\n useDefaultValuesForForm,\n useFieldErrorsForForm,\n useInternalIsSubmitting,\n useInternalHasBeenSubmitted,\n useTouchedFields,\n useInternalIsValid,\n useFieldErrors,\n useValidate,\n useSetFieldErrors,\n useResetFormElement,\n useSyncedDefaultValues,\n useFormActionProp,\n useFormSubactionProp,\n useSubmitForm,\n useFormValues,\n useSmartValidate,\n} from \"../internal/hooks\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n} from \"../validation/types\";\n\nexport type FormState = {\n fieldErrors: FieldErrors;\n isSubmitting: boolean;\n hasBeenSubmitted: boolean;\n touchedFields: TouchedFields;\n defaultValues: { [fieldName: string]: any };\n action?: string;\n subaction?: string;\n isValid: boolean;\n};\n\n/**\n * Returns information about the form.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useFormState = (formId?: string): FormState => {\n const formContext = useInternalFormContext(formId, \"useFormState\");\n const isSubmitting = useInternalIsSubmitting(formContext.formId);\n const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);\n const touchedFields = useTouchedFields(formContext.formId);\n const isValid = useInternalIsValid(formContext.formId);\n const action = useFormActionProp(formContext.formId);\n const subaction = useFormSubactionProp(formContext.formId);\n\n const syncedDefaultValues = useSyncedDefaultValues(formContext.formId);\n const defaultValuesToUse = useDefaultValuesForForm(formContext);\n const hydratedDefaultValues =\n defaultValuesToUse.hydrateTo(syncedDefaultValues);\n\n const fieldErrorsFromState = useFieldErrors(formContext.formId);\n const fieldErrorsToUse = useFieldErrorsForForm(formContext);\n const hydratedFieldErrors = fieldErrorsToUse.hydrateTo(fieldErrorsFromState);\n\n return useMemo(\n () => ({\n action,\n subaction,\n defaultValues: hydratedDefaultValues,\n fieldErrors: hydratedFieldErrors ?? {},\n hasBeenSubmitted,\n isSubmitting,\n touchedFields,\n isValid,\n }),\n [\n action,\n hasBeenSubmitted,\n hydratedDefaultValues,\n hydratedFieldErrors,\n isSubmitting,\n isValid,\n subaction,\n touchedFields,\n ]\n );\n};\n\nexport type FormHelpers = {\n /**\n * Clear the error of the specified field.\n */\n clearError: (fieldName: string) => void;\n /**\n * Validate the specified field.\n */\n validateField: (fieldName: string) => Promise<string | null>;\n /**\n * Change the touched state of the specified field.\n */\n setTouched: (fieldName: string, touched: boolean) => void;\n /**\n * Validate the whole form and populate any errors.\n */\n validate: () => Promise<ValidationResult<unknown>>;\n /**\n * Clears all errors on the form.\n */\n clearAllErrors: () => void;\n /**\n * Resets the form.\n *\n * _Note_: The equivalent behavior can be achieved by calling formElement.reset()\n * or clicking a button element with `type=\"reset\"`.\n */\n reset: () => void;\n /**\n * Submits the form, running all validations first.\n *\n * _Note_: This is equivalent to clicking a button element with `type=\"submit\"` or calling formElement.submit().\n */\n submit: () => void;\n /**\n * Returns the current form values as FormData\n */\n getValues: () => FormData;\n};\n\n/**\n * Returns helpers that can be used to update the form state.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useFormHelpers = (formId?: string): FormHelpers => {\n const formContext = useInternalFormContext(formId, \"useFormHelpers\");\n const setTouched = useSetTouched(formContext);\n const validateField = useSmartValidate(formContext.formId);\n const validate = useValidate(formContext.formId);\n const clearError = useClearError(formContext);\n const setFieldErrors = useSetFieldErrors(formContext.formId);\n const reset = useResetFormElement(formContext.formId);\n const submit = useSubmitForm(formContext.formId);\n const getValues = useFormValues(formContext.formId);\n return useMemo(\n () => ({\n setTouched,\n validateField: async (fieldName: string) => {\n const res = await validateField({\n alwaysIncludeErrorsFromFields: [fieldName],\n });\n return res.error?.fieldErrors[fieldName] ?? null;\n },\n clearError,\n validate,\n clearAllErrors: () => setFieldErrors({}),\n reset,\n submit,\n getValues,\n }),\n [\n clearError,\n reset,\n setFieldErrors,\n setTouched,\n submit,\n validate,\n validateField,\n getValues,\n ]\n );\n};\n","import { nanoid } from \"nanoid\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useCallback } from \"react\";\nimport invariant from \"tiny-invariant\";\nimport { InternalFormContextValue } from \"../formContext\";\nimport {\n useFieldDefaultValue,\n useFieldError,\n useInternalFormContext,\n useInternalHasBeenSubmitted,\n useSmartValidate,\n} from \"../hooks\";\nimport * as arrayUtil from \"./arrayUtil\";\nimport { useRegisterControlledField } from \"./controlledFields\";\nimport { useFormStore } from \"./storeHooks\";\n\nexport type FieldArrayValidationBehavior = \"onChange\" | \"onSubmit\";\n\nexport type FieldArrayValidationBehaviorOptions = {\n initial: FieldArrayValidationBehavior;\n whenSubmitted: FieldArrayValidationBehavior;\n};\n\nexport type FieldArrayItem<T> = {\n /**\n * The default value of the item.\n * This does not update as the field is changed by the user.\n */\n defaultValue: T;\n /**\n * A unique key for the item.\n * Use this as the key prop when rendering the item.\n */\n key: string;\n};\n\nconst useInternalFieldArray = (\n context: InternalFormContextValue,\n field: string,\n validationBehavior?: Partial<FieldArrayValidationBehaviorOptions>\n) => {\n const value = useFieldDefaultValue(field, context);\n useRegisterControlledField(context, field);\n const hasBeenSubmitted = useInternalHasBeenSubmitted(context.formId);\n const validateField = useSmartValidate(context.formId);\n const error = useFieldError(field, context);\n\n const resolvedValidationBehavior: FieldArrayValidationBehaviorOptions = {\n initial: \"onSubmit\",\n whenSubmitted: \"onChange\",\n ...validationBehavior,\n };\n\n const behavior = hasBeenSubmitted\n ? resolvedValidationBehavior.whenSubmitted\n : resolvedValidationBehavior.initial;\n\n const maybeValidate = useCallback(() => {\n if (behavior === \"onChange\") {\n validateField({ alwaysIncludeErrorsFromFields: [field] });\n }\n }, [behavior, field, validateField]);\n\n invariant(\n value === undefined || value === null || Array.isArray(value),\n `FieldArray: defaultValue value for ${field} must be an array, null, or undefined`\n );\n\n const arr = useFormStore(\n context.formId,\n (state) => state.controlledFields.array\n );\n\n const arrayValue = useMemo<unknown[]>(() => value ?? [], [value]);\n const keyRef = useRef<string[]>([]);\n\n // If the lengths don't match up it means one of two things\n // 1. The array has been modified outside of this hook\n // 2. We're initializing the array\n if (keyRef.current.length !== arrayValue.length) {\n keyRef.current = arrayValue.map(() => nanoid());\n }\n\n const helpers = useMemo(\n () => ({\n push: (item: any) => {\n arr.push(field, item);\n keyRef.current.push(nanoid());\n maybeValidate();\n },\n swap: (indexA: number, indexB: number) => {\n arr.swap(field, indexA, indexB);\n arrayUtil.swap(keyRef.current, indexA, indexB);\n maybeValidate();\n },\n move: (from: number, to: number) => {\n arr.move(field, from, to);\n arrayUtil.move(keyRef.current, from, to);\n maybeValidate();\n },\n insert: (index: number, value: any) => {\n arr.insert(field, index, value);\n arrayUtil.insert(keyRef.current, index, nanoid());\n maybeValidate();\n },\n unshift: (value: any) => {\n arr.unshift(field, value);\n keyRef.current.unshift(nanoid());\n maybeValidate();\n },\n remove: (index: number) => {\n arr.remove(field, index);\n arrayUtil.remove(keyRef.current, index);\n maybeValidate();\n },\n pop: () => {\n arr.pop(field);\n keyRef.current.pop();\n maybeValidate();\n },\n replace: (index: number, value: any) => {\n arr.replace(field, index, value);\n keyRef.current[index] = nanoid();\n maybeValidate();\n },\n }),\n [arr, field, maybeValidate]\n );\n\n const valueWithKeys = useMemo(() => {\n const result: { defaultValue: any; key: string }[] = [];\n arrayValue.forEach((item, index) => {\n result[index] = {\n key: keyRef.current[index],\n defaultValue: item,\n };\n });\n return result;\n }, [arrayValue]);\n\n return [valueWithKeys, helpers, error] as const;\n};\n\nexport type FieldArrayHelpers<Item = any> = {\n push: (item: Item) => void;\n swap: (indexA: number, indexB: number) => void;\n move: (from: number, to: number) => void;\n insert: (index: number, value: Item) => void;\n unshift: (value: Item) => void;\n remove: (index: number) => void;\n pop: () => void;\n replace: (index: number, value: Item) => void;\n};\n\nexport type UseFieldArrayOptions = {\n formId?: string;\n validationBehavior?: Partial<FieldArrayValidationBehaviorOptions>;\n};\n\nexport function useFieldArray<Item = any>(\n name: string,\n { formId, validationBehavior }: UseFieldArrayOptions = {}\n) {\n const context = useInternalFormContext(formId, \"FieldArray\");\n\n return useInternalFieldArray(context, name, validationBehavior) as [\n items: FieldArrayItem<Item>[],\n helpers: FieldArrayHelpers,\n error: string | undefined\n ];\n}\n\nexport type FieldArrayProps<Item> = {\n name: string;\n children: (\n items: FieldArrayItem<Item>[],\n helpers: FieldArrayHelpers<Item>,\n error: string | undefined\n ) => React.ReactNode;\n formId?: string;\n validationBehavior?: FieldArrayValidationBehaviorOptions;\n};\n\nexport function FieldArray<Item = any>({\n name,\n children,\n formId,\n validationBehavior,\n}: FieldArrayProps<Item>) {\n const context = useInternalFormContext(formId, \"FieldArray\");\n const [value, helpers, error] = useInternalFieldArray(\n context,\n name,\n validationBehavior\n );\n return <>{children(value, helpers, error)}</>;\n}\n"],"mappings":"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","names":["useEffect","invariant","hydratedData","invariant","from","get","invariant","_a","from","state","match","invariant","touched","state","fieldErrors","useCallback","useCallback","value","useEffect","useCallback","useEffect","useMemo","useRef","R","useCallback","useEffect","useRef","useEffect","useRef","R","useEffect","useRef","replace","useMemo","useRef","useCallback","_a","useEffect","R","useCallback","useMemo","useMemo","useMemo","useCallback","useMemo","useMemo","useRef","useCallback","invariant","Fragment","jsx","useCallback","invariant","useMemo","useRef","from","value"]}
|
1
|
+
{"version":3,"sources":["../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../node_modules/use-sync-external-store/shim/index.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../node_modules/use-sync-external-store/shim/with-selector.js","../src/hooks.ts","../src/internal/getInputProps.ts","../src/internal/logic/getCheckboxChecked.ts","../src/internal/logic/getRadioChecked.ts","../src/internal/hooks.ts","../../set-get/src/stringToPathArray.ts","../../set-get/src/setPath.ts","../../set-get/src/getPath.ts","../src/internal/constants.ts","../src/internal/formContext.ts","../src/internal/hydratable.ts","../src/internal/state/createFormStore.ts","../../../node_modules/zustand/esm/vanilla.mjs","../../../node_modules/zustand/esm/index.mjs","../../../node_modules/immer/src/utils/errors.ts","../../../node_modules/immer/src/utils/common.ts","../../../node_modules/immer/src/utils/plugins.ts","../../../node_modules/immer/src/core/scope.ts","../../../node_modules/immer/src/core/finalize.ts","../../../node_modules/immer/src/core/proxy.ts","../../../node_modules/immer/src/core/immerClass.ts","../../../node_modules/immer/src/core/current.ts","../../../node_modules/immer/src/plugins/es5.ts","../../../node_modules/immer/src/plugins/patches.ts","../../../node_modules/immer/src/plugins/mapset.ts","../../../node_modules/immer/src/plugins/all.ts","../../../node_modules/immer/src/immer.ts","../../../node_modules/immer/src/utils/env.ts","../../../node_modules/zustand/esm/middleware/immer.mjs","../src/internal/logic/requestSubmit.ts","../src/internal/state/arrayUtil.ts","../src/internal/state/storeHooks.ts","../src/internal/state/controlledFields.ts","../src/server.ts","../src/ValidatedForm.tsx","../src/internal/MultiValueMap.ts","../src/internal/submissionCallbacks.ts","../src/internal/util.ts","../src/validation/createValidator.ts","../src/internal/flatten.ts","../src/userFacingFormContext.ts","../src/unreleased/formStateHooks.ts","../src/internal/state/fieldArray.tsx"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import { useEffect, useMemo } from \"react\";\nimport {\n createGetInputProps,\n GetInputProps,\n ValidationBehaviorOptions,\n} from \"./internal/getInputProps\";\nimport {\n useInternalFormContext,\n useFieldTouched,\n useFieldError,\n useFieldDefaultValue,\n useClearError,\n useInternalIsSubmitting,\n useInternalIsValid,\n useInternalHasBeenSubmitted,\n useRegisterReceiveFocus,\n useSmartValidate,\n} from \"./internal/hooks\";\nimport {\n useControllableValue,\n useUpdateControllableValue,\n} from \"./internal/state/controlledFields\";\n\n/**\n * Returns whether or not the parent form is currently being submitted.\n * This is different from Remix's `useNavigation()` in that it\n * is aware of what form it's in and when _that_ form is being submitted.\n *\n * @param formId\n */\nexport const useIsSubmitting = (formId?: string) => {\n const formContext = useInternalFormContext(formId, \"useIsSubmitting\");\n return useInternalIsSubmitting(formContext.formId);\n};\n\n/**\n * Returns whether or not the current form is valid.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useIsValid = (formId?: string) => {\n const formContext = useInternalFormContext(formId, \"useIsValid\");\n return useInternalIsValid(formContext.formId);\n};\n\nexport type FieldProps = {\n /**\n * The validation error message if there is one.\n */\n error?: string;\n /**\n * Clears the error message.\n */\n clearError: () => void;\n /**\n * Validates the field.\n */\n validate: () => void;\n /**\n * The default value of the field, if there is one.\n */\n defaultValue?: any;\n /**\n * Whether or not the field has been touched.\n */\n touched: boolean;\n /**\n * Helper to set the touched state of the field.\n */\n setTouched: (touched: boolean) => void;\n /**\n * Helper to get all the props necessary for a regular input.\n */\n getInputProps: GetInputProps;\n};\n\n/**\n * Provides the data and helpers necessary to set up a field.\n */\nexport const useField = (\n name: string,\n options?: {\n /**\n * Allows you to configure a custom function that will be called\n * when the input needs to receive focus due to a validation error.\n * This is useful for custom components that use a hidden input.\n */\n handleReceiveFocus?: () => void;\n /**\n * Allows you to specify when a field gets validated (when using getInputProps)\n */\n validationBehavior?: Partial<ValidationBehaviorOptions>;\n /**\n * The formId of the form you want to use.\n * This is not necesary if the input is used inside a form.\n */\n formId?: string;\n }\n): FieldProps => {\n const { formId: providedFormId, handleReceiveFocus } = options ?? {};\n const formContext = useInternalFormContext(providedFormId, \"useField\");\n\n const defaultValue = useFieldDefaultValue(name, formContext);\n const [touched, setTouched] = useFieldTouched(name, formContext);\n const error = useFieldError(name, formContext);\n const clearError = useClearError(formContext);\n\n const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);\n const smartValidate = useSmartValidate(formContext.formId);\n const registerReceiveFocus = useRegisterReceiveFocus(formContext.formId);\n\n useEffect(() => {\n if (handleReceiveFocus)\n return registerReceiveFocus(name, handleReceiveFocus);\n }, [handleReceiveFocus, name, registerReceiveFocus]);\n\n const field = useMemo<FieldProps>(() => {\n const helpers = {\n error,\n clearError: () => clearError(name),\n validate: () => smartValidate({ alwaysIncludeErrorsFromFields: [name] }),\n defaultValue,\n touched,\n setTouched,\n };\n const getInputProps = createGetInputProps({\n ...helpers,\n name,\n hasBeenSubmitted,\n validationBehavior: options?.validationBehavior,\n });\n return {\n ...helpers,\n getInputProps,\n };\n }, [\n error,\n clearError,\n defaultValue,\n touched,\n setTouched,\n name,\n hasBeenSubmitted,\n options?.validationBehavior,\n smartValidate,\n ]);\n\n return field;\n};\n\nexport const useControlField = <T>(name: string, formId?: string) => {\n const context = useInternalFormContext(formId, \"useControlField\");\n const [value, setValue] = useControllableValue(context, name);\n return [value as T, setValue as (value: T) => void] as const;\n};\n\nexport const useUpdateControlledField = (formId?: string) => {\n const context = useInternalFormContext(formId, \"useControlField\");\n return useUpdateControllableValue(context.formId);\n};\n","import * as R from \"remeda\";\nimport { getCheckboxChecked } from \"./logic/getCheckboxChecked\";\nimport { getRadioChecked } from \"./logic/getRadioChecked\";\n\nexport type ValidationBehavior = \"onBlur\" | \"onChange\" | \"onSubmit\";\n\nexport type ValidationBehaviorOptions = {\n initial: ValidationBehavior;\n whenTouched: ValidationBehavior;\n whenSubmitted: ValidationBehavior;\n};\n\nexport type CreateGetInputPropsOptions = {\n clearError: () => void;\n validate: () => void;\n defaultValue?: any;\n touched: boolean;\n setTouched: (touched: boolean) => void;\n hasBeenSubmitted: boolean;\n validationBehavior?: Partial<ValidationBehaviorOptions>;\n name: string;\n};\n\ntype HandledProps = \"name\" | \"defaultValue\" | \"defaultChecked\";\ntype Callbacks = \"onChange\" | \"onBlur\";\n\ntype MinimalInputProps = {\n onChange?: ((...args: any[]) => void) | undefined;\n onBlur?: ((...args: any[]) => void) | undefined;\n defaultValue?: any;\n defaultChecked?: boolean | undefined;\n name?: string | undefined;\n type?: string | undefined;\n};\n\nexport type GetInputProps = <T extends MinimalInputProps>(\n props?: Omit<T, HandledProps | Callbacks> & Partial<Pick<T, Callbacks>>\n) => T;\n\nconst defaultValidationBehavior: ValidationBehaviorOptions = {\n initial: \"onBlur\",\n whenTouched: \"onChange\",\n whenSubmitted: \"onChange\",\n};\n\nexport const createGetInputProps = ({\n clearError,\n validate,\n defaultValue,\n touched,\n setTouched,\n hasBeenSubmitted,\n validationBehavior,\n name,\n}: CreateGetInputPropsOptions): GetInputProps => {\n const validationBehaviors = {\n ...defaultValidationBehavior,\n ...validationBehavior,\n };\n\n return <T extends MinimalInputProps>(props = {} as any) => {\n const behavior = hasBeenSubmitted\n ? validationBehaviors.whenSubmitted\n : touched\n ? validationBehaviors.whenTouched\n : validationBehaviors.initial;\n\n const inputProps: MinimalInputProps = {\n ...props,\n onChange: (...args: unknown[]) => {\n if (behavior === \"onChange\") validate();\n else clearError();\n return props?.onChange?.(...args);\n },\n onBlur: (...args: unknown[]) => {\n if (behavior === \"onBlur\") validate();\n setTouched(true);\n return props?.onBlur?.(...args);\n },\n name,\n };\n\n if (props.type === \"checkbox\") {\n inputProps.defaultChecked = getCheckboxChecked(props.value, defaultValue);\n } else if (props.type === \"radio\") {\n inputProps.defaultChecked = getRadioChecked(props.value, defaultValue);\n } else if (props.value === undefined) {\n // We should only set the defaultValue if the input is uncontrolled.\n inputProps.defaultValue = defaultValue;\n }\n\n return R.omitBy(inputProps, (value) => value === undefined) as T;\n };\n};\n","export const getCheckboxChecked = (\n checkboxValue: string | undefined = \"on\",\n newValue: unknown\n): boolean | undefined => {\n if (Array.isArray(newValue))\n return newValue.some((val) => val === true || val === checkboxValue);\n if (typeof newValue === \"boolean\") return newValue;\n if (typeof newValue === \"string\") return newValue === checkboxValue;\n return undefined;\n};\n","export const getRadioChecked = (\n radioValue: string | undefined = \"on\",\n newValue: unknown\n) => {\n if (typeof newValue === \"string\") return newValue === radioValue;\n return undefined;\n};\n\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest;\n it(\"getRadioChecked\", () => {\n expect(getRadioChecked(\"on\", \"on\")).toBe(true);\n expect(getRadioChecked(\"on\", undefined)).toBe(undefined);\n expect(getRadioChecked(\"trueValue\", undefined)).toBe(undefined);\n expect(getRadioChecked(\"trueValue\", \"bob\")).toBe(false);\n expect(getRadioChecked(\"trueValue\", \"trueValue\")).toBe(true);\n });\n}\n","import { useActionData, useMatches, useNavigation } from \"@remix-run/react\";\nimport { useCallback, useContext } from \"react\";\nimport { getPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\nimport { FieldErrors, ValidationErrorResponseData } from \"..\";\nimport { formDefaultValuesKey } from \"./constants\";\nimport { InternalFormContext, InternalFormContextValue } from \"./formContext\";\nimport { Hydratable, hydratable } from \"./hydratable\";\nimport { useFormStore } from \"./state/storeHooks\";\nimport { InternalFormId } from \"./state/types\";\n\nexport const useInternalFormContext = (\n formId?: string | symbol,\n hookName?: string\n) => {\n const formContext = useContext(InternalFormContext);\n\n if (formId) return { formId };\n if (formContext) return formContext;\n\n throw new Error(\n `Unable to determine form for ${hookName}. Please use it inside a ValidatedForm or pass a 'formId'.`\n );\n};\n\nexport function useErrorResponseForForm({\n fetcher,\n subaction,\n formId,\n}: InternalFormContextValue): ValidationErrorResponseData | null {\n const actionData = useActionData<any>();\n if (fetcher) {\n if ((fetcher.data as any)?.fieldErrors) return fetcher.data as any;\n return null;\n }\n\n if (!actionData?.fieldErrors) return null;\n\n // If there's an explicit id, we should ignore data that has the wrong id\n if (typeof formId === \"string\" && actionData.formId)\n return actionData.formId === formId ? actionData : null;\n\n if (\n (!subaction && !actionData.subaction) ||\n actionData.subaction === subaction\n )\n return actionData;\n\n return null;\n}\n\nexport const useFieldErrorsForForm = (\n context: InternalFormContextValue\n): Hydratable<FieldErrors | undefined> => {\n const response = useErrorResponseForForm(context);\n const hydrated = useFormStore(context.formId, (state) => state.isHydrated);\n return hydratable.from(response?.fieldErrors, hydrated);\n};\n\nexport const useDefaultValuesFromLoader = ({\n formId,\n}: InternalFormContextValue) => {\n const matches = useMatches();\n if (typeof formId === \"string\") {\n const dataKey = formDefaultValuesKey(formId);\n // If multiple loaders declare the same default values,\n // we should use the data from the deepest route.\n const match = matches\n .reverse()\n .find(\n (match) =>\n match.data && typeof match.data === \"object\" && dataKey in match.data\n );\n return match?.data[dataKey];\n }\n\n return null;\n};\n\nexport const useDefaultValuesForForm = (\n context: InternalFormContextValue\n): Hydratable<{ [fieldName: string]: any }> => {\n const { formId, defaultValuesProp } = context;\n const hydrated = useFormStore(formId, (state) => state.isHydrated);\n const errorResponse = useErrorResponseForForm(context);\n const defaultValuesFromLoader = useDefaultValuesFromLoader(context);\n\n // Typical flow is:\n // - Default values only available from props or server\n // - Props have a higher priority than server\n // - State gets hydrated with default values\n // - After submit, we may need to use values from the error\n\n if (hydrated) return hydratable.hydratedData();\n if (errorResponse?.repopulateFields) {\n invariant(\n typeof errorResponse.repopulateFields === \"object\",\n \"repopulateFields returned something other than an object\"\n );\n return hydratable.serverData(errorResponse.repopulateFields);\n }\n if (defaultValuesProp) return hydratable.serverData(defaultValuesProp);\n\n return hydratable.serverData(defaultValuesFromLoader);\n};\n\nexport const useHasActiveFormSubmit = ({\n fetcher,\n}: InternalFormContextValue): boolean => {\n let navigation = useNavigation();\n const hasActiveSubmission = fetcher\n ? fetcher.state === \"submitting\"\n : navigation.state === \"submitting\" || navigation.state === \"loading\";\n return hasActiveSubmission;\n};\n\nexport const useFieldTouched = (\n field: string,\n { formId }: InternalFormContextValue\n) => {\n const touched = useFormStore(formId, (state) => state.touchedFields[field]);\n const setFieldTouched = useFormStore(formId, (state) => state.setTouched);\n const setTouched = useCallback(\n (touched: boolean) => setFieldTouched(field, touched),\n [field, setFieldTouched]\n );\n return [touched, setTouched] as const;\n};\n\nexport const useFieldError = (\n name: string,\n context: InternalFormContextValue\n) => {\n const fieldErrors = useFieldErrorsForForm(context);\n const state = useFormStore(\n context.formId,\n (state) => state.fieldErrors[name]\n );\n return fieldErrors.map((fieldErrors) => fieldErrors?.[name]).hydrateTo(state);\n};\n\nexport const useClearError = (context: InternalFormContextValue) => {\n const { formId } = context;\n return useFormStore(formId, (state) => state.clearFieldError);\n};\n\nexport const useCurrentDefaultValueForField = (\n formId: InternalFormId,\n field: string\n) =>\n useFormStore(formId, (state) => getPath(state.currentDefaultValues, field));\n\nexport const useFieldDefaultValue = (\n name: string,\n context: InternalFormContextValue\n) => {\n const defaultValues = useDefaultValuesForForm(context);\n const state = useCurrentDefaultValueForField(context.formId, name);\n\n return defaultValues.map((val) => getPath(val, name)).hydrateTo(state);\n};\n\nexport const useInternalIsSubmitting = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.isSubmitting);\n\nexport const useInternalIsValid = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.isValid());\n\nexport const useInternalHasBeenSubmitted = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.hasBeenSubmitted);\n\nexport const useSmartValidate = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.smartValidate);\n\nexport const useValidate = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.validate);\n\nconst noOpReceiver = () => () => {};\nexport const useRegisterReceiveFocus = (formId: InternalFormId) =>\n useFormStore(\n formId,\n (state) => state.formProps?.registerReceiveFocus ?? noOpReceiver\n );\n\nconst defaultDefaultValues = {};\nexport const useSyncedDefaultValues = (formId: InternalFormId) =>\n useFormStore(\n formId,\n (state) => state.formProps?.defaultValues ?? defaultDefaultValues\n );\n\nexport const useSetTouched = ({ formId }: InternalFormContextValue) =>\n useFormStore(formId, (state) => state.setTouched);\n\nexport const useTouchedFields = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.touchedFields);\n\nexport const useFieldErrors = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.fieldErrors);\n\nexport const useSetFieldErrors = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.setFieldErrors);\n\nexport const useResetFormElement = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.resetFormElement);\n\nexport const useSubmitForm = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.submit);\n\nexport const useFormActionProp = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.formProps?.action);\n\nexport const useFormSubactionProp = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.formProps?.subaction);\n\nexport const useFormValues = (formId: InternalFormId) =>\n useFormStore(formId, (state) => state.getValues);\n","export const stringToPathArray = <T extends string>(\n path: T\n): (string | number)[] => {\n if (path.length === 0) return [];\n\n const match =\n path.match(/^\\[(.+?)\\](.*)$/) || path.match(/^\\.?([^\\.\\[\\]]+)(.*)$/);\n if (match) {\n const [_, key, rest] = match;\n return [/^\\d+$/.test(key) ? Number(key) : key, ...stringToPathArray(rest)];\n }\n return [path];\n};\n","import { stringToPathArray } from \"./stringToPathArray\";\n\nexport function setPath<T>(object: T, path: string, defaultValue: any) {\n return _setPathNormalized(object, stringToPathArray(path), defaultValue);\n}\n\nfunction _setPathNormalized(\n object: any,\n path: (string | number)[],\n value: any\n): any {\n const leadingSegments = path.slice(0, -1);\n const lastSegment = path[path.length - 1];\n\n let obj = object;\n for (let i = 0; i < leadingSegments.length; i++) {\n const segment = leadingSegments[i];\n if (obj[segment] === undefined) {\n const nextSegment = leadingSegments[i + 1] ?? lastSegment;\n obj[segment] = typeof nextSegment === \"number\" ? [] : {};\n }\n obj = obj[segment];\n }\n obj[lastSegment] = value;\n return object;\n}\n","import get from \"lodash.get\";\n\nexport const getPath = (object: any, path: string) => {\n return get(object, path);\n};\n","export const FORM_ID_FIELD = \"__rvfInternalFormId\" as const;\nexport const FORM_DEFAULTS_FIELD = \"__rvfInternalFormDefaults\" as const;\nexport const formDefaultValuesKey = (formId: string) =>\n `${FORM_DEFAULTS_FIELD}_${formId}`;\n","import { FetcherWithComponents } from \"@remix-run/react\";\nimport { createContext } from \"react\";\n\nexport type InternalFormContextValue = {\n formId: string | symbol;\n action?: string;\n subaction?: string;\n defaultValuesProp?: { [fieldName: string]: any };\n fetcher?: FetcherWithComponents<unknown>;\n};\n\nexport const InternalFormContext =\n createContext<InternalFormContextValue | null>(null);\n","/**\n * The purpose of this type is to simplify the logic\n * around data that needs to come from the server initially,\n * but from the internal state after hydration.\n */\nexport type Hydratable<T> = {\n hydrateTo: (data: T) => T;\n map: <U>(fn: (data: T) => U) => Hydratable<U>;\n};\n\nconst serverData = <T>(data: T): Hydratable<T> => ({\n hydrateTo: () => data,\n map: (fn) => serverData(fn(data)),\n});\n\nconst hydratedData = <T>(): Hydratable<T> => ({\n hydrateTo: (hydratedData: T) => hydratedData,\n map: <U>() => hydratedData<U>(),\n});\n\nconst from = <T>(data: T, hydrated: boolean): Hydratable<T> =>\n hydrated ? hydratedData<T>() : serverData<T>(data);\n\nexport const hydratable = {\n serverData,\n hydratedData,\n from,\n};\n","import { WritableDraft } from \"immer/dist/internal\";\nimport { getPath, setPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\nimport { create, GetState } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n Validator,\n} from \"../../validation/types\";\nimport { requestSubmit } from \"../logic/requestSubmit\";\nimport * as arrayUtil from \"./arrayUtil\";\nimport { InternalFormId } from \"./types\";\n\nexport type SyncedFormProps = {\n formId?: string;\n action?: string;\n subaction?: string;\n defaultValues: { [fieldName: string]: any };\n registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;\n validator: Validator<unknown>;\n};\n\nexport type SmartValidateOpts = {\n alwaysIncludeErrorsFromFields?: string[];\n};\n\nexport type FormStoreState = {\n forms: { [formId: InternalFormId]: FormState };\n form: (formId: InternalFormId) => FormState;\n registerForm: (formId: InternalFormId) => void;\n cleanupForm: (formId: InternalFormId) => void;\n};\n\nexport type FormState = {\n isHydrated: boolean;\n isSubmitting: boolean;\n hasBeenSubmitted: boolean;\n fieldErrors: FieldErrors;\n touchedFields: TouchedFields;\n formProps?: SyncedFormProps;\n formElement: HTMLFormElement | null;\n currentDefaultValues: Record<string, any>;\n\n isValid: () => boolean;\n startSubmit: () => void;\n endSubmit: () => void;\n setTouched: (field: string, touched: boolean) => void;\n setFieldError: (field: string, error: string) => void;\n setFieldErrors: (errors: FieldErrors) => void;\n clearFieldError: (field: string) => void;\n reset: () => void;\n syncFormProps: (props: SyncedFormProps) => void;\n setFormElement: (formElement: HTMLFormElement | null) => void;\n validate: () => Promise<ValidationResult<unknown>>;\n smartValidate: (\n opts?: SmartValidateOpts\n ) => Promise<ValidationResult<unknown>>;\n resetFormElement: () => void;\n submit: () => void;\n getValues: () => FormData;\n\n controlledFields: {\n values: { [fieldName: string]: any };\n refCounts: { [fieldName: string]: number };\n valueUpdatePromises: { [fieldName: string]: Promise<void> };\n valueUpdateResolvers: { [fieldName: string]: () => void };\n\n register: (fieldName: string) => void;\n unregister: (fieldName: string) => void;\n setValue: (fieldName: string, value: unknown) => void;\n kickoffValueUpdate: (fieldName: string) => void;\n getValue: (fieldName: string) => unknown;\n awaitValueUpdate: (fieldName: string) => Promise<void>;\n\n array: {\n push: (fieldName: string, value: unknown) => void;\n swap: (fieldName: string, indexA: number, indexB: number) => void;\n move: (fieldName: string, fromIndex: number, toIndex: number) => void;\n insert: (fieldName: string, index: number, value: unknown) => void;\n unshift: (fieldName: string, value: unknown) => void;\n remove: (fieldName: string, index: number) => void;\n pop: (fieldName: string) => void;\n replace: (fieldName: string, index: number, value: unknown) => void;\n };\n };\n};\n\nconst noOp = () => {};\nconst defaultFormState: FormState = {\n isHydrated: false,\n isSubmitting: false,\n hasBeenSubmitted: false,\n touchedFields: {},\n fieldErrors: {},\n formElement: null,\n isValid: () => true,\n startSubmit: noOp,\n endSubmit: noOp,\n setTouched: noOp,\n setFieldError: noOp,\n setFieldErrors: noOp,\n clearFieldError: noOp,\n currentDefaultValues: {},\n\n reset: () => noOp,\n syncFormProps: noOp,\n setFormElement: noOp,\n\n validate: async () => {\n throw new Error(\"Validate called before form was initialized.\");\n },\n\n smartValidate: async () => {\n throw new Error(\"Validate called before form was initialized.\");\n },\n\n submit: async () => {\n throw new Error(\"Submit called before form was initialized.\");\n },\n\n resetFormElement: noOp,\n getValues: () => new FormData(),\n\n controlledFields: {\n values: {},\n refCounts: {},\n valueUpdatePromises: {},\n valueUpdateResolvers: {},\n\n register: noOp,\n unregister: noOp,\n setValue: noOp,\n getValue: noOp,\n kickoffValueUpdate: noOp,\n awaitValueUpdate: async () => {\n throw new Error(\"AwaitValueUpdate called before form was initialized.\");\n },\n\n array: {\n push: noOp,\n swap: noOp,\n move: noOp,\n insert: noOp,\n unshift: noOp,\n remove: noOp,\n pop: noOp,\n replace: noOp,\n },\n },\n};\n\nconst createFormState = (\n set: (setter: (draft: WritableDraft<FormState>) => void) => void,\n get: GetState<FormState>\n): FormState => ({\n // It's not \"hydrated\" until the form props are synced\n isHydrated: false,\n isSubmitting: false,\n hasBeenSubmitted: false,\n touchedFields: {},\n fieldErrors: {},\n formElement: null,\n currentDefaultValues: {},\n\n isValid: () => Object.keys(get().fieldErrors).length === 0,\n startSubmit: () =>\n set((state) => {\n state.isSubmitting = true;\n state.hasBeenSubmitted = true;\n }),\n endSubmit: () =>\n set((state) => {\n state.isSubmitting = false;\n }),\n setTouched: (fieldName, touched) =>\n set((state) => {\n state.touchedFields[fieldName] = touched;\n }),\n setFieldError: (fieldName: string, error: string) =>\n set((state) => {\n state.fieldErrors[fieldName] = error;\n }),\n setFieldErrors: (errors: FieldErrors) =>\n set((state) => {\n state.fieldErrors = errors;\n }),\n clearFieldError: (fieldName: string) =>\n set((state) => {\n delete state.fieldErrors[fieldName];\n }),\n reset: () =>\n set((state) => {\n state.fieldErrors = {};\n state.touchedFields = {};\n state.hasBeenSubmitted = false;\n const nextDefaults = state.formProps?.defaultValues ?? {};\n state.controlledFields.values = nextDefaults;\n state.currentDefaultValues = nextDefaults;\n }),\n syncFormProps: (props: SyncedFormProps) =>\n set((state) => {\n if (!state.isHydrated) {\n state.controlledFields.values = props.defaultValues;\n state.currentDefaultValues = props.defaultValues;\n }\n\n state.formProps = props;\n state.isHydrated = true;\n }),\n setFormElement: (formElement: HTMLFormElement | null) => {\n // This gets called frequently, so we want to avoid calling set() every time\n // Or else we wind up with an infinite loop\n if (get().formElement === formElement) return;\n set((state) => {\n // weird type issue here\n // seems to be because formElement is a writable draft\n state.formElement = formElement as any;\n });\n },\n validate: async () => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n const validator = get().formProps?.validator;\n invariant(\n validator,\n \"Cannot find validator. This is probably a bug in remix-validated-form.\"\n );\n\n const result = await validator.validate(new FormData(formElement));\n if (result.error) get().setFieldErrors(result.error.fieldErrors);\n return result;\n },\n\n smartValidate: async ({ alwaysIncludeErrorsFromFields = [] } = {}) => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n const validator = get().formProps?.validator;\n invariant(\n validator,\n \"Cannot find validator. This is probably a bug in remix-validated-form.\"\n );\n\n await Promise.all(\n alwaysIncludeErrorsFromFields.map((field) =>\n get().controlledFields.awaitValueUpdate?.(field)\n )\n );\n\n const validationResult = await validator.validate(\n new FormData(formElement)\n );\n if (!validationResult.error) {\n // Only update the field errors if it hasn't changed\n const hadErrors = Object.keys(get().fieldErrors).length > 0;\n if (hadErrors) get().setFieldErrors({});\n return validationResult;\n }\n\n const {\n error: { fieldErrors },\n } = validationResult;\n const errorFields = new Set<string>();\n const incomingErrors = new Set<string>();\n const prevErrors = new Set<string>();\n\n Object.keys(fieldErrors).forEach((field) => {\n errorFields.add(field);\n incomingErrors.add(field);\n });\n\n Object.keys(get().fieldErrors).forEach((field) => {\n errorFields.add(field);\n prevErrors.add(field);\n });\n\n const fieldsToUpdate = new Set<string>();\n const fieldsToDelete = new Set<string>();\n\n errorFields.forEach((field) => {\n // If an error has been cleared, remove it.\n if (!incomingErrors.has(field)) {\n fieldsToDelete.add(field);\n return;\n }\n\n // If an error has changed, we should update it.\n if (prevErrors.has(field) && incomingErrors.has(field)) {\n // Only update if the error has changed to avoid unnecessary rerenders\n if (fieldErrors[field] !== get().fieldErrors[field])\n fieldsToUpdate.add(field);\n return;\n }\n\n // If the error is always included, then we should update it.\n if (alwaysIncludeErrorsFromFields.includes(field)) {\n fieldsToUpdate.add(field);\n return;\n }\n\n // If the error is new, then only update if the field has been touched\n // or if the form has been submitted\n if (!prevErrors.has(field)) {\n const fieldTouched = get().touchedFields[field];\n const formHasBeenSubmitted = get().hasBeenSubmitted;\n if (fieldTouched || formHasBeenSubmitted) fieldsToUpdate.add(field);\n return;\n }\n });\n\n if (fieldsToDelete.size === 0 && fieldsToUpdate.size === 0) {\n return { ...validationResult, error: { fieldErrors: get().fieldErrors } };\n }\n\n set((state) => {\n fieldsToDelete.forEach((field) => {\n delete state.fieldErrors[field];\n });\n\n fieldsToUpdate.forEach((field) => {\n state.fieldErrors[field] = fieldErrors[field];\n });\n });\n\n return { ...validationResult, error: { fieldErrors: get().fieldErrors } };\n },\n\n submit: () => {\n const formElement = get().formElement;\n invariant(\n formElement,\n \"Cannot find reference to form. This is probably a bug in remix-validated-form.\"\n );\n\n requestSubmit(formElement);\n },\n\n getValues: () => new FormData(get().formElement ?? undefined),\n\n resetFormElement: () => get().formElement?.reset(),\n\n controlledFields: {\n values: {},\n refCounts: {},\n valueUpdatePromises: {},\n valueUpdateResolvers: {},\n\n register: (fieldName) => {\n set((state) => {\n const current = state.controlledFields.refCounts[fieldName] ?? 0;\n state.controlledFields.refCounts[fieldName] = current + 1;\n });\n },\n unregister: (fieldName) => {\n // For this helper in particular, we may run into a case where state is undefined.\n // When the whole form unmounts, the form state may be cleaned up before the fields are.\n if (get() === null || get() === undefined) return;\n set((state) => {\n const current = state.controlledFields.refCounts[fieldName] ?? 0;\n if (current > 1) {\n state.controlledFields.refCounts[fieldName] = current - 1;\n return;\n }\n\n const isNested = Object.keys(state.controlledFields.refCounts).some(\n (key) => fieldName.startsWith(key) && key !== fieldName\n );\n\n // When nested within a field array, we should leave resetting up to the field array\n if (!isNested) {\n setPath(\n state.controlledFields.values,\n fieldName,\n getPath(state.formProps?.defaultValues, fieldName)\n );\n setPath(\n state.currentDefaultValues,\n fieldName,\n getPath(state.formProps?.defaultValues, fieldName)\n );\n }\n\n delete state.controlledFields.refCounts[fieldName];\n });\n },\n getValue: (fieldName) => getPath(get().controlledFields.values, fieldName),\n setValue: (fieldName, value) => {\n set((state) => {\n setPath(state.controlledFields.values, fieldName, value);\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n kickoffValueUpdate: (fieldName) => {\n const clear = () =>\n set((state) => {\n delete state.controlledFields.valueUpdateResolvers[fieldName];\n delete state.controlledFields.valueUpdatePromises[fieldName];\n });\n set((state) => {\n const promise = new Promise<void>((resolve) => {\n state.controlledFields.valueUpdateResolvers[fieldName] = resolve;\n }).then(clear);\n state.controlledFields.valueUpdatePromises[fieldName] = promise;\n });\n },\n\n awaitValueUpdate: async (fieldName) => {\n await get().controlledFields.valueUpdatePromises[fieldName];\n },\n\n array: {\n push: (fieldName, item) => {\n set((state) => {\n arrayUtil\n .getArray(state.controlledFields.values, fieldName)\n .push(item);\n arrayUtil.getArray(state.currentDefaultValues, fieldName).push(item);\n // New item added to the end, no need to update touched or error\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n\n swap: (fieldName, indexA, indexB) => {\n set((state) => {\n arrayUtil.swap(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n indexA,\n indexB\n );\n arrayUtil.swap(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n indexA,\n indexB\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.swap(array, indexA, indexB)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.swap(array, indexA, indexB)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n\n move: (fieldName, from, to) => {\n set((state) => {\n arrayUtil.move(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n from,\n to\n );\n arrayUtil.move(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n from,\n to\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.move(array, from, to)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.move(array, from, to)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n insert: (fieldName, index, item) => {\n set((state) => {\n arrayUtil.insert(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index,\n item\n );\n arrayUtil.insert(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index,\n item\n );\n // Even though this is a new item, we need to push around other items.\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.insertEmpty(array, index)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.insertEmpty(array, index)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n remove: (fieldName, index) => {\n set((state) => {\n arrayUtil.remove(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index\n );\n arrayUtil.remove(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.remove(array, index)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.remove(array, index)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n pop: (fieldName) => {\n set((state) => {\n arrayUtil.getArray(state.controlledFields.values, fieldName).pop();\n arrayUtil.getArray(state.currentDefaultValues, fieldName).pop();\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n array.pop()\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n array.pop()\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n unshift: (fieldName, value) => {\n set((state) => {\n arrayUtil\n .getArray(state.controlledFields.values, fieldName)\n .unshift(value);\n arrayUtil\n .getArray(state.currentDefaultValues, fieldName)\n .unshift(value);\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.insertEmpty(array, 0)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.insertEmpty(array, 0)\n );\n });\n },\n replace: (fieldName, index, item) => {\n set((state) => {\n arrayUtil.replace(\n arrayUtil.getArray(state.controlledFields.values, fieldName),\n index,\n item\n );\n arrayUtil.replace(\n arrayUtil.getArray(state.currentDefaultValues, fieldName),\n index,\n item\n );\n arrayUtil.mutateAsArray(fieldName, state.touchedFields, (array) =>\n arrayUtil.replace(array, index, item)\n );\n arrayUtil.mutateAsArray(fieldName, state.fieldErrors, (array) =>\n arrayUtil.replace(array, index, item)\n );\n });\n get().controlledFields.kickoffValueUpdate(fieldName);\n },\n },\n },\n});\n\nexport const useRootFormStore = create<FormStoreState>()(\n immer((set, get) => ({\n forms: {},\n form: (formId) => {\n return get().forms[formId] ?? defaultFormState;\n },\n cleanupForm: (formId: InternalFormId) => {\n set((state) => {\n delete state.forms[formId];\n });\n },\n registerForm: (formId: InternalFormId) => {\n if (get().forms[formId]) return;\n set((state) => {\n state.forms[formId] = createFormState(\n (setter) => set((state) => setter(state.forms[formId])),\n () => get().forms[formId]\n ) as WritableDraft<FormState>;\n });\n },\n }))\n);\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\") ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env && import.meta.env.MODE) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The destroy method will be unsupported in the future version. You should use unsubscribe function returned by subscribe. Everything will be garbage collected if store is garbage collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env && import.meta.env.MODE) !== \"production\") {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { createStore } ...\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import { createStore } from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nimport { useDebugValue } from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env && import.meta.env.MODE) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n '[DEPRECATED] Passing a vanilla store will be unsupported in the future version. Please use `import { useStore } from \"zustand\"` to use the vanilla store in React.'\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if ((import.meta.env && import.meta.env.MODE) !== \"production\") {\n console.warn(\n \"[DEPRECATED] default export is deprecated, instead import { create } from'zustand'\"\n );\n }\n return create(createState);\n};\n\nexport { create, react as default, useStore };\n","const errors = {\n\t0: \"Illegal state\",\n\t1: \"Immer drafts cannot have computed properties\",\n\t2: \"This object has been frozen and should not be mutated\",\n\t3(data: any) {\n\t\treturn (\n\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\tdata\n\t\t)\n\t},\n\t4: \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t5: \"Immer forbids circular references\",\n\t6: \"The first or second argument to `produce` must be a function\",\n\t7: \"The third argument to `produce` must be a function or undefined\",\n\t8: \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t9: \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t10: \"The given draft is already finalized\",\n\t11: \"Object.defineProperty() cannot be used on an Immer draft\",\n\t12: \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t13: \"Immer only supports deleting array indices\",\n\t14: \"Immer only supports setting array indices and the 'length' property\",\n\t15(path: string) {\n\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t},\n\t16: 'Sets cannot have \"replace\" patches.',\n\t17(op: string) {\n\t\treturn \"Unsupported patch operation: \" + op\n\t},\n\t18(plugin: string) {\n\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t},\n\t20: \"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\",\n\t21(thing: string) {\n\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t},\n\t22(thing: string) {\n\t\treturn `'current' expects a draft, got: ${thing}`\n\t},\n\t23(thing: string) {\n\t\treturn `'original' expects a draft, got: ${thing}`\n\t},\n\t24: \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n} as const\n\nexport function die(error: keyof typeof errors, ...args: any[]): never {\n\tif (__DEV__) {\n\t\tconst e = errors[error]\n\t\tconst msg = !e\n\t\t\t? \"unknown error nr: \" + error\n\t\t\t: typeof e === \"function\"\n\t\t\t? e.apply(null, args as any)\n\t\t\t: e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}${\n\t\t\targs.length ? \" \" + args.map(s => `'${s}'`).join(\",\") : \"\"\n\t\t}. Find the full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\thasSet,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\thasMap,\n\tArchtype,\n\tdie\n} from \"../internal\"\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = Object.getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(23, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/*#__PURE__*/\nexport const ownKeys: (target: AnyObject) => PropertyKey[] =\n\ttypeof Reflect !== \"undefined\" && Reflect.ownKeys\n\t\t? Reflect.ownKeys\n\t\t: typeof Object.getOwnPropertySymbols !== \"undefined\"\n\t\t? obj =>\n\t\t\t\tObject.getOwnPropertyNames(obj).concat(\n\t\t\t\t\tObject.getOwnPropertySymbols(obj) as any\n\t\t\t\t)\n\t\t: /* istanbul ignore next */ Object.getOwnPropertyNames\n\nexport const getOwnPropertyDescriptors =\n\tObject.getOwnPropertyDescriptors ||\n\tfunction getOwnPropertyDescriptors(target: any) {\n\t\t// Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274\n\t\tconst res: any = {}\n\t\townKeys(target).forEach(key => {\n\t\t\tres[key] = Object.getOwnPropertyDescriptor(target, key)\n\t\t})\n\t\treturn res\n\t}\n\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tenumerableOnly?: boolean\n): void\nexport function each(obj: any, iter: any, enumerableOnly = false) {\n\tif (getArchtype(obj) === Archtype.Object) {\n\t\t;(enumerableOnly ? Object.keys : ownKeys)(obj).forEach(key => {\n\t\t\tif (!enumerableOnly || typeof key !== \"symbol\") iter(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): Archtype {\n\t/* istanbul ignore next */\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_ > 3\n\t\t\t? state.type_ - 4 // cause Object and Array map back from 4 and 5\n\t\t\t: (state.type_ as any) // others are the same\n\t\t: Array.isArray(thing)\n\t\t? Archtype.Array\n\t\t: isMap(thing)\n\t\t? Archtype.Map\n\t\t: isSet(thing)\n\t\t? Archtype.Set\n\t\t: Archtype.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === Archtype.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === Archtype.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === Archtype.Map) thing.set(propOrOldValue, value)\n\telse if (t === Archtype.Set) {\n\t\tthing.delete(propOrOldValue)\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn hasMap && target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn hasSet && target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any) {\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\tconst descriptors = getOwnPropertyDescriptors(base)\n\tdelete descriptors[DRAFT_STATE as any]\n\tlet keys = ownKeys(descriptors)\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key: any = keys[i]\n\t\tconst desc = descriptors[key]\n\t\tif (desc.writable === false) {\n\t\t\tdesc.writable = true\n\t\t\tdesc.configurable = true\n\t\t}\n\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t// with libraries that trap values, like mobx or vue\n\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\tif (desc.get || desc.set)\n\t\t\tdescriptors[key] = {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\tvalue: base[key]\n\t\t\t}\n\t}\n\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep) each(obj, (key, value) => freeze(value, true), true)\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\tif (obj == null || typeof obj !== \"object\") return true\n\t// See #600, IE dies on non-objects in Object.isFrozen\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tImmerScope,\n\tDrafted,\n\tAnyObject,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tProxyType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: Patch[]): T\n\t}\n\tES5?: {\n\t\twillFinalizeES5_(scope: ImmerScope, result: any, isReplaced: boolean): void\n\t\tcreateES5Proxy_<T>(\n\t\t\tbase: T,\n\t\t\tparent?: ImmerState\n\t\t): Drafted<T, ES5ObjectState | ES5ArrayState>\n\t\thasChanges_(state: ES5ArrayState | ES5ObjectState): boolean\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(18, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n\n/** ES5 Plugin */\n\ninterface ES5BaseState extends ImmerBaseState {\n\tassigned_: {[key: string]: any}\n\tparent_?: ImmerState\n\trevoked_: boolean\n}\n\nexport interface ES5ObjectState extends ES5BaseState {\n\ttype_: ProxyType.ES5Object\n\tdraft_: Drafted<AnyObject, ES5ObjectState>\n\tbase_: AnyObject\n\tcopy_: AnyObject | null\n}\n\nexport interface ES5ArrayState extends ES5BaseState {\n\ttype_: ProxyType.ES5Array\n\tdraft_: Drafted<AnyObject, ES5ArrayState>\n\tbase_: any\n\tcopy_: any\n}\n\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ProxyType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ProxyType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tProxyType,\n\tgetPlugin\n} from \"../internal\"\nimport {die} from \"../utils/errors\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\tif (__DEV__ && !currentScope) die(0)\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (\n\t\tstate.type_ === ProxyType.ProxyObject ||\n\t\tstate.type_ === ProxyType.ProxyArray\n\t)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tProxyType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen,\n\tshallowCopy\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (!scope.immer_.useProxies_)\n\t\tgetPlugin(\"ES5\").willFinalizeES5_(scope, result, isReplaced)\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\ttrue // See #590, don't recurse into non-enumerable of non drafted objects\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result =\n\t\t\t// For ES5, create a good copy from the draft first, with added keys and without deleted keys.\n\t\t\tstate.type_ === ProxyType.ES5Object || state.type_ === ProxyType.ES5Array\n\t\t\t\t? (state.copy_ = shallowCopy(state.draft_))\n\t\t\t\t: state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// Although the original test case doesn't seem valid anyway, so if this in the way we can turn the next line\n\t\t// back to each(result, ....)\n\t\teach(\n\t\t\tstate.type_ === ProxyType.Set ? new Set(result) : result,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath\n) {\n\tif (__DEV__ && childValue === targetObject) die(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ProxyType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\tif (!parentState || !parentState.scope_.parent_)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\tif (scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tProxyType\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyObject\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ProxyType.ProxyArray\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ProxyType.ProxyArray : (ProxyType.ProxyObject as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(\n\t\t\t\tstate.scope_.immer_,\n\t\t\t\tvalue,\n\t\t\t\tstate\n\t\t\t))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\tstate.copy_![prop] === value &&\n\t\t\t// special case: NaN\n\t\t\ttypeof value !== \"number\" &&\n\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t(value !== undefined || prop in state.copy_)\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\t// @ts-ignore\n\t\tif (state.copy_) delete state.copy_[prop]\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ProxyType.ProxyArray || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn Object.getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (__DEV__ && isNaN(parseInt(prop as any))) die(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (__DEV__ && prop !== \"length\" && isNaN(parseInt(prop as any))) die(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = Object.getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {base_: any; copy_: any}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(state.base_)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\thasProxies,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport class Immer implements ProducersFns {\n\tuseProxies_: boolean = hasProxies\n\n\tautoFreeze_: boolean = true\n\n\tconstructor(config?: {useProxies?: boolean; autoFreeze?: boolean}) {\n\t\tif (typeof config?.useProxies === \"boolean\")\n\t\t\tthis.setUseProxies(config!.useProxies)\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(this, base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\t\treturn result.then(\n\t\t\t\t\tresult => {\n\t\t\t\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\t\t\t\treturn processResult(result, scope)\n\t\t\t\t\t},\n\t\t\t\t\terror => {\n\t\t\t\t\t\trevokeScope(scope)\n\t\t\t\t\t\tthrow error\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(21, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (\n\t\tbase: any,\n\t\trecipe?: any,\n\t): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\n\t\tif (typeof Promise !== \"undefined\" && result instanceof Promise) {\n\t\t\treturn result.then(nextState => [nextState, patches!, inversePatches!])\n\t\t}\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(this, base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (__DEV__) {\n\t\t\tif (!state || !state.isManual_) die(9)\n\t\t\tif (state.finalized_) die(10)\n\t\t}\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n\t * always faster than using ES5 proxies.\n\t *\n\t * By default, feature detection is used, so calling this is rarely necessary.\n\t */\n\tsetUseProxies(value: boolean) {\n\t\tif (value && !hasProxies) {\n\t\t\tdie(20)\n\t\t}\n\t\tthis.useProxies_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\timmer: Immer,\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: immer.useProxies_\n\t\t? createProxyProxy(value, parent)\n\t\t: getPlugin(\"ES5\").createES5Proxy_(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tget,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tArchtype,\n\tgetArchtype,\n\tgetPlugin\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(22, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tconst archType = getArchtype(value)\n\tif (state) {\n\t\tif (\n\t\t\t!state.modified_ &&\n\t\t\t(state.type_ < 4 || !getPlugin(\"ES5\").hasChanges_(state as any))\n\t\t)\n\t\t\treturn state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = copyHelper(value, archType)\n\t\tstate.finalized_ = false\n\t} else {\n\t\tcopy = copyHelper(value, archType)\n\t}\n\n\teach(copy, (key, childValue) => {\n\t\tif (state && get(state.base_, key) === childValue) return // no need to copy or search in something that didn't change\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\t// In the future, we might consider freezing here, based on the current settings\n\treturn archType === Archtype.Set ? new Set(copy) : copy\n}\n\nfunction copyHelper(value: any, archType: number): any {\n\t// creates a shallow copy, even if it is a map or set\n\tswitch (archType) {\n\t\tcase Archtype.Map:\n\t\t\treturn new Map(value)\n\t\tcase Archtype.Set:\n\t\t\t// Set will be cloned as array temporarily, so that we can replace individual items\n\t\t\treturn Array.from(value)\n\t}\n\treturn shallowCopy(value)\n}\n","import {\n\tImmerState,\n\tDrafted,\n\tES5ArrayState,\n\tES5ObjectState,\n\teach,\n\thas,\n\tisDraft,\n\tlatest,\n\tDRAFT_STATE,\n\tis,\n\tloadPlugin,\n\tImmerScope,\n\tProxyType,\n\tgetCurrentScope,\n\tdie,\n\tmarkChanged,\n\tobjectTraps,\n\townKeys,\n\tgetOwnPropertyDescriptors\n} from \"../internal\"\n\ntype ES5State = ES5ArrayState | ES5ObjectState\n\nexport function enableES5() {\n\tfunction willFinalizeES5_(\n\t\tscope: ImmerScope,\n\t\tresult: any,\n\t\tisReplaced: boolean\n\t) {\n\t\tif (!isReplaced) {\n\t\t\tif (scope.patches_) {\n\t\t\t\tmarkChangesRecursively(scope.drafts_![0])\n\t\t\t}\n\t\t\t// This is faster when we don't care about which attributes changed.\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t\t// When a child draft is returned, look for changes.\n\t\telse if (\n\t\t\tisDraft(result) &&\n\t\t\t(result[DRAFT_STATE] as ES5State).scope_ === scope\n\t\t) {\n\t\t\tmarkChangesSweep(scope.drafts_)\n\t\t}\n\t}\n\n\tfunction createES5Draft(isArray: boolean, base: any) {\n\t\tif (isArray) {\n\t\t\tconst draft = new Array(base.length)\n\t\t\tfor (let i = 0; i < base.length; i++)\n\t\t\t\tObject.defineProperty(draft, \"\" + i, proxyProperty(i, true))\n\t\t\treturn draft\n\t\t} else {\n\t\t\tconst descriptors = getOwnPropertyDescriptors(base)\n\t\t\tdelete descriptors[DRAFT_STATE as any]\n\t\t\tconst keys = ownKeys(descriptors)\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst key: any = keys[i]\n\t\t\t\tdescriptors[key] = proxyProperty(\n\t\t\t\t\tkey,\n\t\t\t\t\tisArray || !!descriptors[key].enumerable\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn Object.create(Object.getPrototypeOf(base), descriptors)\n\t\t}\n\t}\n\n\tfunction createES5Proxy_<T>(\n\t\tbase: T,\n\t\tparent?: ImmerState\n\t): Drafted<T, ES5ObjectState | ES5ArrayState> {\n\t\tconst isArray = Array.isArray(base)\n\t\tconst draft = createES5Draft(isArray, base)\n\n\t\tconst state: ES5ObjectState | ES5ArrayState = {\n\t\t\ttype_: isArray ? ProxyType.ES5Array : (ProxyType.ES5Object as any),\n\t\t\tscope_: parent ? parent.scope_ : getCurrentScope(),\n\t\t\tmodified_: false,\n\t\t\tfinalized_: false,\n\t\t\tassigned_: {},\n\t\t\tparent_: parent,\n\t\t\t// base is the object we are drafting\n\t\t\tbase_: base,\n\t\t\t// draft is the draft object itself, that traps all reads and reads from either the base (if unmodified) or copy (if modified)\n\t\t\tdraft_: draft,\n\t\t\tcopy_: null,\n\t\t\trevoked_: false,\n\t\t\tisManual_: false\n\t\t}\n\n\t\tObject.defineProperty(draft, DRAFT_STATE, {\n\t\t\tvalue: state,\n\t\t\t// enumerable: false <- the default\n\t\t\twritable: true\n\t\t})\n\t\treturn draft\n\t}\n\n\t// property descriptors are recycled to make sure we don't create a get and set closure per property,\n\t// but share them all instead\n\tconst descriptors: {[prop: string]: PropertyDescriptor} = {}\n\n\tfunction proxyProperty(\n\t\tprop: string | number,\n\t\tenumerable: boolean\n\t): PropertyDescriptor {\n\t\tlet desc = descriptors[prop]\n\t\tif (desc) {\n\t\t\tdesc.enumerable = enumerable\n\t\t} else {\n\t\t\tdescriptors[prop] = desc = {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable,\n\t\t\t\tget(this: any) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\treturn objectTraps.get(state, prop)\n\t\t\t\t},\n\t\t\t\tset(this: any, value) {\n\t\t\t\t\tconst state = this[DRAFT_STATE]\n\t\t\t\t\tif (__DEV__) assertUnrevoked(state)\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectTraps.set(state, prop, value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn desc\n\t}\n\n\t// This looks expensive, but only proxies are visited, and only objects without known changes are scanned.\n\tfunction markChangesSweep(drafts: Drafted<any, ImmerState>[]) {\n\t\t// The natural order of drafts in the `scope` array is based on when they\n\t\t// were accessed. By processing drafts in reverse natural order, we have a\n\t\t// better chance of processing leaf nodes first. When a leaf node is known to\n\t\t// have changed, we can avoid any traversal of its ancestor nodes.\n\t\tfor (let i = drafts.length - 1; i >= 0; i--) {\n\t\t\tconst state: ES5State = drafts[i][DRAFT_STATE]\n\t\t\tif (!state.modified_) {\n\t\t\t\tswitch (state.type_) {\n\t\t\t\t\tcase ProxyType.ES5Array:\n\t\t\t\t\t\tif (hasArrayChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase ProxyType.ES5Object:\n\t\t\t\t\t\tif (hasObjectChanges(state)) markChanged(state)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction markChangesRecursively(object: any) {\n\t\tif (!object || typeof object !== \"object\") return\n\t\tconst state: ES5State | undefined = object[DRAFT_STATE]\n\t\tif (!state) return\n\t\tconst {base_, draft_, assigned_, type_} = state\n\t\tif (type_ === ProxyType.ES5Object) {\n\t\t\t// Look for added keys.\n\t\t\t// probably there is a faster way to detect changes, as sweep + recurse seems to do some\n\t\t\t// unnecessary work.\n\t\t\t// also: probably we can store the information we detect here, to speed up tree finalization!\n\t\t\teach(draft_, key => {\n\t\t\t\tif ((key as any) === DRAFT_STATE) return\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif ((base_ as any)[key] === undefined && !has(base_, key)) {\n\t\t\t\t\tassigned_[key] = true\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t} else if (!assigned_[key]) {\n\t\t\t\t\t// Only untouched properties trigger recursion.\n\t\t\t\t\tmarkChangesRecursively(draft_[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\t// Look for removed keys.\n\t\t\teach(base_, key => {\n\t\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\t\tif (draft_[key] === undefined && !has(draft_, key)) {\n\t\t\t\t\tassigned_[key] = false\n\t\t\t\t\tmarkChanged(state)\n\t\t\t\t}\n\t\t\t})\n\t\t} else if (type_ === ProxyType.ES5Array) {\n\t\t\tif (hasArrayChanges(state as ES5ArrayState)) {\n\t\t\t\tmarkChanged(state)\n\t\t\t\tassigned_.length = true\n\t\t\t}\n\n\t\t\tif (draft_.length < base_.length) {\n\t\t\t\tfor (let i = draft_.length; i < base_.length; i++) assigned_[i] = false\n\t\t\t} else {\n\t\t\t\tfor (let i = base_.length; i < draft_.length; i++) assigned_[i] = true\n\t\t\t}\n\n\t\t\t// Minimum count is enough, the other parts has been processed.\n\t\t\tconst min = Math.min(draft_.length, base_.length)\n\n\t\t\tfor (let i = 0; i < min; i++) {\n\t\t\t\t// Only untouched indices trigger recursion.\n\t\t\t\tif (!draft_.hasOwnProperty(i)) {\n\t\t\t\t\tassigned_[i] = true\n\t\t\t\t}\n\t\t\t\tif (assigned_[i] === undefined) markChangesRecursively(draft_[i])\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasObjectChanges(state: ES5ObjectState) {\n\t\tconst {base_, draft_} = state\n\n\t\t// Search for added keys and changed keys. Start at the back, because\n\t\t// non-numeric keys are ordered by time of definition on the object.\n\t\tconst keys = ownKeys(draft_)\n\t\tfor (let i = keys.length - 1; i >= 0; i--) {\n\t\t\tconst key: any = keys[i]\n\t\t\tif (key === DRAFT_STATE) continue\n\t\t\tconst baseValue = base_[key]\n\t\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\t\tif (baseValue === undefined && !has(base_, key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Once a base key is deleted, future changes go undetected, because its\n\t\t\t// descriptor is erased. This branch detects any missed changes.\n\t\t\telse {\n\t\t\t\tconst value = draft_[key]\n\t\t\t\tconst state: ImmerState = value && value[DRAFT_STATE]\n\t\t\t\tif (state ? state.base_ !== baseValue : !is(value, baseValue)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// At this point, no keys were added or changed.\n\t\t// Compare key count to determine if keys were deleted.\n\t\tconst baseIsDraft = !!base_[DRAFT_STATE as any]\n\t\treturn keys.length !== ownKeys(base_).length + (baseIsDraft ? 0 : 1) // + 1 to correct for DRAFT_STATE\n\t}\n\n\tfunction hasArrayChanges(state: ES5ArrayState) {\n\t\tconst {draft_} = state\n\t\tif (draft_.length !== state.base_.length) return true\n\t\t// See #116\n\t\t// If we first shorten the length, our array interceptors will be removed.\n\t\t// If after that new items are added, result in the same original length,\n\t\t// those last items will have no intercepting property.\n\t\t// So if there is no own descriptor on the last position, we know that items were removed and added\n\t\t// N.B.: splice, unshift, etc only shift values around, but not prop descriptors, so we only have to check\n\t\t// the last one\n\t\t// last descriptor can be not a trap, if the array was extended\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(\n\t\t\tdraft_,\n\t\t\tdraft_.length - 1\n\t\t)\n\t\t// descriptor can be null, but only for newly created sparse arrays, eg. new Array(10)\n\t\tif (descriptor && !descriptor.get) return true\n\t\t// if we miss a property, it has been deleted, so array probobaly changed\n\t\tfor (let i = 0; i < draft_.length; i++) {\n\t\t\tif (!draft_.hasOwnProperty(i)) return true\n\t\t}\n\t\t// For all other cases, we don't have to compare, as they would have been picked up by the index setters\n\t\treturn false\n\t}\n\n\tfunction hasChanges_(state: ES5State) {\n\t\treturn state.type_ === ProxyType.ES5Object\n\t\t\t? hasObjectChanges(state)\n\t\t\t: hasArrayChanges(state)\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"ES5\", {\n\t\tcreateES5Proxy_,\n\t\twillFinalizeES5_,\n\t\thasChanges_\n\t})\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tES5ArrayState,\n\tProxyArrayState,\n\tMapState,\n\tES5ObjectState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tProxyType,\n\tArchtype,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ProxyType.ProxyObject:\n\t\t\tcase ProxyType.ES5Object:\n\t\t\tcase ProxyType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ProxyType.ES5Array:\n\t\t\tcase ProxyType.ProxyArray:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ProxyType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ES5ArrayState | ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tif (base_.length < copy_.length) {\n\t\t\tinversePatches.push({\n\t\t\t\top: REPLACE,\n\t\t\t\tpath: basePath.concat([\"length\"]),\n\t\t\t\tvalue: base_.length\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ES5ObjectState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tconst p = \"\" + path[i]\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === Archtype.Object || parentType === Archtype.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(24)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\") die(24)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(15, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\tdie(16)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase Archtype.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase Archtype.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase Archtype.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(17, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(Object.getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\titeratorSymbol,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tProxyType,\n\tdie,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\t/* istanbul ignore next */\n\tvar extendStatics = function(d: any, b: any): any {\n\t\textendStatics =\n\t\t\tObject.setPrototypeOf ||\n\t\t\t({__proto__: []} instanceof Array &&\n\t\t\t\tfunction(d, b) {\n\t\t\t\t\td.__proto__ = b\n\t\t\t\t}) ||\n\t\t\tfunction(d, b) {\n\t\t\t\tfor (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]\n\t\t\t}\n\t\treturn extendStatics(d, b)\n\t}\n\n\t// Ugly hack to resolve #502 and inherit built in Map / Set\n\tfunction __extends(d: any, b: any): any {\n\t\textendStatics(d, b)\n\t\tfunction __(this: any): any {\n\t\t\tthis.constructor = d\n\t\t}\n\t\td.prototype =\n\t\t\t// @ts-ignore\n\t\t\t((__.prototype = b.prototype), new __())\n\t}\n\n\tconst DraftMap = (function(_super) {\n\t\t__extends(DraftMap, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftMap(this: any, target: AnyMap, parent?: ImmerState): any {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t} as MapState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftMap.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: false,\n\t\t\t// configurable: true\n\t\t})\n\n\t\tp.has = function(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tp.set = function(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.forEach = function(\n\t\t\tcb: (value: any, key: any, self: any) => void,\n\t\t\tthisArg?: any\n\t\t) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tp.get = function(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tp.keys = function(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tp.values = function(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp.entries = function(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[iteratorSymbol]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.entries()\n\t\t}\n\n\t\treturn DraftMap\n\t})(Map)\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tconst DraftSet = (function(_super) {\n\t\t__extends(DraftSet, _super)\n\t\t// Create class manually, cause #502\n\t\tfunction DraftSet(this: any, target: AnySet, parent?: ImmerState) {\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ProxyType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t} as SetState\n\t\t\treturn this\n\t\t}\n\t\tconst p = DraftSet.prototype\n\n\t\tObject.defineProperty(p, \"size\", {\n\t\t\tget: function() {\n\t\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t\t}\n\t\t\t// enumerable: true,\n\t\t})\n\n\t\tp.has = function(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tp.add = function(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tp.delete = function(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tp.clear = function() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tp.values = function(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tp.entries = function entries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tp.keys = function(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp[iteratorSymbol] = function() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tp.forEach = function forEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\n\t\treturn DraftSet\n\t})(Set)\n\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(state.scope_.immer_, value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","import {enableES5} from \"./es5\"\nimport {enableMapSet} from \"./mapset\"\nimport {enablePatches} from \"./patches\"\n\nexport function enableAllPlugins() {\n\tenableES5()\n\tenableMapSet()\n\tenablePatches()\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\nexport default produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to use the ES2015 `Proxy` class when creating drafts, which is\n * always faster than using ES5 proxies.\n *\n * By default, feature detection is used, so calling this is rarely necessary.\n */\nexport const setUseProxies = immer.setUseProxies.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enableES5} from \"./plugins/es5\"\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\nexport {enableAllPlugins} from \"./plugins/all\"\n","// Should be no imports here!\n\n// Some things that should be evaluated before all else...\n\n// We only want to know if non-polyfilled symbols are available\nconst hasSymbol =\n\ttypeof Symbol !== \"undefined\" && typeof Symbol(\"x\") === \"symbol\"\nexport const hasMap = typeof Map !== \"undefined\"\nexport const hasSet = typeof Set !== \"undefined\"\nexport const hasProxies =\n\ttypeof Proxy !== \"undefined\" &&\n\ttypeof Proxy.revocable !== \"undefined\" &&\n\ttypeof Reflect !== \"undefined\"\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: Nothing = hasSymbol\n\t? Symbol.for(\"immer-nothing\")\n\t: ({[\"immer-nothing\"]: true} as any)\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-draftable\")\n\t: (\"__$immer_draftable\" as any)\n\nexport const DRAFT_STATE: unique symbol = hasSymbol\n\t? Symbol.for(\"immer-state\")\n\t: (\"__$immer_state\" as any)\n\n// Even a polyfilled Symbol might provide Symbol.iterator\nexport const iteratorSymbol: typeof Symbol.iterator =\n\t(typeof Symbol != \"undefined\" && Symbol.iterator) || (\"@@iterator\" as any)\n\n/** Use a class type for `nothing` so its type is unique */\nexport class Nothing {\n\t// This lets us do `Exclude<T, Nothing>`\n\t// @ts-ignore\n\tprivate _!: unique symbol\n}\n","import { produce } from 'immer';\n\nconst immerImpl = (initializer) => (set, get, store) => {\n store.setState = (updater, replace, ...a) => {\n const nextState = typeof updater === \"function\" ? produce(updater) : updater;\n return set(nextState, replace, ...a);\n };\n return initializer(store.setState, get, store);\n};\nconst immer = immerImpl;\n\nexport { immer };\n","/**\n * Ponyfill of the HTMLFormElement.requestSubmit() method.\n * Based on polyfill from: https://github.com/javan/form-request-submit-polyfill/blob/main/form-request-submit-polyfill.js\n */\nexport const requestSubmit = (\n element: HTMLFormElement,\n submitter?: HTMLElement\n) => {\n // In vitest, let's test the polyfill.\n // Cypress will test the native implementation by nature of using chrome.\n if (\n typeof Object.getPrototypeOf(element).requestSubmit === \"function\" &&\n !import.meta.vitest\n ) {\n element.requestSubmit(submitter);\n return;\n }\n\n if (submitter) {\n validateSubmitter(element, submitter);\n submitter.click();\n return;\n }\n\n const dummySubmitter = document.createElement(\"input\");\n dummySubmitter.type = \"submit\";\n dummySubmitter.hidden = true;\n element.appendChild(dummySubmitter);\n dummySubmitter.click();\n element.removeChild(dummySubmitter);\n};\n\nfunction validateSubmitter(element: HTMLFormElement, submitter: HTMLElement) {\n // Should be redundant, but here for completeness\n const isHtmlElement = submitter instanceof HTMLElement;\n if (!isHtmlElement) {\n raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n }\n\n const hasSubmitType =\n \"type\" in submitter && (submitter as HTMLInputElement).type === \"submit\";\n if (!hasSubmitType)\n raise(TypeError, \"The specified element is not a submit button\");\n\n const isForCorrectForm =\n \"form\" in submitter && (submitter as HTMLInputElement).form === element;\n if (!isForCorrectForm)\n raise(\n DOMException,\n \"The specified element is not owned by this form element\",\n \"NotFoundError\"\n );\n}\n\ninterface ErrorConstructor {\n new (message: string, name?: string): Error;\n}\n\nfunction raise(\n errorConstructor: ErrorConstructor,\n message: string,\n name?: string\n): never {\n throw new errorConstructor(\n \"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\",\n name\n );\n}\n\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest;\n it(\"should validate the submitter\", () => {\n const form = document.createElement(\"form\");\n document.body.appendChild(form);\n\n const submitter = document.createElement(\"input\");\n expect(() => validateSubmitter(null as any, null as any)).toThrow();\n expect(() => validateSubmitter(form, null as any)).toThrow();\n expect(() => validateSubmitter(form, submitter)).toThrow();\n expect(() =>\n validateSubmitter(form, document.createElement(\"div\"))\n ).toThrow();\n\n submitter.type = \"submit\";\n expect(() => validateSubmitter(form, submitter)).toThrow();\n\n form.appendChild(submitter);\n expect(() => validateSubmitter(form, submitter)).not.toThrow();\n\n form.removeChild(submitter);\n expect(() => validateSubmitter(form, submitter)).toThrow();\n\n document.body.appendChild(submitter);\n form.id = \"test-form\";\n submitter.setAttribute(\"form\", \"test-form\");\n expect(() => validateSubmitter(form, submitter)).not.toThrow();\n\n const button = document.createElement(\"button\");\n button.type = \"submit\";\n form.appendChild(button);\n expect(() => validateSubmitter(form, button)).not.toThrow();\n });\n}\n","import { getPath, setPath } from \"set-get\";\nimport invariant from \"tiny-invariant\";\n\n////\n// All of these array helpers are written in a way that mutates the original array.\n// This is because we're working with immer.\n////\n\nexport const getArray = (values: any, field: string): unknown[] => {\n const value = getPath(values, field);\n if (value === undefined || value === null) {\n const newValue: unknown[] = [];\n setPath(values, field, newValue);\n return newValue;\n }\n invariant(\n Array.isArray(value),\n `FieldArray: defaultValue value for ${field} must be an array, null, or undefined`\n );\n return value;\n};\n\nexport const sparseCopy = <T>(array: T[]): T[] => array.slice();\n\nexport const swap = (array: unknown[], indexA: number, indexB: number) => {\n const itemA = array[indexA];\n const itemB = array[indexB];\n\n const hasItemA = indexA in array;\n const hasItemB = indexB in array;\n\n // If we're dealing with a sparse array (i.e. one of the indeces doesn't exist),\n // we should keep it sparse\n if (hasItemA) {\n array[indexB] = itemA;\n } else {\n delete array[indexB];\n }\n\n if (hasItemB) {\n array[indexA] = itemB;\n } else {\n delete array[indexA];\n }\n};\n\n// A splice that can handle sparse arrays\nfunction sparseSplice(\n array: unknown[],\n start: number,\n deleteCount?: number,\n item?: unknown\n) {\n // Inserting an item into an array won't behave as we need it to if the array isn't\n // at least as long as the start index. We can force the array to be long enough like this.\n if (array.length < start && item) {\n array.length = start;\n }\n\n // If we just pass item in, it'll be undefined and splice will delete the item.\n if (arguments.length === 4) return array.splice(start, deleteCount!, item);\n else if (arguments.length === 3) return array.splice(start, deleteCount);\n return array.splice(start);\n}\n\nexport const move = (array: unknown[], from: number, to: number) => {\n const [item] = sparseSplice(array, from, 1);\n sparseSplice(array, to, 0, item);\n};\n\nexport const insert = (array: unknown[], index: number, value: unknown) => {\n sparseSplice(array, index, 0, value);\n};\n\nexport const insertEmpty = (array: unknown[], index: number) => {\n const tail = sparseSplice(array, index);\n tail.forEach((item, i) => {\n sparseSplice(array, index + i + 1, 0, item);\n });\n};\n\nexport const remove = (array: unknown[], index: number) => {\n sparseSplice(array, index, 1);\n};\n\nexport const replace = (array: unknown[], index: number, value: unknown) => {\n sparseSplice(array, index, 1, value);\n};\n\n/**\n * The purpose of this helper is to make it easier to update `fieldErrors` and `touchedFields`.\n * We key those objects by full paths to the fields.\n * When we're doing array mutations, that makes it difficult to update those objects.\n */\nexport const mutateAsArray = (\n field: string,\n obj: Record<string, any>,\n mutate: (arr: any[]) => void\n) => {\n const beforeKeys = new Set<string>();\n const arr: any[] = [];\n\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith(field) && key !== field) {\n beforeKeys.add(key);\n setPath(arr, key.substring(field.length), value);\n }\n }\n\n mutate(arr);\n for (const key of beforeKeys) {\n delete obj[key];\n }\n\n const newKeys = getDeepArrayPaths(arr);\n for (const key of newKeys) {\n const val = getPath(arr, key);\n if (val !== undefined) {\n obj[`${field}${key}`] = val;\n }\n }\n};\n\nconst getDeepArrayPaths = (obj: any, basePath: string = \"\"): string[] => {\n // This only needs to handle arrays and plain objects\n // and we can assume the first call is always an array.\n\n if (Array.isArray(obj)) {\n return obj.flatMap((item, index) =>\n getDeepArrayPaths(item, `${basePath}[${index}]`)\n );\n }\n\n if (typeof obj === \"object\") {\n return Object.keys(obj).flatMap((key) =>\n getDeepArrayPaths(obj[key], `${basePath}.${key}`)\n );\n }\n\n return [basePath];\n};\n\nif (import.meta.vitest) {\n const { describe, expect, it } = import.meta.vitest;\n\n // Count the actual number of items in the array\n // instead of just getting the length.\n // This is useful for validating that sparse arrays are handled correctly.\n const countArrayItems = (arr: any[]) => {\n let count = 0;\n arr.forEach(() => count++);\n return count;\n };\n\n describe(\"getArray\", () => {\n it(\"shoud get a deeply nested array that can be mutated to update the nested value\", () => {\n const values = {\n d: [\n { foo: \"bar\", baz: [true, false] },\n { e: true, f: \"hi\" },\n ],\n };\n const result = getArray(values, \"d[0].baz\");\n const finalValues = {\n d: [\n { foo: \"bar\", baz: [true, false, true] },\n { e: true, f: \"hi\" },\n ],\n };\n\n expect(result).toEqual([true, false]);\n result.push(true);\n expect(values).toEqual(finalValues);\n });\n\n it(\"should return an empty array that can be mutated if result is null or undefined\", () => {\n const values = {};\n const result = getArray(values, \"a.foo[0].bar\");\n const finalValues = {\n a: { foo: [{ bar: [\"Bob ross\"] }] },\n };\n\n expect(result).toEqual([]);\n result.push(\"Bob ross\");\n expect(values).toEqual(finalValues);\n });\n\n it(\"should throw if the value is defined and not an array\", () => {\n const values = { foo: \"foo\" };\n expect(() => getArray(values, \"foo\")).toThrow();\n });\n });\n\n describe(\"swap\", () => {\n it(\"should swap two items\", () => {\n const array = [1, 2, 3];\n swap(array, 0, 1);\n expect(array).toEqual([2, 1, 3]);\n });\n\n it(\"should work for sparse arrays\", () => {\n // A bit of a sanity check for native array behavior\n const arr = [] as any[];\n arr[0] = true;\n swap(arr, 0, 2);\n\n expect(countArrayItems(arr)).toEqual(1);\n expect(0 in arr).toBe(false);\n expect(2 in arr).toBe(true);\n expect(arr[2]).toEqual(true);\n });\n });\n\n describe(\"move\", () => {\n it(\"should move an item to a new index\", () => {\n const array = [1, 2, 3];\n move(array, 0, 1);\n expect(array).toEqual([2, 1, 3]);\n });\n\n it(\"should work with sparse arrays\", () => {\n const array = [1];\n move(array, 0, 2);\n\n expect(countArrayItems(array)).toEqual(1);\n expect(array).toEqual([undefined, undefined, 1]);\n });\n });\n\n describe(\"insert\", () => {\n it(\"should insert an item at a new index\", () => {\n const array = [1, 2, 3];\n insert(array, 1, 4);\n expect(array).toEqual([1, 4, 2, 3]);\n });\n\n it(\"should be able to insert falsey values\", () => {\n const array = [1, 2, 3];\n insert(array, 1, null);\n expect(array).toEqual([1, null, 2, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n insert(array, 0, true);\n\n expect(countArrayItems(array)).toEqual(2);\n expect(array).toEqual([true, undefined, undefined, true]);\n });\n });\n\n describe(\"insertEmpty\", () => {\n it(\"should insert an empty item at a given index\", () => {\n const array = [1, 2, 3];\n insertEmpty(array, 1);\n // eslint-disable-next-line no-sparse-arrays\n expect(array).toStrictEqual([1, , 2, 3]);\n expect(array).not.toStrictEqual([1, undefined, 2, 3]);\n });\n\n it(\"should work with already sparse arrays\", () => {\n // eslint-disable-next-line no-sparse-arrays\n const array = [, , 1, , 2, , 3];\n insertEmpty(array, 3);\n // eslint-disable-next-line no-sparse-arrays\n expect(array).toStrictEqual([, , 1, , , 2, , 3]);\n expect(array).not.toStrictEqual([\n undefined,\n undefined,\n 1,\n undefined,\n undefined,\n 2,\n undefined,\n 3,\n ]);\n });\n });\n\n describe(\"remove\", () => {\n it(\"should remove an item at a given index\", () => {\n const array = [1, 2, 3];\n remove(array, 1);\n expect(array).toEqual([1, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n remove(array, 0);\n\n expect(countArrayItems(array)).toEqual(1);\n expect(array).toEqual([undefined, true]);\n });\n });\n\n describe(\"replace\", () => {\n it(\"should replace an item at a given index\", () => {\n const array = [1, 2, 3];\n replace(array, 1, 4);\n expect(array).toEqual([1, 4, 3]);\n });\n\n it(\"should handle sparse arrays\", () => {\n const array: any[] = [];\n array[2] = true;\n replace(array, 0, true);\n expect(countArrayItems(array)).toEqual(2);\n expect(array).toEqual([true, undefined, true]);\n });\n });\n\n describe(\"mutateAsArray\", () => {\n it(\"should handle swap\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[2]\": \"bar\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"bar\",\n \"myField[2]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should swap sparse arrays\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[2]\": \"foo\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should handle arrays with nested values\", () => {\n const values = {\n myField: \"something\",\n \"myField[0].title\": \"foo\",\n \"myField[0].note\": \"bar\",\n \"myField[2].title\": \"other\",\n \"myField[2].note\": \"other\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n swap(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0].title\": \"other\",\n \"myField[0].note\": \"other\",\n \"myField[2].title\": \"foo\",\n \"myField[2].note\": \"bar\",\n otherField: \"baz\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should handle move\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"bar\",\n \"myField[2]\": \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n move(arr, 0, 2);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"bar\",\n \"myField[1]\": \"baz\",\n \"myField[2]\": \"foo\",\n \"otherField[0]\": \"something else\",\n });\n });\n\n it(\"should not create keys for `undefined`\", () => {\n const values = {\n \"myField[0]\": \"foo\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n arr.unshift(undefined);\n });\n expect(Object.keys(values)).toHaveLength(1);\n expect(values).toEqual({\n \"myField[1]\": \"foo\",\n });\n });\n\n it(\"should handle remove\", () => {\n const values = {\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"bar\",\n \"myField[2]\": \"baz\",\n \"otherField[0]\": \"something else\",\n };\n mutateAsArray(\"myField\", values, (arr) => {\n remove(arr, 1);\n });\n expect(values).toEqual({\n myField: \"something\",\n \"myField[0]\": \"foo\",\n \"myField[1]\": \"baz\",\n \"otherField[0]\": \"something else\",\n });\n expect(\"myField[2]\" in values).toBe(false);\n });\n });\n\n describe(\"getDeepArrayPaths\", () => {\n it(\"should return all paths recursively\", () => {\n const obj = [\n true,\n true,\n [true, true],\n { foo: true, bar: { baz: true, test: [true] } },\n ];\n\n expect(getDeepArrayPaths(obj, \"myField\")).toEqual([\n \"myField[0]\",\n \"myField[1]\",\n \"myField[2][0]\",\n \"myField[2][1]\",\n \"myField[3].foo\",\n \"myField[3].bar.baz\",\n \"myField[3].bar.test[0]\",\n ]);\n });\n });\n}\n","import { FormState, useRootFormStore } from \"./createFormStore\";\nimport { InternalFormId } from \"./types\";\n\nexport const useFormStore = <T>(\n formId: InternalFormId,\n selector: (state: FormState) => T\n) => {\n return useRootFormStore((state) => selector(state.form(formId)));\n};\n","import { useCallback, useEffect } from \"react\";\nimport { InternalFormContextValue } from \"../formContext\";\nimport { useFieldDefaultValue } from \"../hooks\";\nimport { useFormStore } from \"./storeHooks\";\nimport { InternalFormId } from \"./types\";\n\nexport const useControlledFieldValue = (\n context: InternalFormContextValue,\n field: string\n) => {\n const value = useFormStore(context.formId, (state) =>\n state.controlledFields.getValue(field)\n );\n const isFormHydrated = useFormStore(\n context.formId,\n (state) => state.isHydrated\n );\n const defaultValue = useFieldDefaultValue(field, context);\n\n return isFormHydrated ? value : defaultValue;\n};\n\nexport const useRegisterControlledField = (\n context: InternalFormContextValue,\n field: string\n) => {\n const resolveUpdate = useFormStore(\n context.formId,\n (state) => state.controlledFields.valueUpdateResolvers[field]\n );\n useEffect(() => {\n resolveUpdate?.();\n }, [resolveUpdate]);\n\n const register = useFormStore(\n context.formId,\n (state) => state.controlledFields.register\n );\n const unregister = useFormStore(\n context.formId,\n (state) => state.controlledFields.unregister\n );\n useEffect(() => {\n register(field);\n return () => unregister(field);\n }, [context.formId, field, register, unregister]);\n};\n\nexport const useControllableValue = (\n context: InternalFormContextValue,\n field: string\n) => {\n useRegisterControlledField(context, field);\n\n const setControlledFieldValue = useFormStore(\n context.formId,\n (state) => state.controlledFields.setValue\n );\n const setValue = useCallback(\n (value: unknown) => setControlledFieldValue(field, value),\n [field, setControlledFieldValue]\n );\n\n const value = useControlledFieldValue(context, field);\n\n return [value, setValue] as const;\n};\n\nexport const useUpdateControllableValue = (formId: InternalFormId) => {\n const setValue = useFormStore(\n formId,\n (state) => state.controlledFields.setValue\n );\n return useCallback(\n (field: string, value: unknown) => setValue(field, value),\n [setValue]\n );\n};\n\nexport const useAwaitValue = (formId: InternalFormId) => {\n const awaitValue = useFormStore(\n formId,\n (state) => state.controlledFields.awaitValueUpdate\n );\n return useCallback((field: string) => awaitValue(field), [awaitValue]);\n};\n","import { json } from \"@remix-run/server-runtime\";\nimport {\n formDefaultValuesKey,\n FORM_DEFAULTS_FIELD,\n} from \"./internal/constants\";\nimport {\n ValidatorError,\n ValidationErrorResponseData,\n} from \"./validation/types\";\n\n/**\n * Takes the errors from a `Validator` and returns a `Response`.\n * When you return this from your action, `ValidatedForm` on the frontend will automatically\n * display the errors on the correct fields on the correct form.\n *\n * You can also provide a second argument to `validationError`\n * to specify how to repopulate the form when JS is disabled.\n *\n * @example\n * ```ts\n * const result = validator.validate(await request.formData());\n * if (result.error) return validationError(result.error, result.submittedData);\n * ```\n */\nexport function validationError(\n error: ValidatorError,\n repopulateFields?: unknown,\n init?: ResponseInit\n) {\n return json<ValidationErrorResponseData>(\n {\n fieldErrors: error.fieldErrors,\n subaction: error.subaction,\n repopulateFields,\n formId: error.formId,\n },\n { status: 422, ...init }\n );\n}\n\nexport type FormDefaults = {\n [formDefaultsKey: `${typeof FORM_DEFAULTS_FIELD}_${string}`]: any;\n};\n\n// FIXME: Remove after https://github.com/egoist/tsup/issues/813 is fixed\nexport type internal_FORM_DEFAULTS_FIELD = typeof FORM_DEFAULTS_FIELD;\n\nexport const setFormDefaults = <DataType = any>(\n formId: string,\n defaultValues: Partial<DataType>\n): FormDefaults => ({\n [formDefaultValuesKey(formId)]: defaultValues,\n});\n","import {\n FetcherWithComponents,\n Form as RemixForm,\n FormMethod,\n useSubmit,\n SubmitOptions,\n FormEncType,\n} from \"@remix-run/react\";\nimport React, {\n ComponentProps,\n FormEvent,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport * as R from \"remeda\";\nimport { useIsSubmitting, useIsValid } from \"./hooks\";\nimport { FORM_ID_FIELD } from \"./internal/constants\";\nimport {\n InternalFormContext,\n InternalFormContextValue,\n} from \"./internal/formContext\";\nimport {\n useDefaultValuesFromLoader,\n useErrorResponseForForm,\n useHasActiveFormSubmit,\n useSetFieldErrors,\n} from \"./internal/hooks\";\nimport { MultiValueMap, useMultiValueMap } from \"./internal/MultiValueMap\";\nimport {\n SyncedFormProps,\n useRootFormStore,\n} from \"./internal/state/createFormStore\";\nimport { useFormStore } from \"./internal/state/storeHooks\";\nimport { useSubmitComplete } from \"./internal/submissionCallbacks\";\nimport {\n mergeRefs,\n useDeepEqualsMemo,\n useIsomorphicLayoutEffect as useLayoutEffect,\n} from \"./internal/util\";\nimport { FieldErrors, Validator } from \"./validation/types\";\n\ntype DeepPartial<T> = T extends object\n ? {\n [P in keyof T]?: DeepPartial<T[P]>;\n }\n : T;\n\ntype SubactionData<\n DataType,\n Subaction extends string | undefined\n> = DataType & { subaction: Subaction };\n\n// Not all validation libraries support encoding a literal value in the schema type (e.g. yup).\n// This condition here allows us to provide strictness for users who are using a validation library that does support it,\n// but also allows us to support users who are using a validation library that doesn't support it.\ntype DataForSubaction<\n DataType,\n Subaction extends string | undefined\n> = Subaction extends string // Not all validation libraries support encoding a literal value in the schema type.\n ? SubactionData<DataType, Subaction> extends undefined\n ? DataType\n : SubactionData<DataType, Subaction>\n : DataType;\n\nexport type FormProps<DataType, Subaction extends string | undefined> = {\n /**\n * A `Validator` object that describes how to validate the form.\n */\n validator: Validator<DataType>;\n /**\n * A submit callback that gets called when the form is submitted\n * after all validations have been run.\n */\n onSubmit?: (\n data: DataForSubaction<DataType, Subaction>,\n event: React.FormEvent<HTMLFormElement>\n ) => void | Promise<void>;\n /**\n * Allows you to provide a `fetcher` from Remix's `useFetcher` hook.\n * The form will use the fetcher for loading states, action data, etc\n * instead of the default form action.\n */\n fetcher?: FetcherWithComponents<any>;\n /**\n * Accepts an object of default values for the form\n * that will automatically be propagated to the form fields via `useField`.\n */\n defaultValues?: DeepPartial<DataForSubaction<DataType, Subaction>>;\n /**\n * A ref to the form element.\n */\n formRef?: React.RefObject<HTMLFormElement>;\n /**\n * An optional sub-action to use for the form.\n * Setting a value here will cause the form to be submitted with an extra `subaction` value.\n * This can be useful when there are multiple forms on the screen handled by the same action.\n */\n subaction?: Subaction;\n /**\n * Reset the form to the default values after the form has been successfully submitted.\n * This is useful if you want to submit the same form multiple times,\n * and don't redirect in-between submissions.\n */\n resetAfterSubmit?: boolean;\n /**\n * Normally, the first invalid input will be focused when the validation fails on form submit.\n * Set this to `false` to disable this behavior.\n */\n disableFocusOnError?: boolean;\n} & Omit<ComponentProps<typeof RemixForm>, \"onSubmit\">;\n\nconst getDataFromForm = (el: HTMLFormElement) => new FormData(el);\n\nfunction nonNull<T>(value: T | null | undefined): value is T {\n return value !== null;\n}\n\nconst focusFirstInvalidInput = (\n fieldErrors: FieldErrors,\n customFocusHandlers: MultiValueMap<string, () => void>,\n formElement: HTMLFormElement\n) => {\n const namesInOrder = [...formElement.elements]\n .map((el) => {\n const input = el instanceof RadioNodeList ? el[0] : el;\n if (input instanceof HTMLElement && \"name\" in input)\n return (input as any).name;\n return null;\n })\n .filter(nonNull)\n .filter((name) => name in fieldErrors);\n const uniqueNamesInOrder = R.uniq(namesInOrder);\n\n for (const fieldName of uniqueNamesInOrder) {\n if (customFocusHandlers.has(fieldName)) {\n customFocusHandlers.getAll(fieldName).forEach((handler) => {\n handler();\n });\n break;\n }\n\n const elem = formElement.elements.namedItem(fieldName);\n if (!elem) continue;\n\n if (elem instanceof RadioNodeList) {\n const selectedRadio =\n [...elem]\n .filter(\n (item): item is HTMLInputElement => item instanceof HTMLInputElement\n )\n .find((item) => item.value === elem.value) ?? elem[0];\n if (selectedRadio && selectedRadio instanceof HTMLInputElement) {\n selectedRadio.focus();\n break;\n }\n }\n\n if (elem instanceof HTMLElement) {\n if (elem instanceof HTMLInputElement && elem.type === \"hidden\") {\n continue;\n }\n\n elem.focus();\n break;\n }\n }\n};\n\nconst useFormId = (providedId?: string): string | symbol => {\n // We can use a `Symbol` here because we only use it after hydration\n const [symbolId] = useState(() => Symbol(\"remix-validated-form-id\"));\n return providedId ?? symbolId;\n};\n\n/**\n * Use a component to access the state so we don't cause\n * any extra rerenders of the whole form.\n */\nconst FormResetter = ({\n resetAfterSubmit,\n formRef,\n}: {\n resetAfterSubmit: boolean;\n formRef: RefObject<HTMLFormElement>;\n}) => {\n const isSubmitting = useIsSubmitting();\n const isValid = useIsValid();\n useSubmitComplete(isSubmitting, () => {\n if (isValid && resetAfterSubmit) {\n formRef.current?.reset();\n }\n });\n return null;\n};\n\nfunction formEventProxy<T extends object>(event: T): T {\n let defaultPrevented = false;\n return new Proxy(event, {\n get: (target, prop) => {\n if (prop === \"preventDefault\") {\n return () => {\n defaultPrevented = true;\n };\n }\n\n if (prop === \"defaultPrevented\") {\n return defaultPrevented;\n }\n\n return target[prop as keyof T];\n },\n }) as T;\n}\n\ntype HTMLSubmitEvent = React.BaseSyntheticEvent<\n SubmitEvent,\n Event,\n HTMLFormElement\n>;\n\ntype HTMLFormSubmitter = HTMLButtonElement | HTMLInputElement;\n\n/**\n * The primary form component of `remix-validated-form`.\n */\nexport function ValidatedForm<\n DataType extends { [fieldName: string]: any },\n Subaction extends string | undefined\n>({\n validator,\n onSubmit,\n children,\n fetcher,\n action,\n defaultValues: unMemoizedDefaults,\n formRef: formRefProp,\n onReset,\n subaction,\n resetAfterSubmit = false,\n disableFocusOnError,\n method,\n replace,\n id,\n preventScrollReset,\n relative,\n encType,\n ...rest\n}: FormProps<DataType, Subaction>) {\n const formId = useFormId(id);\n const providedDefaultValues = useDeepEqualsMemo(unMemoizedDefaults);\n const contextValue = useMemo<InternalFormContextValue>(\n () => ({\n formId,\n action,\n subaction,\n defaultValuesProp: providedDefaultValues,\n fetcher,\n }),\n [action, fetcher, formId, providedDefaultValues, subaction]\n );\n const backendError = useErrorResponseForForm(contextValue);\n const backendDefaultValues = useDefaultValuesFromLoader(contextValue);\n const hasActiveSubmission = useHasActiveFormSubmit(contextValue);\n const formRef = useRef<HTMLFormElement>(null);\n const Form = fetcher?.Form ?? RemixForm;\n\n const submit = useSubmit();\n const setFieldErrors = useSetFieldErrors(formId);\n const setFieldError = useFormStore(formId, (state) => state.setFieldError);\n const reset = useFormStore(formId, (state) => state.reset);\n const startSubmit = useFormStore(formId, (state) => state.startSubmit);\n const endSubmit = useFormStore(formId, (state) => state.endSubmit);\n const syncFormProps = useFormStore(formId, (state) => state.syncFormProps);\n const setFormElementInState = useFormStore(\n formId,\n (state) => state.setFormElement\n );\n const cleanupForm = useRootFormStore((state) => state.cleanupForm);\n const registerForm = useRootFormStore((state) => state.registerForm);\n\n const customFocusHandlers = useMultiValueMap<string, () => void>();\n const registerReceiveFocus: SyncedFormProps[\"registerReceiveFocus\"] =\n useCallback(\n (fieldName, handler) => {\n customFocusHandlers().add(fieldName, handler);\n return () => {\n customFocusHandlers().remove(fieldName, handler);\n };\n },\n [customFocusHandlers]\n );\n\n // TODO: all these hooks running at startup cause extra, unnecessary renders\n // There must be a nice way to avoid this.\n useLayoutEffect(() => {\n registerForm(formId);\n return () => cleanupForm(formId);\n }, [cleanupForm, formId, registerForm]);\n\n useLayoutEffect(() => {\n syncFormProps({\n action,\n defaultValues: providedDefaultValues ?? backendDefaultValues ?? {},\n subaction,\n registerReceiveFocus,\n validator,\n });\n }, [\n action,\n providedDefaultValues,\n registerReceiveFocus,\n subaction,\n syncFormProps,\n backendDefaultValues,\n validator,\n ]);\n\n useLayoutEffect(() => {\n setFormElementInState(formRef.current);\n }, [setFormElementInState]);\n\n useEffect(() => {\n setFieldErrors(backendError?.fieldErrors ?? {});\n if (!disableFocusOnError && backendError?.fieldErrors) {\n focusFirstInvalidInput(\n backendError.fieldErrors,\n customFocusHandlers(),\n formRef.current!\n );\n }\n }, [\n backendError?.fieldErrors,\n customFocusHandlers,\n disableFocusOnError,\n setFieldErrors,\n setFieldError,\n ]);\n\n useSubmitComplete(hasActiveSubmission, () => {\n endSubmit();\n });\n\n const handleSubmit = async (\n e: FormEvent<HTMLFormElement>,\n target: typeof e.currentTarget,\n nativeEvent: HTMLSubmitEvent[\"nativeEvent\"]\n ) => {\n startSubmit();\n const submitter = nativeEvent.submitter as HTMLFormSubmitter | null;\n const formMethod = (submitter?.formMethod as FormMethod) || method;\n const formData = getDataFromForm(target);\n if (submitter?.name) {\n formData.append(submitter.name, submitter.value);\n }\n\n const result = await validator.validate(formData);\n if (result.error) {\n setFieldErrors(result.error.fieldErrors);\n endSubmit();\n if (!disableFocusOnError) {\n focusFirstInvalidInput(\n result.error.fieldErrors,\n customFocusHandlers(),\n formRef.current!\n );\n }\n } else {\n setFieldErrors({});\n const eventProxy = formEventProxy(e);\n await onSubmit?.(result.data as any, eventProxy);\n if (eventProxy.defaultPrevented) {\n endSubmit();\n return;\n }\n\n const opts: SubmitOptions = {\n method: formMethod,\n replace,\n preventScrollReset,\n relative,\n action,\n encType: encType as FormEncType | undefined,\n };\n\n // We deviate from the Remix code here a bit because of our async submit.\n // In Remix's `FormImpl`, they use `event.currentTarget` to get the form,\n // but we already have the form in `formRef.current` so we can just use that.\n // If we use `event.currentTarget` here, it will break because `currentTarget`\n // will have changed since the start of the submission.\n if (fetcher) fetcher.submit(formData, opts);\n else submit(formData, opts);\n }\n };\n\n return (\n <Form\n ref={mergeRefs([formRef, formRefProp])}\n {...rest}\n id={id}\n action={action}\n method={method}\n encType={encType}\n replace={replace}\n preventScrollReset={preventScrollReset}\n relative={relative}\n onSubmit={(e) => {\n e.preventDefault();\n handleSubmit(\n e,\n e.currentTarget,\n (e as unknown as HTMLSubmitEvent).nativeEvent\n );\n }}\n onReset={(event) => {\n onReset?.(event);\n if (event.defaultPrevented) return;\n reset();\n }}\n >\n <InternalFormContext.Provider value={contextValue}>\n <>\n <FormResetter formRef={formRef} resetAfterSubmit={resetAfterSubmit} />\n {subaction && (\n <input type=\"hidden\" value={subaction} name=\"subaction\" />\n )}\n {id && <input type=\"hidden\" value={id} name={FORM_ID_FIELD} />}\n {children}\n </>\n </InternalFormContext.Provider>\n </Form>\n );\n}\n","import { useCallback, useRef } from \"react\";\n\nexport class MultiValueMap<Key, Value> {\n private dict: Map<Key, Value[]> = new Map();\n\n add = (key: Key, value: Value) => {\n if (this.dict.has(key)) {\n this.dict.get(key)!.push(value);\n } else {\n this.dict.set(key, [value]);\n }\n };\n\n delete = (key: Key) => {\n this.dict.delete(key);\n };\n\n remove = (key: Key, value: Value) => {\n if (!this.dict.has(key)) return;\n const array = this.dict.get(key)!;\n const index = array.indexOf(value);\n if (index !== -1) array.splice(index, 1);\n if (array.length === 0) this.dict.delete(key);\n };\n\n getAll = (key: Key): Value[] => {\n return this.dict.get(key) ?? [];\n };\n\n entries = (): IterableIterator<[Key, Value[]]> => this.dict.entries();\n\n values = (): IterableIterator<Value[]> => this.dict.values();\n\n has = (key: Key): boolean => this.dict.has(key);\n}\n\nexport const useMultiValueMap = <Key, Value>() => {\n const ref = useRef<MultiValueMap<Key, Value> | null>(null);\n return useCallback(() => {\n if (ref.current) return ref.current;\n ref.current = new MultiValueMap();\n return ref.current;\n }, []);\n};\n","import { useEffect, useRef } from \"react\";\n\nexport function useSubmitComplete(isSubmitting: boolean, callback: () => void) {\n const isPending = useRef(false);\n useEffect(() => {\n if (isSubmitting) {\n isPending.current = true;\n }\n\n if (!isSubmitting && isPending.current) {\n isPending.current = false;\n callback();\n }\n });\n}\n","import type React from \"react\";\nimport { useEffect, useLayoutEffect, useRef } from \"react\";\nimport * as R from \"remeda\";\n\nexport const omit = (obj: any, ...keys: string[]) => {\n const result = { ...obj };\n for (const key of keys) {\n delete result[key];\n }\n return result;\n};\n\nexport const mergeRefs = <T = any>(\n refs: Array<React.MutableRefObject<T> | React.LegacyRef<T> | undefined>\n): React.RefCallback<T> => {\n return (value: T) => {\n refs.filter(Boolean).forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n};\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\nexport const useDeepEqualsMemo = <T>(item: T): T => {\n const ref = useRef<T>(item);\n const areEqual = ref.current === item || R.equals(ref.current, item);\n useEffect(() => {\n if (!areEqual) {\n ref.current = item;\n }\n });\n return areEqual ? ref.current : item;\n};\n","import * as R from \"remeda\";\nimport { CreateValidatorArg, GenericObject, Validator } from \"..\";\nimport { FORM_ID_FIELD } from \"../internal/constants\";\nimport { objectFromPathEntries } from \"../internal/flatten\";\n\nconst preprocessFormData = (data: GenericObject | FormData): GenericObject => {\n // A slightly janky way of determining if the data is a FormData object\n // since node doesn't really have FormData\n if (\"entries\" in data && typeof data.entries === \"function\")\n return objectFromPathEntries([...data.entries()]);\n return objectFromPathEntries(Object.entries(data));\n};\n\nconst omitInternalFields = (data: GenericObject): GenericObject =>\n R.omit(data, [FORM_ID_FIELD]);\n\n/**\n * Used to create a validator for a form.\n * It provides built-in handling for unflattening nested objects and\n * extracting the values from FormData.\n */\nexport function createValidator<T>(\n validator: CreateValidatorArg<T>\n): Validator<T> {\n return {\n validate: async (value) => {\n const data = preprocessFormData(value);\n const result = await validator.validate(omitInternalFields(data));\n\n if (result.error) {\n return {\n data: undefined,\n error: {\n fieldErrors: result.error,\n subaction: data.subaction,\n formId: data[FORM_ID_FIELD],\n },\n submittedData: data,\n formId: data[FORM_ID_FIELD],\n };\n }\n\n return {\n data: result.data,\n error: undefined,\n submittedData: data,\n formId: data[FORM_ID_FIELD],\n };\n },\n validateField: (data: GenericObject | FormData, field: string) =>\n validator.validateField(preprocessFormData(data), field),\n };\n}\n","import { setPath } from \"set-get\";\nimport { MultiValueMap } from \"./MultiValueMap\";\n\nexport const objectFromPathEntries = (entries: [string, any][]) => {\n const map = new MultiValueMap<string, any>();\n entries.forEach(([key, value]) => map.add(key, value));\n return [...map.entries()].reduce(\n (acc, [key, value]) =>\n setPath(acc, key, value.length === 1 ? value[0] : value),\n {} as Record<string, any>\n );\n};\n","import { useCallback, useMemo } from \"react\";\nimport {\n useInternalFormContext,\n useRegisterReceiveFocus,\n} from \"./internal/hooks\";\nimport { useFormHelpers, useFormState } from \"./unreleased/formStateHooks\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n} from \"./validation/types\";\n\nexport type FormContextValue = {\n /**\n * All the errors in all the fields in the form.\n */\n fieldErrors: FieldErrors;\n /**\n * Clear the errors of the specified fields.\n */\n clearError: (...names: string[]) => void;\n /**\n * Validate the specified field.\n */\n validateField: (fieldName: string) => Promise<string | null>;\n /**\n * The `action` prop of the form.\n */\n action?: string;\n /**\n * The `subaction` prop of the form.\n */\n subaction?: string;\n /**\n * Whether or not the form is submitting.\n */\n isSubmitting: boolean;\n /**\n * Whether or not a submission has been attempted.\n * This is true once the form has been submitted, even if there were validation errors.\n * Resets to false when the form is reset.\n */\n hasBeenSubmitted: boolean;\n /**\n * Whether or not the form is valid.\n */\n isValid: boolean;\n /**\n * The default values of the form.\n */\n defaultValues?: { [fieldName: string]: any };\n /**\n * Register a custom focus handler to be used when\n * the field needs to receive focus due to a validation error.\n */\n registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;\n /**\n * Any fields that have been touched by the user.\n */\n touchedFields: TouchedFields;\n /**\n * Change the touched state of the specified field.\n */\n setFieldTouched: (fieldName: string, touched: boolean) => void;\n /**\n * Validate the whole form and populate any errors.\n */\n validate: () => Promise<ValidationResult<unknown>>;\n /**\n * Clears all errors on the form.\n */\n clearAllErrors: () => void;\n /**\n * Resets the form.\n *\n * _Note_: The equivalent behavior can be achieved by calling formElement.reset()\n * or clicking a button element with `type=\"reset\"`.\n */\n reset: () => void;\n /**\n * Submits the form, running all validations first.\n *\n * _Note_: This is equivalent to clicking a button element with `type=\"submit\"` or calling formElement.submit().\n */\n submit: () => void;\n /**\n * Returns the current form values as FormData\n */\n getValues: () => FormData;\n};\n\n/**\n * Provides access to some of the internal state of the form.\n */\nexport const useFormContext = (formId?: string): FormContextValue => {\n // Try to access context so we get our error specific to this hook if it's not there\n const context = useInternalFormContext(formId, \"useFormContext\");\n const state = useFormState(formId);\n const {\n clearError: internalClearError,\n setTouched,\n validateField,\n clearAllErrors,\n validate,\n reset,\n submit,\n getValues,\n } = useFormHelpers(formId);\n\n const registerReceiveFocus = useRegisterReceiveFocus(context.formId);\n\n const clearError = useCallback(\n (...names: string[]) => {\n names.forEach((name) => {\n internalClearError(name);\n });\n },\n [internalClearError]\n );\n\n return useMemo(\n () => ({\n ...state,\n setFieldTouched: setTouched,\n validateField,\n clearError,\n registerReceiveFocus,\n clearAllErrors,\n validate,\n reset,\n submit,\n getValues,\n }),\n [\n clearAllErrors,\n clearError,\n registerReceiveFocus,\n reset,\n setTouched,\n state,\n submit,\n validate,\n validateField,\n getValues,\n ]\n );\n};\n","import { useMemo } from \"react\";\nimport {} from \"../internal/getInputProps\";\nimport {\n useInternalFormContext,\n useClearError,\n useSetTouched,\n useDefaultValuesForForm,\n useFieldErrorsForForm,\n useInternalIsSubmitting,\n useInternalHasBeenSubmitted,\n useTouchedFields,\n useInternalIsValid,\n useFieldErrors,\n useValidate,\n useSetFieldErrors,\n useResetFormElement,\n useSyncedDefaultValues,\n useFormActionProp,\n useFormSubactionProp,\n useSubmitForm,\n useFormValues,\n useSmartValidate,\n} from \"../internal/hooks\";\nimport {\n FieldErrors,\n TouchedFields,\n ValidationResult,\n} from \"../validation/types\";\n\nexport type FormState = {\n fieldErrors: FieldErrors;\n isSubmitting: boolean;\n hasBeenSubmitted: boolean;\n touchedFields: TouchedFields;\n defaultValues: { [fieldName: string]: any };\n action?: string;\n subaction?: string;\n isValid: boolean;\n};\n\n/**\n * Returns information about the form.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useFormState = (formId?: string): FormState => {\n const formContext = useInternalFormContext(formId, \"useFormState\");\n const isSubmitting = useInternalIsSubmitting(formContext.formId);\n const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);\n const touchedFields = useTouchedFields(formContext.formId);\n const isValid = useInternalIsValid(formContext.formId);\n const action = useFormActionProp(formContext.formId);\n const subaction = useFormSubactionProp(formContext.formId);\n\n const syncedDefaultValues = useSyncedDefaultValues(formContext.formId);\n const defaultValuesToUse = useDefaultValuesForForm(formContext);\n const hydratedDefaultValues =\n defaultValuesToUse.hydrateTo(syncedDefaultValues);\n\n const fieldErrorsFromState = useFieldErrors(formContext.formId);\n const fieldErrorsToUse = useFieldErrorsForForm(formContext);\n const hydratedFieldErrors = fieldErrorsToUse.hydrateTo(fieldErrorsFromState);\n\n return useMemo(\n () => ({\n action,\n subaction,\n defaultValues: hydratedDefaultValues,\n fieldErrors: hydratedFieldErrors ?? {},\n hasBeenSubmitted,\n isSubmitting,\n touchedFields,\n isValid,\n }),\n [\n action,\n hasBeenSubmitted,\n hydratedDefaultValues,\n hydratedFieldErrors,\n isSubmitting,\n isValid,\n subaction,\n touchedFields,\n ]\n );\n};\n\nexport type FormHelpers = {\n /**\n * Clear the error of the specified field.\n */\n clearError: (fieldName: string) => void;\n /**\n * Validate the specified field.\n */\n validateField: (fieldName: string) => Promise<string | null>;\n /**\n * Change the touched state of the specified field.\n */\n setTouched: (fieldName: string, touched: boolean) => void;\n /**\n * Validate the whole form and populate any errors.\n */\n validate: () => Promise<ValidationResult<unknown>>;\n /**\n * Clears all errors on the form.\n */\n clearAllErrors: () => void;\n /**\n * Resets the form.\n *\n * _Note_: The equivalent behavior can be achieved by calling formElement.reset()\n * or clicking a button element with `type=\"reset\"`.\n */\n reset: () => void;\n /**\n * Submits the form, running all validations first.\n *\n * _Note_: This is equivalent to clicking a button element with `type=\"submit\"` or calling formElement.submit().\n */\n submit: () => void;\n /**\n * Returns the current form values as FormData\n */\n getValues: () => FormData;\n};\n\n/**\n * Returns helpers that can be used to update the form state.\n *\n * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.\n */\nexport const useFormHelpers = (formId?: string): FormHelpers => {\n const formContext = useInternalFormContext(formId, \"useFormHelpers\");\n const setTouched = useSetTouched(formContext);\n const validateField = useSmartValidate(formContext.formId);\n const validate = useValidate(formContext.formId);\n const clearError = useClearError(formContext);\n const setFieldErrors = useSetFieldErrors(formContext.formId);\n const reset = useResetFormElement(formContext.formId);\n const submit = useSubmitForm(formContext.formId);\n const getValues = useFormValues(formContext.formId);\n return useMemo(\n () => ({\n setTouched,\n validateField: async (fieldName: string) => {\n const res = await validateField({\n alwaysIncludeErrorsFromFields: [fieldName],\n });\n return res.error?.fieldErrors[fieldName] ?? null;\n },\n clearError,\n validate,\n clearAllErrors: () => setFieldErrors({}),\n reset,\n submit,\n getValues,\n }),\n [\n clearError,\n reset,\n setFieldErrors,\n setTouched,\n submit,\n validate,\n validateField,\n getValues,\n ]\n );\n};\n","import { nanoid } from \"nanoid\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useCallback } from \"react\";\nimport invariant from \"tiny-invariant\";\nimport { InternalFormContextValue } from \"../formContext\";\nimport {\n useFieldDefaultValue,\n useFieldError,\n useInternalFormContext,\n useInternalHasBeenSubmitted,\n useSmartValidate,\n} from \"../hooks\";\nimport * as arrayUtil from \"./arrayUtil\";\nimport { useRegisterControlledField } from \"./controlledFields\";\nimport { useFormStore } from \"./storeHooks\";\n\nexport type FieldArrayValidationBehavior = \"onChange\" | \"onSubmit\";\n\nexport type FieldArrayValidationBehaviorOptions = {\n initial: FieldArrayValidationBehavior;\n whenSubmitted: FieldArrayValidationBehavior;\n};\n\nexport type FieldArrayItem<T> = {\n /**\n * The default value of the item.\n * This does not update as the field is changed by the user.\n */\n defaultValue: T;\n /**\n * A unique key for the item.\n * Use this as the key prop when rendering the item.\n */\n key: string;\n};\n\nconst useInternalFieldArray = (\n context: InternalFormContextValue,\n field: string,\n validationBehavior?: Partial<FieldArrayValidationBehaviorOptions>\n) => {\n const value = useFieldDefaultValue(field, context);\n useRegisterControlledField(context, field);\n const hasBeenSubmitted = useInternalHasBeenSubmitted(context.formId);\n const validateField = useSmartValidate(context.formId);\n const error = useFieldError(field, context);\n\n const resolvedValidationBehavior: FieldArrayValidationBehaviorOptions = {\n initial: \"onSubmit\",\n whenSubmitted: \"onChange\",\n ...validationBehavior,\n };\n\n const behavior = hasBeenSubmitted\n ? resolvedValidationBehavior.whenSubmitted\n : resolvedValidationBehavior.initial;\n\n const maybeValidate = useCallback(() => {\n if (behavior === \"onChange\") {\n validateField({ alwaysIncludeErrorsFromFields: [field] });\n }\n }, [behavior, field, validateField]);\n\n invariant(\n value === undefined || value === null || Array.isArray(value),\n `FieldArray: defaultValue value for ${field} must be an array, null, or undefined`\n );\n\n const arr = useFormStore(\n context.formId,\n (state) => state.controlledFields.array\n );\n\n const arrayValue = useMemo<unknown[]>(() => value ?? [], [value]);\n const keyRef = useRef<string[]>([]);\n\n // If the lengths don't match up it means one of two things\n // 1. The array has been modified outside of this hook\n // 2. We're initializing the array\n if (keyRef.current.length !== arrayValue.length) {\n keyRef.current = arrayValue.map(() => nanoid());\n }\n\n const helpers = useMemo(\n () => ({\n push: (item: any) => {\n arr.push(field, item);\n keyRef.current.push(nanoid());\n maybeValidate();\n },\n swap: (indexA: number, indexB: number) => {\n arr.swap(field, indexA, indexB);\n arrayUtil.swap(keyRef.current, indexA, indexB);\n maybeValidate();\n },\n move: (from: number, to: number) => {\n arr.move(field, from, to);\n arrayUtil.move(keyRef.current, from, to);\n maybeValidate();\n },\n insert: (index: number, value: any) => {\n arr.insert(field, index, value);\n arrayUtil.insert(keyRef.current, index, nanoid());\n maybeValidate();\n },\n unshift: (value: any) => {\n arr.unshift(field, value);\n keyRef.current.unshift(nanoid());\n maybeValidate();\n },\n remove: (index: number) => {\n arr.remove(field, index);\n arrayUtil.remove(keyRef.current, index);\n maybeValidate();\n },\n pop: () => {\n arr.pop(field);\n keyRef.current.pop();\n maybeValidate();\n },\n replace: (index: number, value: any) => {\n arr.replace(field, index, value);\n keyRef.current[index] = nanoid();\n maybeValidate();\n },\n }),\n [arr, field, maybeValidate]\n );\n\n const valueWithKeys = useMemo(() => {\n const result: { defaultValue: any; key: string }[] = [];\n arrayValue.forEach((item, index) => {\n result[index] = {\n key: keyRef.current[index],\n defaultValue: item,\n };\n });\n return result;\n }, [arrayValue]);\n\n return [valueWithKeys, helpers, error] as const;\n};\n\nexport type FieldArrayHelpers<Item = any> = {\n push: (item: Item) => void;\n swap: (indexA: number, indexB: number) => void;\n move: (from: number, to: number) => void;\n insert: (index: number, value: Item) => void;\n unshift: (value: Item) => void;\n remove: (index: number) => void;\n pop: () => void;\n replace: (index: number, value: Item) => void;\n};\n\nexport type UseFieldArrayOptions = {\n formId?: string;\n validationBehavior?: Partial<FieldArrayValidationBehaviorOptions>;\n};\n\nexport function useFieldArray<Item = any>(\n name: string,\n { formId, validationBehavior }: UseFieldArrayOptions = {}\n) {\n const context = useInternalFormContext(formId, \"FieldArray\");\n\n return useInternalFieldArray(context, name, validationBehavior) as [\n items: FieldArrayItem<Item>[],\n helpers: FieldArrayHelpers,\n error: string | undefined\n ];\n}\n\nexport type FieldArrayProps<Item> = {\n name: string;\n children: (\n items: FieldArrayItem<Item>[],\n helpers: FieldArrayHelpers<Item>,\n error: string | undefined\n ) => React.ReactNode;\n formId?: string;\n validationBehavior?: FieldArrayValidationBehaviorOptions;\n};\n\nexport function FieldArray<Item = any>({\n name,\n children,\n formId,\n validationBehavior,\n}: FieldArrayProps<Item>) {\n const context = useInternalFormContext(formId, \"FieldArray\");\n const [value, helpers, error] = useInternalFieldArray(\n context,\n name,\n validationBehavior\n );\n return <>{children(value, helpers, error)}</>;\n}\n"],"mappings":"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","names":["h","a","b","k","l","n","p","q","d","f","c","g","r","t","u","React","x","y","useState","useEffect","useLayoutEffect","useDebugValue","error","h","n","p","a","b","q","r","t","u","v","w","l","g","c","f","d","k","e","React","x","y","useRef","useEffect","useMemo","useDebugValue","useSyncExternalStoreWithSelector","useEffect","_","i","invariant","fn","hydratedData","invariant","replace","import_meta","useSyncExternalStoreExports","die","error","args","e","errors","msg","apply","Error","length","map","s","join","isDraft","value","DRAFT_STATE","isDraftable","proto","Object","getPrototypeOf","Ctor","hasOwnProperty","call","constructor","Function","toString","objectCtorString","Array","isArray","DRAFTABLE","_value$constructor","isMap","isSet","each","obj","iter","enumerableOnly","getArchtype","Object","keys","ownKeys","forEach","key","entry","index","thing","state","DRAFT_STATE","type_","Array","isArray","isMap","isSet","has","prop","prototype","hasOwnProperty","call","get","set","propOrOldValue","value","t","delete","add","is","x","y","target","hasMap","Map","hasSet","Set","latest","copy_","base_","shallowCopy","base","slice","descriptors","getOwnPropertyDescriptors","i","length","desc","writable","configurable","enumerable","create","getPrototypeOf","freeze","deep","isFrozen","isDraft","isDraftable","clear","dontMutateFrozenCollections","die","getPlugin","pluginKey","plugin","plugins","getCurrentScope","process","currentScope","die","usePatchesInScope","scope","patchListener","getPlugin","patches_","inversePatches_","patchListener_","revokeScope","leaveScope","drafts_","forEach","revokeDraft","parent_","enterScope","immer","immer_","canAutoFreeze_","unfinalizedDrafts_","draft","state","DRAFT_STATE","type_","revoke_","revoked_","processResult","result","length","baseDraft","isReplaced","useProxies_","willFinalizeES5_","modified_","isDraftable","finalize","maybeFreeze","generateReplacementPatches_","base_","NOTHING","undefined","rootScope","value","path","isFrozen","each","key","childValue","finalizeProperty","scope_","finalized_","copy_","shallowCopy","draft_","Set","generatePatches_","parentState","targetObject","prop","rootPath","isDraft","res","has","assigned_","concat","set","autoFreeze_","deep","freeze","peek","latest","getDescriptorFromProto","source","proto","Object","getPrototypeOf","desc","getOwnPropertyDescriptor","markChanged","prepareCopy","createProxy","parent","isMap","proxyMap_","isSet","proxySet_","base","isArray","Array","isManual_","target","traps","objectTraps","arrayTraps","Proxy","revocable","revoke","proxy","createES5Proxy_","push","current","currentImpl","copy","archType","getArchtype","hasChanges_","copyHelper","get","Map","from","value","currentScope","hasSymbol","Symbol","hasMap","Map","hasSet","Set","hasProxies","Proxy","revocable","Reflect","NOTHING","for","DRAFTABLE","DRAFT_STATE","value","errors","data","path","op","plugin","thing","objectCtorString","Object","prototype","constructor","ownKeys","Reflect","getOwnPropertySymbols","obj","getOwnPropertyNames","concat","getOwnPropertyDescriptors","target","res","forEach","key","getOwnPropertyDescriptor","plugins","objectTraps","get","state","prop","DRAFT_STATE","source","latest","has","desc","getDescriptorFromProto","_desc$get","call","draft_","undefined","finalized_","isDraftable","peek","base_","prepareCopy","copy_","createProxy","scope_","immer_","set","modified_","current","currentState","assigned_","is","markChanged","deleteProperty","owner","writable","configurable","type_","enumerable","defineProperty","die","getPrototypeOf","setPrototypeOf","arrayTraps","each","fn","arguments","apply","this","process","isNaN","parseInt","Immer","config","hasProxies","base","recipe","patchListener","defaultBase","self","_this","args","produce","draft","_this2","result","scope","enterScope","proxy","hasError","revokeScope","leaveScope","Promise","then","usePatchesInScope","processResult","error","NOTHING","autoFreeze_","freeze","p","ip","getPlugin","generateReplacementPatches_","produceWithPatches","patches","inversePatches","nextState","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","isDraft","isManual_","finishDraft","useProxies_","applyPatches","i","length","patch","slice","applyPatchesImpl","applyPatches_","immer","bind","get","replace","a","from","i","get","invariant","_a","from","state","match","invariant","touched","state","fieldErrors","useCallback","useCallback","value","useEffect","useCallback","useEffect","useMemo","useRef","R","useCallback","useEffect","useRef","useEffect","useRef","R","useEffect","useRef","replace","useMemo","useRef","useCallback","_a","useEffect","R","useCallback","useMemo","useMemo","useMemo","useCallback","useMemo","useMemo","useRef","useCallback","invariant","Fragment","jsx","useCallback","invariant","useMemo","useRef","from","value"]}
|