{
  "version": 3,
  "sources": ["../../src/serialization.ts"],
  "sourcesContent": ["import merge from 'lodash/merge.js'\nimport {\n  PropertyGetters,\n  JsonAble,\n  ToObjectFunction,\n  DataDescription,\n  JsonifiedData,\n  ModelInstance,\n  ToObjectResult,\n} from './types.js'\n\nconst isModelInstance = (obj: any): obj is ModelInstance<any> => {\n  return Boolean(obj.toObj)\n}\n\nconst _getValue = async (value: any): Promise<JsonAble | null> => {\n  if (value === undefined) {\n    return undefined\n  }\n  if (value === null) {\n    return null\n  }\n  const type = typeof value\n  const asFunction = value as (...args: any[]) => any\n  if (type === 'function') {\n    return _getValue(await asFunction())\n  }\n  // Nested Object\n  if (isModelInstance(value)) {\n    return _getValue(await value.toObj())\n  }\n  // Dates\n  const asDate = value as Date\n  if (type === 'object' && asDate.toISOString) {\n    return _getValue(asDate.toISOString())\n  }\n  return value\n}\n\nconst toJsonAble =\n  <T extends DataDescription>(\n    keyToFunc: PropertyGetters<T>\n  ): ToObjectFunction<T> =>\n  <R extends T | JsonifiedData<T> = JsonifiedData<T>>(): Promise<\n    ToObjectResult<R>\n  > => {\n    return Object.entries(keyToFunc).reduce(async (acc, [key, value]) => {\n      const realAcc = await acc\n      const trueValue = await _getValue(await value)\n      if (trueValue === undefined) {\n        return realAcc\n      }\n      return merge(realAcc, { [key]: trueValue })\n    }, Promise.resolve({})) as Promise<ToObjectResult<R>>\n  }\n\nexport { toJsonAble }\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAWlB,IAAM,kBAAkB,CAAC,QAAwC;AAC/D,SAAO,QAAQ,IAAI,KAAK;AAC1B;AAEA,IAAM,YAAY,OAAO,UAAyC;AAChE,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AACA,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AACA,QAAM,OAAO,OAAO;AACpB,QAAM,aAAa;AACnB,MAAI,SAAS,YAAY;AACvB,WAAO,UAAU,MAAM,WAAW,CAAC;AAAA,EACrC;AAEA,MAAI,gBAAgB,KAAK,GAAG;AAC1B,WAAO,UAAU,MAAM,MAAM,MAAM,CAAC;AAAA,EACtC;AAEA,QAAM,SAAS;AACf,MAAI,SAAS,YAAY,OAAO,aAAa;AAC3C,WAAO,UAAU,OAAO,YAAY,CAAC;AAAA,EACvC;AACA,SAAO;AACT;AAEA,IAAM,aACJ,CACE,cAEF,MAEK;AACH,SAAO,OAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,MAAM;AACnE,UAAM,UAAU,MAAM;AACtB,UAAM,YAAY,MAAM,UAAU,MAAM,KAAK;AAC7C,QAAI,cAAc,QAAW;AAC3B,aAAO;AAAA,IACT;AACA,eAAO,aAAAA,SAAM,SAAS,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC;AAAA,EAC5C,GAAG,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACxB;",
  "names": ["merge"]
}
