feat: add user utils

This commit is contained in:
Julien Oculi 2024-06-04 14:58:24 +02:00
parent b99bfabc23
commit f8278e3b35

59
src/user_utils.ts Normal file
View file

@ -0,0 +1,59 @@
/** User login format of cohabit `firstname`.`lastname`. */
export type User = `${string}.${string}`
/**
* Transform a {@link UserDomain} into a {@link User}.
*
* @param userDomain User domain (hostname subdomain) derived from user login.
* @returns Corresponding user user login.
*
* @example
* ```ts
* import { toUser } from './user_utils.ts'
*
* const user = toUser('john-doe')
* console.assert(user === 'john.doe')
* ```
*/
export function toUser(userDomain: UserDomain): User {
//TODO check is user in cohabit.ressources.users
return userDomain.replace('-', '.') as User
}
/**
* User personal portfolio domain rerived from cohabit user login
* as `firstname`-`lastname`.
*/
export type UserDomain = `${string}-${string}`
/**
* Check hostname subdomain against {@link UserDomain}.
*
* @param userDomain Hostname to assert.
* @returns Asserted user domain.
*
* @example Valid user domain
* ```ts
* import { toUserDomain } from './user_utils.ts'
*
* const userDomain = toUserDomain('john-doe')
* console.assert(userDomain === 'john-doe')
* ```
* @example Invalid user domain
* ```ts
* import { toUserDomain } from './user_utils.ts'
*
* try {
* const userDomain = toUserDomain('johndont')
* } catch (error) {
* console.assert(error instanceof Error)
* }
* ```
*/
export function toUserDomain(userDomain: string): UserDomain {
//TODO check is user in cohabit.ressources.users
if (/\w+-\w+/.test(userDomain)) {
return userDomain as UserDomain
}
throw new TypeError(`invalid user login (${userDomain.replace('-', '.')})`)
}