@shakerquiz/utilities 0.5.144 → 0.5.145

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@shakerquiz/utilities",
4
- "version": "0.5.144",
4
+ "version": "0.5.145",
5
5
  "author": "yurkimus <yurkimus@gmail.com>",
6
6
  "license": "ISC",
7
7
  "repository": {
@@ -36,20 +36,23 @@ export var RoleIcon = {
36
36
  [Role['manager']]: 'hero/outline/user',
37
37
  }
38
38
 
39
- /**
40
- * @returns {keyof typeof Role | typeof Mode['Unknown']}
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 in Role
46
- ? Role[value]
47
- : Mode['Unknown']
50
+ return infer(value)
48
51
 
49
52
  case 'object':
50
- return inferRole(value?.role?.name)
53
+ return infer(value?.role?.name)
51
54
 
52
55
  default:
53
- return Mode['Unknown']
56
+ return infer(undefined)
54
57
  }
55
58
  }
@@ -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 in Mode
123
- ? Mode[value]
124
- : Mode['Unknown']
69
+ return infer(value)
125
70
 
126
71
  case 'object':
127
- return inferMode(value?.mode)
72
+ return infer(value?.mode)
128
73
 
129
74
  default:
130
- return Mode['Unknown']
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 = guardKey(Route, maybeRoute)
14
+ var route = inferKey(Route, maybeRoute)
10
15
 
11
- var pathname = guardKey(RoutePathname, route)
16
+ var pathname = inferKey(RoutePathname, route)
12
17
 
13
- var params = guardKey(RouteParams, route)
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
- import { Mode } from '../enumerations/mode.js'
3
- import { hydrateRoutePathname } from '../functions/hydrate-route-pathname.js'
4
- import { guardKey } from '../functions/infer.js'
2
+
3
+ import { hydrateRoutePathname } from './hydrate-route-pathname.js'
4
+ import { inferKey } from './infer-key.js'
5
5
 
6
6
  /**
7
- * @param {keyof typeof import('@shakerquiz/utilities').Method} maybeMethod
8
- * @param {keyof typeof import('@shakerquiz/utilities').Route} maybeRoute
7
+ * @param {any} maybeMethod
8
+ * @param {any} maybeRoute
9
9
  * @param {any[]} maybeParameters
10
10
  */
11
- export var routeKey = (maybeMethod, maybeRoute, maybeParameters) => {
12
- var method = guardKey(Method, maybeMethod)
13
-
14
- if (method === Mode['Unknown'])
15
- throw TypeError(`Cannot infer method of '${maybeMethod}'.`)
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