in frontend/context.js [51:93]
getValueDescription(value) {
if (!['object', 'boolean', 'number', 'string'].includes(typeof value)) {
throw new TypeError(`Unsupported type of value: ${typeof value}`)
}
if (isObject(value)) {
if (value instanceof Date) {
// Date object, represented as milliseconds since epoch
return {type: 'value', value: value.getTime(), datatype: 'timestamp'}
} else if (value instanceof Int) {
return {type: 'value', value: value.value, datatype: 'int'}
} else if (value instanceof Uint) {
return {type: 'value', value: value.value, datatype: 'uint'}
} else if (value instanceof Float64) {
return {type: 'value', value: value.value, datatype: 'float64'}
} else if (value instanceof Counter) {
// Counter object
return {type: 'value', value: value.value, datatype: 'counter'}
} else {
// Nested object (map, list, text, or table)
const objectId = value[OBJECT_ID], type = this.getObjectType(objectId)
if (!objectId) {
throw new RangeError(`Object ${JSON.stringify(value)} has no objectId`)
}
if (type === 'list' || type === 'text') {
return {objectId, type, edits: []}
} else {
return {objectId, type, props: {}}
}
}
} else if (typeof value === 'number') {
if (Number.isInteger(value) && value <= Number.MAX_SAFE_INTEGER && value >= Number.MIN_SAFE_INTEGER) {
return {type: 'value', value, datatype: 'int'}
} else {
return {type: 'value', value, datatype: 'float64'}
}
} else {
// Primitive value (string, boolean, or null)
return {type: 'value', value}
}
}