UNPKG

integreat

Version:
59 lines 1.83 kB
import { isTypedData, isReference, isDate, isObject } from '../../utils/is.js'; import unwrapValue from '../../utils/unwrapValue.js'; function extractId(value) { if (isObject(value)) { return unwrapValue(value.id); } else { return isDate(value) ? value.getTime() : value; } } function extractProps(value) { if (isObject(value)) { const { isNew, isDeleted } = value; return { ...(isNew === true ? { isNew } : {}), ...(isDeleted === true ? { isDeleted } : {}), }; } return {}; } const refKeys = ['id', '$ref', 'isNew', 'isDeleted']; const hasMoreProps = (value) => { if (!isObject(value)) { return false; } const keys = Object.keys(value).filter((key) => !refKeys.includes(key)); return keys.length > 0; }; export default function castNonPrimitive(type, schemas) { return (value, isRev = false) => { if (isReference(value) && value.$ref !== type) { return undefined; } if (isTypedData(value) || hasMoreProps(value)) { if (typeof value.$type === 'string' && value.$type !== type) { return undefined; } else { const cast = schemas.get(type)?.castFn; return typeof cast === 'function' ? cast(value, isRev) : value; } } const id = extractId(value); if (typeof id === 'string' || (typeof id === 'number' && !isNaN(id))) { return { id: String(id), ...(isRev ? {} : { $ref: type }), ...extractProps(value), }; } else if (id === null) { return null; } else { return undefined; } }; } //# sourceMappingURL=nonPrimitive.js.map