{"version":3,"file":"transform.cjs","sources":["../../src/transform.ts"],"sourcesContent":["import { batch } from '@tanstack/store'\nimport { deepCopy } from './utils'\nimport type {\n  AnyBaseFormState,\n  FormApi,\n  FormAsyncValidateOrFn,\n  FormValidateOrFn,\n} from './FormApi'\n\n/**\n * @private\n */\nexport type FormTransform<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TSubmitMeta = never,\n> = (\n  formBase: FormApi<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  >,\n) => FormApi<\n  TFormData,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TOnServer,\n  TSubmitMeta\n>\n\n/**\n * @private\n */\nexport function mergeAndUpdate<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TSubmitMeta = never,\n>(\n  form: FormApi<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  >,\n  fn?: FormTransform<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  >,\n) {\n  // Run the `transform` function on `form.state`, diff it, and update the relevant parts with what needs updating\n  if (!fn) return\n\n  const newObj = Object.assign({}, form, {\n    state: deepCopy(form.state),\n  })\n\n  fn(newObj)\n\n  if (newObj.fieldInfo !== form.fieldInfo) {\n    form.fieldInfo = newObj.fieldInfo\n  }\n\n  if (newObj.options !== form.options) {\n    form.options = newObj.options\n  }\n\n  const baseFormKeys = Object.keys({\n    values: null,\n    validationMetaMap: null,\n    fieldMetaBase: null,\n    isSubmitting: null,\n    isSubmitted: null,\n    isValidating: null,\n    submissionAttempts: null,\n    isSubmitSuccessful: null,\n    _force_re_eval: null,\n    // Do not remove this, it ensures that we have all the keys in `BaseFormState`\n  } satisfies Record<\n    // Exclude errorMap since we need to handle that uniquely\n    Exclude<keyof AnyBaseFormState, 'errorMap'>,\n    null\n  >) as Array<keyof AnyBaseFormState>\n\n  const diffedObject = baseFormKeys.reduce((prev, key) => {\n    if (form.state[key] !== newObj.state[key]) {\n      prev[key] = newObj.state[key]\n    }\n    return prev\n  }, {} as Partial<AnyBaseFormState>)\n\n  batch(() => {\n    if (Object.keys(diffedObject).length) {\n      form.baseStore.setState((prev) => ({ ...prev, ...diffedObject }))\n    }\n\n    if (newObj.state.errorMap !== form.state.errorMap) {\n      // Check if we need to update `fieldMetaBase` with `errorMaps` set by\n      form.setErrorMap(newObj.state.errorMap)\n    }\n  })\n\n  return newObj\n}\n"],"names":["deepCopy","batch"],"mappings":";;;;AA0DO,SAAS,eAcd,MAcA,IAcA;AAEA,MAAI,CAAC,GAAI;AAET,QAAM,SAAS,OAAO,OAAO,CAAA,GAAI,MAAM;AAAA,IACrC,OAAOA,MAAAA,SAAS,KAAK,KAAK;AAAA,EAAA,CAC3B;AAED,KAAG,MAAM;AAET,MAAI,OAAO,cAAc,KAAK,WAAW;AACvC,SAAK,YAAY,OAAO;AAAA,EAC1B;AAEA,MAAI,OAAO,YAAY,KAAK,SAAS;AACnC,SAAK,UAAU,OAAO;AAAA,EACxB;AAEA,QAAM,eAAe,OAAO,KAAK;AAAA,IAC/B,QAAQ;AAAA,IACR,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,gBAAgB;AAAA;AAAA,EAAA,CAMjB;AAED,QAAM,eAAe,aAAa,OAAO,CAAC,MAAM,QAAQ;AACtD,QAAI,KAAK,MAAM,GAAG,MAAM,OAAO,MAAM,GAAG,GAAG;AACzC,WAAK,GAAG,IAAI,OAAO,MAAM,GAAG;AAAA,IAC9B;AACA,WAAO;AAAA,EACT,GAAG,CAAA,CAA+B;AAElCC,QAAAA,MAAM,MAAM;AACV,QAAI,OAAO,KAAK,YAAY,EAAE,QAAQ;AACpC,WAAK,UAAU,SAAS,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,aAAA,EAAe;AAAA,IAClE;AAEA,QAAI,OAAO,MAAM,aAAa,KAAK,MAAM,UAAU;AAEjD,WAAK,YAAY,OAAO,MAAM,QAAQ;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AACT;;"}