let User = type({ name: string, meta: { bio: 'string' } })
let CreateUser = type([ User, '&', { password: string, meta: { age: 'number' } } ])
let UserModel = type([ CreateUser, '&', { meta: { isAdult: 'boolean' } } ])
let oneUser: UserModel;
function addUser(user: CreateUser) {
// should throw on inputs with extra keys on user and on user.meta
let newUser = AT_asHttpIn(CreateUser).assert(user)
newUser.meta.isAdult = newUser.meta.age >= 18
oneUser = AT_strict(UserModel).assert(newUser)
}
function getUser() {
// should remove password and age
// should not remove them on actual data
return AT_asHttpOut(User).assert(oneUser)
}
let User = type({ name: string, meta: { bio: 'string' } })
let CreateUser = type([ User, '&', { password: string, meta: { age: 'number' } } ])
let UserModel = type([ CreateUser, '&', { meta: { isAdult: 'boolean' } } ])
let oneUser: UserModel;
function addUser(user: CreateUser) {
// should throw on inputs with extra keys on user and on user.meta
let newUser = AT_asHttpIn(CreateUser).assert(user)
newUser.meta.isAdult = newUser.meta.age >= 18
oneUser = AT_strict(UserModel).assert(newUser)
}
function getUser() {
// should remove password and age
// should not remove them on actual data
return AT_asHttpOut(User).assert(oneUser)
}