crewtimer-common 1.0.4 → 1.0.5

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.
@@ -1 +1,2 @@
1
1
  export * from './types/CrewTimerTypes';
2
+ export * from './util/ProgressionUtils';
@@ -2,4 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./types/CrewTimerTypes"), exports);
5
+ tslib_1.__exportStar(require("./util/ProgressionUtils"), exports);
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;AAAA,iEAAuC;AACvC,kEAAwC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Given an event name, detect the gender.
3
+ * @param eventName
4
+ * @returns 'Men', 'Women', or 'Unknown'
5
+ */
6
+ export declare const genderFromEventName: (eventName: string) => "Mixed" | "Womens" | "Mens" | "Unknown";
7
+ /**
8
+ * Given an event name, determine the type of boat involved.
9
+ * For example, 8+, 4x, 2x, K1, C2, etc
10
+ *
11
+ * @param eventName The event name to inspect.
12
+ * @returns The Class detected. '' if none detected.
13
+ */
14
+ export declare const boatClassFromName: (eventName: string) => string;
15
+ /**
16
+ * Given an event name, determine the number of athletes (aka seats) involved.
17
+ * @param eventName The event name to inspect.
18
+ * @returns The number of athlets in each entry.
19
+ */
20
+ export declare const numSeatsFromName: (eventName: string) => number;
21
+ /**
22
+ * Given an event name, determine the distance involved.
23
+ * @param eventName The event name to inspect.
24
+ * @returns (number) The detected distance.
25
+ */
26
+ export declare const distanceFromName: (eventName: string) => number;
27
+ /** Given an event name as '1 Womens Varsity H1', separate into
28
+ * eventName = 'Womens Varsity'
29
+ * bracket = 'H1'
30
+ * bracketType = 'H'
31
+ *
32
+ * @param name The Event Name extracted from the spreadsheet
33
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
34
+ */
35
+ export declare const decodeEventName: (name: string, eventNum: string) => {
36
+ eventName: string;
37
+ bracket: string;
38
+ bracketType: string;
39
+ };
40
+ /**
41
+ * Determine if an event is a final and which level (A, B, C etc).
42
+ * If the event is not a final, '' is returned.
43
+ *
44
+ * @param eventName
45
+ * @param eventNum
46
+ * @returns '' if not final, otherwise final level A, B, C etc
47
+ */
48
+ export declare const getFinalLevel: (eventName: string, eventNum: string) => string;
49
+ /**
50
+ *
51
+ * @param eventName
52
+ * @param eventNum
53
+ * @returns true if the level is an A final
54
+ */
55
+ export declare const isAFinal: (eventName: string, eventNum: string) => boolean;
56
+ /**
57
+ * Give a list of numbers, return an array representing 'place' where 1
58
+ * represents first place. The array does not need to be sorted.
59
+ *
60
+ * Entries with the same value will have the same place. For example, if two entries
61
+ * tie for second place they both get '2' and the next event after them will get '4'.
62
+ * Place '3' would be unused.
63
+ *
64
+ * @param inputList A list of numbers
65
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
66
+ * @returns Array of places representing the placement of the input array
67
+ */
68
+ export declare const genPlaces: (inputList: number[], dir?: 'asc' | 'desc') => number[];
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.genPlaces = exports.isAFinal = exports.getFinalLevel = exports.decodeEventName = exports.distanceFromName = exports.numSeatsFromName = exports.boatClassFromName = exports.genderFromEventName = void 0;
4
+ /**
5
+ * Given an event name, detect the gender.
6
+ * @param eventName
7
+ * @returns 'Men', 'Women', or 'Unknown'
8
+ */
9
+ const genderFromEventName = (eventName) => {
10
+ eventName = eventName.toLowerCase();
11
+ const matches = ['women', ' wv', ' wjv', ' wn', 'mixed', 'mx', 'men', ' mv', ' mjv', ' mn'];
12
+ for (let i = 0; i < matches.length; i++) {
13
+ const match = matches[i];
14
+ if (eventName.includes(match)) {
15
+ if (match.includes('x')) {
16
+ return 'Mixed';
17
+ }
18
+ return matches[i].startsWith('w') ? 'Womens' : 'Mens';
19
+ }
20
+ }
21
+ return 'Unknown';
22
+ };
23
+ exports.genderFromEventName = genderFromEventName;
24
+ /**
25
+ * Given an event name, determine the type of boat involved.
26
+ * For example, 8+, 4x, 2x, K1, C2, etc
27
+ *
28
+ * @param eventName The event name to inspect.
29
+ * @returns The Class detected. '' if none detected.
30
+ */
31
+ const boatClassFromName = (eventName) => {
32
+ eventName = eventName.toLowerCase();
33
+ const matches = [/ [ck]-?[1-4]/, / para[a-z]*/, / [1-8]x/, / [24]-/, / [48]+/];
34
+ for (let i = 0; i < matches.length; i++) {
35
+ const match = eventName.match(matches[i]);
36
+ if (match) {
37
+ const boatClass = match[0].trim().toUpperCase().replace('X', 'x').replace('-', '');
38
+ return boatClass;
39
+ }
40
+ }
41
+ return '';
42
+ };
43
+ exports.boatClassFromName = boatClassFromName;
44
+ /**
45
+ * Given an event name, determine the number of athletes (aka seats) involved.
46
+ * @param eventName The event name to inspect.
47
+ * @returns The number of athlets in each entry.
48
+ */
49
+ const numSeatsFromName = (eventName) => {
50
+ const boatClass = (0, exports.boatClassFromName)(eventName);
51
+ const match = boatClass.match(/[1-9]/);
52
+ if (match) {
53
+ return Number(match[0]);
54
+ }
55
+ return 1;
56
+ };
57
+ exports.numSeatsFromName = numSeatsFromName;
58
+ /**
59
+ * Given an event name, determine the distance involved.
60
+ * @param eventName The event name to inspect.
61
+ * @returns (number) The detected distance.
62
+ */
63
+ const distanceFromName = (eventName) => {
64
+ const match = eventName.match(/ ([1-9][0-9][0-9]+)/); // 3 or more digits
65
+ if (match) {
66
+ return Number(match[1]);
67
+ }
68
+ return 0;
69
+ };
70
+ exports.distanceFromName = distanceFromName;
71
+ /**
72
+ * Define regex for detecting progression suffixes. Each
73
+ * entry is a triple of [Abbrev Prexix, RegEx to detect, RegEx for suffix | suffix, RefEx for timingIndex]
74
+ */
75
+ const RegexTimingNames = [
76
+ ['QAD', /QAD[1-4]$/i, /[1-4]$/],
77
+ ['QEH', /QEH[1-4]$/i, /[1-4]$/],
78
+ ['QAD', /QF[1-4]+$/i, /[1-4]$/],
79
+ ['SAB', /SAB[1-4]+$/i, /[1-4]$/],
80
+ ['SAB', /S(emi)? *[1-4]+$/i, /[1-4]$/],
81
+ ['SCD', /SCD[1-4]+$/i, /[1-4]$/],
82
+ ['SEF', /SEF[1-4]+$/i, /[1-4]$/],
83
+ ['SGH', /SGH[1-4]+$/i, /[1-4]$/],
84
+ ['TF', /T(imed)? *F(inal)? *[A-D]$/i, /[A-D]$/i],
85
+ ['TF', /T(imed)? *F(inal)?$/i, 'A'],
86
+ ['H', /H(eat)? *[1-9][0-9]*$/i, /[1-9][0-9]*$/],
87
+ ['FA', /Final$/i, ''],
88
+ ['FA', /F(inal)? *A$/i, ''],
89
+ ['FB', /F(inal)? *B$/i, ''],
90
+ ['FC', /F(inal)? *C$/i, ''],
91
+ ['FD', /F(inal)? *D$/i, ''],
92
+ ['FE', /F(inal)? *E$/i, ''],
93
+ ['FF', /F(inal)? *F$/i, ''],
94
+ ['FG', /F(inal)? *G$/i, ''],
95
+ ['FH', /F(inal)? *H$/i, ''],
96
+ ['TT', /T(ime)? *T(rial)?$/i, '1'],
97
+ ['TT', /T(ime)? *T(rial)?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
98
+ // unsupported
99
+ ['Err: Must be QAD1-4', /QAD$/i, ''],
100
+ ['Err: Must be QEH1-4', /QEH$/i, ''],
101
+ ['Err', /SAB$/i, 'Must be SAB11-4'],
102
+ ['Err', /SCD$/i, 'Must be SCD1-4'],
103
+ ];
104
+ /** Given an event name as '1 Womens Varsity H1', separate into
105
+ * eventName = 'Womens Varsity'
106
+ * bracket = 'H1'
107
+ * bracketType = 'H'
108
+ *
109
+ * @param name The Event Name extracted from the spreadsheet
110
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
111
+ */
112
+ const decodeEventName = (name, eventNum) => {
113
+ let bracket = 'FA';
114
+ let bracketType = 'FA';
115
+ let bracketIndex = '1';
116
+ let eventName = name.substring(eventNum.length); // remove event num
117
+ // Try each RegEx pattern until a match is found
118
+ for (let i = 0; i < RegexTimingNames.length; i++) {
119
+ const [code, identifyRegex, indexRegex] = RegexTimingNames[i];
120
+ const index = eventName.search(identifyRegex);
121
+ if (index < 0) {
122
+ continue;
123
+ }
124
+ // We have a match!
125
+ if (typeof indexRegex === 'string') {
126
+ bracketIndex = indexRegex;
127
+ }
128
+ else {
129
+ bracketIndex = eventName.match(indexRegex)?.[0] || '1';
130
+ }
131
+ bracketType = code;
132
+ bracket = `${code}${bracketIndex}`.toUpperCase();
133
+ if (bracketType === 'TF') {
134
+ bracketType = `${code}${bracketIndex}`;
135
+ bracket = bracketType;
136
+ }
137
+ eventName = eventName.substring(0, index);
138
+ break;
139
+ }
140
+ eventName = eventName.trim();
141
+ const result = {
142
+ eventName,
143
+ bracket,
144
+ bracketType,
145
+ };
146
+ // console.log(JSON.stringify(result));
147
+ return result;
148
+ };
149
+ exports.decodeEventName = decodeEventName;
150
+ /**
151
+ * Determine if an event is a final and which level (A, B, C etc).
152
+ * If the event is not a final, '' is returned.
153
+ *
154
+ * @param eventName
155
+ * @param eventNum
156
+ * @returns '' if not final, otherwise final level A, B, C etc
157
+ */
158
+ const getFinalLevel = (eventName, eventNum) => {
159
+ const { bracket, bracketType } = (0, exports.decodeEventName)(eventName, eventNum);
160
+ return bracket === bracketType ? bracket.charAt(bracket.length - 1) : '';
161
+ };
162
+ exports.getFinalLevel = getFinalLevel;
163
+ /**
164
+ *
165
+ * @param eventName
166
+ * @param eventNum
167
+ * @returns true if the level is an A final
168
+ */
169
+ const isAFinal = (eventName, eventNum) => {
170
+ const finalLevel = (0, exports.getFinalLevel)(eventName, eventNum);
171
+ return finalLevel === 'A';
172
+ };
173
+ exports.isAFinal = isAFinal;
174
+ /**
175
+ * Give a list of numbers, return an array representing 'place' where 1
176
+ * represents first place. The array does not need to be sorted.
177
+ *
178
+ * Entries with the same value will have the same place. For example, if two entries
179
+ * tie for second place they both get '2' and the next event after them will get '4'.
180
+ * Place '3' would be unused.
181
+ *
182
+ * @param inputList A list of numbers
183
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
184
+ * @returns Array of places representing the placement of the input array
185
+ */
186
+ const genPlaces = (inputList, dir = 'asc') => {
187
+ if (inputList.length === 0) {
188
+ return [];
189
+ }
190
+ const indexes = inputList.map((_val, i) => i);
191
+ indexes.sort((a, b) => {
192
+ if (dir === 'desc') {
193
+ const temp = a;
194
+ a = b;
195
+ b = temp;
196
+ }
197
+ if (inputList[a] < inputList[b]) {
198
+ return -1;
199
+ }
200
+ else if (inputList[a] > inputList[b]) {
201
+ return 1;
202
+ }
203
+ else {
204
+ return 0;
205
+ }
206
+ });
207
+ let lastVal = inputList[0];
208
+ let lastPlace = 1;
209
+ const places = new Array(inputList.length);
210
+ indexes.forEach((index, place) => {
211
+ if (lastVal === inputList[index]) {
212
+ places[index] = lastPlace;
213
+ }
214
+ else {
215
+ lastVal = inputList[index];
216
+ lastPlace = place + 1;
217
+ places[index] = lastPlace;
218
+ }
219
+ });
220
+ return places;
221
+ };
222
+ exports.genPlaces = genPlaces;
223
+ //# sourceMappingURL=ProgressionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressionUtils.js","sourceRoot":"","sources":["../../../../src/util/ProgressionUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export * from './types/CrewTimerTypes';
2
+ export * from './util/ProgressionUtils';
@@ -1,2 +1,3 @@
1
1
  export * from './types/CrewTimerTypes';
2
+ export * from './util/ProgressionUtils';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Given an event name, detect the gender.
3
+ * @param eventName
4
+ * @returns 'Men', 'Women', or 'Unknown'
5
+ */
6
+ export declare const genderFromEventName: (eventName: string) => "Mixed" | "Womens" | "Mens" | "Unknown";
7
+ /**
8
+ * Given an event name, determine the type of boat involved.
9
+ * For example, 8+, 4x, 2x, K1, C2, etc
10
+ *
11
+ * @param eventName The event name to inspect.
12
+ * @returns The Class detected. '' if none detected.
13
+ */
14
+ export declare const boatClassFromName: (eventName: string) => string;
15
+ /**
16
+ * Given an event name, determine the number of athletes (aka seats) involved.
17
+ * @param eventName The event name to inspect.
18
+ * @returns The number of athlets in each entry.
19
+ */
20
+ export declare const numSeatsFromName: (eventName: string) => number;
21
+ /**
22
+ * Given an event name, determine the distance involved.
23
+ * @param eventName The event name to inspect.
24
+ * @returns (number) The detected distance.
25
+ */
26
+ export declare const distanceFromName: (eventName: string) => number;
27
+ /** Given an event name as '1 Womens Varsity H1', separate into
28
+ * eventName = 'Womens Varsity'
29
+ * bracket = 'H1'
30
+ * bracketType = 'H'
31
+ *
32
+ * @param name The Event Name extracted from the spreadsheet
33
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
34
+ */
35
+ export declare const decodeEventName: (name: string, eventNum: string) => {
36
+ eventName: string;
37
+ bracket: string;
38
+ bracketType: string;
39
+ };
40
+ /**
41
+ * Determine if an event is a final and which level (A, B, C etc).
42
+ * If the event is not a final, '' is returned.
43
+ *
44
+ * @param eventName
45
+ * @param eventNum
46
+ * @returns '' if not final, otherwise final level A, B, C etc
47
+ */
48
+ export declare const getFinalLevel: (eventName: string, eventNum: string) => string;
49
+ /**
50
+ *
51
+ * @param eventName
52
+ * @param eventNum
53
+ * @returns true if the level is an A final
54
+ */
55
+ export declare const isAFinal: (eventName: string, eventNum: string) => boolean;
56
+ /**
57
+ * Give a list of numbers, return an array representing 'place' where 1
58
+ * represents first place. The array does not need to be sorted.
59
+ *
60
+ * Entries with the same value will have the same place. For example, if two entries
61
+ * tie for second place they both get '2' and the next event after them will get '4'.
62
+ * Place '3' would be unused.
63
+ *
64
+ * @param inputList A list of numbers
65
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
66
+ * @returns Array of places representing the placement of the input array
67
+ */
68
+ export declare const genPlaces: (inputList: number[], dir?: 'asc' | 'desc') => number[];
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Given an event name, detect the gender.
3
+ * @param eventName
4
+ * @returns 'Men', 'Women', or 'Unknown'
5
+ */
6
+ export const genderFromEventName = (eventName) => {
7
+ eventName = eventName.toLowerCase();
8
+ const matches = ['women', ' wv', ' wjv', ' wn', 'mixed', 'mx', 'men', ' mv', ' mjv', ' mn'];
9
+ for (let i = 0; i < matches.length; i++) {
10
+ const match = matches[i];
11
+ if (eventName.includes(match)) {
12
+ if (match.includes('x')) {
13
+ return 'Mixed';
14
+ }
15
+ return matches[i].startsWith('w') ? 'Womens' : 'Mens';
16
+ }
17
+ }
18
+ return 'Unknown';
19
+ };
20
+ /**
21
+ * Given an event name, determine the type of boat involved.
22
+ * For example, 8+, 4x, 2x, K1, C2, etc
23
+ *
24
+ * @param eventName The event name to inspect.
25
+ * @returns The Class detected. '' if none detected.
26
+ */
27
+ export const boatClassFromName = (eventName) => {
28
+ eventName = eventName.toLowerCase();
29
+ const matches = [/ [ck]-?[1-4]/, / para[a-z]*/, / [1-8]x/, / [24]-/, / [48]+/];
30
+ for (let i = 0; i < matches.length; i++) {
31
+ const match = eventName.match(matches[i]);
32
+ if (match) {
33
+ const boatClass = match[0].trim().toUpperCase().replace('X', 'x').replace('-', '');
34
+ return boatClass;
35
+ }
36
+ }
37
+ return '';
38
+ };
39
+ /**
40
+ * Given an event name, determine the number of athletes (aka seats) involved.
41
+ * @param eventName The event name to inspect.
42
+ * @returns The number of athlets in each entry.
43
+ */
44
+ export const numSeatsFromName = (eventName) => {
45
+ const boatClass = boatClassFromName(eventName);
46
+ const match = boatClass.match(/[1-9]/);
47
+ if (match) {
48
+ return Number(match[0]);
49
+ }
50
+ return 1;
51
+ };
52
+ /**
53
+ * Given an event name, determine the distance involved.
54
+ * @param eventName The event name to inspect.
55
+ * @returns (number) The detected distance.
56
+ */
57
+ export const distanceFromName = (eventName) => {
58
+ const match = eventName.match(/ ([1-9][0-9][0-9]+)/); // 3 or more digits
59
+ if (match) {
60
+ return Number(match[1]);
61
+ }
62
+ return 0;
63
+ };
64
+ /**
65
+ * Define regex for detecting progression suffixes. Each
66
+ * entry is a triple of [Abbrev Prexix, RegEx to detect, RegEx for suffix | suffix, RefEx for timingIndex]
67
+ */
68
+ const RegexTimingNames = [
69
+ ['QAD', /QAD[1-4]$/i, /[1-4]$/],
70
+ ['QEH', /QEH[1-4]$/i, /[1-4]$/],
71
+ ['QAD', /QF[1-4]+$/i, /[1-4]$/],
72
+ ['SAB', /SAB[1-4]+$/i, /[1-4]$/],
73
+ ['SAB', /S(emi)? *[1-4]+$/i, /[1-4]$/],
74
+ ['SCD', /SCD[1-4]+$/i, /[1-4]$/],
75
+ ['SEF', /SEF[1-4]+$/i, /[1-4]$/],
76
+ ['SGH', /SGH[1-4]+$/i, /[1-4]$/],
77
+ ['TF', /T(imed)? *F(inal)? *[A-D]$/i, /[A-D]$/i],
78
+ ['TF', /T(imed)? *F(inal)?$/i, 'A'],
79
+ ['H', /H(eat)? *[1-9][0-9]*$/i, /[1-9][0-9]*$/],
80
+ ['FA', /Final$/i, ''],
81
+ ['FA', /F(inal)? *A$/i, ''],
82
+ ['FB', /F(inal)? *B$/i, ''],
83
+ ['FC', /F(inal)? *C$/i, ''],
84
+ ['FD', /F(inal)? *D$/i, ''],
85
+ ['FE', /F(inal)? *E$/i, ''],
86
+ ['FF', /F(inal)? *F$/i, ''],
87
+ ['FG', /F(inal)? *G$/i, ''],
88
+ ['FH', /F(inal)? *H$/i, ''],
89
+ ['TT', /T(ime)? *T(rial)?$/i, '1'],
90
+ ['TT', /T(ime)? *T(rial)?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
91
+ // unsupported
92
+ ['Err: Must be QAD1-4', /QAD$/i, ''],
93
+ ['Err: Must be QEH1-4', /QEH$/i, ''],
94
+ ['Err', /SAB$/i, 'Must be SAB11-4'],
95
+ ['Err', /SCD$/i, 'Must be SCD1-4'],
96
+ ];
97
+ /** Given an event name as '1 Womens Varsity H1', separate into
98
+ * eventName = 'Womens Varsity'
99
+ * bracket = 'H1'
100
+ * bracketType = 'H'
101
+ *
102
+ * @param name The Event Name extracted from the spreadsheet
103
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
104
+ */
105
+ export const decodeEventName = (name, eventNum) => {
106
+ let bracket = 'FA';
107
+ let bracketType = 'FA';
108
+ let bracketIndex = '1';
109
+ let eventName = name.substring(eventNum.length); // remove event num
110
+ // Try each RegEx pattern until a match is found
111
+ for (let i = 0; i < RegexTimingNames.length; i++) {
112
+ const [code, identifyRegex, indexRegex] = RegexTimingNames[i];
113
+ const index = eventName.search(identifyRegex);
114
+ if (index < 0) {
115
+ continue;
116
+ }
117
+ // We have a match!
118
+ if (typeof indexRegex === 'string') {
119
+ bracketIndex = indexRegex;
120
+ }
121
+ else {
122
+ bracketIndex = eventName.match(indexRegex)?.[0] || '1';
123
+ }
124
+ bracketType = code;
125
+ bracket = `${code}${bracketIndex}`.toUpperCase();
126
+ if (bracketType === 'TF') {
127
+ bracketType = `${code}${bracketIndex}`;
128
+ bracket = bracketType;
129
+ }
130
+ eventName = eventName.substring(0, index);
131
+ break;
132
+ }
133
+ eventName = eventName.trim();
134
+ const result = {
135
+ eventName,
136
+ bracket,
137
+ bracketType,
138
+ };
139
+ // console.log(JSON.stringify(result));
140
+ return result;
141
+ };
142
+ /**
143
+ * Determine if an event is a final and which level (A, B, C etc).
144
+ * If the event is not a final, '' is returned.
145
+ *
146
+ * @param eventName
147
+ * @param eventNum
148
+ * @returns '' if not final, otherwise final level A, B, C etc
149
+ */
150
+ export const getFinalLevel = (eventName, eventNum) => {
151
+ const { bracket, bracketType } = decodeEventName(eventName, eventNum);
152
+ return bracket === bracketType ? bracket.charAt(bracket.length - 1) : '';
153
+ };
154
+ /**
155
+ *
156
+ * @param eventName
157
+ * @param eventNum
158
+ * @returns true if the level is an A final
159
+ */
160
+ export const isAFinal = (eventName, eventNum) => {
161
+ const finalLevel = getFinalLevel(eventName, eventNum);
162
+ return finalLevel === 'A';
163
+ };
164
+ /**
165
+ * Give a list of numbers, return an array representing 'place' where 1
166
+ * represents first place. The array does not need to be sorted.
167
+ *
168
+ * Entries with the same value will have the same place. For example, if two entries
169
+ * tie for second place they both get '2' and the next event after them will get '4'.
170
+ * Place '3' would be unused.
171
+ *
172
+ * @param inputList A list of numbers
173
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
174
+ * @returns Array of places representing the placement of the input array
175
+ */
176
+ export const genPlaces = (inputList, dir = 'asc') => {
177
+ if (inputList.length === 0) {
178
+ return [];
179
+ }
180
+ const indexes = inputList.map((_val, i) => i);
181
+ indexes.sort((a, b) => {
182
+ if (dir === 'desc') {
183
+ const temp = a;
184
+ a = b;
185
+ b = temp;
186
+ }
187
+ if (inputList[a] < inputList[b]) {
188
+ return -1;
189
+ }
190
+ else if (inputList[a] > inputList[b]) {
191
+ return 1;
192
+ }
193
+ else {
194
+ return 0;
195
+ }
196
+ });
197
+ let lastVal = inputList[0];
198
+ let lastPlace = 1;
199
+ const places = new Array(inputList.length);
200
+ indexes.forEach((index, place) => {
201
+ if (lastVal === inputList[index]) {
202
+ places[index] = lastPlace;
203
+ }
204
+ else {
205
+ lastVal = inputList[index];
206
+ lastPlace = place + 1;
207
+ places[index] = lastPlace;
208
+ }
209
+ });
210
+ return places;
211
+ };
212
+ //# sourceMappingURL=ProgressionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressionUtils.js","sourceRoot":"","sources":["../../../../src/util/ProgressionUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewtimer-common",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Common types and utilities for CrewTimer",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/src/index.js",
@@ -58,4 +58,4 @@
58
58
  "README.md"
59
59
  ],
60
60
  "dependencies": {}
61
- }
61
+ }