@shakerquiz/utilities 0.5.144 → 0.5.146
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/package.json +1 -1
- package/source/enumerations/entities/role.js +23 -8
- package/source/enumerations/mode.js +11 -66
- package/source/enumerations/quantifier.js +113 -0
- package/source/functions/hydrate-route-pathname.js +10 -5
- package/source/functions/infer-key.js +13 -0
- package/source/functions/route-key.js +10 -13
- package/source/index.js +1 -1
- package/source/functions/infer.js +0 -37
package/package.json
CHANGED
|
@@ -36,20 +36,35 @@ export var RoleIcon = {
|
|
|
36
36
|
[Role['manager']]: 'hero/outline/user',
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
/** @returns {typeof Role[keyof typeof Role]} */
|
|
40
|
+
var infer = value => {
|
|
41
|
+
if (value in Role)
|
|
42
|
+
return Role[value]
|
|
43
|
+
else
|
|
44
|
+
throw TypeError(`Cannot infer role for value '${value}'.`)
|
|
45
|
+
}
|
|
46
|
+
|
|
42
47
|
export var inferRole = value => {
|
|
43
48
|
switch (typeof value) {
|
|
44
49
|
case 'string':
|
|
45
|
-
return value
|
|
46
|
-
? Role[value]
|
|
47
|
-
: Mode['Unknown']
|
|
50
|
+
return infer(value)
|
|
48
51
|
|
|
49
52
|
case 'object':
|
|
50
|
-
return
|
|
53
|
+
return infer(value?.role?.name)
|
|
54
|
+
|
|
55
|
+
default:
|
|
56
|
+
return infer(undefined)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export var inferModedRole = value => {
|
|
61
|
+
var mode = inferMode(value?.role)
|
|
62
|
+
|
|
63
|
+
switch (mode) {
|
|
64
|
+
case Mode['Known']:
|
|
65
|
+
return inferRole(value)
|
|
51
66
|
|
|
52
67
|
default:
|
|
53
|
-
return
|
|
68
|
+
return mode
|
|
54
69
|
}
|
|
55
70
|
}
|
|
@@ -2,52 +2,16 @@ import { Gender } from './gender.js'
|
|
|
2
2
|
import { Numerosity } from './numerosity.js'
|
|
3
3
|
|
|
4
4
|
export var Mode = /** @type {const} */ ({
|
|
5
|
-
'Any': 'Any',
|
|
6
|
-
'None': 'None',
|
|
7
|
-
'Single': 'Single',
|
|
8
|
-
'Many': 'Many',
|
|
9
|
-
'All': 'All',
|
|
10
5
|
'Known': 'Known',
|
|
11
6
|
'Unknown': 'Unknown',
|
|
12
7
|
})
|
|
13
8
|
|
|
14
9
|
export var Modes = [
|
|
15
|
-
Mode['Any'],
|
|
16
|
-
Mode['None'],
|
|
17
|
-
Mode['Single'],
|
|
18
|
-
Mode['Many'],
|
|
19
|
-
Mode['All'],
|
|
20
10
|
Mode['Known'],
|
|
21
11
|
Mode['Unknown'],
|
|
22
12
|
]
|
|
23
13
|
|
|
24
14
|
export var ModeModes = {
|
|
25
|
-
[Mode['Any']]: [
|
|
26
|
-
Mode['Any'],
|
|
27
|
-
Mode['None'],
|
|
28
|
-
Mode['Single'],
|
|
29
|
-
Mode['Many'],
|
|
30
|
-
Mode['All'],
|
|
31
|
-
Mode['Known'],
|
|
32
|
-
Mode['Unknown'],
|
|
33
|
-
],
|
|
34
|
-
|
|
35
|
-
[Mode['None']]: [
|
|
36
|
-
Mode['None'],
|
|
37
|
-
],
|
|
38
|
-
|
|
39
|
-
[Mode['Single']]: [
|
|
40
|
-
Mode['Single'],
|
|
41
|
-
],
|
|
42
|
-
|
|
43
|
-
[Mode['Many']]: [
|
|
44
|
-
Mode['Many'],
|
|
45
|
-
],
|
|
46
|
-
|
|
47
|
-
[Mode['All']]: [
|
|
48
|
-
Mode['All'],
|
|
49
|
-
],
|
|
50
|
-
|
|
51
15
|
[Mode['Known']]: [
|
|
52
16
|
Mode['Known'],
|
|
53
17
|
],
|
|
@@ -58,11 +22,6 @@ export var ModeModes = {
|
|
|
58
22
|
}
|
|
59
23
|
|
|
60
24
|
export var ModeIcon = {
|
|
61
|
-
[Mode['Any']]: 'hero/outline/square-2-stack',
|
|
62
|
-
[Mode['None']]: 'hero/outline/x-mark',
|
|
63
|
-
[Mode['Single']]: 'hero/outline/no-symbol',
|
|
64
|
-
[Mode['Many']]: 'hero/outline/rectangle-stack',
|
|
65
|
-
[Mode['All']]: 'hero/outline/check',
|
|
66
25
|
[Mode['Known']]: 'hero/outline/check',
|
|
67
26
|
[Mode['Unknown']]: 'hero/outline/no-symbol',
|
|
68
27
|
}
|
|
@@ -70,31 +29,16 @@ export var ModeIcon = {
|
|
|
70
29
|
export var ModeTitle = {
|
|
71
30
|
[Numerosity['Singular']]: {
|
|
72
31
|
[Gender['Masculine']]: {
|
|
73
|
-
[Mode['Any']]: 'Любой',
|
|
74
|
-
[Mode['None']]: 'Отсутствует',
|
|
75
|
-
[Mode['Single']]: 'Один',
|
|
76
|
-
[Mode['Many']]: 'Много',
|
|
77
|
-
[Mode['All']]: 'Все',
|
|
78
32
|
[Mode['Known']]: 'Назначен',
|
|
79
33
|
[Mode['Unknown']]: 'Не назначен',
|
|
80
34
|
},
|
|
81
35
|
|
|
82
36
|
[Gender['Feminine']]: {
|
|
83
|
-
[Mode['Any']]: 'Любая',
|
|
84
|
-
[Mode['None']]: 'Отсутствует',
|
|
85
|
-
[Mode['Single']]: 'Одна',
|
|
86
|
-
[Mode['Many']]: 'Много',
|
|
87
|
-
[Mode['All']]: 'Все',
|
|
88
37
|
[Mode['Known']]: 'Назначена',
|
|
89
38
|
[Mode['Unknown']]: 'Не назначена',
|
|
90
39
|
},
|
|
91
40
|
|
|
92
41
|
[Gender['Neuter']]: {
|
|
93
|
-
[Mode['Any']]: 'Любое',
|
|
94
|
-
[Mode['None']]: 'Отсутствует',
|
|
95
|
-
[Mode['Single']]: 'Одно',
|
|
96
|
-
[Mode['Many']]: 'Много',
|
|
97
|
-
[Mode['All']]: 'Все',
|
|
98
42
|
[Mode['Known']]: 'Назначено',
|
|
99
43
|
[Mode['Unknown']]: 'Не назначено',
|
|
100
44
|
},
|
|
@@ -102,31 +46,32 @@ export var ModeTitle = {
|
|
|
102
46
|
|
|
103
47
|
[Numerosity['Plural']]: {
|
|
104
48
|
[Gender['Indeterminate']]: {
|
|
105
|
-
[Mode['Any']]: 'Любые',
|
|
106
|
-
[Mode['None']]: 'Отсутствуют',
|
|
107
|
-
[Mode['Single']]: 'Один',
|
|
108
|
-
[Mode['Many']]: 'Много',
|
|
109
|
-
[Mode['All']]: 'Все',
|
|
110
49
|
[Mode['Known']]: 'Назначены',
|
|
111
50
|
[Mode['Unknown']]: 'Не назначены',
|
|
112
51
|
},
|
|
113
52
|
},
|
|
114
53
|
}
|
|
115
54
|
|
|
55
|
+
/** @returns {typeof Mode[keyof typeof Mode]} */
|
|
56
|
+
var infer = value => {
|
|
57
|
+
if (value in Mode)
|
|
58
|
+
return Mode[value]
|
|
59
|
+
else
|
|
60
|
+
throw TypeError(`Cannot infer mode for value '${value}'.`)
|
|
61
|
+
}
|
|
62
|
+
|
|
116
63
|
/**
|
|
117
64
|
* @returns {typeof Mode[keyof typeof Mode]}
|
|
118
65
|
*/
|
|
119
66
|
export var inferMode = value => {
|
|
120
67
|
switch (typeof value) {
|
|
121
68
|
case 'string':
|
|
122
|
-
return value
|
|
123
|
-
? Mode[value]
|
|
124
|
-
: Mode['Unknown']
|
|
69
|
+
return infer(value)
|
|
125
70
|
|
|
126
71
|
case 'object':
|
|
127
|
-
return
|
|
72
|
+
return infer(value?.mode)
|
|
128
73
|
|
|
129
74
|
default:
|
|
130
|
-
return
|
|
75
|
+
return infer(undefined)
|
|
131
76
|
}
|
|
132
77
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { inferTag } from '../functions/tag.js'
|
|
2
|
+
|
|
3
|
+
export var Quantifier = /** @type {const} */ ({
|
|
4
|
+
'Any': 'Any',
|
|
5
|
+
'None': 'None',
|
|
6
|
+
'Single': 'Single',
|
|
7
|
+
'Many': 'Many',
|
|
8
|
+
'All': 'All',
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export var Quantifiers = [
|
|
12
|
+
Mode['Any'],
|
|
13
|
+
Mode['None'],
|
|
14
|
+
Mode['Single'],
|
|
15
|
+
Mode['Many'],
|
|
16
|
+
Mode['All'],
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
export var QuantifierQuantifiers = {
|
|
20
|
+
[Mode['Any']]: [
|
|
21
|
+
Mode['Any'],
|
|
22
|
+
Mode['None'],
|
|
23
|
+
Mode['Single'],
|
|
24
|
+
Mode['Many'],
|
|
25
|
+
Mode['All'],
|
|
26
|
+
],
|
|
27
|
+
|
|
28
|
+
[Mode['None']]: [
|
|
29
|
+
Mode['None'],
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
[Mode['Single']]: [
|
|
33
|
+
Mode['Single'],
|
|
34
|
+
],
|
|
35
|
+
|
|
36
|
+
[Mode['Many']]: [
|
|
37
|
+
Mode['Many'],
|
|
38
|
+
],
|
|
39
|
+
|
|
40
|
+
[Mode['All']]: [
|
|
41
|
+
Mode['All'],
|
|
42
|
+
],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export var QuantifierTitle = {
|
|
46
|
+
[Numerosity['Singular']]: {
|
|
47
|
+
[Gender['Masculine']]: {
|
|
48
|
+
[Mode['Any']]: 'Любой',
|
|
49
|
+
[Mode['None']]: 'Отсутствует',
|
|
50
|
+
[Mode['Single']]: 'Один',
|
|
51
|
+
[Mode['Many']]: 'Много',
|
|
52
|
+
[Mode['All']]: 'Все',
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
[Gender['Feminine']]: {
|
|
56
|
+
[Mode['Any']]: 'Любая',
|
|
57
|
+
[Mode['None']]: 'Отсутствует',
|
|
58
|
+
[Mode['Single']]: 'Одна',
|
|
59
|
+
[Mode['Many']]: 'Много',
|
|
60
|
+
[Mode['All']]: 'Все',
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
[Gender['Neuter']]: {
|
|
64
|
+
[Mode['Any']]: 'Любое',
|
|
65
|
+
[Mode['None']]: 'Отсутствует',
|
|
66
|
+
[Mode['Single']]: 'Одно',
|
|
67
|
+
[Mode['Many']]: 'Много',
|
|
68
|
+
[Mode['All']]: 'Все',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
[Numerosity['Plural']]: {
|
|
73
|
+
[Gender['Indeterminate']]: {
|
|
74
|
+
[Mode['Any']]: 'Любые',
|
|
75
|
+
[Mode['None']]: 'Отсутствуют',
|
|
76
|
+
[Mode['Single']]: 'Один',
|
|
77
|
+
[Mode['Many']]: 'Много',
|
|
78
|
+
[Mode['All']]: 'Все',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @returns {typeof Quantifier[keyof typeof Quantifier]}
|
|
85
|
+
*/
|
|
86
|
+
export var inferQuantifier = value => {
|
|
87
|
+
switch (typeof value) {
|
|
88
|
+
case 'string':
|
|
89
|
+
return value in Quantifier
|
|
90
|
+
? Quantifier[value]
|
|
91
|
+
: Quantifier['None']
|
|
92
|
+
|
|
93
|
+
case 'object':
|
|
94
|
+
switch (inferTag(value)) {
|
|
95
|
+
case 'Object':
|
|
96
|
+
return inferQuantifier(value?.quantifier)
|
|
97
|
+
|
|
98
|
+
case 'Array':
|
|
99
|
+
if (value?.length === 1)
|
|
100
|
+
return Quantifier['Single']
|
|
101
|
+
else if (value?.length > 1)
|
|
102
|
+
return Quantifier['Many']
|
|
103
|
+
else
|
|
104
|
+
return Quantifier['None']
|
|
105
|
+
|
|
106
|
+
default:
|
|
107
|
+
return Quantifier['None']
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
default:
|
|
111
|
+
return Quantifier['None']
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { Route, RouteParams, RoutePathname } from '../enumerations/route.js'
|
|
2
|
-
import { guardKey } from '../functions/infer.js'
|
|
3
|
-
import { isTag } from '../functions/tag.js'
|
|
4
2
|
|
|
3
|
+
import { inferKey } from './infer-key.js'
|
|
4
|
+
import { isTag } from './tag.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @param {*} maybeRoute
|
|
8
|
+
* @param {any[]} maybeRouteParams
|
|
9
|
+
*/
|
|
5
10
|
export var hydrateRoutePathname = (maybeRoute, maybeRouteParams) => {
|
|
6
11
|
if (!isTag('Array', maybeRouteParams))
|
|
7
12
|
throw TypeError(`Parameter 'maybeRouteParams' must be 'Array'.`)
|
|
8
13
|
|
|
9
|
-
var route =
|
|
14
|
+
var route = inferKey(Route, maybeRoute)
|
|
10
15
|
|
|
11
|
-
var pathname =
|
|
16
|
+
var pathname = inferKey(RoutePathname, route)
|
|
12
17
|
|
|
13
|
-
var params =
|
|
18
|
+
var params = inferKey(RouteParams, route)
|
|
14
19
|
|
|
15
20
|
return params.reduce(
|
|
16
21
|
(pathname, param, index) => pathname.replace(param, maybeRouteParams[index]),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @template {any} E
|
|
3
|
+
*
|
|
4
|
+
* @param {E} Enumeration
|
|
5
|
+
*
|
|
6
|
+
* @returns {E[keyof E]}
|
|
7
|
+
*/
|
|
8
|
+
export var inferKey = (Enumeration, value) => {
|
|
9
|
+
if (value in Enumeration)
|
|
10
|
+
return Enumeration[value]
|
|
11
|
+
else
|
|
12
|
+
throw TypeError(`Cannot infer enum's '${Object.values(Enumeration).join(', ')}' key for value '${value}'.`)
|
|
13
|
+
}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { Method } from '../enumerations/method.js'
|
|
2
|
-
|
|
3
|
-
import { hydrateRoutePathname } from '
|
|
4
|
-
import {
|
|
2
|
+
|
|
3
|
+
import { hydrateRoutePathname } from './hydrate-route-pathname.js'
|
|
4
|
+
import { inferKey } from './infer-key.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* @param {
|
|
8
|
-
* @param {
|
|
7
|
+
* @param {any} maybeMethod
|
|
8
|
+
* @param {any} maybeRoute
|
|
9
9
|
* @param {any[]} maybeParameters
|
|
10
10
|
*/
|
|
11
|
-
export var routeKey = (maybeMethod, maybeRoute, maybeParameters) =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return method + '/' + hydrateRoutePathname(maybeRoute, maybeParameters)
|
|
18
|
-
}
|
|
11
|
+
export var routeKey = (maybeMethod, maybeRoute, maybeParameters) =>
|
|
12
|
+
''
|
|
13
|
+
+ inferKey(Method, maybeMethod)
|
|
14
|
+
+ '/'
|
|
15
|
+
+ hydrateRoutePathname(maybeRoute, maybeParameters)
|
package/source/index.js
CHANGED
|
@@ -32,6 +32,6 @@ export * from './enumerations/venue/city-mode.js'
|
|
|
32
32
|
export * from './enumerations/venue/status.js'
|
|
33
33
|
|
|
34
34
|
export * from './functions/hydrate-route-pathname.js'
|
|
35
|
-
export * from './functions/infer.js'
|
|
35
|
+
export * from './functions/infer-key.js'
|
|
36
36
|
export * from './functions/route-key.js'
|
|
37
37
|
export * from './functions/tag.js'
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Mode } from '../enumerations/mode.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @template {*} E
|
|
5
|
-
*
|
|
6
|
-
* @param {E} Enumeration
|
|
7
|
-
* @param {E[keyof E]} value
|
|
8
|
-
*
|
|
9
|
-
* @returns {E[keyof E]}
|
|
10
|
-
*/
|
|
11
|
-
export var inferKey = (Enumeration, value) =>
|
|
12
|
-
value in Enumeration
|
|
13
|
-
? Enumeration[value]
|
|
14
|
-
: Mode['Unknown']
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @template {*} E
|
|
18
|
-
*
|
|
19
|
-
* @param {E} Enumeration
|
|
20
|
-
* @param {E[keyof E]} value
|
|
21
|
-
*/
|
|
22
|
-
export var guardKey = (Enumeration, value) => {
|
|
23
|
-
var key = inferKey(Enumeration, value)
|
|
24
|
-
|
|
25
|
-
if (key === Mode['Unknown'])
|
|
26
|
-
throw TypeError(`Cannot infer enum key '${value}'.`)
|
|
27
|
-
|
|
28
|
-
return key
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @template {*} E
|
|
33
|
-
*
|
|
34
|
-
* @param {E} Enumeration
|
|
35
|
-
* @param {E[keyof E]} value
|
|
36
|
-
*/
|
|
37
|
-
export var isKey = (Enumeration, value) => value in Enumeration
|