UNPKG

emr-types

Version:

Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation

126 lines 3.41 kB
/** * 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