UNPKG

express-generator-typescript

Version:

Generate new Express applications similar to express-generate which but sets it up to use TypeScript instead

73 lines (58 loc) 2.15 kB
import { isNonEmptyString, isString, isUnsignedInteger } from 'jet-validators'; import { parseObject, Schema, testObject } from 'jet-validators/utils'; import { transformIsDate } from '@src/common/utils/validators'; import { Entity } from './common/types'; /****************************************************************************** Constants ******************************************************************************/ const GetDefaults = (): IUser => ({ id: 0, name: '', email: '', created: new Date(), }); const schema: Schema<IUser> = { id: isUnsignedInteger, name: isString, email: isString, created: transformIsDate, }; /****************************************************************************** Types ******************************************************************************/ /** * @entity users */ export interface IUser extends Entity { name: string; email: string; } /****************************************************************************** Setup ******************************************************************************/ // Set the "parseUser" function const parseUser = parseObject<IUser>(schema); // For the APIs make sure the right fields are complete const isCompleteUser = testObject<IUser>({ ...schema, name: isNonEmptyString, email: isNonEmptyString, }); /****************************************************************************** Functions ******************************************************************************/ /** * New user object. */ function new_(user?: Partial<IUser>): IUser { return parseUser({ ...GetDefaults(), ...user }, (errors) => { throw new Error('Setup new user failed ' + JSON.stringify(errors, null, 2)); }); } /****************************************************************************** Export default ******************************************************************************/ export default { new: new_, isComplete: isCompleteUser, } as const;