crewtimer-common 1.0.4 → 1.0.6

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,69 @@
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
+ * bracketIndex: 1,2,3,4 etc
32
+ *
33
+ * @param name The Event Name extracted from the spreadsheet
34
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
35
+ */
36
+ export declare const decodeEventName: (name: string, eventNum: string) => {
37
+ eventName: string;
38
+ bracket: string;
39
+ bracketType: string;
40
+ };
41
+ /**
42
+ * Determine if an event is a final and which level (A, B, C etc).
43
+ * If the event is not a final, '' is returned.
44
+ *
45
+ * @param eventName
46
+ * @param eventNum
47
+ * @returns '' if not final, otherwise final level A, B, C etc
48
+ */
49
+ export declare const getFinalLevel: (eventName: string, eventNum: string) => string;
50
+ /**
51
+ *
52
+ * @param eventName
53
+ * @param eventNum
54
+ * @returns true if the level is an A final
55
+ */
56
+ export declare const isAFinal: (eventName: string, eventNum: string) => boolean;
57
+ /**
58
+ * Give a list of numbers, return an array representing 'place' where 1
59
+ * represents first place. The array does not need to be sorted.
60
+ *
61
+ * Entries with the same value will have the same place. For example, if two entries
62
+ * tie for second place they both get '2' and the next event after them will get '4'.
63
+ * Place '3' would be unused.
64
+ *
65
+ * @param inputList A list of numbers
66
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
67
+ * @returns Array of places representing the placement of the input array
68
+ */
69
+ export declare const genPlaces: (inputList: number[], dir?: 'asc' | 'desc') => number[];
@@ -0,0 +1,230 @@
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
+ ['SAB', /Semi$/i, '1'],
82
+ ['SCD', /SCD[1-4]+$/i, /[1-4]$/],
83
+ ['SEF', /SEF[1-4]+$/i, /[1-4]$/],
84
+ ['SGH', /SGH[1-4]+$/i, /[1-4]$/],
85
+ ['TF', /(Timed *|T)F(inal)? *[A-D]$/i, /[A-D]$/i],
86
+ ['TF', /(Timed *|T)F(inal)?$/i, 'A'],
87
+ ['H', /H(eat)? *[1-9][0-9]*$/i, /[1-9][0-9]*$/],
88
+ ['FA', /Direct Final$/i, ''],
89
+ ['FB', /Petite Final$/i, ''],
90
+ ['FA', /Final$/i, ''],
91
+ ['FA', /F(inal)? *A$/i, ''],
92
+ ['FB', /F(inal)? *B$/i, ''],
93
+ ['FC', /F(inal)? *C$/i, ''],
94
+ ['FD', /F(inal)? *D$/i, ''],
95
+ ['FE', /F(inal)? *E$/i, ''],
96
+ ['FF', /F(inal)? *F$/i, ''],
97
+ ['FG', /F(inal)? *G$/i, ''],
98
+ ['FH', /F(inal)? *H$/i, ''],
99
+ ['TT', /T(ime)? *T(rial)?$/i, '1'],
100
+ ['TT', /T(ime)? *T(rial)?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
101
+ ['TT', /Race for lanes?$/i, '1'],
102
+ ['TT', /Race for lanes *?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
103
+ // unsupported
104
+ ['Err: Must be QAD1-4', /QAD$/i, ''],
105
+ ['Err: Must be QEH1-4', /QEH$/i, ''],
106
+ ['Err', /SAB$/i, 'Must be SAB11-4'],
107
+ ['Err', /SCD$/i, 'Must be SCD1-4'],
108
+ ];
109
+ /** Given an event name as '1 Womens Varsity H1', separate into
110
+ * eventName = 'Womens Varsity'
111
+ * bracket = 'H1'
112
+ * bracketType = 'H'
113
+ * bracketIndex: 1,2,3,4 etc
114
+ *
115
+ * @param name The Event Name extracted from the spreadsheet
116
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
117
+ */
118
+ const decodeEventName = (name, eventNum) => {
119
+ let bracket = 'FA';
120
+ let bracketType = 'FA';
121
+ let bracketIndex = '1';
122
+ let eventName = name.substring(eventNum.length); // remove event num
123
+ // Try each RegEx pattern until a match is found
124
+ for (let i = 0; i < RegexTimingNames.length; i++) {
125
+ const [code, identifyRegex, indexRegex] = RegexTimingNames[i];
126
+ const index = eventName.search(identifyRegex);
127
+ if (index < 0) {
128
+ continue;
129
+ }
130
+ // We have a match!
131
+ if (typeof indexRegex === 'string') {
132
+ bracketIndex = indexRegex;
133
+ }
134
+ else {
135
+ bracketIndex = eventName.match(indexRegex)?.[0] || '1';
136
+ }
137
+ bracketType = code;
138
+ bracket = `${code}${bracketIndex}`.toUpperCase();
139
+ if (bracketType === 'TF') {
140
+ bracketType = `${code}${bracketIndex}`;
141
+ bracket = bracketType;
142
+ }
143
+ eventName = eventName.substring(0, index);
144
+ break;
145
+ }
146
+ // trim and remove trailing - if present
147
+ eventName = eventName.trim().replace(/ *-$/, '');
148
+ const result = {
149
+ eventName,
150
+ bracket,
151
+ bracketType,
152
+ };
153
+ // console.log(JSON.stringify(result));
154
+ return result;
155
+ };
156
+ exports.decodeEventName = decodeEventName;
157
+ /**
158
+ * Determine if an event is a final and which level (A, B, C etc).
159
+ * If the event is not a final, '' is returned.
160
+ *
161
+ * @param eventName
162
+ * @param eventNum
163
+ * @returns '' if not final, otherwise final level A, B, C etc
164
+ */
165
+ const getFinalLevel = (eventName, eventNum) => {
166
+ const { bracket, bracketType } = (0, exports.decodeEventName)(eventName, eventNum);
167
+ return bracket === bracketType ? bracket.charAt(bracket.length - 1) : '';
168
+ };
169
+ exports.getFinalLevel = getFinalLevel;
170
+ /**
171
+ *
172
+ * @param eventName
173
+ * @param eventNum
174
+ * @returns true if the level is an A final
175
+ */
176
+ const isAFinal = (eventName, eventNum) => {
177
+ const finalLevel = (0, exports.getFinalLevel)(eventName, eventNum);
178
+ return finalLevel === 'A';
179
+ };
180
+ exports.isAFinal = isAFinal;
181
+ /**
182
+ * Give a list of numbers, return an array representing 'place' where 1
183
+ * represents first place. The array does not need to be sorted.
184
+ *
185
+ * Entries with the same value will have the same place. For example, if two entries
186
+ * tie for second place they both get '2' and the next event after them will get '4'.
187
+ * Place '3' would be unused.
188
+ *
189
+ * @param inputList A list of numbers
190
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
191
+ * @returns Array of places representing the placement of the input array
192
+ */
193
+ const genPlaces = (inputList, dir = 'asc') => {
194
+ if (inputList.length === 0) {
195
+ return [];
196
+ }
197
+ const indexes = inputList.map((_val, i) => i);
198
+ indexes.sort((a, b) => {
199
+ if (dir === 'desc') {
200
+ const temp = a;
201
+ a = b;
202
+ b = temp;
203
+ }
204
+ if (inputList[a] < inputList[b]) {
205
+ return -1;
206
+ }
207
+ else if (inputList[a] > inputList[b]) {
208
+ return 1;
209
+ }
210
+ else {
211
+ return 0;
212
+ }
213
+ });
214
+ let lastVal = inputList[0];
215
+ let lastPlace = 1;
216
+ const places = new Array(inputList.length);
217
+ indexes.forEach((index, place) => {
218
+ if (lastVal === inputList[index]) {
219
+ places[index] = lastPlace;
220
+ }
221
+ else {
222
+ lastVal = inputList[index];
223
+ lastPlace = place + 1;
224
+ places[index] = lastPlace;
225
+ }
226
+ });
227
+ return places;
228
+ };
229
+ exports.genPlaces = genPlaces;
230
+ //# 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,69 @@
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
+ * bracketIndex: 1,2,3,4 etc
32
+ *
33
+ * @param name The Event Name extracted from the spreadsheet
34
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
35
+ */
36
+ export declare const decodeEventName: (name: string, eventNum: string) => {
37
+ eventName: string;
38
+ bracket: string;
39
+ bracketType: string;
40
+ };
41
+ /**
42
+ * Determine if an event is a final and which level (A, B, C etc).
43
+ * If the event is not a final, '' is returned.
44
+ *
45
+ * @param eventName
46
+ * @param eventNum
47
+ * @returns '' if not final, otherwise final level A, B, C etc
48
+ */
49
+ export declare const getFinalLevel: (eventName: string, eventNum: string) => string;
50
+ /**
51
+ *
52
+ * @param eventName
53
+ * @param eventNum
54
+ * @returns true if the level is an A final
55
+ */
56
+ export declare const isAFinal: (eventName: string, eventNum: string) => boolean;
57
+ /**
58
+ * Give a list of numbers, return an array representing 'place' where 1
59
+ * represents first place. The array does not need to be sorted.
60
+ *
61
+ * Entries with the same value will have the same place. For example, if two entries
62
+ * tie for second place they both get '2' and the next event after them will get '4'.
63
+ * Place '3' would be unused.
64
+ *
65
+ * @param inputList A list of numbers
66
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
67
+ * @returns Array of places representing the placement of the input array
68
+ */
69
+ export declare const genPlaces: (inputList: number[], dir?: 'asc' | 'desc') => number[];
@@ -0,0 +1,219 @@
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
+ ['SAB', /Semi$/i, '1'],
75
+ ['SCD', /SCD[1-4]+$/i, /[1-4]$/],
76
+ ['SEF', /SEF[1-4]+$/i, /[1-4]$/],
77
+ ['SGH', /SGH[1-4]+$/i, /[1-4]$/],
78
+ ['TF', /(Timed *|T)F(inal)? *[A-D]$/i, /[A-D]$/i],
79
+ ['TF', /(Timed *|T)F(inal)?$/i, 'A'],
80
+ ['H', /H(eat)? *[1-9][0-9]*$/i, /[1-9][0-9]*$/],
81
+ ['FA', /Direct Final$/i, ''],
82
+ ['FB', /Petite Final$/i, ''],
83
+ ['FA', /Final$/i, ''],
84
+ ['FA', /F(inal)? *A$/i, ''],
85
+ ['FB', /F(inal)? *B$/i, ''],
86
+ ['FC', /F(inal)? *C$/i, ''],
87
+ ['FD', /F(inal)? *D$/i, ''],
88
+ ['FE', /F(inal)? *E$/i, ''],
89
+ ['FF', /F(inal)? *F$/i, ''],
90
+ ['FG', /F(inal)? *G$/i, ''],
91
+ ['FH', /F(inal)? *H$/i, ''],
92
+ ['TT', /T(ime)? *T(rial)?$/i, '1'],
93
+ ['TT', /T(ime)? *T(rial)?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
94
+ ['TT', /Race for lanes?$/i, '1'],
95
+ ['TT', /Race for lanes *?[1-9][0-9]*$/i, /[1-9][0-9]*$/],
96
+ // unsupported
97
+ ['Err: Must be QAD1-4', /QAD$/i, ''],
98
+ ['Err: Must be QEH1-4', /QEH$/i, ''],
99
+ ['Err', /SAB$/i, 'Must be SAB11-4'],
100
+ ['Err', /SCD$/i, 'Must be SCD1-4'],
101
+ ];
102
+ /** Given an event name as '1 Womens Varsity H1', separate into
103
+ * eventName = 'Womens Varsity'
104
+ * bracket = 'H1'
105
+ * bracketType = 'H'
106
+ * bracketIndex: 1,2,3,4 etc
107
+ *
108
+ * @param name The Event Name extracted from the spreadsheet
109
+ * @returns {eventName: string, bracket: string bracketType: string, bracketIndex: number}
110
+ */
111
+ export const decodeEventName = (name, eventNum) => {
112
+ let bracket = 'FA';
113
+ let bracketType = 'FA';
114
+ let bracketIndex = '1';
115
+ let eventName = name.substring(eventNum.length); // remove event num
116
+ // Try each RegEx pattern until a match is found
117
+ for (let i = 0; i < RegexTimingNames.length; i++) {
118
+ const [code, identifyRegex, indexRegex] = RegexTimingNames[i];
119
+ const index = eventName.search(identifyRegex);
120
+ if (index < 0) {
121
+ continue;
122
+ }
123
+ // We have a match!
124
+ if (typeof indexRegex === 'string') {
125
+ bracketIndex = indexRegex;
126
+ }
127
+ else {
128
+ bracketIndex = eventName.match(indexRegex)?.[0] || '1';
129
+ }
130
+ bracketType = code;
131
+ bracket = `${code}${bracketIndex}`.toUpperCase();
132
+ if (bracketType === 'TF') {
133
+ bracketType = `${code}${bracketIndex}`;
134
+ bracket = bracketType;
135
+ }
136
+ eventName = eventName.substring(0, index);
137
+ break;
138
+ }
139
+ // trim and remove trailing - if present
140
+ eventName = eventName.trim().replace(/ *-$/, '');
141
+ const result = {
142
+ eventName,
143
+ bracket,
144
+ bracketType,
145
+ };
146
+ // console.log(JSON.stringify(result));
147
+ return result;
148
+ };
149
+ /**
150
+ * Determine if an event is a final and which level (A, B, C etc).
151
+ * If the event is not a final, '' is returned.
152
+ *
153
+ * @param eventName
154
+ * @param eventNum
155
+ * @returns '' if not final, otherwise final level A, B, C etc
156
+ */
157
+ export const getFinalLevel = (eventName, eventNum) => {
158
+ const { bracket, bracketType } = decodeEventName(eventName, eventNum);
159
+ return bracket === bracketType ? bracket.charAt(bracket.length - 1) : '';
160
+ };
161
+ /**
162
+ *
163
+ * @param eventName
164
+ * @param eventNum
165
+ * @returns true if the level is an A final
166
+ */
167
+ export const isAFinal = (eventName, eventNum) => {
168
+ const finalLevel = getFinalLevel(eventName, eventNum);
169
+ return finalLevel === 'A';
170
+ };
171
+ /**
172
+ * Give a list of numbers, return an array representing 'place' where 1
173
+ * represents first place. The array does not need to be sorted.
174
+ *
175
+ * Entries with the same value will have the same place. For example, if two entries
176
+ * tie for second place they both get '2' and the next event after them will get '4'.
177
+ * Place '3' would be unused.
178
+ *
179
+ * @param inputList A list of numbers
180
+ * @param dir 'asc' or 'desc' to specify direction of sorted values
181
+ * @returns Array of places representing the placement of the input array
182
+ */
183
+ export const genPlaces = (inputList, dir = 'asc') => {
184
+ if (inputList.length === 0) {
185
+ return [];
186
+ }
187
+ const indexes = inputList.map((_val, i) => i);
188
+ indexes.sort((a, b) => {
189
+ if (dir === 'desc') {
190
+ const temp = a;
191
+ a = b;
192
+ b = temp;
193
+ }
194
+ if (inputList[a] < inputList[b]) {
195
+ return -1;
196
+ }
197
+ else if (inputList[a] > inputList[b]) {
198
+ return 1;
199
+ }
200
+ else {
201
+ return 0;
202
+ }
203
+ });
204
+ let lastVal = inputList[0];
205
+ let lastPlace = 1;
206
+ const places = new Array(inputList.length);
207
+ indexes.forEach((index, place) => {
208
+ if (lastVal === inputList[index]) {
209
+ places[index] = lastPlace;
210
+ }
211
+ else {
212
+ lastVal = inputList[index];
213
+ lastPlace = place + 1;
214
+ places[index] = lastPlace;
215
+ }
216
+ });
217
+ return places;
218
+ };
219
+ //# 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.6",
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
+ }