@shakerquiz/utilities 0.5.66 → 0.5.67

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.66",
4
+ "version": "0.5.67",
5
5
  "author": "yurkimus <yurkimus@gmail.com>",
6
6
  "license": "ISC",
7
7
  "repository": {
@@ -15,82 +15,139 @@ export var Service = /** @type {const} */ ({
15
15
 
16
16
  export var Services = Object.values(Service)
17
17
 
18
- export var Route = /** @type {const} */ ({
18
+ export var SingularRoute = /** @type {const} */ ({
19
+ 'role': 'role',
19
20
  'user': 'user',
20
21
  'user/password': 'user/password',
21
22
  'user/role': 'user/role',
22
23
  'user/cities': 'user/cities',
23
-
24
- 'users': 'users',
25
- 'users/role': 'users/role',
26
- 'users/cities': 'users/cities',
27
-
28
- 'role': 'role',
29
-
30
- 'roles': 'roles',
31
-
32
24
  'checkin': 'checkin',
33
-
34
25
  'country': 'country',
35
-
36
- 'countries': 'countries',
37
-
38
26
  'currency': 'currency',
39
-
40
- 'currencies': 'currencies',
41
-
42
27
  'timezone': 'timezone',
43
-
44
- 'timezones': 'timezones',
45
-
46
28
  'city': 'city',
47
29
  'city/country': 'city/country',
48
30
  'city/currency': 'city/currency',
49
31
  'city/timezone': 'city/timezone',
50
32
  'city/venues': 'city/venues',
51
-
52
- 'cities': 'cities',
53
- 'cities/country': 'cities/country',
54
- 'cities/currency': 'cities/currency',
55
- 'cities/timezone': 'cities/timezone',
56
-
57
33
  'venue': 'venue',
58
34
  'venue/city': 'venue/city',
59
-
60
- 'venues': 'venues',
61
- 'venues/city': 'venues/city',
62
-
63
35
  'theme': 'theme',
64
36
  'theme/cover': 'theme/cover',
65
-
66
- 'themes': 'themes',
67
- 'themes/cover': 'themes/cover',
68
-
69
37
  'game': 'game',
70
38
  'game/city': 'game/city',
71
39
  'game/venue': 'game/venue',
72
40
  'game/theme': 'game/theme',
73
41
  'game/registrations': 'game/registrations',
74
- 'game/registrations/exports': 'game/registrations/exports',
42
+ 'game/registrations/export': 'game/registrations/export',
75
43
  'game/summary': 'game/summary',
76
-
77
- 'games': 'games',
78
- 'games/city': 'games/city',
79
- 'games/venue': 'games/venue',
80
- 'games/theme': 'games/theme',
81
- 'games/summary': 'games/summary',
82
-
83
44
  'registration': 'registration',
84
45
  'registration/game': 'registration/game',
85
46
  'registration/mailing': 'registration/mailing',
86
47
  'registration/channel': 'registration/channel',
87
48
  'registration/confirmation': 'registration/confirmation',
88
49
  'registration/cancellation': 'registration/cancellation',
50
+ 'registration/export': 'registration/export',
51
+ })
52
+
53
+ export var SingularRoutes = Object.values(SingularRoute)
89
54
 
55
+ export var PluralRoute = /** @type {const} */ ({
56
+ 'roles': 'roles',
57
+ 'users': 'users',
58
+ 'users/password': 'users/password',
59
+ 'users/role': 'users/role',
60
+ 'users/cities': 'users/cities',
61
+ 'checkins': 'checkins',
62
+ 'countries': 'countries',
63
+ 'currencies': 'currencies',
64
+ 'timezones': 'timezones',
65
+ 'cities': 'cities',
66
+ 'cities/country': 'cities/country',
67
+ 'cities/currency': 'cities/currency',
68
+ 'cities/timezone': 'cities/timezone',
69
+ 'cities/venues': 'cities/venues',
70
+ 'venues': 'venues',
71
+ 'venues/city': 'venues/city',
72
+ 'themes': 'themes',
73
+ 'themes/cover': 'themes/cover',
74
+ 'games': 'games',
75
+ 'games/city': 'games/city',
76
+ 'games/venue': 'games/venue',
77
+ 'games/theme': 'games/theme',
78
+ 'games/registrations': 'games/registrations',
79
+ 'games/registrations/export': 'games/registrations/export',
80
+ 'games/summary': 'games/summary',
90
81
  'registrations': 'registrations',
91
82
  'registrations/export': 'registrations/export',
92
83
  })
93
84
 
85
+ export var PluralRoutes = Object.values(PluralRoute)
86
+
87
+ export var Route = {
88
+ ...SingularRoute,
89
+ ...PluralRoute,
90
+ }
91
+
92
+ export var SingularPluralRouteRelation = {
93
+ [Route['role']]: Route['roles'],
94
+ [Route['user']]: Route['users'],
95
+ [Route['user/password']]: Route['users/password'],
96
+ [Route['user/role']]: Route['users/role'],
97
+ [Route['user/cities']]: Route['users/cities'],
98
+ [Route['checkin']]: Route['checkins'],
99
+ [Route['country']]: Route['countries'],
100
+ [Route['currency']]: Route['currencies'],
101
+ [Route['timezone']]: Route['timezones'],
102
+ [Route['city']]: Route['cities'],
103
+ [Route['city/country']]: Route['cities/country'],
104
+ [Route['city/currency']]: Route['cities/currency'],
105
+ [Route['city/timezone']]: Route['cities/timezone'],
106
+ [Route['city/venues']]: Route['cities/venues'],
107
+ [Route['venue']]: Route['venues'],
108
+ [Route['venue/city']]: Route['venues/city'],
109
+ [Route['theme']]: Route['themes'],
110
+ [Route['theme/cover']]: Route['themes/cover'],
111
+ [Route['game']]: Route['games'],
112
+ [Route['game/city']]: Route['games/city'],
113
+ [Route['game/venue']]: Route['games/venue'],
114
+ [Route['game/theme']]: Route['games/theme'],
115
+ [Route['game/registrations']]: Route['games/registrations'],
116
+ [Route['game/registrations/export']]: Route['games/registrations/export'],
117
+ [Route['game/summary']]: Route['games/summary'],
118
+ [Route['registration']]: Route['registrations'],
119
+ [Route['registration/export']]: Route['registrations/export'],
120
+ }
121
+
122
+ export var PluralSingularRouteRelation = {
123
+ [Route['roles']]: Route['role'],
124
+ [Route['users']]: Route['user'],
125
+ [Route['users/role']]: Route['user/role'],
126
+ [Route['users/cities']]: Route['user/cities'],
127
+ [Route['checkins']]: Route['checkin'],
128
+ [Route['countries']]: Route['country'],
129
+ [Route['currencies']]: Route['currency'],
130
+ [Route['timezones']]: Route['timezone'],
131
+ [Route['cities']]: Route['city'],
132
+ [Route['cities/country']]: Route['city/country'],
133
+ [Route['cities/currency']]: Route['city/currency'],
134
+ [Route['cities/timezone']]: Route['city/timezone'],
135
+ [Route['cities/venues']]: Route['city/venues'],
136
+ [Route['venues']]: Route['venue'],
137
+ [Route['venues/city']]: Route['venue/city'],
138
+ [Route['themes']]: Route['theme'],
139
+ [Route['themes/cover']]: Route['theme/cover'],
140
+ [Route['games']]: Route['game'],
141
+ [Route['games/city']]: Route['game/city'],
142
+ [Route['games/venue']]: Route['game/venue'],
143
+ [Route['games/theme']]: Route['game/theme'],
144
+ [Route['games/registrations']]: Route['game/registrations'],
145
+ [Route['games/registrations/export']]: Route['game/registrations/export'],
146
+ [Route['games/summary']]: Route['game/summary'],
147
+ [Route['registrations']]: Route['registration'],
148
+ [Route['registrations/export']]: Route['registration/export'],
149
+ }
150
+
94
151
  export var Routes = Object.values(Route)
95
152
 
96
153
  export var RoutePathname = /** @type {const} */ ({
@@ -109,6 +166,8 @@ export var RoutePathname = /** @type {const} */ ({
109
166
 
110
167
  [Route['checkin']]: 'checkin',
111
168
 
169
+ [Route['checkins']]: 'checkins',
170
+
112
171
  [Route['country']]: 'country/:country',
113
172
 
114
173
  [Route['countries']]: 'countries',
@@ -131,9 +190,10 @@ export var RoutePathname = /** @type {const} */ ({
131
190
  [Route['cities/country']]: 'cities/country',
132
191
  [Route['cities/currency']]: 'cities/currency',
133
192
  [Route['cities/timezone']]: 'cities/timezone',
193
+ [Route['cities/venues']]: 'cities/venues',
134
194
 
135
195
  [Route['venue']]: 'venue/:venue',
136
- [Route['venues/city']]: 'venues/city',
196
+ [Route['venue/city']]: 'venues/city',
137
197
 
138
198
  [Route['venues']]: 'venues',
139
199
  [Route['venues/city']]: 'venues/city',
@@ -149,13 +209,15 @@ export var RoutePathname = /** @type {const} */ ({
149
209
  [Route['game/venue']]: 'game/:game/venue',
150
210
  [Route['game/theme']]: 'game/:game/theme',
151
211
  [Route['game/registrations']]: 'game/:game/registrations',
152
- [Route['game/registrations/exports']]: 'game/:game/registrations/exports',
212
+ [Route['game/registrations/export']]: 'game/:game/registrations/export',
153
213
  [Route['game/summary']]: 'game/:game/summary',
154
214
 
155
215
  [Route['games']]: 'games',
156
216
  [Route['games/city']]: 'games/city',
157
217
  [Route['games/venue']]: 'games/venue',
158
218
  [Route['games/theme']]: 'games/theme',
219
+ [Route['games/registrations']]: 'games/registrations',
220
+ [Route['games/registrations/export']]: 'games/registrations/export',
159
221
  [Route['games/summary']]: 'games/summary',
160
222
 
161
223
  [Route['registration']]: 'registration/:registration',
@@ -164,6 +226,7 @@ export var RoutePathname = /** @type {const} */ ({
164
226
  [Route['registration/channel']]: 'registration/:registration/channel',
165
227
  [Route['registration/confirmation']]: 'registration/:registration/confirmation',
166
228
  [Route['registration/cancellation']]: 'registration/:registration/cancellation',
229
+ [Route['registration/export']]: 'registration/:registration/export',
167
230
 
168
231
  [Route['registrations']]: 'registrations',
169
232
  [Route['registrations/export']]: 'registrations/export',
@@ -187,6 +250,8 @@ export var RouteParams = /** @type {const} */ ({
187
250
 
188
251
  [Route['checkin']]: [],
189
252
 
253
+ [Route['checkins']]: [],
254
+
190
255
  [Route['country']]: [':country'],
191
256
 
192
257
  [Route['countries']]: [],
@@ -209,6 +274,7 @@ export var RouteParams = /** @type {const} */ ({
209
274
  [Route['cities/country']]: [],
210
275
  [Route['cities/currency']]: [],
211
276
  [Route['cities/timezone']]: [],
277
+ [Route['cities/venues']]: [],
212
278
 
213
279
  [Route['venue']]: [':venue'],
214
280
  [Route['venue/city']]: [':venue'],
@@ -227,13 +293,15 @@ export var RouteParams = /** @type {const} */ ({
227
293
  [Route['game/venue']]: [':game'],
228
294
  [Route['game/theme']]: [':game'],
229
295
  [Route['game/registrations']]: [':game'],
230
- [Route['game/registrations/exports']]: [':game'],
296
+ [Route['game/registrations/export']]: [':game'],
231
297
  [Route['game/summary']]: [':game'],
232
298
 
233
299
  [Route['games']]: [],
234
300
  [Route['games/city']]: [],
235
301
  [Route['games/venue']]: [],
236
302
  [Route['games/theme']]: [],
303
+ [Route['games/registrations']]: [],
304
+ [Route['games/registrations/export']]: [],
237
305
  [Route['games/summary']]: [],
238
306
 
239
307
  [Route['registration']]: [':registration'],
@@ -242,6 +310,7 @@ export var RouteParams = /** @type {const} */ ({
242
310
  [Route['registration/channel']]: [':registration'],
243
311
  [Route['registration/confirmation']]: [':registration'],
244
312
  [Route['registration/cancellation']]: [':registration'],
313
+ [Route['registration/export']]: [':registration'],
245
314
 
246
315
  [Route['registrations']]: [],
247
316
  [Route['registrations/export']]: [],
@@ -303,13 +372,15 @@ export var RouteService = {
303
372
  [Route['game/venue']]: Service.Games,
304
373
  [Route['game/theme']]: Service.Games,
305
374
  [Route['game/registrations']]: Service.Games,
306
- [Route['game/registrations/exports']]: Service.Games,
375
+ [Route['game/registrations/export']]: Service.Games,
307
376
  [Route['game/summary']]: Service.Games,
308
377
 
309
378
  [Route['games']]: Service.Games,
310
379
  [Route['games/city']]: Service.Games,
311
380
  [Route['games/venue']]: Service.Games,
312
381
  [Route['games/theme']]: Service.Games,
382
+ [Route['games/registrations']]: Service.Games,
383
+ [Route['games/registrations/export']]: Service.Games,
313
384
  [Route['games/summary']]: Service.Games,
314
385
 
315
386
  [Route['registration']]: Service.Registrations,
@@ -384,12 +455,14 @@ export var ServiceRoutes = {
384
455
  Route['game/venue'],
385
456
  Route['game/theme'],
386
457
  Route['game/registrations'],
387
- Route['game/registrations/exports'],
458
+ Route['game/registrations/export'],
388
459
  Route['game/summary'],
389
460
  Route['games'],
390
461
  Route['games/city'],
391
462
  Route['games/venue'],
392
463
  Route['games/theme'],
464
+ Route['games/registrations'],
465
+ Route['games/registrations/export'],
393
466
  Route['games/summary'],
394
467
  ],
395
468
 
@@ -412,14 +485,72 @@ export var ServiceRoutes = {
412
485
  }
413
486
 
414
487
  /**
415
- * @template {Route} R
416
- * @template {typeof RouteParams[R]} P
417
- *
418
- * @param {R} route
419
- * @param {Record<P[number] extends `:${infer Name}` ? Name : P[number], string>} params
488
+ * @param {keyof Route} value
489
+ */
490
+ export var getRoute = value => {
491
+ if (!(value in Route))
492
+ throw TypeError(`[getRoute] Route '${value}' must be a member of Route.`)
493
+
494
+ return Route[value]
495
+ }
496
+
497
+ /**
498
+ * @param {keyof Route} value
499
+ */
500
+ export var getSingularPluralRouteRelation = value => {
501
+ var route = getRoute(value)
502
+
503
+ if (!(route in SingularPluralRouteRelation))
504
+ throw TypeError(
505
+ `[getSingularPluralRouteRelation] Route '${route}' must be a member of SingularPluralRouteRelation.`,
506
+ )
507
+
508
+ return SingularPluralRouteRelation[route]
509
+ }
510
+
511
+ export var getPluralSingularRouteRelation = value => {
512
+ var route = getRoute(value)
513
+
514
+ if (!(route in PluralSingularRouteRelation))
515
+ throw TypeError(
516
+ `[getPluralSingularRouteRelation] Route '${route}' must be a member of PluralSingularRouteRelation.`,
517
+ )
518
+
519
+ return PluralSingularRouteRelation[route]
520
+ }
521
+
522
+ /**
523
+ * @param {keyof Route} value
420
524
  */
421
- export var hydrateRoutePathname = (route, params) =>
422
- RouteParams[route].reduce(
423
- (pathname, param) => pathname.replace(param, params[param.replace(':', '')]),
424
- RoutePathname[route],
525
+ export var getRoutePathname = value => {
526
+ var route = getRoute(value)
527
+
528
+ if (!(route in RoutePathname))
529
+ throw TypeError(`[getRoutePathname] Route '${route}' must be a member of RoutePathname.`)
530
+
531
+ return RoutePathname[route]
532
+ }
533
+
534
+ export var routePathname = (value, parameters) => {
535
+ var route = getRoute(value)
536
+ var pathname = getRoutePathname(route)
537
+ var params = getRouteParams(route)
538
+
539
+ return params.reduce(
540
+ (pathname, param, index) => pathname.replace(param, parameters[index]),
541
+ pathname,
425
542
  )
543
+ }
544
+
545
+ /**
546
+ * @param {keyof Route} value
547
+ * @returns
548
+ */
549
+ export var getRouteParams = value => {
550
+ var route = getRoute(value)
551
+
552
+ if (!(route in RouteParams))
553
+ throw TypeError(`[getRouteParams] Route '${route}' must be a member of RouteParams.`)
554
+
555
+ return RouteParams[route]
556
+ }