{"version":3,"file":"user-serializer.cjs","sources":["../../../src/models/serializers/user-serializer.ts"],"sourcesContent":["import { Document } from 'mongoose';\n\nimport { isPopulated, isRef, type Ref } from '../../interfaces/common';\nimport type { IUser } from '../../interfaces/user';\n\nexport type IUserSerializedSecurely<U extends IUser> = Omit<\n  U,\n  'password' | 'apiToken' | 'email'\n> & { email?: string };\n\nexport const omitInsecureAttributes = <U extends IUser>(\n  user: U,\n): IUserSerializedSecurely<U> => {\n  const leanDoc = user instanceof Document ? user.toObject<U>() : user;\n\n  const { password, apiToken, email, ...rest } = leanDoc;\n\n  const secureUser: IUserSerializedSecurely<U> = rest;\n\n  // omit email\n  if (secureUser.isEmailPublished) {\n    secureUser.email = email;\n  }\n\n  return secureUser;\n};\n\nexport function serializeUserSecurely<U extends IUser>(\n  user?: U,\n): IUserSerializedSecurely<U>;\nexport function serializeUserSecurely<U extends IUser>(\n  user?: Ref<U>,\n): Ref<IUserSerializedSecurely<U>>;\nexport function serializeUserSecurely<U extends IUser>(\n  user?: U | Ref<U>,\n): undefined | IUserSerializedSecurely<U> | Ref<IUserSerializedSecurely<U>> {\n  if (user == null) return user;\n\n  if (isRef(user) && !isPopulated(user)) return user;\n\n  return omitInsecureAttributes(user);\n}\n"],"names":["omitInsecureAttributes","user","leanDoc","Document","password","apiToken","email","rest","secureUser","serializeUserSecurely","isRef","isPopulated"],"mappings":"qJAUaA,EACXC,GAC+B,CAC/B,MAAMC,EAAUD,aAAgBE,EAAAA,SAAWF,EAAK,SAAgB,EAAAA,EAE1D,CAAE,SAAAG,EAAU,SAAAC,EAAU,MAAAC,EAAO,GAAGC,CAAS,EAAAL,EAEzCM,EAAyCD,EAG/C,OAAIC,EAAW,mBACbA,EAAW,MAAQF,GAGdE,CACT,EAQO,SAASC,EACdR,EAC0E,CAG1E,OAFIA,GAAQ,MAERS,EAAAA,MAAMT,CAAI,GAAK,CAACU,EAAAA,YAAYV,CAAI,EAAUA,EAEvCD,EAAuBC,CAAI,CACpC"}