emr-types
Version:
Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation
126 lines • 3.41 kB
JavaScript
/**
* ID Factory Functions
*/
export const IdFactory = {
/**
* Create a UUID ID
*/
createUuid: (value) => ({
value,
type: 'uuid',
generatedAt: new Date(),
isValid: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)
}),
/**
* Create a new UUID ID (generates random UUID)
*/
create: () => {
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
return IdFactory.createUuid(uuid);
},
/**
* Create a ULID ID
*/
createUlid: (value) => ({
value,
type: 'ulid',
generatedAt: new Date(),
isValid: /^[0-9A-Z]{26}$/.test(value)
}),
/**
* Create a custom ID
*/
createCustom: (value, format) => ({
value,
type: 'custom',
generatedAt: new Date(),
isValid: true,
format: format || undefined
}),
/**
* Create an auto-increment ID
*/
createAutoIncrement: (value, numericValue) => ({
value,
type: 'auto-increment',
generatedAt: new Date(),
isValid: true,
numericValue
}),
/**
* Create ID from string (auto-detect type)
*/
fromString: (value) => {
if (IdValidator.isValidUuid(value)) {
return IdFactory.createUuid(value);
}
else if (IdValidator.isValidUlid(value)) {
return IdFactory.createUlid(value);
}
else if (IdValidator.isValidAutoIncrement(value)) {
return IdFactory.createAutoIncrement(value, parseInt(value));
}
else {
return IdFactory.createCustom(value);
}
}
};
/**
* ID Validation Functions
*/
export const IdValidator = {
/**
* Validate if a string is a valid UUID
*/
isValidUuid: (value) => {
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
},
/**
* Validate if a string is a valid ULID
*/
isValidUlid: (value) => {
return /^[0-9A-Z]{26}$/.test(value);
},
/**
* Validate if a string is a valid auto-increment ID
*/
isValidAutoIncrement: (value) => {
return /^\d+$/.test(value);
},
/**
* Check if an ID object is valid
*/
isValid: (id) => {
return id && typeof id === 'object' && 'value' in id && 'type' in id && 'isValid' in id;
},
/**
* Validate ID format
*/
validateFormat: (value) => {
return IdValidator.isValidUuid(value) || IdValidator.isValidUlid(value) || IdValidator.isValidAutoIncrement(value);
},
/**
* Check if ID is empty
*/
isEmpty: (id) => {
return !id || !id.value || id.value.trim() === '';
},
/**
* Compare two IDs
*/
areEqual: (id1, id2) => {
return id1 && id2 && id1.value === id2.value && id1.type === id2.type;
}
};
/**
* Type guards for ID types
*/
export const isUuidId = (id) => id.type === 'uuid';
export const isUlidId = (id) => id.type === 'ulid';
export const isCustomId = (id) => id.type === 'custom';
export const isAutoIncrementId = (id) => id.type === 'auto-increment';
//# sourceMappingURL=Id.js.map