diff --git a/src/user_utils.ts b/src/user_utils.ts new file mode 100644 index 0000000..99957c5 --- /dev/null +++ b/src/user_utils.ts @@ -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('-', '.')})`) +}