{"version":3,"file":"tanstack.mjs","names":[],"sources":["../../../../src/base-ui/FormKit/engine/tanstack.ts"],"sourcesContent":["import { FormApi, getBy, setBy } from '@tanstack/form-core';\nimport isEqual from 'fast-deep-equal';\n\nimport type {\n  ChangeSource,\n  CreateEngine,\n  FieldRegistration,\n  FieldSnapshot,\n  FormEngine,\n  FormStatus,\n  FormValidator,\n  ValidateResult,\n  ValidateTrigger,\n  ValueChange,\n} from './types';\n\nconst toEnginePath = (path: string) => path.replaceAll(/\\.(\\d+)(?=\\.|$)/g, '[$1]');\n\nconst isSameOrNested = (a: string, b: string) =>\n  a === b || a.startsWith(`${b}.`) || b.startsWith(`${a}.`);\n\nconst isUnder = (path: string, root: string) => path === root || path.startsWith(`${root}.`);\n\ninterface FieldRuntime {\n  registration: FieldRegistration;\n  timer?: ReturnType<typeof setTimeout>;\n  token: number;\n}\n\nexport const createTanstackEngine: CreateEngine = (initialValues) => {\n  const form = new FormApi({ defaultValues: initialValues });\n\n  const fields = new Map<string, FieldRuntime>();\n  const fieldErrors = new Map<string, string>();\n  const formErrors = new Map<string, string>();\n  const serverErrors = new Map<string, string>();\n  const validating = new Set<string>();\n  const touched = new Set<string>();\n  const listeners = new Set<() => void>();\n  const valueListeners = new Set<(change: ValueChange) => void>();\n  const snapshots = new Map<string, FieldSnapshot>();\n\n  let formValidator: FormValidator | undefined;\n  let baseline = initialValues;\n  let dirtyCache: { baseline: unknown; dirty: boolean; values: unknown } | undefined;\n  let inflightSubmit: Promise<ValidateResult> | undefined;\n  let submitting = false;\n  let submitCount = 0;\n  let status: FormStatus = { dirty: false, submitCount: 0, submitting: false };\n\n  const notify = () => {\n    for (const listener of listeners) listener();\n  };\n  const storeSubscription = form.store.subscribe(notify);\n\n  const getValue = (path: string) => form.getFieldValue(toEnginePath(path) as never) as unknown;\n  const getValues = () => form.state.values as Record<string, unknown>;\n  const isTouched = (path: string) => {\n    for (const entry of touched) if (isSameOrNested(entry, path)) return true;\n    return false;\n  };\n  const errorOf = (path: string) =>\n    serverErrors.get(path) ?? fieldErrors.get(path) ?? formErrors.get(path);\n\n  const getField = (path: string): FieldSnapshot => {\n    const next: FieldSnapshot = {\n      error: errorOf(path),\n      touched: isTouched(path),\n      validating: validating.has(path),\n      value: getValue(path),\n    };\n    const prev = snapshots.get(path);\n    if (\n      prev &&\n      prev.error === next.error &&\n      prev.touched === next.touched &&\n      prev.validating === next.validating &&\n      Object.is(prev.value, next.value)\n    )\n      return prev;\n    snapshots.set(path, next);\n    return next;\n  };\n\n  const getStatus = (): FormStatus => {\n    const values = getValues();\n    if (dirtyCache?.values !== values || dirtyCache.baseline !== baseline)\n      dirtyCache = { baseline, dirty: !isEqual(values, baseline), values };\n    const { dirty } = dirtyCache;\n    if (\n      status.dirty !== dirty ||\n      status.submitting !== submitting ||\n      status.submitCount !== submitCount\n    )\n      status = { dirty, submitCount, submitting };\n    return status;\n  };\n\n  const shouldValidate = (path: string, trigger: ValidateTrigger) => {\n    const mode = fields.get(path)?.registration.validateOn ?? 'auto';\n    if (trigger === 'submit') return true;\n    if (mode === 'change') return true;\n    if (mode === 'blur') return trigger === 'blur';\n    if (mode === 'submit') return false;\n    return trigger === 'blur' || errorOf(path) !== undefined;\n  };\n\n  const setOrDelete = (map: Map<string, string>, path: string, error: string | undefined) => {\n    if (error === undefined) map.delete(path);\n    else map.set(path, error);\n  };\n\n  const runField = (path: string, withFormValidator: boolean): Promise<void> => {\n    const runtime = fields.get(path);\n    if (!runtime) return Promise.resolve();\n    runtime.token += 1;\n    const token = runtime.token;\n    const { validate } = runtime.registration;\n    if (!validate && !(withFormValidator && formValidator)) return Promise.resolve();\n\n    validating.add(path);\n    notify();\n    return (async () => {\n      const values = getValues();\n      const [fieldError, formResult] = await Promise.all([\n        validate?.(getValue(path), values),\n        withFormValidator ? formValidator?.(values) : undefined,\n      ]);\n      if (runtime.token !== token || fields.get(path) !== runtime) return;\n      setOrDelete(fieldErrors, path, fieldError);\n      if (withFormValidator) setOrDelete(formErrors, path, formResult?.[path]);\n      validating.delete(path);\n      notify();\n    })();\n  };\n\n  const schedule = (path: string, trigger: ValidateTrigger) => {\n    const runtime = fields.get(path);\n    if (!runtime || !shouldValidate(path, trigger)) return;\n    clearTimeout(runtime.timer);\n    const debounceMs = runtime.registration.debounceMs ?? 0;\n    if (trigger === 'change' && debounceMs > 0) {\n      runtime.token += 1;\n      runtime.timer = setTimeout(() => void runField(path, true), debounceMs);\n      return;\n    }\n    void runField(path, true);\n  };\n\n  const clearErrorsUnder = (path: string, inclusive = false) => {\n    for (const map of [fieldErrors, formErrors, serverErrors])\n      for (const key of map.keys())\n        if (inclusive ? isUnder(key, path) : key.startsWith(`${path}.`)) map.delete(key);\n  };\n\n  const resetTo = (values: Record<string, unknown>) => {\n    clearRuntimeState();\n    baseline = values;\n    form.reset(values);\n    notify();\n  };\n\n  const emitValueChange = (path: string, source: ChangeSource) => {\n    for (const listener of valueListeners) listener({ path, source });\n  };\n\n  const afterUserChange = (path: string) => {\n    touched.add(path);\n    serverErrors.delete(path);\n    schedule(path, 'change');\n    for (const [other, runtime] of fields) {\n      if (other !== path && runtime.registration.deps?.includes(path) && isTouched(other))\n        void runField(other, true);\n    }\n    notify();\n  };\n\n  const validate = async (paths?: string[]): Promise<ValidateResult> => {\n    const values = getValues();\n    const formResult = (formValidator ? await formValidator(values) : undefined) ?? {};\n    const targets = paths ?? [...new Set([...fields.keys(), ...Object.keys(formResult)])];\n    await Promise.all(targets.map((path) => runField(path, false)));\n    for (const path of targets) setOrDelete(formErrors, path, formResult[path]);\n    notify();\n    const errors: Record<string, string> = {};\n    for (const path of targets) {\n      const error = errorOf(path);\n      if (error !== undefined) errors[path] = error;\n    }\n    return { errors, valid: Object.keys(errors).length === 0 };\n  };\n\n  const clearRuntimeState = () => {\n    for (const runtime of fields.values()) {\n      clearTimeout(runtime.timer);\n      runtime.token += 1;\n    }\n    fieldErrors.clear();\n    formErrors.clear();\n    serverErrors.clear();\n    validating.clear();\n    touched.clear();\n  };\n\n  const runSubmit = async (onSubmit?: (values: Record<string, unknown>) => unknown) => {\n    submitCount += 1;\n    serverErrors.clear();\n    for (const path of fields.keys()) touched.add(path);\n    let values: Record<string, unknown>;\n    let result: ValidateResult;\n    do {\n      values = getValues();\n      result = await validate();\n      // Async validators must finish against unchanged values before submission.\n    } while (values !== getValues());\n    if (!result.valid) {\n      notify();\n      return result;\n    }\n    submitting = true;\n    notify();\n    try {\n      await onSubmit?.(values);\n      if (serverErrors.size > 0) return { errors: Object.fromEntries(serverErrors), valid: false };\n      resetTo(getValues());\n    } finally {\n      submitting = false;\n      notify();\n    }\n    return result;\n  };\n\n  const engine: FormEngine = {\n    blurField: (path) => {\n      touched.add(path);\n      schedule(path, 'blur');\n      notify();\n    },\n    destroy: () => {\n      for (const runtime of fields.values()) clearTimeout(runtime.timer);\n      storeSubscription.unsubscribe();\n      listeners.clear();\n      valueListeners.clear();\n    },\n    getField,\n    getStatus,\n    getValue,\n    getValues,\n    isTouched,\n    moveItem: (path, from, to) => {\n      form.moveFieldValues(toEnginePath(path) as never, from, to);\n      touched.add(path);\n      clearErrorsUnder(path);\n      emitValueChange(path, 'user');\n      notify();\n    },\n    onValueChange: (listener) => {\n      valueListeners.add(listener);\n      return () => valueListeners.delete(listener);\n    },\n    pushItem: (path, item) => {\n      form.pushFieldValue(toEnginePath(path) as never, item as never);\n      touched.add(path);\n      emitValueChange(path, 'user');\n      notify();\n    },\n    registerField: (path, registration) => {\n      const runtime: FieldRuntime = { registration, token: 0 };\n      fields.set(path, runtime);\n      return () => {\n        if (fields.get(path) !== runtime) return;\n        clearTimeout(runtime.timer);\n        fields.delete(path);\n        fieldErrors.delete(path);\n        validating.delete(path);\n        snapshots.delete(path);\n        notify();\n      };\n    },\n    removeItem: (path, index) => {\n      void form.removeFieldValue(toEnginePath(path) as never, index);\n      touched.add(path);\n      clearErrorsUnder(path);\n      emitValueChange(path, 'user');\n      notify();\n    },\n    reset: (values) => resetTo(values ?? baseline),\n    resetField: (path) => {\n      for (const [key, runtime] of fields) {\n        if (!isUnder(key, path)) continue;\n        clearTimeout(runtime.timer);\n        runtime.token += 1;\n        validating.delete(key);\n      }\n      for (const entry of touched) if (isUnder(entry, path)) touched.delete(entry);\n      clearErrorsUnder(path, true);\n      form.setFieldValue(toEnginePath(path) as never, getBy(baseline, toEnginePath(path)), {\n        dontUpdateMeta: true,\n      });\n      emitValueChange(path, 'api');\n      notify();\n    },\n    setErrors: (errors) => {\n      for (const [path, error] of Object.entries(errors)) setOrDelete(serverErrors, path, error);\n      notify();\n    },\n    setFormValidator: (validator) => {\n      formValidator = validator;\n    },\n    setValue: (path, value, source) => {\n      form.setFieldValue(toEnginePath(path) as never, value as never, { dontUpdateMeta: true });\n      if (source === 'api') baseline = setBy(baseline, toEnginePath(path), () => value);\n      emitValueChange(path, source);\n      if (source === 'user') afterUserChange(path);\n    },\n    submit: (onSubmit) => {\n      inflightSubmit ??= runSubmit(onSubmit).finally(() => {\n        inflightSubmit = undefined;\n      });\n      return inflightSubmit;\n    },\n    subscribe: (listener) => {\n      listeners.add(listener);\n      return () => listeners.delete(listener);\n    },\n    validate,\n  };\n\n  return engine;\n};\n"],"mappings":"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"}