Skip to content

Commit 07a3e92

Browse files
committed
refactor to reuse byContactQualifierNonAssertive
Signed-off-by: apoorvapendse <[email protected]>
1 parent cbc4aaa commit 07a3e92

File tree

1 file changed

+24
-27
lines changed

1 file changed

+24
-27
lines changed

shared-libs/cht-datasource/src/qualifier.ts

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ type ContactQualifier = Readonly<{
164164
* Valid formats are 'YYYY-MM-DDTHH:mm:ssZ', 'YYYY-MM-DDTHH:mm:ss.SSSZ', or <unix epoch>.
165165
*/
166166
export const byContactQualifier = (data: unknown): ContactQualifier => {
167+
// This will throw errors if any.
168+
byContactQualifierNonAssertive(data);
169+
return data as ContactQualifier;
170+
};
171+
172+
/** @internal*/
173+
export const byContactQualifierNonAssertive = (data: unknown) : Record<string, unknown> => {
167174
if (!isRecord(data)){
168175
throw new InvalidArgumentError('Invalid "data": expected an object.');
169176
}
@@ -174,7 +181,7 @@ export const byContactQualifier = (data: unknown): ContactQualifier => {
174181
`Invalid reported_date. Expected format to be 'YYYY-MM-DDTHH:mm:ssZ', 'YYYY-MM-DDTHH:mm:ss.SSSZ', or a Unix epoch.`
175182
);
176183
}
177-
if (!isContactQualifier(qualifier)){
184+
if (!checkContactQualifierFields(qualifier)){
178185
throw new InvalidArgumentError(`Missing or empty required fields [${JSON.stringify(data)}].`);
179186
}
180187
return qualifier;
@@ -297,48 +304,42 @@ type PersonQualifier = ContactQualifier & Readonly<{
297304
* Valid formats are 'YYYY-MM-DDTHH:mm:ssZ', 'YYYY-MM-DDTHH:mm:ss.SSSZ', or <unix epoch>.
298305
*/
299306
export const byPersonQualifier = (data: unknown): PersonQualifier => {
300-
if (!isRecord(data)) {
301-
throw new InvalidArgumentError('Invalid "data": expected an object.');
302-
}
303-
const qualifier = { ...data };
304-
if ('reported_date' in qualifier && !isValidReportedDate(qualifier.reported_date)) {
305-
throw new InvalidArgumentError(
306-
// eslint-disable-next-line max-len
307-
`Invalid reported_date. Expected format to be 'YYYY-MM-DDTHH:mm:ssZ', 'YYYY-MM-DDTHH:mm:ss.SSSZ', or a Unix epoch.`
308-
);
309-
}
310-
if (!isContactQualifier(qualifier) || !hasField(data, { name: 'parent', type: 'object' })) {
311-
throw new InvalidArgumentError(`Missing or empty required fields [${JSON.stringify(data)}].`);
307+
const qualifier = byContactQualifierNonAssertive(data);
308+
309+
if (!hasField(qualifier, { name: 'parent', type: 'object' })) {
310+
throw new InvalidArgumentError(`Missing or empty required fields [${JSON.stringify(qualifier)}].`);
312311
}
313-
if (!isNormalizedParent(data.parent)) {
314-
throw new InvalidArgumentError(`Missing required fields in the parent hierarchy [${JSON.stringify(data)}].`);
312+
313+
if (!isNormalizedParent(qualifier.parent)) {
314+
throw new InvalidArgumentError(`Missing required fields in the parent hierarchy [${JSON.stringify(qualifier)}].`);
315315
}
316316

317-
if (data.type === 'contact' && !hasField(data, { name: 'contact_type', type: 'string' })) {
318-
throw new InvalidArgumentError(`Missing or empty required fields [${JSON.stringify(data)}].`);
319-
} else if (!(data.type === 'person')) {
317+
if (qualifier.type === 'contact' && !hasField(qualifier, { name: 'contact_type', type: 'string' })) {
318+
throw new InvalidArgumentError(`Missing or empty required fields [${JSON.stringify(qualifier)}].`);
319+
} else if (!(qualifier.type === 'person')) {
320320
throw new InvalidArgumentError('Expected `type` to be `person`.');
321321
}
322322

323323
// Ensure parent lineage doesn't have any additional properties other than `_id` and `parent`.
324-
let parent = data.parent;
324+
let parent = qualifier.parent;
325325
while (parent) {
326326
if (Object.keys(parent).length > 2) {
327327
// This means that the parent certainly has extra fields and is not minfied/de-hydrated as per
328328
// our liking as `isNormalized` check ensures that it does have two keys `_id` and `parent`.
329-
throw new InvalidArgumentError(`Additional fields found in the parent lineage [${JSON.stringify(data)}].`);
329+
throw new InvalidArgumentError(`Additional fields found in the parent lineage [${JSON.stringify(qualifier)}].`);
330330
}
331-
parent = data.parent;
331+
parent = qualifier.parent;
332332
}
333333

334-
return qualifier as PersonQualifier;
334+
return qualifier as unknown as PersonQualifier;
335335
};
336336

337337
/** @internal */
338338
export const isPersonQualifier = (data: unknown): data is PersonQualifier => {
339-
if (!isRecord(data)) {
339+
if (!checkContactQualifierFields(data)) {
340340
return false;
341341
}
342+
342343
if (!hasField(data, { name: 'parent', type: 'object' }) || !isNormalizedParent(data.parent)) {
343344
return false;
344345
}
@@ -354,10 +355,6 @@ export const isPersonQualifier = (data: unknown): data is PersonQualifier => {
354355
parent = data.parent;
355356
}
356357

357-
if (!isContactQualifier(data)) {
358-
return false;
359-
}
360-
361358
if (data.type === 'contact' && !hasField(data, { name: 'contact_type', type: 'string' })) {
362359
return false;
363360
} else if (!(data.type === 'person')) {

0 commit comments

Comments
 (0)