import { ValidationOptions } from '../ValidationOptions'; import { buildMessage, ValidateBy } from '../common/ValidateBy'; export const IS_FIREBASE_PUSH_ID = 'IsFirebasePushId'; /** * Checks if the string is a Firebase Push Id * If given value is not a Firebase Push Id, it returns false */ export function isFirebasePushId(value: unknown): boolean { const webSafeRegex = /^[a-zA-Z0-9_-]*$/; return typeof value === 'string' && value.length === 20 && webSafeRegex.test(value); } /** * Checks if the string is a Firebase Push Id * If given value is not a Firebase Push Id, it returns false */ export function IsFirebasePushId(validationOptions?: ValidationOptions): PropertyDecorator { return ValidateBy( { name: IS_FIREBASE_PUSH_ID, validator: { validate: (value, args): boolean => isFirebasePushId(value), defaultMessage: buildMessage( eachPrefix => eachPrefix + '$property must be a Firebase Push Id', validationOptions ), }, }, validationOptions ); }