@@ -7,54 +7,44 @@ const validateParameter = (
77) : boolean => {
88 const expected = expectedType . toLowerCase ( ) ;
99
10- if ( expected === 'boolean' ) {
11- return typeof parameter === 'boolean' ;
10+ switch ( expected ) {
11+ case 'boolean' :
12+ return typeof parameter === 'boolean' ;
13+ case 'number' :
14+ return typeof parameter === 'number' ;
15+ case 'string' :
16+ return typeof parameter === 'string' ;
17+ default :
18+ return false ;
1219 }
13- if ( expected === 'number' ) {
14- return typeof parameter === 'number' ;
15- }
16- if ( expected === 'string' ) {
17- return typeof parameter === 'string' ;
18- }
19-
20- return false ;
2120} ;
2221
2322interface ValidationResult {
2423 isValid : boolean ;
2524 errors : {
26- mandatory ? : Record < string , string > ;
27- types ? : Record < string , string > ;
28- message ? : string ;
25+ mandatory : Record < string , string > ;
26+ types : Record < string , string > ;
27+ message : string ;
2928 } ;
3029}
3130
3231export default function componentParameters (
3332 requestParameters : Record < string , string | number | boolean > ,
3433 expectedParameters : Record < string , OcParameter > = { }
3534) : ValidationResult {
36- const result : ValidationResult = { isValid : true , errors : { } } ;
37- const mandatoryParameters : string [ ] = [ ] ;
38-
39- for ( const [ expectedParameterName , expectedParameter ] of Object . entries (
40- expectedParameters
41- ) ) {
42- if ( expectedParameter . mandatory ) {
43- mandatoryParameters . push ( expectedParameterName ) ;
44- }
45- }
35+ const result : ValidationResult = {
36+ isValid : true ,
37+ errors : { mandatory : { } , types : { } , message : '' }
38+ } ;
39+ requestParameters = requestParameters || { } ;
40+ expectedParameters = expectedParameters || { } ;
41+ const mandatoryParameters : string [ ] = Object . entries ( expectedParameters )
42+ . filter ( ( [ _ , expectedParameter ] ) => expectedParameter . mandatory )
43+ . map ( ( [ expectedParameterName ] ) => expectedParameterName ) ;
4644
4745 for ( const mandatoryParameterName of mandatoryParameters ) {
48- if (
49- typeof requestParameters === 'object' &&
50- // biome-ignore lint/suspicious/noPrototypeBuiltins: hasOwnProperty is fine
51- ! requestParameters . hasOwnProperty ( mandatoryParameterName )
52- ) {
53- if ( ! result . errors . mandatory ) {
54- result . errors . mandatory = { } ;
55- result . isValid = false ;
56- }
57-
46+ if ( ! ( mandatoryParameterName in requestParameters ) ) {
47+ result . isValid = false ;
5848 result . errors . mandatory [ mandatoryParameterName ] =
5949 strings . errors . registry . MANDATORY_PARAMETER_MISSING_CODE ;
6050 }
@@ -63,21 +53,27 @@ export default function componentParameters(
6353 for ( const [ requestParameterName , requestParameter ] of Object . entries (
6454 requestParameters
6555 ) ) {
66- if (
67- typeof expectedParameters === 'object' &&
68- // biome-ignore lint/suspicious/noPrototypeBuiltins: hasOwnProperty is fine
69- expectedParameters . hasOwnProperty ( requestParameterName )
70- ) {
56+ if ( expectedParameters [ requestParameterName ] ) {
7157 const expectedType = expectedParameters [ requestParameterName ] . type ;
7258
7359 if ( ! validateParameter ( requestParameter , expectedType ) ) {
74- if ( ! result . errors . types ) {
75- result . errors . types = { } ;
76- result . isValid = false ;
77- }
78-
60+ result . isValid = false ;
7961 result . errors . types [ requestParameterName ] =
8062 strings . errors . registry . PARAMETER_WRONG_FORMAT_CODE ;
63+ continue ; // Skip enum validation if type validation fails
64+ }
65+
66+ const expectedValues = expectedParameters [ requestParameterName ] . enum ;
67+ if (
68+ expectedValues &&
69+ ! ( expectedValues as any ) . includes ( requestParameter )
70+ ) {
71+ result . isValid = false ;
72+ result . errors . types [ requestParameterName ] =
73+ strings . errors . registry . PARAMETER_WRONG_VALUE (
74+ requestParameterName ,
75+ expectedValues as string [ ]
76+ ) ;
8177 }
8278 }
8379 }
0 commit comments