@@ -200,10 +200,20 @@ type ValidationMetadataDimension = {
200200 h: number
201201}
202202
203+ type UnknownRecord = Record <string , unknown >
204+
203205function isRecord(value : unknown ): value is Record <string , unknown > {
204206 return typeof value === ' object' && value !== null
205207}
206208
209+ function hasOwn(record : UnknownRecord , key : string ): boolean {
210+ return Object .prototype .hasOwnProperty .call (record , key )
211+ }
212+
213+ function isOptionalField(record : UnknownRecord , key : string , guard : (value : unknown ) => boolean ): boolean {
214+ return ! hasOwn (record , key ) || guard (record [key ])
215+ }
216+
207217function normalizeRouteRecord(value : unknown , source : ' params' | ' query' ): Record <string , string > {
208218 if (! isRecord (value )) {
209219 return {}
@@ -270,17 +280,17 @@ function isValidationStatusInfo(value: unknown): value is ValidationStatusInfo {
270280 return false
271281 }
272282
273- return (value . id === undefined || typeof value . id === ' number' )
274- && (value . label === undefined || isString ( value . label ) )
283+ return isOptionalField (value , ' id ' , fieldValue => typeof fieldValue === ' number' )
284+ && isOptionalField (value , ' label' , isString )
275285}
276286
277287function isValidationModificationInfo(value : unknown ): value is ValidationModificationInfo {
278288 if (! isRecord (value )) {
279289 return false
280290 }
281291
282- return (value . status === undefined || typeof value . status === ' number' )
283- && (value . valid === undefined || typeof value . valid === ' boolean' )
292+ return isOptionalField (value , ' status' , fieldValue => typeof fieldValue === ' number' )
293+ && isOptionalField (value , ' valid' , fieldValue => typeof fieldValue === ' boolean' )
284294}
285295
286296function isValidationMetadataDimension(value : unknown ): value is ValidationMetadataDimension {
@@ -308,10 +318,10 @@ function isValidationMetadata(value: unknown): value is NonNullable<ValidationFi
308318 return false
309319 }
310320
311- return (value . d === undefined || ( Array .isArray (value . d ) && value . d . every (isValidationMetadataDimension ) ))
312- && (value . original_file_deleted === undefined || typeof value . original_file_deleted === ' boolean' )
313- && (value . pdfVersion === undefined || isString ( value . pdfVersion ) )
314- && (value . status_changed_at === undefined || isString ( value . status_changed_at ) )
321+ return isOptionalField (value , ' d ' , fieldValue => Array .isArray (fieldValue ) && fieldValue . every (isValidationMetadataDimension ))
322+ && isOptionalField (value , ' original_file_deleted' , fieldValue => typeof fieldValue === ' boolean' )
323+ && isOptionalField (value , ' pdfVersion' , isString )
324+ && isOptionalField (value , ' status_changed_at' , isString )
315325}
316326
317327function isValidationSettings(value : unknown ): value is NonNullable <ValidationFileRecord [' settings' ]> {
@@ -324,7 +334,7 @@ function isValidationSettings(value: unknown): value is NonNullable<ValidationFi
324334 && typeof value .hasSignatureFile === ' boolean'
325335 && typeof value .needIdentificationDocuments === ' boolean'
326336 && typeof value .identificationDocumentsWaitingApproval === ' boolean'
327- && ( typeof value . isApprover === ' boolean ' || value . isApprover === undefined )
337+ && isOptionalField ( value , ' isApprover ' , fieldValue => typeof fieldValue === ' boolean ' )
328338}
329339
330340function isSignerDetailRecord(value : unknown ): value is SignerDetailRecord {
@@ -342,11 +352,11 @@ function isSignerDetailRecord(value: unknown): value is SignerDetailRecord {
342352 && isString (value .request_sign_date )
343353 && typeof value .me === ' boolean'
344354 && Array .isArray (value .visibleElements )
345- && (value . signature_validation === undefined || isValidationStatusInfo ( value . signature_validation ) )
346- && (value . certificate_validation === undefined || isValidationStatusInfo ( value . certificate_validation ) )
347- && (value . modification_validation === undefined || isValidationModificationInfo ( value . modification_validation ) )
348- && (value . crl_validation === undefined || isString ( value . crl_validation ) )
349- && (value . isLibreSignRootCA === undefined || typeof value . isLibreSignRootCA === ' boolean' )
355+ && isOptionalField (value , ' signature_validation' , isValidationStatusInfo )
356+ && isOptionalField (value , ' certificate_validation' , isValidationStatusInfo )
357+ && isOptionalField (value , ' modification_validation' , isValidationModificationInfo )
358+ && isOptionalField (value , ' crl_validation' , isString )
359+ && isOptionalField (value , ' isLibreSignRootCA' , fieldValue => typeof fieldValue === ' boolean' )
350360}
351361
352362function isValidatedChildFileRecord(value : unknown ): value is ValidatedChildFileRecord {
@@ -395,15 +405,15 @@ function isValidationDocumentRecord(data: unknown): data is ValidationFileRecord
395405 return false
396406 }
397407
398- if (data . signers !== undefined && (! Array .isArray (data .signers ) || ! data .signers .every (isSignerDetailRecord ))) {
408+ if (hasOwn ( data , ' signers ' ) && (! Array .isArray (data .signers ) || ! data .signers .every (isSignerDetailRecord ))) {
399409 return false
400410 }
401411
402- if (data . metadata !== undefined && ! isValidationMetadata (data .metadata )) {
412+ if (hasOwn ( data , ' metadata ' ) && ! isValidationMetadata (data .metadata )) {
403413 return false
404414 }
405415
406- if (data . settings !== undefined && ! isValidationSettings (data .settings )) {
416+ if (hasOwn ( data , ' settings ' ) && ! isValidationSettings (data .settings )) {
407417 return false
408418 }
409419
0 commit comments