2023-04-11 11:05:30 -07:00
/* eslint-disable no-console */
2022-10-22 22:48:25 -07:00
import widgets from "widgets/widgets" ;
export default function validateWidgetData ( widget , endpoint , data ) {
let valid = true ;
2023-04-06 07:03:06 -07:00
let dataParsed = data ;
2023-04-11 11:05:30 -07:00
let error ;
2023-04-11 11:15:08 -07:00
let mapping ;
2023-04-06 07:03:06 -07:00
if ( Buffer . isBuffer ( data ) ) {
2023-04-05 22:17:52 -07:00
try {
dataParsed = JSON . parse ( data ) ;
} catch ( e ) {
2023-04-11 11:05:30 -07:00
error = e ;
2023-04-05 22:17:52 -07:00
valid = false ;
}
2022-10-22 22:48:25 -07:00
}
2022-11-18 23:07:25 -08:00
if ( dataParsed && Object . entries ( dataParsed ) . length ) {
2023-04-11 11:05:30 -07:00
const mappings = widgets [ widget . type ] ? . mappings ;
if ( mappings ) {
2023-04-11 11:15:08 -07:00
mapping = Object . values ( mappings ) . find ( m => m . endpoint === endpoint ) ;
2023-04-11 11:05:30 -07:00
mapping ? . validate ? . forEach ( key => {
if ( dataParsed [ key ] === undefined ) {
valid = false ;
}
} ) ;
}
}
if ( ! valid ) {
2023-04-11 11:15:08 -07:00
console . warn ( ` Invalid data for widget ' ${ widget . type } ' endpoint ' ${ endpoint } ': \n Expected: ${ mapping ? . validate } \n Parse error: ${ error ? ? "none" } \n Data: ${ JSON . stringify ( data ) } ` ) ;
2022-10-22 22:48:25 -07:00
}
return valid ;
}