directus
1import type { NumericValue } from '@directus/types';
2import { MAX_SAFE_INT32, MAX_SAFE_INT64, MIN_SAFE_INT32, MIN_SAFE_INT64 } from '@directus/constants';
3import type { NumberInfo } from '../types.js';
4import { calculateDecimalLimit } from './decimal-limit.js';
5
6export function numberInRange(value: NumericValue, info: NumberInfo) {
7switch (info.type) {
8case 'bigInteger':
9return value >= MIN_SAFE_INT64 && value <= MAX_SAFE_INT64;
10
11case 'decimal': {
12const { min, max } = calculateDecimalLimit(info.precision, info.scale);
13return value >= min && value <= max;
14}
15
16case 'integer':
17return value >= MIN_SAFE_INT32 && value <= MAX_SAFE_INT32;
18
19case 'float':
20// Not sure how to calculate the logical limits of float
21// Let the database decide and error;
22return true;
23
24default:
25return false;
26}
27}
28