1111 * or submit itself to any jurisdiction.
1212 */
1313import Joi from 'joi' ;
14+ import { NUMERICAL_COMPARISON_OPERATORS } from '../domain/dtos/filters/NumericalComparisonDto.js' ;
1415
1516const joiTimeDurationErrorText = 'Invalid duration value' ;
1617
1718/**
1819 * Transform digital time in string format
1920 *
20- * @param {* } incomingValue The time to transform
21- * @returns {number } The value as seconds (Number)
21+ * @param {string } incomingValue The time to transform
22+ * @param {* } helpers The Joi helpers object
23+ * @returns {number|import("joi").ValidationError } The value if transformation passes, as seconds (Number)
2224 */
23- export const transformTime = ( incomingValue ) => {
24- // Extract time to seconds...
25- const [ hoursStr , minutesStr , secondsStr ] = incomingValue . split ( ':' ) ;
25+ export const transformTime = ( incomingValue , helpers ) => {
26+ try {
27+ // Extract time to seconds...
28+ const [ hoursStr , minutesStr , secondsStr ] = incomingValue . split ( ':' ) ;
2629
27- return Number ( hoursStr ) * 3600 + Number ( minutesStr ) * 60 + Number ( secondsStr ) ;
30+ const hours = Number ( hoursStr ) ;
31+ const minutes = Number ( minutesStr ) ;
32+ const seconds = Number ( secondsStr ) ;
33+
34+ return hours * 3600 + minutes * 60 + seconds ;
35+ } catch ( error ) {
36+ return helpers . error ( 'any.invalid' , { message : `Validation error: ${ error ?. message ?? 'failed to transform time' } ` } ) ;
37+ }
2838} ;
2939
3040/**
@@ -36,7 +46,6 @@ export const validateTimeDuration = Joi.object({
3646 limit : Joi . string ( ) . trim ( ) . pattern ( / ^ \d + : [ 0 - 5 ] ? \d : [ 0 - 5 ] ? \d $ / ) . custom ( transformTime ) . messages ( {
3747 'string.pattern.base' : joiTimeDurationErrorText ,
3848 'string.base' : joiTimeDurationErrorText ,
39- 'any.invalid' : joiTimeDurationErrorText ,
4049 } ) ,
41- operator : Joi . string ( ) . trim ( ) . min ( 1 ) . max ( 2 ) ,
50+ operator : Joi . string ( ) . valid ( ... NUMERICAL_COMPARISON_OPERATORS ) ,
4251} ) ;
0 commit comments