Skip to content

Commit b2f6936

Browse files
refactor: centralize optional field guards to reduce undefined noise
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 610741e commit b2f6936

1 file changed

Lines changed: 27 additions & 17 deletions

File tree

src/views/Validation.vue

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,20 @@ type ValidationMetadataDimension = {
200200
h: number
201201
}
202202
203+
type UnknownRecord = Record<string, unknown>
204+
203205
function 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+
207217
function 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
277287
function 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
286296
function 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
317327
function 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
330340
function 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
352362
function 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

Comments
 (0)