@shakerquiz/utilities 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dprint.json +1 -4
- package/package.json +4 -10
- package/source/enumerations/core/features.js +51 -200
- package/source/enumerations/core/methods.js +9 -18
- package/source/enumerations/core/networks.js +6 -4
- package/source/enumerations/core/runtimes.js +6 -4
- package/source/enumerations/entities/affilation.js +91 -0
- package/source/enumerations/entities/cities-mode.js +49 -0
- package/source/enumerations/entities/city/timezone-mode.js +44 -0
- package/source/enumerations/entities/city/venues-mode.js +60 -0
- package/source/enumerations/entities/game-status.js +130 -0
- package/source/enumerations/entities/password-mode.js +40 -0
- package/source/enumerations/entities/registration-attribute.js +83 -0
- package/source/enumerations/entities/registration-channel.js +26 -0
- package/source/enumerations/entities/registration-lineup.js +75 -0
- package/source/enumerations/entities/registration-mailing.js +24 -0
- package/source/enumerations/entities/registration-status.js +89 -0
- package/source/enumerations/entities/role-mode.js +40 -0
- package/source/enumerations/entities/role.js +82 -0
- package/source/enumerations/entities/venue/audience.js +100 -0
- package/source/enumerations/entities/venue/city-mode.js +44 -0
- package/source/enumerations/entities/venue/status.js +53 -0
- package/source/enumerations/entities/version.js +76 -0
- package/source/enumerations/misc/icons.js +653 -324
- package/source/enumerations/misc/keys.js +15 -0
- package/source/enumerations/misc/phases.js +42 -7
- package/source/enumerations/misc/regexps.js +1 -2
- package/source/enumerations/misc/routes.js +610 -0
- package/source/index.js +22 -12
- package/source/schemas/PATCH/city/admin.json +126 -0
- package/source/schemas/PATCH/city/currency/admin.json +173 -0
- package/source/schemas/PATCH/city/timezone/admin.json +501 -0
- package/source/schemas/PATCH/{Game/admin/schema.json → game/admin.json} +0 -4
- package/source/schemas/PATCH/{Game/organizer/schema.json → game/organizer.json} +0 -4
- package/source/schemas/PATCH/registration/cancellation/default.json +12 -0
- package/source/schemas/PATCH/registration/channel/default.json +22 -0
- package/source/schemas/PATCH/registration/confirmation/default.json +12 -0
- package/source/schemas/PATCH/registration/default.json +10 -0
- package/source/schemas/PATCH/registration/organizer.json +43 -0
- package/source/schemas/PATCH/theme/admin.json +19 -0
- package/source/schemas/PATCH/user/admin.json +30 -0
- package/source/schemas/PATCH/user/cities/admin.json +17 -0
- package/source/schemas/PATCH/user/password/admin.json +12 -0
- package/source/schemas/PATCH/user/role/admin.json +13 -0
- package/source/schemas/PATCH/{Venue/organizer/schema.json → venue/admin.json} +3 -2
- package/source/schemas/PATCH/{Venue/admin/schema.json → venue/organizer.json} +6 -2
- package/source/schemas/POST/checkin/default.json +16 -0
- package/source/schemas/POST/city/admin.json +696 -0
- package/source/schemas/POST/game/registrations/export/admin.json +17 -0
- package/source/schemas/POST/game/registrations/export/organizer.json +17 -0
- package/source/schemas/POST/registration/mailing/admin.json +16 -0
- package/source/schemas/POST/registration/mailing/organizer.json +16 -0
- package/source/schemas/POST/registrations/export/admin.json +17 -0
- package/source/schemas/POST/registrations/export/organizer.json +17 -0
- package/source/schemas/POST/theme/admin.json +24 -0
- package/source/schemas/POST/{Mailing/organizer/schema.json → user/admin.json} +2 -2
- package/source/schemas/POST/user/cities/admin.json +17 -0
- package/source/schemas/POST/user/password/admin.json +12 -0
- package/source/schemas/POST/user/role/admin.json +13 -0
- package/source/schemas/POST/{Venue/organizer/schema.json → venue/admin.json} +2 -13
- package/source/schemas/POST/venue/organizer.json +38 -0
- package/source/enumerations/core/features.d.ts +0 -40
- package/source/enumerations/core/kinds.d.ts +0 -1
- package/source/enumerations/core/kinds.js +0 -4
- package/source/enumerations/core/methods.d.ts +0 -8
- package/source/enumerations/core/networks.d.ts +0 -1
- package/source/enumerations/core/runtimes.d.ts +0 -1
- package/source/enumerations/core/scopes.d.ts +0 -5
- package/source/enumerations/core/scopes.js +0 -27
- package/source/enumerations/entities/city-affilations.d.ts +0 -1
- package/source/enumerations/entities/city-affilations.js +0 -4
- package/source/enumerations/entities/game-statuses.d.ts +0 -1
- package/source/enumerations/entities/game-statuses.js +0 -11
- package/source/enumerations/entities/registration-attributes.d.ts +0 -2
- package/source/enumerations/entities/registration-attributes.js +0 -57
- package/source/enumerations/entities/registration-channels.d.ts +0 -1
- package/source/enumerations/entities/registration-channels.js +0 -5
- package/source/enumerations/entities/registration-lineups.d.ts +0 -5
- package/source/enumerations/entities/registration-lineups.js +0 -43
- package/source/enumerations/entities/registration-mailings.d.ts +0 -1
- package/source/enumerations/entities/registration-mailings.js +0 -6
- package/source/enumerations/entities/registration-statuses.d.ts +0 -5
- package/source/enumerations/entities/registration-statuses.js +0 -54
- package/source/enumerations/entities/roles.d.ts +0 -1
- package/source/enumerations/entities/roles.js +0 -5
- package/source/enumerations/entities/venue-statuses.d.ts +0 -1
- package/source/enumerations/entities/venue-statuses.js +0 -4
- package/source/enumerations/misc/constants.d.ts +0 -3
- package/source/enumerations/misc/cookies.d.ts +0 -5
- package/source/enumerations/misc/cookies.js +0 -5
- package/source/enumerations/misc/icons.d.ts +0 -1
- package/source/enumerations/misc/phases.d.ts +0 -1
- package/source/enumerations/misc/regexps.d.ts +0 -5
- package/source/index.d.ts +0 -27
- package/source/misc.d.ts +0 -79
- package/source/schemas/PATCH/Game/default/schema.json +0 -6
- package/source/schemas/PATCH/Registration/admin/schema.json +0 -6
- package/source/schemas/PATCH/Registration/default/schema.json +0 -104
- package/source/schemas/PATCH/Venue/default/schema.json +0 -6
- package/source/schemas/POST/Game/organizer/schema.json +0 -27
- package/source/schemas/POST/Mailing/admin/schema.json +0 -6
- package/source/schemas/POST/Mailing/default/schema.json +0 -6
- package/source/schemas/POST/Registration/admin/schema.json +0 -6
- package/source/schemas/POST/Registration/organizer/schema.json +0 -6
- package/source/schemas/POST/Venue/admin/schema.json +0 -6
- package/source/schemas/POST/Venue/default/schema.json +0 -6
- package/source/schemas/game.schema.json +0 -93
- package/source/schemas/registration.schema.json +0 -123
- package/source/schemas/theme.schema.json +0 -48
- package/source/schemas/venue.schema.json +0 -56
- package/source/scope.d.ts +0 -874
- package/source/server.d.ts +0 -5
- package/source/tables.d.ts +0 -187
- /package/source/schemas/PATCH/{Registration/organizer/schema.json → registration/admin.json} +0 -0
- /package/source/schemas/POST/{Game/admin/schema.json → game/admin.json} +0 -0
- /package/source/schemas/POST/{Game/default/schema.json → game/organizer.json} +0 -0
- /package/source/schemas/POST/{Registration/default/schema.json → registration/default.json} +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Role } from './role.js'
|
|
2
|
+
|
|
3
|
+
export var GameStatus = /** @type {const} */ ({
|
|
4
|
+
'REJECTED': 'REJECTED',
|
|
5
|
+
'MODERATION': 'MODERATION',
|
|
6
|
+
'APPROVED': 'APPROVED',
|
|
7
|
+
'CLOSED': 'CLOSED',
|
|
8
|
+
'FORINVITES': 'FORINVITES',
|
|
9
|
+
'PUBLISHED': 'PUBLISHED',
|
|
10
|
+
'IS_RESERVE': 'IS_RESERVE',
|
|
11
|
+
'FINISHED': 'FINISHED',
|
|
12
|
+
'ARCHIVE': 'ARCHIVE',
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
export var GameStatuses = Object.values(GameStatus)
|
|
16
|
+
|
|
17
|
+
export var GameStatusWeight = {
|
|
18
|
+
[GameStatus.REJECTED]: 0,
|
|
19
|
+
[GameStatus.MODERATION]: 1,
|
|
20
|
+
[GameStatus.APPROVED]: 2,
|
|
21
|
+
[GameStatus.CLOSED]: 3,
|
|
22
|
+
[GameStatus.FORINVITES]: 4,
|
|
23
|
+
[GameStatus.PUBLISHED]: 5,
|
|
24
|
+
[GameStatus.IS_RESERVE]: 6,
|
|
25
|
+
[GameStatus.FINISHED]: 7,
|
|
26
|
+
[GameStatus.ARCHIVE]: 8,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export var GameStatusTitle = {
|
|
30
|
+
[GameStatus.REJECTED]: 'Отклонено',
|
|
31
|
+
[GameStatus.MODERATION]: 'На проверке',
|
|
32
|
+
[GameStatus.APPROVED]: 'Одобрено',
|
|
33
|
+
[GameStatus.CLOSED]: 'Закрыта',
|
|
34
|
+
[GameStatus.FORINVITES]: 'По приглашению',
|
|
35
|
+
[GameStatus.PUBLISHED]: 'Опубликовано',
|
|
36
|
+
[GameStatus.IS_RESERVE]: 'В резерве',
|
|
37
|
+
[GameStatus.FINISHED]: 'Завершено',
|
|
38
|
+
[GameStatus.ARCHIVE]: 'В архиве',
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export var GameStatusColor = {
|
|
42
|
+
[GameStatus.REJECTED]: 'danger',
|
|
43
|
+
[GameStatus.MODERATION]: 'primary',
|
|
44
|
+
[GameStatus.APPROVED]: 'success',
|
|
45
|
+
[GameStatus.CLOSED]: 'warning',
|
|
46
|
+
[GameStatus.FORINVITES]: 'current',
|
|
47
|
+
[GameStatus.PUBLISHED]: 'secondary',
|
|
48
|
+
[GameStatus.IS_RESERVE]: 'blue-900',
|
|
49
|
+
[GameStatus.FINISHED]: 'success',
|
|
50
|
+
[GameStatus.ARCHIVE]: 'current',
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export var GameStatusTextColor = {
|
|
54
|
+
[GameStatus.REJECTED]: 'text-danger',
|
|
55
|
+
[GameStatus.MODERATION]: 'text-primary',
|
|
56
|
+
[GameStatus.APPROVED]: 'text-success',
|
|
57
|
+
[GameStatus.CLOSED]: 'text-warning',
|
|
58
|
+
[GameStatus.FORINVITES]: 'text-current',
|
|
59
|
+
[GameStatus.PUBLISHED]: 'text-secondary',
|
|
60
|
+
[GameStatus.IS_RESERVE]: 'text-blue-900',
|
|
61
|
+
[GameStatus.FINISHED]: 'text-success',
|
|
62
|
+
[GameStatus.ARCHIVE]: 'text-current',
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** @type {Record<GameStatus, Icon>} */
|
|
66
|
+
export var GameStatusIcon = {
|
|
67
|
+
[GameStatus.REJECTED]: 'hero/outline/x-mark',
|
|
68
|
+
[GameStatus.MODERATION]: 'hero/outline/clock',
|
|
69
|
+
[GameStatus.APPROVED]: 'hero/outline/hand-thumb-up',
|
|
70
|
+
[GameStatus.CLOSED]: 'hero/outline/exclamation-triangle',
|
|
71
|
+
[GameStatus.FORINVITES]: 'hero/outline/lock-closed',
|
|
72
|
+
[GameStatus.PUBLISHED]: 'hero/outline/check-circle',
|
|
73
|
+
[GameStatus.IS_RESERVE]: 'hero/outline/user-plus',
|
|
74
|
+
[GameStatus.FINISHED]: 'hero/outline/check',
|
|
75
|
+
[GameStatus.ARCHIVE]: 'hero/outline/archive-box',
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** @type {{ [Key in Role]: Partial<Record<GameStatus, GameStatus[]>> }} */
|
|
79
|
+
export var RoleGameStatusGameStatuses = {
|
|
80
|
+
[Role.admin]: {},
|
|
81
|
+
|
|
82
|
+
[Role.organizer]: {
|
|
83
|
+
[GameStatus.APPROVED]: [
|
|
84
|
+
GameStatus.APPROVED,
|
|
85
|
+
GameStatus.CLOSED,
|
|
86
|
+
GameStatus.FORINVITES,
|
|
87
|
+
GameStatus.PUBLISHED,
|
|
88
|
+
GameStatus.IS_RESERVE,
|
|
89
|
+
GameStatus.FINISHED,
|
|
90
|
+
GameStatus.ARCHIVE,
|
|
91
|
+
],
|
|
92
|
+
|
|
93
|
+
[GameStatus.MODERATION]: [
|
|
94
|
+
GameStatus.MODERATION,
|
|
95
|
+
],
|
|
96
|
+
|
|
97
|
+
[GameStatus.REJECTED]: [
|
|
98
|
+
GameStatus.REJECTED,
|
|
99
|
+
GameStatus.MODERATION,
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
[Role.default]: {},
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** @type {{ [Key in Role]: GameStatus[] }} */
|
|
107
|
+
export var RoleDefaultGameStatuses = {
|
|
108
|
+
[Role.admin]: [
|
|
109
|
+
'APPROVED',
|
|
110
|
+
'ARCHIVE',
|
|
111
|
+
'CLOSED',
|
|
112
|
+
'FINISHED',
|
|
113
|
+
'FORINVITES',
|
|
114
|
+
'IS_RESERVE',
|
|
115
|
+
'MODERATION',
|
|
116
|
+
'PUBLISHED',
|
|
117
|
+
'REJECTED',
|
|
118
|
+
],
|
|
119
|
+
|
|
120
|
+
[Role.organizer]: [
|
|
121
|
+
'ARCHIVE',
|
|
122
|
+
'CLOSED',
|
|
123
|
+
'FINISHED',
|
|
124
|
+
'FORINVITES',
|
|
125
|
+
'IS_RESERVE',
|
|
126
|
+
'PUBLISHED',
|
|
127
|
+
],
|
|
128
|
+
|
|
129
|
+
[Role.default]: [],
|
|
130
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export var PasswordMode = /** @type {const} */ ({
|
|
2
|
+
'known': 'known',
|
|
3
|
+
'unknown': 'unknown',
|
|
4
|
+
})
|
|
5
|
+
|
|
6
|
+
export var PasswordModes = Object.values(PasswordMode)
|
|
7
|
+
|
|
8
|
+
export var PasswordModeTitle = {
|
|
9
|
+
[PasswordMode.known]: 'Назначен',
|
|
10
|
+
[PasswordMode.unknown]: 'Неизвестно',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export var PasswordModeWeight = {
|
|
14
|
+
[PasswordMode.known]: 0,
|
|
15
|
+
[PasswordMode.unknown]: 1,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {keyof typeof PasswordMode} value
|
|
20
|
+
*/
|
|
21
|
+
var getter = value =>
|
|
22
|
+
value in PasswordMode
|
|
23
|
+
? value
|
|
24
|
+
: PasswordMode['unknown']
|
|
25
|
+
|
|
26
|
+
export var getPasswordMode = value => {
|
|
27
|
+
if (value === null)
|
|
28
|
+
return getter(undefined)
|
|
29
|
+
|
|
30
|
+
switch (typeof value) {
|
|
31
|
+
case 'string':
|
|
32
|
+
return getter(value)
|
|
33
|
+
|
|
34
|
+
case 'object':
|
|
35
|
+
return getter(value?.mode)
|
|
36
|
+
|
|
37
|
+
default:
|
|
38
|
+
return getter(undefined)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getTag } from '../../functions/tag.js'
|
|
2
|
+
|
|
3
|
+
export var RegistrationAttribute = /** @type {const} */ ({
|
|
4
|
+
'Alone': 'Alone',
|
|
5
|
+
'Newcomer': 'Newcomer',
|
|
6
|
+
'Birthday': 'Birthday',
|
|
7
|
+
'Public': 'Public',
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
export var RegistrationAttributes = Object.values(RegistrationAttribute)
|
|
11
|
+
|
|
12
|
+
export var RegistrationAttributeWeight = {
|
|
13
|
+
[RegistrationAttribute.Alone]: 0,
|
|
14
|
+
[RegistrationAttribute.Newcomer]: 1,
|
|
15
|
+
[RegistrationAttribute.Birthday]: 2,
|
|
16
|
+
[RegistrationAttribute.Public]: 3,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export var RegistrationAttributeTitle = {
|
|
20
|
+
[RegistrationAttribute.Alone]: 'Без команды',
|
|
21
|
+
[RegistrationAttribute.Newcomer]: 'Новичок',
|
|
22
|
+
[RegistrationAttribute.Birthday]: 'День рождения',
|
|
23
|
+
[RegistrationAttribute.Public]: 'Принимаем людей',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @type {Record<RegistrationAttribute, Icon>} */
|
|
27
|
+
export var RegistrationAttributeIcon = {
|
|
28
|
+
[RegistrationAttribute.Alone]: 'hero/outline/user',
|
|
29
|
+
[RegistrationAttribute.Newcomer]: 'hero/outline/sparkles',
|
|
30
|
+
[RegistrationAttribute.Birthday]: 'hero/outline/cake',
|
|
31
|
+
[RegistrationAttribute.Public]: 'hero/outline/user-plus',
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export var RegistrationAttributeEmoji = {
|
|
35
|
+
[RegistrationAttribute.Alone]: '👤',
|
|
36
|
+
[RegistrationAttribute.Newcomer]: '✨',
|
|
37
|
+
[RegistrationAttribute.Birthday]: '🎂',
|
|
38
|
+
[RegistrationAttribute.Public]: '🫂',
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export var RegistrationAttributeRegistrationProperty = /** @type {const} */ ({
|
|
42
|
+
[RegistrationAttribute.Alone]: 'is_alone',
|
|
43
|
+
[RegistrationAttribute.Newcomer]: 'is_first',
|
|
44
|
+
[RegistrationAttribute.Birthday]: 'is_birthday',
|
|
45
|
+
[RegistrationAttribute.Public]: 'is_extensible',
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
export var RegistrationAttributeRegistrationProperties = Object.values(RegistrationAttributeRegistrationProperty)
|
|
49
|
+
|
|
50
|
+
export var RegistrationPropertyRegistrationAttribute = {
|
|
51
|
+
[RegistrationAttributeRegistrationProperty[RegistrationAttribute.Alone]]: RegistrationAttribute.Alone,
|
|
52
|
+
[RegistrationAttributeRegistrationProperty[RegistrationAttribute.Newcomer]]: RegistrationAttribute.Newcomer,
|
|
53
|
+
[RegistrationAttributeRegistrationProperty[RegistrationAttribute.Birthday]]: RegistrationAttribute.Birthday,
|
|
54
|
+
[RegistrationAttributeRegistrationProperty[RegistrationAttribute.Public]]: RegistrationAttribute.Public,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @param {RegistrationAttribute[] | Partial<Pick<RegistrationTable, 'is_alone' | 'is_birthday' | 'is_extensible' | 'is_first'>>} value
|
|
59
|
+
*/
|
|
60
|
+
export var getRegistrationAttributes = value => {
|
|
61
|
+
switch (getTag(value)) {
|
|
62
|
+
case 'Object':
|
|
63
|
+
return RegistrationAttributeRegistrationProperties
|
|
64
|
+
.map(property => value[property] ? RegistrationPropertyRegistrationAttribute[property] : '')
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
|
|
67
|
+
case 'Array':
|
|
68
|
+
if (!value.every(attribute => RegistrationAttributes.includes(attribute)))
|
|
69
|
+
throw TypeError(
|
|
70
|
+
`[Function: getRegistrationAttributes] Parameter 'value': '${value}' of type 'Array' must include only members of 'RegistrationAttributes'.`,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return value.reduce((attributes, attribute) => {
|
|
74
|
+
attributes[RegistrationAttributeRegistrationProperty[attribute]] = true
|
|
75
|
+
return attributes
|
|
76
|
+
}, {})
|
|
77
|
+
|
|
78
|
+
default:
|
|
79
|
+
throw TypeError(
|
|
80
|
+
`[Function: getRegistrationAttributes] Parameter 'value': '${value}' must be of types: 'Object', 'Array'.`,
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export var RegistrationChannel = /** @type {const} */ ({
|
|
2
|
+
'vkontakte': 'vkontakte',
|
|
3
|
+
'telegramBot': 'telegramBot',
|
|
4
|
+
'email': 'email',
|
|
5
|
+
})
|
|
6
|
+
|
|
7
|
+
export var RegistrationChannels = Object.values(RegistrationChannel)
|
|
8
|
+
|
|
9
|
+
export var RegistrationChannelWeight = {
|
|
10
|
+
[RegistrationChannel.vkontakte]: 0,
|
|
11
|
+
[RegistrationChannel.telegramBot]: 1,
|
|
12
|
+
[RegistrationChannel.email]: 2,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export var RegistationChannelTitle = {
|
|
16
|
+
[RegistrationChannel.vkontakte]: 'Вконтакте',
|
|
17
|
+
[RegistrationChannel.telegramBot]: 'Телеграм',
|
|
18
|
+
[RegistrationChannel.email]: 'Электронная почта',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** @type {Record<RegistrationChannel, Icon>} */
|
|
22
|
+
export var RegistationChannelIcon = {
|
|
23
|
+
[RegistrationChannel.vkontakte]: 'brand/solid/vk',
|
|
24
|
+
[RegistrationChannel.telegramBot]: 'brand/solid/telegram',
|
|
25
|
+
[RegistrationChannel.email]: 'hero/solid/at-symbol',
|
|
26
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export var RegistrationLineup = /** @type {const} */ ({
|
|
2
|
+
'Main': 'Main',
|
|
3
|
+
'Reserve': 'Reserve',
|
|
4
|
+
})
|
|
5
|
+
|
|
6
|
+
export var RegistrationLineups = Object.values(RegistrationLineup)
|
|
7
|
+
|
|
8
|
+
/** @type {Record<RegistrationLineup, number>} */
|
|
9
|
+
export var RegistrationLineupWeight = {
|
|
10
|
+
[RegistrationLineup.Main]: 0,
|
|
11
|
+
[RegistrationLineup.Reserve]: 1,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** @type {Record<RegistrationLineup, string>} */
|
|
15
|
+
export var RegistrationLineupTitle = {
|
|
16
|
+
[RegistrationLineup.Main]: 'Основа',
|
|
17
|
+
[RegistrationLineup.Reserve]: 'Резерв',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** @type {Record<RegistrationLineup, Icon>} */
|
|
21
|
+
export var RegistrationLineupIcon = {
|
|
22
|
+
[RegistrationLineup.Main]: 'hero/outline/user-circle',
|
|
23
|
+
[RegistrationLineup.Reserve]: 'hero/outline/pause-circle',
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** @type {Record<RegistrationLineup, string>} */
|
|
27
|
+
export var RegistrationLineupEmoji = {
|
|
28
|
+
[RegistrationLineup.Main]: '🟢',
|
|
29
|
+
[RegistrationLineup.Reserve]: '🟡',
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @type {Record<RegistrationLineup, string>} */
|
|
33
|
+
export var RegistrationLineupColor = {
|
|
34
|
+
[RegistrationLineup.Main]: 'text-primary',
|
|
35
|
+
[RegistrationLineup.Reserve]: 'text-secondary',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** @type {Record<RegistrationLineup, Pick<RegistrationTable, 'is_reserve'>>} */
|
|
39
|
+
export var RegistrationLineupShape = {
|
|
40
|
+
[RegistrationLineup.Main]: {
|
|
41
|
+
is_reserve: false,
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
[RegistrationLineup.Reserve]: {
|
|
45
|
+
is_reserve: true,
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param {RegistrationLineup | typeof RegistrationLineupShape[RegistrationLineup]} value
|
|
51
|
+
*/
|
|
52
|
+
export var getRegistrationLineup = value => {
|
|
53
|
+
switch (typeof value) {
|
|
54
|
+
case 'object':
|
|
55
|
+
let found = Object
|
|
56
|
+
.entries(RegistrationLineupShape)
|
|
57
|
+
.find(([, object]) => object.is_reserve === value.is_reserve)
|
|
58
|
+
?.at(0)
|
|
59
|
+
|
|
60
|
+
if (!RegistrationLineups.includes(found))
|
|
61
|
+
throw TypeError(
|
|
62
|
+
`[Function: getRegistrationLineup] Parameter 'found': '${found}' must be a member of 'Lineups'.`,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return found
|
|
66
|
+
|
|
67
|
+
case 'string':
|
|
68
|
+
if (!RegistrationLineups.includes(value))
|
|
69
|
+
throw TypeError(
|
|
70
|
+
`[Function: getRegistrationLineup] Parameter 'value': '${value}' must be a member of 'Lineups'.`,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
return RegistrationLineupShape[value]
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export var RegistrationMailing = /** @type {const} */ ({
|
|
2
|
+
'Idle': 'Idle',
|
|
3
|
+
'Pending': 'Pending',
|
|
4
|
+
'Delivered': 'Delivered',
|
|
5
|
+
'Failed': 'Failed',
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
export var RegistrationMailings = Object.values(RegistrationMailing)
|
|
9
|
+
|
|
10
|
+
/** @type {Record<RegistrationMailing, number>} */
|
|
11
|
+
export var RegistrationMailingWeight = {
|
|
12
|
+
[RegistrationMailing.Idle]: 0,
|
|
13
|
+
[RegistrationMailing.Pending]: 1,
|
|
14
|
+
[RegistrationMailing.Delivered]: 2,
|
|
15
|
+
[RegistrationMailing.Failed]: 3,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** @type {Record<RegistrationMailing, string>} */
|
|
19
|
+
export var RegistrationMailingColor = {
|
|
20
|
+
[RegistrationMailing.Idle]: 'default',
|
|
21
|
+
[RegistrationMailing.Pending]: 'warning',
|
|
22
|
+
[RegistrationMailing.Delivered]: 'success',
|
|
23
|
+
[RegistrationMailing.Failed]: 'danger',
|
|
24
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export var RegistrationStatus = /** @type {const} */ ({
|
|
2
|
+
'Confirmed': 'Confirmed',
|
|
3
|
+
'Created': 'Created',
|
|
4
|
+
'Cancelled': 'Cancelled',
|
|
5
|
+
})
|
|
6
|
+
|
|
7
|
+
export var RegistrationStatuses = Object.values(RegistrationStatus)
|
|
8
|
+
|
|
9
|
+
export var RegistrationStatusWeight = {
|
|
10
|
+
[RegistrationStatus.Confirmed]: 0,
|
|
11
|
+
[RegistrationStatus.Created]: 1,
|
|
12
|
+
[RegistrationStatus.Cancelled]: 2,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export var RegistrationStatusTitle = {
|
|
16
|
+
[RegistrationStatus.Confirmed]: 'Подтверждена',
|
|
17
|
+
[RegistrationStatus.Created]: 'Создана',
|
|
18
|
+
[RegistrationStatus.Cancelled]: 'Отменена',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** @type {Record<RegistrationStatus, Icon>} */
|
|
22
|
+
export var RegistrationStatusIcon = {
|
|
23
|
+
[RegistrationStatus.Confirmed]: 'hero/outline/check-circle',
|
|
24
|
+
[RegistrationStatus.Created]: 'hero/outline/check',
|
|
25
|
+
[RegistrationStatus.Cancelled]: 'hero/outline/x-mark',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** @type {Record<RegistrationStatus, Icon>} */
|
|
29
|
+
export var RegistrationStatusEmoji = {
|
|
30
|
+
[RegistrationStatus.Confirmed]: '✅',
|
|
31
|
+
[RegistrationStatus.Created]: '📝',
|
|
32
|
+
[RegistrationStatus.Cancelled]: '❌',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** @type {Record<RegistrationStatus, string>} */
|
|
36
|
+
export var RegistrationStatusColor = {
|
|
37
|
+
[RegistrationStatus.Confirmed]: 'text-success',
|
|
38
|
+
[RegistrationStatus.Created]: 'text-default-700',
|
|
39
|
+
[RegistrationStatus.Cancelled]: 'text-danger',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** @type {Record<RegistrationStatus, Pick<RegistrationTable, 'is_canceled' | 'is_confirm'>>} */
|
|
43
|
+
export var RegistrationStatusShape = {
|
|
44
|
+
[RegistrationStatus.Confirmed]: {
|
|
45
|
+
is_canceled: false,
|
|
46
|
+
is_confirm: true,
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
[RegistrationStatus.Created]: {
|
|
50
|
+
is_canceled: false,
|
|
51
|
+
is_confirm: false,
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
[RegistrationStatus.Cancelled]: {
|
|
55
|
+
is_canceled: true,
|
|
56
|
+
is_confirm: false,
|
|
57
|
+
},
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param {RegistrationStatus | typeof RegistrationStatusShape[RegistrationStatus]} value
|
|
62
|
+
*/
|
|
63
|
+
export var getRegistrationStatus = value => {
|
|
64
|
+
switch (typeof value) {
|
|
65
|
+
case 'object':
|
|
66
|
+
let found = Object
|
|
67
|
+
.entries(RegistrationStatusShape)
|
|
68
|
+
.find(([, object]) =>
|
|
69
|
+
object.is_canceled === value.is_canceled
|
|
70
|
+
&& object.is_confirm === value.is_confirm
|
|
71
|
+
)
|
|
72
|
+
?.at(0)
|
|
73
|
+
|
|
74
|
+
if (!RegistrationStatuses.includes(found))
|
|
75
|
+
throw TypeError(
|
|
76
|
+
`[Function: getRegistrationStatus] Parameter 'found': '${found}' must be a member of 'RegistrationStatuses'.`,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
return found
|
|
80
|
+
|
|
81
|
+
case 'string':
|
|
82
|
+
if (!RegistrationStatuses.includes(value))
|
|
83
|
+
throw TypeError(
|
|
84
|
+
`[Function: getRegistrationStatus] Parameter 'value': '${value}' must be a member of 'RegistrationStatuses'.`,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return RegistrationStatusShape[value]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export var RoleMode = /** @type {const} */ ({
|
|
2
|
+
'known': 'known',
|
|
3
|
+
'unknown': 'unknown',
|
|
4
|
+
})
|
|
5
|
+
|
|
6
|
+
export var RoleModes = Object.values(RoleMode)
|
|
7
|
+
|
|
8
|
+
export var RoleModeTitle = {
|
|
9
|
+
[RoleMode.known]: 'Любая',
|
|
10
|
+
[RoleMode.unknown]: 'Не назначено',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export var RoleModeWeight = {
|
|
14
|
+
[RoleMode.known]: 0,
|
|
15
|
+
[RoleMode.unknown]: 1,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {keyof typeof RoleMode} value
|
|
20
|
+
*/
|
|
21
|
+
var getter = value =>
|
|
22
|
+
value in RoleMode
|
|
23
|
+
? value
|
|
24
|
+
: RoleMode['unknown']
|
|
25
|
+
|
|
26
|
+
export var getRoleMode = value => {
|
|
27
|
+
if (value === null)
|
|
28
|
+
return getter(undefined)
|
|
29
|
+
|
|
30
|
+
switch (typeof value) {
|
|
31
|
+
case 'string':
|
|
32
|
+
return getter(value)
|
|
33
|
+
|
|
34
|
+
case 'object':
|
|
35
|
+
return getter(value?.mode)
|
|
36
|
+
|
|
37
|
+
default:
|
|
38
|
+
return getter(undefined)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export var Role = /** @type {const} */ ({
|
|
2
|
+
'admin': 'admin',
|
|
3
|
+
'organizer': 'organizer',
|
|
4
|
+
'captain': 'captain',
|
|
5
|
+
'player': 'player',
|
|
6
|
+
'user': 'user',
|
|
7
|
+
'manager': 'manager',
|
|
8
|
+
'default': 'default',
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export var Roles = Object.values(Role)
|
|
12
|
+
|
|
13
|
+
export var RoleWeight = {
|
|
14
|
+
[Role.admin]: 0,
|
|
15
|
+
[Role.organizer]: 1,
|
|
16
|
+
[Role.captain]: 2,
|
|
17
|
+
[Role.player]: 3,
|
|
18
|
+
[Role.user]: 4,
|
|
19
|
+
[Role.manager]: 5,
|
|
20
|
+
[Role.default]: 6,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export var RoleTitle = {
|
|
24
|
+
[Role.admin]: 'Админ',
|
|
25
|
+
[Role.organizer]: 'Организатор',
|
|
26
|
+
[Role.captain]: 'Капитан',
|
|
27
|
+
[Role.player]: 'Игрок',
|
|
28
|
+
[Role.user]: 'Пользователь',
|
|
29
|
+
[Role.manager]: 'Менеджер',
|
|
30
|
+
[Role.default]: 'Неавторизован',
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export var RoleActionTitle = {
|
|
34
|
+
[Role.admin]: 'Сделать админом',
|
|
35
|
+
[Role.organizer]: 'Сделать организатором',
|
|
36
|
+
[Role.captain]: 'Сделать капитаном',
|
|
37
|
+
[Role.player]: 'Сделать игрокок',
|
|
38
|
+
[Role.user]: 'Сделать пользователем',
|
|
39
|
+
[Role.manager]: 'Сделать менеджером',
|
|
40
|
+
[Role.default]: 'Сделать неавторизованым',
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export var RoleActionDescription = {
|
|
44
|
+
[Role.admin]: 'Назначить роль: Админ',
|
|
45
|
+
[Role.organizer]: 'Назначить роль: Организатор',
|
|
46
|
+
[Role.captain]: 'Назначить роль: Капитан',
|
|
47
|
+
[Role.player]: 'Назначить роль: Игрок',
|
|
48
|
+
[Role.user]: 'Назначить роль: Пользователь',
|
|
49
|
+
[Role.manager]: 'Назначить роль: Менеджер',
|
|
50
|
+
[Role.default]: 'Назначить роль: Неавторизован',
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export var RoleColor = {
|
|
54
|
+
[Role.admin]: 'danger',
|
|
55
|
+
[Role.organizer]: 'warning',
|
|
56
|
+
[Role.captain]: 'primary',
|
|
57
|
+
[Role.player]: 'secondary',
|
|
58
|
+
[Role.user]: 'default',
|
|
59
|
+
[Role.manager]: 'default',
|
|
60
|
+
[Role.default]: 'default',
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export var RoleTextColor = {
|
|
64
|
+
[Role.admin]: 'text-danger',
|
|
65
|
+
[Role.organizer]: 'text-warning',
|
|
66
|
+
[Role.captain]: 'text-primary',
|
|
67
|
+
[Role.player]: 'text-secondary',
|
|
68
|
+
[Role.user]: 'text-default',
|
|
69
|
+
[Role.manager]: 'text-default',
|
|
70
|
+
[Role.default]: 'text-default',
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** @type {Record<Role, Icon>} */
|
|
74
|
+
export var RoleIcon = {
|
|
75
|
+
[Role.admin]: 'hero/outline/user',
|
|
76
|
+
[Role.organizer]: 'hero/outline/user',
|
|
77
|
+
[Role.captain]: 'hero/outline/user',
|
|
78
|
+
[Role.player]: 'hero/outline/user',
|
|
79
|
+
[Role.user]: 'hero/outline/user',
|
|
80
|
+
[Role.manager]: 'hero/outline/user',
|
|
81
|
+
[Role.default]: 'hero/outline/user',
|
|
82
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export var VenueAudience = /** @type {const} */ ({
|
|
2
|
+
'Any': 'Any',
|
|
3
|
+
'All': 'All',
|
|
4
|
+
'Restricted': 'Restricted',
|
|
5
|
+
'Unknown': 'Unknown',
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
export var VenueAudiences = [
|
|
9
|
+
VenueAudience['Any'],
|
|
10
|
+
VenueAudience['All'],
|
|
11
|
+
VenueAudience['Restricted'],
|
|
12
|
+
VenueAudience['Unknown'],
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
export var PersistedVenueAudiences = [
|
|
16
|
+
VenueAudience['All'],
|
|
17
|
+
VenueAudience['Restricted'],
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
var VenueAudienceShape = {
|
|
21
|
+
[VenueAudience['All']]: {
|
|
22
|
+
is_adult: false,
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
[VenueAudience['Restricted']]: {
|
|
26
|
+
is_adult: true,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
[VenueAudience['Unknown']]: {
|
|
30
|
+
is_adult: null,
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var VenueAudienceShapes = Object.entries(VenueAudienceShape)
|
|
35
|
+
|
|
36
|
+
export var VenueAudienceTitle = {
|
|
37
|
+
[VenueAudience['Any']]: 'Любая',
|
|
38
|
+
[VenueAudience['All']]: 'Открытая',
|
|
39
|
+
[VenueAudience['Restricted']]: 'Закрытая',
|
|
40
|
+
[VenueAudience['Unknown']]: 'Неизвестно',
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export var VenueAudienceIcon = {
|
|
44
|
+
[VenueAudience['Any']]: 'hero/outline/square-2-stack',
|
|
45
|
+
[VenueAudience['All']]: 'hero/outline/lock-open',
|
|
46
|
+
[VenueAudience['Restricted']]: 'hero/outline/lock-closed',
|
|
47
|
+
[VenueAudience['Unknown']]: 'hero/outline/no-symbol',
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @returns {keyof typeof VenueAudience}
|
|
52
|
+
*/
|
|
53
|
+
var fromString = value =>
|
|
54
|
+
value in VenueAudience
|
|
55
|
+
? value
|
|
56
|
+
: VenueAudience['Unknown']
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns {keyof typeof VenueAudience}
|
|
60
|
+
*/
|
|
61
|
+
var fromObject = value =>
|
|
62
|
+
VenueAudienceShapes
|
|
63
|
+
.find(([, shape]) => shape.is_adult === value?.is_adult)
|
|
64
|
+
?.at(0)
|
|
65
|
+
?? VenueAudience['Unknown']
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @returns {typeof VenueAudienceShape[keyof typeof VenueAudienceShape]}
|
|
69
|
+
*/
|
|
70
|
+
var toObject = value =>
|
|
71
|
+
VenueAudienceShapes
|
|
72
|
+
.find(([venueAudience, shape]) => venueAudience === value)
|
|
73
|
+
?.at(1)
|
|
74
|
+
?? VenueAudienceShape[VenueAudience['Unknown']]
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @returns {keyof typeof VenueAudience}
|
|
78
|
+
*/
|
|
79
|
+
export var inferVenueAudience = value => {
|
|
80
|
+
switch (typeof value) {
|
|
81
|
+
case 'string':
|
|
82
|
+
return fromString(value)
|
|
83
|
+
|
|
84
|
+
case 'object':
|
|
85
|
+
return fromObject(value)
|
|
86
|
+
|
|
87
|
+
default:
|
|
88
|
+
return VenueAudience['Unknown']
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export var inferVenueAudienceShape = value => {
|
|
93
|
+
switch (typeof value) {
|
|
94
|
+
case 'string':
|
|
95
|
+
return toObject(value)
|
|
96
|
+
|
|
97
|
+
default:
|
|
98
|
+
return VenueAudienceShape[VenueAudience['Unknown']]
|
|
99
|
+
}
|
|
100
|
+
}
|