mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-24 12:20:14 +01:00
* Refactor: Moved Redis cache infra logic into `packages/api` - Moved cacheFactory and redisClients from `api/cache` into `packages/api/src/cache` so that features in `packages/api` can use cache without importing backward from the backend. - Converted all moved files into TS with proper typing. - Created integration tests to run against actual Redis servers for redisClients and cacheFactory. - Added a GitHub workflow to run integration tests for the cache feature. - Bug fix: keyvRedisClient now implements the PING feature properly. * chore: consolidate imports in getLogStores.js * chore: reorder imports * chore: re-add fs-extra as dev dep. * chore: reorder imports in cacheConfig.ts, cacheFactory.ts, and keyvMongo.ts --------- Co-authored-by: Danny Avila <danny@librechat.ai>
45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
/**
|
|
* Evaluates a mathematical expression provided as a string and returns the result.
|
|
*
|
|
* If the input is already a number, it returns the number as is.
|
|
* If the input is not a string or contains invalid characters, an error is thrown.
|
|
* If the evaluated result is not a number, an error is thrown.
|
|
*
|
|
* @param str - The mathematical expression to evaluate, or a number.
|
|
* @param fallbackValue - The default value to return if the input is not a string or number, or if the evaluated result is not a number.
|
|
*
|
|
* @returns The result of the evaluated expression or the input number.
|
|
*
|
|
* @throws Throws an error if the input is not a string or number, contains invalid characters, or does not evaluate to a number.
|
|
*/
|
|
export function math(str: string | number | undefined, fallbackValue?: number): number {
|
|
const fallback = fallbackValue != null;
|
|
if (typeof str !== 'string' && typeof str === 'number') {
|
|
return str;
|
|
} else if (typeof str !== 'string') {
|
|
if (fallback) {
|
|
return fallbackValue;
|
|
}
|
|
throw new Error(`str is ${typeof str}, but should be a string`);
|
|
}
|
|
|
|
const validStr = /^[+\-\d.\s*/%()]+$/.test(str);
|
|
|
|
if (!validStr) {
|
|
if (fallback) {
|
|
return fallbackValue;
|
|
}
|
|
throw new Error('Invalid characters in string');
|
|
}
|
|
|
|
const value = eval(str);
|
|
|
|
if (typeof value !== 'number') {
|
|
if (fallback) {
|
|
return fallbackValue;
|
|
}
|
|
throw new Error(`[math] str did not evaluate to a number but to a ${typeof value}`);
|
|
}
|
|
|
|
return value;
|
|
}
|