import { Injectable } from '@nestjs/common'; import { Request } from 'express'; import { SessionData } from 'express-session'; @Injectable() export class FormUtilityService { public emailRegex = /^[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/; public passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\w\W]{8,}$/; public usernameRegex = /^[a-zA-Z0-9_\-.]{3,26}$/; public mergeObjectArray(flash: Record[]): Record { return flash.reduce>( (obj, item) => ({ ...obj, ...item }), {}, ); } /** * Include CSRF token, messages and prefilled form values for a template with a form * @param req Express request * @param session Express session * @param additional Additional data to pass * @returns Template locals */ public populateTemplate( req: Request, session: SessionData, additional: Record = {}, ): Record { const message = req.flash('message')[0] || {}; const form = this.mergeObjectArray( (req.flash('form') as Record[]) || [], ); return { path: req.originalUrl, csrf: session.csrf, message, form, ...additional, }; } }