diff --git a/lib/types/avatar-types.js b/lib/types/avatar-types.js index f5a5413e4..28836abdf 100644 --- a/lib/types/avatar-types.js +++ b/lib/types/avatar-types.js @@ -1,75 +1,79 @@ // @flow -import t, { type TUnion } from 'tcomb'; +import t, { type TUnion, type TInterface } from 'tcomb'; import type { CreateUpdatesResult } from './update-types.js'; -import { tShape, tString } from '../utils/validation-utils.js'; +import { validHexColorRegex } from '../shared/account-utils.js'; +import { onlyOneEmojiRegex } from '../shared/emojis.js'; +import { tRegex, tShape, tString } from '../utils/validation-utils.js'; export type EmojiAvatarDBContent = { +type: 'emoji', +emoji: string, +color: string, // hex, without "#" or "0x" }; -const emojiAvatarDBContentValidator = tShape({ - type: tString('emoji'), - emoji: t.String, - color: t.String, -}); +export const emojiAvatarDBContentValidator: TInterface = + tShape({ + type: tString('emoji'), + emoji: tRegex(onlyOneEmojiRegex), + color: tRegex(validHexColorRegex), + }); export type ImageAvatarDBContent = { +type: 'image', +uploadID: string, }; export type ENSAvatarDBContent = { +type: 'ens', }; -const ensAvatarDBContentValidator = tShape({ type: tString('ens') }); +export const ensAvatarDBContentValidator: TInterface = + tShape({ type: tString('ens') }); export type AvatarDBContent = | EmojiAvatarDBContent | ImageAvatarDBContent | ENSAvatarDBContent; export type UpdateUserAvatarRemoveRequest = { +type: 'remove' }; export type UpdateUserAvatarRequest = | AvatarDBContent | UpdateUserAvatarRemoveRequest; export type ClientEmojiAvatar = EmojiAvatarDBContent; const clientEmojiAvatarValidator = emojiAvatarDBContentValidator; export type ClientImageAvatar = { +type: 'image', +uri: string, }; const clientImageAvatarValidator = tShape({ type: tString('image'), uri: t.String, }); export type ClientENSAvatar = ENSAvatarDBContent; const clientENSAvatarValidator = ensAvatarDBContentValidator; export type ClientAvatar = | ClientEmojiAvatar | ClientImageAvatar | ClientENSAvatar; export const clientAvatarValidator: TUnion = t.union([ clientEmojiAvatarValidator, clientImageAvatarValidator, clientENSAvatarValidator, ]); export type ResolvedClientAvatar = ClientEmojiAvatar | ClientImageAvatar; export type UpdateUserAvatarResponse = { +updates: CreateUpdatesResult, }; export type GenericUserInfoWithAvatar = { +username?: ?string, +avatar?: ?ClientAvatar, ... }; diff --git a/lib/utils/avatar-utils.js b/lib/utils/avatar-utils.js index d4c9cd971..1e1ada787 100644 --- a/lib/utils/avatar-utils.js +++ b/lib/utils/avatar-utils.js @@ -1,51 +1,39 @@ // @flow import t from 'tcomb'; import type { TUnion, TInterface } from 'tcomb'; -import { tRegex, tShape, tString, tID } from './validation-utils.js'; -import { validHexColorRegex } from '../shared/account-utils.js'; -import { onlyOneEmojiRegex } from '../shared/emojis.js'; -import type { - ENSAvatarDBContent, - EmojiAvatarDBContent, - ImageAvatarDBContent, - UpdateUserAvatarRemoveRequest, - UpdateUserAvatarRequest, -} from '../types/avatar-types'; - -const emojiAvatarDBContentValidator: TInterface = tShape({ - type: tString('emoji'), - emoji: tRegex(onlyOneEmojiRegex), - color: tRegex(validHexColorRegex), -}); +import { tShape, tString, tID } from './validation-utils.js'; +import { + type ImageAvatarDBContent, + type UpdateUserAvatarRemoveRequest, + type UpdateUserAvatarRequest, + emojiAvatarDBContentValidator, + ensAvatarDBContentValidator, +} from '../types/avatar-types.js'; const imageAvatarDBContentValidator: TInterface = tShape({ type: tString('image'), uploadID: tID, }); -const ensAvatarDBContentValidator: TInterface = tShape({ - type: tString('ens'), -}); - const updateUserAvatarRemoveRequestValidator: TInterface = tShape({ type: tString('remove'), }); const updateUserAvatarRequestValidator: TUnion = t.union([ emojiAvatarDBContentValidator, imageAvatarDBContentValidator, ensAvatarDBContentValidator, updateUserAvatarRemoveRequestValidator, ]); export { emojiAvatarDBContentValidator, imageAvatarDBContentValidator, ensAvatarDBContentValidator, updateUserAvatarRemoveRequestValidator, updateUserAvatarRequestValidator, };