tenniscommon 1.1.40 → 1.1.41
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/README.md +1 -1
- package/dist/cjs/common/general/generalUtils.d.ts +0 -1
- package/dist/cjs/common/general/generalUtils.js +0 -1
- package/dist/cjs/common/training/initialData.d.ts +3 -2
- package/dist/cjs/common/training/initialData.js +26 -4
- package/dist/cjs/common/training/interfaces.d.ts +20 -2
- package/dist/cjs/common/training/validation.d.ts +50 -1
- package/dist/cjs/common/training/validation.js +25 -2
- package/dist/esm/common/general/generalUtils.d.ts +0 -1
- package/dist/esm/common/general/generalUtils.js +0 -1
- package/dist/esm/common/training/initialData.d.ts +3 -2
- package/dist/esm/common/training/initialData.js +23 -2
- package/dist/esm/common/training/interfaces.d.ts +20 -2
- package/dist/esm/common/training/validation.d.ts +50 -1
- package/dist/esm/common/training/validation.js +24 -1
- package/dist/types/common/general/generalUtils.d.ts +0 -1
- package/dist/types/common/training/initialData.d.ts +3 -2
- package/dist/types/common/training/interfaces.d.ts +20 -2
- package/dist/types/common/training/validation.d.ts +50 -1
- package/package.json +1 -6
- package/dist/cjs/common/trainingWeekly/index.d.ts +0 -3
- package/dist/cjs/common/trainingWeekly/index.js +0 -19
- package/dist/cjs/common/trainingWeekly/initialData.d.ts +0 -2
- package/dist/cjs/common/trainingWeekly/initialData.js +0 -24
- package/dist/cjs/common/trainingWeekly/interfaces.d.ts +0 -19
- package/dist/cjs/common/trainingWeekly/interfaces.js +0 -2
- package/dist/cjs/common/trainingWeekly/validation.d.ts +0 -50
- package/dist/cjs/common/trainingWeekly/validation.js +0 -27
- package/dist/esm/common/trainingWeekly/index.d.ts +0 -3
- package/dist/esm/common/trainingWeekly/index.js +0 -3
- package/dist/esm/common/trainingWeekly/initialData.d.ts +0 -2
- package/dist/esm/common/trainingWeekly/initialData.js +0 -21
- package/dist/esm/common/trainingWeekly/interfaces.d.ts +0 -19
- package/dist/esm/common/trainingWeekly/interfaces.js +0 -1
- package/dist/esm/common/trainingWeekly/validation.d.ts +0 -50
- package/dist/esm/common/trainingWeekly/validation.js +0 -24
- package/dist/types/common/trainingWeekly/index.d.ts +0 -3
- package/dist/types/common/trainingWeekly/initialData.d.ts +0 -2
- package/dist/types/common/trainingWeekly/interfaces.d.ts +0 -19
- package/dist/types/common/trainingWeekly/validation.d.ts +0 -50
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
consume the **same source of truth** for data shapes and validation rules.
|
|
7
7
|
### What it provides
|
|
8
|
-
The library is organized by feature/domain (for example: general, player, opponent, matchplay, tournament, training,
|
|
8
|
+
The library is organized by feature/domain (for example: general, player, opponent, matchplay, tournament, training, spending, performance, chat). Each domain typically contains:
|
|
9
9
|
- **Interfaces & unions** for strong typing across client/server
|
|
10
10
|
- **Zod validation** for runtime input validation (useful for API boundaries and form validation)
|
|
11
11
|
- **Initial data / stats creators** to generate safe “empty/default” objects for new records and dashboards
|
|
@@ -49,7 +49,6 @@ export declare const COLLECTION: {
|
|
|
49
49
|
readonly performance: "performance";
|
|
50
50
|
readonly player: "player";
|
|
51
51
|
readonly spending: "spending";
|
|
52
|
-
readonly trainingWeekly: "trainingWeekly";
|
|
53
52
|
readonly training: "training";
|
|
54
53
|
readonly tournament: "tournament";
|
|
55
54
|
};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare
|
|
1
|
+
import { TrainingLogItem, TrainingBaseItem } from './interfaces';
|
|
2
|
+
export declare function createInitialTrainingBaseItem(playerId: string): TrainingBaseItem;
|
|
3
|
+
export declare const createEmptyTrainingLogItem: (playerId: string, isoYear: number, isoWeek: number) => TrainingLogItem;
|
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createEmptyTrainingLogItem = void 0;
|
|
4
|
+
exports.createInitialTrainingBaseItem = createInitialTrainingBaseItem;
|
|
4
5
|
const date_fns_1 = require("date-fns");
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
function createInitialTrainingBaseItem(playerId) {
|
|
7
|
+
return {
|
|
8
|
+
_id: '',
|
|
9
|
+
playerId,
|
|
10
|
+
matchPractice: 0,
|
|
11
|
+
tactical: 0,
|
|
12
|
+
serve: 0,
|
|
13
|
+
return: 0,
|
|
14
|
+
forehand: 0,
|
|
15
|
+
backhand: 0,
|
|
16
|
+
volley: 0,
|
|
17
|
+
overhead: 0,
|
|
18
|
+
dropShot: 0,
|
|
19
|
+
slice: 0,
|
|
20
|
+
strengthAndConditioning: 0,
|
|
21
|
+
speedAndEndurance: 0,
|
|
22
|
+
// Training Formats
|
|
23
|
+
lesson: 0,
|
|
24
|
+
squad: 0,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Factory function for creating initial TrainingLogItem
|
|
28
|
+
const createEmptyTrainingLogItem = (playerId, isoYear, isoWeek) => {
|
|
7
29
|
let date = new Date(isoYear, 0, 4); // 4th Jan is always in the first ISO week
|
|
8
30
|
date = (0, date_fns_1.setISOWeekYear)(date, isoYear);
|
|
9
31
|
date = (0, date_fns_1.setISOWeek)(date, isoWeek);
|
|
@@ -31,4 +53,4 @@ const createEmptyTrainingItem = (playerId, isoYear, isoWeek) => {
|
|
|
31
53
|
notes: '',
|
|
32
54
|
};
|
|
33
55
|
};
|
|
34
|
-
exports.
|
|
56
|
+
exports.createEmptyTrainingLogItem = createEmptyTrainingLogItem;
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import { TrainingWeeklyItem } from '../trainingWeekly';
|
|
2
1
|
import { ValueOf } from '../general';
|
|
2
|
+
export interface TrainingBaseItem {
|
|
3
|
+
_id: string;
|
|
4
|
+
playerId: string;
|
|
5
|
+
matchPractice: number;
|
|
6
|
+
tactical: number;
|
|
7
|
+
serve: number;
|
|
8
|
+
return: number;
|
|
9
|
+
forehand: number;
|
|
10
|
+
backhand: number;
|
|
11
|
+
volley: number;
|
|
12
|
+
overhead: number;
|
|
13
|
+
dropShot: number;
|
|
14
|
+
slice: number;
|
|
15
|
+
strengthAndConditioning: number;
|
|
16
|
+
speedAndEndurance: number;
|
|
17
|
+
lesson: number;
|
|
18
|
+
squad: number;
|
|
19
|
+
}
|
|
20
|
+
export type TrainingBaseHoursField = 'matchPractice' | 'tactical' | 'serve' | 'return' | 'forehand' | 'backhand' | 'volley' | 'overhead' | 'dropShot' | 'slice' | 'strengthAndConditioning' | 'speedAndEndurance' | 'lesson' | 'squad';
|
|
3
21
|
export declare const TRAINING: {
|
|
4
22
|
readonly ACTIVITY: {
|
|
5
23
|
readonly MatchPractice: "Match Practice";
|
|
@@ -26,7 +44,7 @@ export declare const TRAINING_ARRAYS: {
|
|
|
26
44
|
ACTIVITY: TRAINING_ACTIVITY_UNION[];
|
|
27
45
|
FORMAT: TRAINING_FORMAT_UNION[];
|
|
28
46
|
};
|
|
29
|
-
export interface
|
|
47
|
+
export interface TrainingLogItem extends TrainingBaseItem {
|
|
30
48
|
date: Date;
|
|
31
49
|
isoWeek: number;
|
|
32
50
|
isoYear: number;
|
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const trainingBaseItemSchema: z.ZodObject<{
|
|
3
|
+
playerId: z.ZodString;
|
|
4
|
+
matchPractice: z.ZodNumber;
|
|
5
|
+
tactical: z.ZodNumber;
|
|
6
|
+
serve: z.ZodNumber;
|
|
7
|
+
return: z.ZodNumber;
|
|
8
|
+
forehand: z.ZodNumber;
|
|
9
|
+
backhand: z.ZodNumber;
|
|
10
|
+
volley: z.ZodNumber;
|
|
11
|
+
overhead: z.ZodNumber;
|
|
12
|
+
dropShot: z.ZodNumber;
|
|
13
|
+
slice: z.ZodNumber;
|
|
14
|
+
strengthAndConditioning: z.ZodNumber;
|
|
15
|
+
speedAndEndurance: z.ZodNumber;
|
|
16
|
+
lesson: z.ZodNumber;
|
|
17
|
+
squad: z.ZodNumber;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
slice: number;
|
|
20
|
+
serve: number;
|
|
21
|
+
return: number;
|
|
22
|
+
playerId: string;
|
|
23
|
+
matchPractice: number;
|
|
24
|
+
tactical: number;
|
|
25
|
+
forehand: number;
|
|
26
|
+
backhand: number;
|
|
27
|
+
volley: number;
|
|
28
|
+
overhead: number;
|
|
29
|
+
dropShot: number;
|
|
30
|
+
strengthAndConditioning: number;
|
|
31
|
+
speedAndEndurance: number;
|
|
32
|
+
lesson: number;
|
|
33
|
+
squad: number;
|
|
34
|
+
}, {
|
|
35
|
+
slice: number;
|
|
36
|
+
serve: number;
|
|
37
|
+
return: number;
|
|
38
|
+
playerId: string;
|
|
39
|
+
matchPractice: number;
|
|
40
|
+
tactical: number;
|
|
41
|
+
forehand: number;
|
|
42
|
+
backhand: number;
|
|
43
|
+
volley: number;
|
|
44
|
+
overhead: number;
|
|
45
|
+
dropShot: number;
|
|
46
|
+
strengthAndConditioning: number;
|
|
47
|
+
speedAndEndurance: number;
|
|
48
|
+
lesson: number;
|
|
49
|
+
squad: number;
|
|
50
|
+
}>;
|
|
51
|
+
export declare const trainingLogItemSchema: z.ZodObject<{
|
|
3
52
|
playerId: z.ZodString;
|
|
4
53
|
date: z.ZodEffects<z.ZodEffects<z.ZodDate, Date, Date>, Date, unknown>;
|
|
5
54
|
isoWeek: z.ZodNumber;
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.trainingLogItemSchema = exports.trainingBaseItemSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
-
exports.
|
|
5
|
+
exports.trainingBaseItemSchema = zod_1.z.object({
|
|
6
|
+
playerId: zod_1.z.string().min(1, 'PlayerId is required.'),
|
|
7
|
+
// Applied Tennis
|
|
8
|
+
matchPractice: zod_1.z.number().nonnegative('Match practice hours must be a non-negative number.'),
|
|
9
|
+
tactical: zod_1.z.number().nonnegative('Tactical hours must be a non-negative number.'),
|
|
10
|
+
// Serve Phase
|
|
11
|
+
serve: zod_1.z.number().nonnegative('Serve hours must be a non-negative number.'),
|
|
12
|
+
return: zod_1.z.number().nonnegative('Return hours must be a non-negative number.'),
|
|
13
|
+
// Groundstrokes
|
|
14
|
+
forehand: zod_1.z.number().nonnegative('Forehand hours must be a non-negative number.'),
|
|
15
|
+
backhand: zod_1.z.number().nonnegative('Backhand hours must be a non-negative number.'),
|
|
16
|
+
// Net & Touch shots
|
|
17
|
+
volley: zod_1.z.number().nonnegative('Volley hours must be a non-negative number.'),
|
|
18
|
+
overhead: zod_1.z.number().nonnegative('Overhead hours must be a non-negative number.'),
|
|
19
|
+
dropShot: zod_1.z.number().nonnegative('Drop shot hours must be a non-negative number.'),
|
|
20
|
+
slice: zod_1.z.number().nonnegative('Slice hours must be a non-negative number.'),
|
|
21
|
+
// Physical
|
|
22
|
+
strengthAndConditioning: zod_1.z.number().nonnegative('Strength & conditioning hours must be a non-negative number.'),
|
|
23
|
+
speedAndEndurance: zod_1.z.number().nonnegative('Speed & endurance hours must be a non-negative number.'),
|
|
24
|
+
// Training Formats
|
|
25
|
+
lesson: zod_1.z.number().nonnegative('Lesson hours must be a non-negative number.'),
|
|
26
|
+
squad: zod_1.z.number().nonnegative('Squad hours must be a non-negative number.'),
|
|
27
|
+
});
|
|
28
|
+
exports.trainingLogItemSchema = zod_1.z.object({
|
|
6
29
|
playerId: zod_1.z.string().min(1, 'PlayerId is required.'),
|
|
7
30
|
date: zod_1.z.preprocess(arg => (typeof arg === 'string' || arg instanceof Date ? new Date(arg) : undefined), zod_1.z.date().refine(d => !isNaN(d.getTime()), 'Invalid weekStart date.')),
|
|
8
31
|
isoWeek: zod_1.z.number().int().min(1, 'isoWeek must be between 1 and 53').max(53, 'isoWeek must be between 1 and 53'),
|
|
@@ -49,7 +49,6 @@ export declare const COLLECTION: {
|
|
|
49
49
|
readonly performance: "performance";
|
|
50
50
|
readonly player: "player";
|
|
51
51
|
readonly spending: "spending";
|
|
52
|
-
readonly trainingWeekly: "trainingWeekly";
|
|
53
52
|
readonly training: "training";
|
|
54
53
|
readonly tournament: "tournament";
|
|
55
54
|
};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare
|
|
1
|
+
import { TrainingLogItem, TrainingBaseItem } from './interfaces';
|
|
2
|
+
export declare function createInitialTrainingBaseItem(playerId: string): TrainingBaseItem;
|
|
3
|
+
export declare const createEmptyTrainingLogItem: (playerId: string, isoYear: number, isoWeek: number) => TrainingLogItem;
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import { startOfISOWeek, setISOWeek, setISOWeekYear } from 'date-fns';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export function createInitialTrainingBaseItem(playerId) {
|
|
3
|
+
return {
|
|
4
|
+
_id: '',
|
|
5
|
+
playerId,
|
|
6
|
+
matchPractice: 0,
|
|
7
|
+
tactical: 0,
|
|
8
|
+
serve: 0,
|
|
9
|
+
return: 0,
|
|
10
|
+
forehand: 0,
|
|
11
|
+
backhand: 0,
|
|
12
|
+
volley: 0,
|
|
13
|
+
overhead: 0,
|
|
14
|
+
dropShot: 0,
|
|
15
|
+
slice: 0,
|
|
16
|
+
strengthAndConditioning: 0,
|
|
17
|
+
speedAndEndurance: 0,
|
|
18
|
+
// Training Formats
|
|
19
|
+
lesson: 0,
|
|
20
|
+
squad: 0,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Factory function for creating initial TrainingLogItem
|
|
24
|
+
export const createEmptyTrainingLogItem = (playerId, isoYear, isoWeek) => {
|
|
4
25
|
let date = new Date(isoYear, 0, 4); // 4th Jan is always in the first ISO week
|
|
5
26
|
date = setISOWeekYear(date, isoYear);
|
|
6
27
|
date = setISOWeek(date, isoWeek);
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import { TrainingWeeklyItem } from '../trainingWeekly';
|
|
2
1
|
import { ValueOf } from '../general';
|
|
2
|
+
export interface TrainingBaseItem {
|
|
3
|
+
_id: string;
|
|
4
|
+
playerId: string;
|
|
5
|
+
matchPractice: number;
|
|
6
|
+
tactical: number;
|
|
7
|
+
serve: number;
|
|
8
|
+
return: number;
|
|
9
|
+
forehand: number;
|
|
10
|
+
backhand: number;
|
|
11
|
+
volley: number;
|
|
12
|
+
overhead: number;
|
|
13
|
+
dropShot: number;
|
|
14
|
+
slice: number;
|
|
15
|
+
strengthAndConditioning: number;
|
|
16
|
+
speedAndEndurance: number;
|
|
17
|
+
lesson: number;
|
|
18
|
+
squad: number;
|
|
19
|
+
}
|
|
20
|
+
export type TrainingBaseHoursField = 'matchPractice' | 'tactical' | 'serve' | 'return' | 'forehand' | 'backhand' | 'volley' | 'overhead' | 'dropShot' | 'slice' | 'strengthAndConditioning' | 'speedAndEndurance' | 'lesson' | 'squad';
|
|
3
21
|
export declare const TRAINING: {
|
|
4
22
|
readonly ACTIVITY: {
|
|
5
23
|
readonly MatchPractice: "Match Practice";
|
|
@@ -26,7 +44,7 @@ export declare const TRAINING_ARRAYS: {
|
|
|
26
44
|
ACTIVITY: TRAINING_ACTIVITY_UNION[];
|
|
27
45
|
FORMAT: TRAINING_FORMAT_UNION[];
|
|
28
46
|
};
|
|
29
|
-
export interface
|
|
47
|
+
export interface TrainingLogItem extends TrainingBaseItem {
|
|
30
48
|
date: Date;
|
|
31
49
|
isoWeek: number;
|
|
32
50
|
isoYear: number;
|
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const trainingBaseItemSchema: z.ZodObject<{
|
|
3
|
+
playerId: z.ZodString;
|
|
4
|
+
matchPractice: z.ZodNumber;
|
|
5
|
+
tactical: z.ZodNumber;
|
|
6
|
+
serve: z.ZodNumber;
|
|
7
|
+
return: z.ZodNumber;
|
|
8
|
+
forehand: z.ZodNumber;
|
|
9
|
+
backhand: z.ZodNumber;
|
|
10
|
+
volley: z.ZodNumber;
|
|
11
|
+
overhead: z.ZodNumber;
|
|
12
|
+
dropShot: z.ZodNumber;
|
|
13
|
+
slice: z.ZodNumber;
|
|
14
|
+
strengthAndConditioning: z.ZodNumber;
|
|
15
|
+
speedAndEndurance: z.ZodNumber;
|
|
16
|
+
lesson: z.ZodNumber;
|
|
17
|
+
squad: z.ZodNumber;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
slice: number;
|
|
20
|
+
serve: number;
|
|
21
|
+
return: number;
|
|
22
|
+
playerId: string;
|
|
23
|
+
matchPractice: number;
|
|
24
|
+
tactical: number;
|
|
25
|
+
forehand: number;
|
|
26
|
+
backhand: number;
|
|
27
|
+
volley: number;
|
|
28
|
+
overhead: number;
|
|
29
|
+
dropShot: number;
|
|
30
|
+
strengthAndConditioning: number;
|
|
31
|
+
speedAndEndurance: number;
|
|
32
|
+
lesson: number;
|
|
33
|
+
squad: number;
|
|
34
|
+
}, {
|
|
35
|
+
slice: number;
|
|
36
|
+
serve: number;
|
|
37
|
+
return: number;
|
|
38
|
+
playerId: string;
|
|
39
|
+
matchPractice: number;
|
|
40
|
+
tactical: number;
|
|
41
|
+
forehand: number;
|
|
42
|
+
backhand: number;
|
|
43
|
+
volley: number;
|
|
44
|
+
overhead: number;
|
|
45
|
+
dropShot: number;
|
|
46
|
+
strengthAndConditioning: number;
|
|
47
|
+
speedAndEndurance: number;
|
|
48
|
+
lesson: number;
|
|
49
|
+
squad: number;
|
|
50
|
+
}>;
|
|
51
|
+
export declare const trainingLogItemSchema: z.ZodObject<{
|
|
3
52
|
playerId: z.ZodString;
|
|
4
53
|
date: z.ZodEffects<z.ZodEffects<z.ZodDate, Date, Date>, Date, unknown>;
|
|
5
54
|
isoWeek: z.ZodNumber;
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export const
|
|
2
|
+
export const trainingBaseItemSchema = z.object({
|
|
3
|
+
playerId: z.string().min(1, 'PlayerId is required.'),
|
|
4
|
+
// Applied Tennis
|
|
5
|
+
matchPractice: z.number().nonnegative('Match practice hours must be a non-negative number.'),
|
|
6
|
+
tactical: z.number().nonnegative('Tactical hours must be a non-negative number.'),
|
|
7
|
+
// Serve Phase
|
|
8
|
+
serve: z.number().nonnegative('Serve hours must be a non-negative number.'),
|
|
9
|
+
return: z.number().nonnegative('Return hours must be a non-negative number.'),
|
|
10
|
+
// Groundstrokes
|
|
11
|
+
forehand: z.number().nonnegative('Forehand hours must be a non-negative number.'),
|
|
12
|
+
backhand: z.number().nonnegative('Backhand hours must be a non-negative number.'),
|
|
13
|
+
// Net & Touch shots
|
|
14
|
+
volley: z.number().nonnegative('Volley hours must be a non-negative number.'),
|
|
15
|
+
overhead: z.number().nonnegative('Overhead hours must be a non-negative number.'),
|
|
16
|
+
dropShot: z.number().nonnegative('Drop shot hours must be a non-negative number.'),
|
|
17
|
+
slice: z.number().nonnegative('Slice hours must be a non-negative number.'),
|
|
18
|
+
// Physical
|
|
19
|
+
strengthAndConditioning: z.number().nonnegative('Strength & conditioning hours must be a non-negative number.'),
|
|
20
|
+
speedAndEndurance: z.number().nonnegative('Speed & endurance hours must be a non-negative number.'),
|
|
21
|
+
// Training Formats
|
|
22
|
+
lesson: z.number().nonnegative('Lesson hours must be a non-negative number.'),
|
|
23
|
+
squad: z.number().nonnegative('Squad hours must be a non-negative number.'),
|
|
24
|
+
});
|
|
25
|
+
export const trainingLogItemSchema = z.object({
|
|
3
26
|
playerId: z.string().min(1, 'PlayerId is required.'),
|
|
4
27
|
date: z.preprocess(arg => (typeof arg === 'string' || arg instanceof Date ? new Date(arg) : undefined), z.date().refine(d => !isNaN(d.getTime()), 'Invalid weekStart date.')),
|
|
5
28
|
isoWeek: z.number().int().min(1, 'isoWeek must be between 1 and 53').max(53, 'isoWeek must be between 1 and 53'),
|
|
@@ -49,7 +49,6 @@ export declare const COLLECTION: {
|
|
|
49
49
|
readonly performance: "performance";
|
|
50
50
|
readonly player: "player";
|
|
51
51
|
readonly spending: "spending";
|
|
52
|
-
readonly trainingWeekly: "trainingWeekly";
|
|
53
52
|
readonly training: "training";
|
|
54
53
|
readonly tournament: "tournament";
|
|
55
54
|
};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare
|
|
1
|
+
import { TrainingLogItem, TrainingBaseItem } from './interfaces';
|
|
2
|
+
export declare function createInitialTrainingBaseItem(playerId: string): TrainingBaseItem;
|
|
3
|
+
export declare const createEmptyTrainingLogItem: (playerId: string, isoYear: number, isoWeek: number) => TrainingLogItem;
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import { TrainingWeeklyItem } from '../trainingWeekly';
|
|
2
1
|
import { ValueOf } from '../general';
|
|
2
|
+
export interface TrainingBaseItem {
|
|
3
|
+
_id: string;
|
|
4
|
+
playerId: string;
|
|
5
|
+
matchPractice: number;
|
|
6
|
+
tactical: number;
|
|
7
|
+
serve: number;
|
|
8
|
+
return: number;
|
|
9
|
+
forehand: number;
|
|
10
|
+
backhand: number;
|
|
11
|
+
volley: number;
|
|
12
|
+
overhead: number;
|
|
13
|
+
dropShot: number;
|
|
14
|
+
slice: number;
|
|
15
|
+
strengthAndConditioning: number;
|
|
16
|
+
speedAndEndurance: number;
|
|
17
|
+
lesson: number;
|
|
18
|
+
squad: number;
|
|
19
|
+
}
|
|
20
|
+
export type TrainingBaseHoursField = 'matchPractice' | 'tactical' | 'serve' | 'return' | 'forehand' | 'backhand' | 'volley' | 'overhead' | 'dropShot' | 'slice' | 'strengthAndConditioning' | 'speedAndEndurance' | 'lesson' | 'squad';
|
|
3
21
|
export declare const TRAINING: {
|
|
4
22
|
readonly ACTIVITY: {
|
|
5
23
|
readonly MatchPractice: "Match Practice";
|
|
@@ -26,7 +44,7 @@ export declare const TRAINING_ARRAYS: {
|
|
|
26
44
|
ACTIVITY: TRAINING_ACTIVITY_UNION[];
|
|
27
45
|
FORMAT: TRAINING_FORMAT_UNION[];
|
|
28
46
|
};
|
|
29
|
-
export interface
|
|
47
|
+
export interface TrainingLogItem extends TrainingBaseItem {
|
|
30
48
|
date: Date;
|
|
31
49
|
isoWeek: number;
|
|
32
50
|
isoYear: number;
|
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const trainingBaseItemSchema: z.ZodObject<{
|
|
3
|
+
playerId: z.ZodString;
|
|
4
|
+
matchPractice: z.ZodNumber;
|
|
5
|
+
tactical: z.ZodNumber;
|
|
6
|
+
serve: z.ZodNumber;
|
|
7
|
+
return: z.ZodNumber;
|
|
8
|
+
forehand: z.ZodNumber;
|
|
9
|
+
backhand: z.ZodNumber;
|
|
10
|
+
volley: z.ZodNumber;
|
|
11
|
+
overhead: z.ZodNumber;
|
|
12
|
+
dropShot: z.ZodNumber;
|
|
13
|
+
slice: z.ZodNumber;
|
|
14
|
+
strengthAndConditioning: z.ZodNumber;
|
|
15
|
+
speedAndEndurance: z.ZodNumber;
|
|
16
|
+
lesson: z.ZodNumber;
|
|
17
|
+
squad: z.ZodNumber;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
slice: number;
|
|
20
|
+
serve: number;
|
|
21
|
+
return: number;
|
|
22
|
+
playerId: string;
|
|
23
|
+
matchPractice: number;
|
|
24
|
+
tactical: number;
|
|
25
|
+
forehand: number;
|
|
26
|
+
backhand: number;
|
|
27
|
+
volley: number;
|
|
28
|
+
overhead: number;
|
|
29
|
+
dropShot: number;
|
|
30
|
+
strengthAndConditioning: number;
|
|
31
|
+
speedAndEndurance: number;
|
|
32
|
+
lesson: number;
|
|
33
|
+
squad: number;
|
|
34
|
+
}, {
|
|
35
|
+
slice: number;
|
|
36
|
+
serve: number;
|
|
37
|
+
return: number;
|
|
38
|
+
playerId: string;
|
|
39
|
+
matchPractice: number;
|
|
40
|
+
tactical: number;
|
|
41
|
+
forehand: number;
|
|
42
|
+
backhand: number;
|
|
43
|
+
volley: number;
|
|
44
|
+
overhead: number;
|
|
45
|
+
dropShot: number;
|
|
46
|
+
strengthAndConditioning: number;
|
|
47
|
+
speedAndEndurance: number;
|
|
48
|
+
lesson: number;
|
|
49
|
+
squad: number;
|
|
50
|
+
}>;
|
|
51
|
+
export declare const trainingLogItemSchema: z.ZodObject<{
|
|
3
52
|
playerId: z.ZodString;
|
|
4
53
|
date: z.ZodEffects<z.ZodEffects<z.ZodDate, Date, Date>, Date, unknown>;
|
|
5
54
|
isoWeek: z.ZodNumber;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tenniscommon",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.41",
|
|
4
4
|
"description": "Types for Tennis application",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -86,11 +86,6 @@
|
|
|
86
86
|
"import": "./dist/esm/common/training/index.js",
|
|
87
87
|
"types": "./dist/types/common/training/index.d.ts"
|
|
88
88
|
},
|
|
89
|
-
"./TrainingWeekly": {
|
|
90
|
-
"require": "./dist/cjs/common/trainingWeekly/index.js",
|
|
91
|
-
"import": "./dist/esm/common/trainingWeekly/index.js",
|
|
92
|
-
"types": "./dist/types/common/trainingWeekly/index.d.ts"
|
|
93
|
-
},
|
|
94
89
|
"./General": {
|
|
95
90
|
"require": "./dist/cjs/common/general/index.js",
|
|
96
91
|
"import": "./dist/esm/common/general/index.js",
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./interfaces"), exports);
|
|
18
|
-
__exportStar(require("./initialData"), exports);
|
|
19
|
-
__exportStar(require("./validation"), exports);
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createInitialTrainingWeeklyItem = createInitialTrainingWeeklyItem;
|
|
4
|
-
function createInitialTrainingWeeklyItem(playerId) {
|
|
5
|
-
return {
|
|
6
|
-
_id: '',
|
|
7
|
-
playerId,
|
|
8
|
-
matchPractice: 0,
|
|
9
|
-
tactical: 0,
|
|
10
|
-
serve: 0,
|
|
11
|
-
return: 0,
|
|
12
|
-
forehand: 0,
|
|
13
|
-
backhand: 0,
|
|
14
|
-
volley: 0,
|
|
15
|
-
overhead: 0,
|
|
16
|
-
dropShot: 0,
|
|
17
|
-
slice: 0,
|
|
18
|
-
strengthAndConditioning: 0,
|
|
19
|
-
speedAndEndurance: 0,
|
|
20
|
-
// Training Formats
|
|
21
|
-
lesson: 0,
|
|
22
|
-
squad: 0,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface TrainingWeeklyItem {
|
|
2
|
-
_id: string;
|
|
3
|
-
playerId: string;
|
|
4
|
-
matchPractice: number;
|
|
5
|
-
tactical: number;
|
|
6
|
-
serve: number;
|
|
7
|
-
return: number;
|
|
8
|
-
forehand: number;
|
|
9
|
-
backhand: number;
|
|
10
|
-
volley: number;
|
|
11
|
-
overhead: number;
|
|
12
|
-
dropShot: number;
|
|
13
|
-
slice: number;
|
|
14
|
-
strengthAndConditioning: number;
|
|
15
|
-
speedAndEndurance: number;
|
|
16
|
-
lesson: number;
|
|
17
|
-
squad: number;
|
|
18
|
-
}
|
|
19
|
-
export type TrainingWeeklyHoursField = Exclude<keyof TrainingWeeklyItem, '_id' | 'playerId'>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const trainingWeeklyItemSchema: z.ZodObject<{
|
|
3
|
-
playerId: z.ZodString;
|
|
4
|
-
matchPractice: z.ZodNumber;
|
|
5
|
-
tactical: z.ZodNumber;
|
|
6
|
-
serve: z.ZodNumber;
|
|
7
|
-
return: z.ZodNumber;
|
|
8
|
-
forehand: z.ZodNumber;
|
|
9
|
-
backhand: z.ZodNumber;
|
|
10
|
-
volley: z.ZodNumber;
|
|
11
|
-
overhead: z.ZodNumber;
|
|
12
|
-
dropShot: z.ZodNumber;
|
|
13
|
-
slice: z.ZodNumber;
|
|
14
|
-
strengthAndConditioning: z.ZodNumber;
|
|
15
|
-
speedAndEndurance: z.ZodNumber;
|
|
16
|
-
lesson: z.ZodNumber;
|
|
17
|
-
squad: z.ZodNumber;
|
|
18
|
-
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
slice: number;
|
|
20
|
-
serve: number;
|
|
21
|
-
return: number;
|
|
22
|
-
playerId: string;
|
|
23
|
-
matchPractice: number;
|
|
24
|
-
tactical: number;
|
|
25
|
-
forehand: number;
|
|
26
|
-
backhand: number;
|
|
27
|
-
volley: number;
|
|
28
|
-
overhead: number;
|
|
29
|
-
dropShot: number;
|
|
30
|
-
strengthAndConditioning: number;
|
|
31
|
-
speedAndEndurance: number;
|
|
32
|
-
lesson: number;
|
|
33
|
-
squad: number;
|
|
34
|
-
}, {
|
|
35
|
-
slice: number;
|
|
36
|
-
serve: number;
|
|
37
|
-
return: number;
|
|
38
|
-
playerId: string;
|
|
39
|
-
matchPractice: number;
|
|
40
|
-
tactical: number;
|
|
41
|
-
forehand: number;
|
|
42
|
-
backhand: number;
|
|
43
|
-
volley: number;
|
|
44
|
-
overhead: number;
|
|
45
|
-
dropShot: number;
|
|
46
|
-
strengthAndConditioning: number;
|
|
47
|
-
speedAndEndurance: number;
|
|
48
|
-
lesson: number;
|
|
49
|
-
squad: number;
|
|
50
|
-
}>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.trainingWeeklyItemSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
exports.trainingWeeklyItemSchema = zod_1.z.object({
|
|
6
|
-
playerId: zod_1.z.string().min(1, 'PlayerId is required.'),
|
|
7
|
-
// Applied Tennis
|
|
8
|
-
matchPractice: zod_1.z.number().nonnegative('Match practice hours must be a non-negative number.'),
|
|
9
|
-
tactical: zod_1.z.number().nonnegative('Tactical hours must be a non-negative number.'),
|
|
10
|
-
// Serve Phase
|
|
11
|
-
serve: zod_1.z.number().nonnegative('Serve hours must be a non-negative number.'),
|
|
12
|
-
return: zod_1.z.number().nonnegative('Return hours must be a non-negative number.'),
|
|
13
|
-
// Groundstrokes
|
|
14
|
-
forehand: zod_1.z.number().nonnegative('Forehand hours must be a non-negative number.'),
|
|
15
|
-
backhand: zod_1.z.number().nonnegative('Backhand hours must be a non-negative number.'),
|
|
16
|
-
// Net & Touch shots
|
|
17
|
-
volley: zod_1.z.number().nonnegative('Volley hours must be a non-negative number.'),
|
|
18
|
-
overhead: zod_1.z.number().nonnegative('Overhead hours must be a non-negative number.'),
|
|
19
|
-
dropShot: zod_1.z.number().nonnegative('Drop shot hours must be a non-negative number.'),
|
|
20
|
-
slice: zod_1.z.number().nonnegative('Slice hours must be a non-negative number.'),
|
|
21
|
-
// Physical
|
|
22
|
-
strengthAndConditioning: zod_1.z.number().nonnegative('Strength & conditioning hours must be a non-negative number.'),
|
|
23
|
-
speedAndEndurance: zod_1.z.number().nonnegative('Speed & endurance hours must be a non-negative number.'),
|
|
24
|
-
// Training Formats
|
|
25
|
-
lesson: zod_1.z.number().nonnegative('Lesson hours must be a non-negative number.'),
|
|
26
|
-
squad: zod_1.z.number().nonnegative('Squad hours must be a non-negative number.'),
|
|
27
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export function createInitialTrainingWeeklyItem(playerId) {
|
|
2
|
-
return {
|
|
3
|
-
_id: '',
|
|
4
|
-
playerId,
|
|
5
|
-
matchPractice: 0,
|
|
6
|
-
tactical: 0,
|
|
7
|
-
serve: 0,
|
|
8
|
-
return: 0,
|
|
9
|
-
forehand: 0,
|
|
10
|
-
backhand: 0,
|
|
11
|
-
volley: 0,
|
|
12
|
-
overhead: 0,
|
|
13
|
-
dropShot: 0,
|
|
14
|
-
slice: 0,
|
|
15
|
-
strengthAndConditioning: 0,
|
|
16
|
-
speedAndEndurance: 0,
|
|
17
|
-
// Training Formats
|
|
18
|
-
lesson: 0,
|
|
19
|
-
squad: 0,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface TrainingWeeklyItem {
|
|
2
|
-
_id: string;
|
|
3
|
-
playerId: string;
|
|
4
|
-
matchPractice: number;
|
|
5
|
-
tactical: number;
|
|
6
|
-
serve: number;
|
|
7
|
-
return: number;
|
|
8
|
-
forehand: number;
|
|
9
|
-
backhand: number;
|
|
10
|
-
volley: number;
|
|
11
|
-
overhead: number;
|
|
12
|
-
dropShot: number;
|
|
13
|
-
slice: number;
|
|
14
|
-
strengthAndConditioning: number;
|
|
15
|
-
speedAndEndurance: number;
|
|
16
|
-
lesson: number;
|
|
17
|
-
squad: number;
|
|
18
|
-
}
|
|
19
|
-
export type TrainingWeeklyHoursField = Exclude<keyof TrainingWeeklyItem, '_id' | 'playerId'>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const trainingWeeklyItemSchema: z.ZodObject<{
|
|
3
|
-
playerId: z.ZodString;
|
|
4
|
-
matchPractice: z.ZodNumber;
|
|
5
|
-
tactical: z.ZodNumber;
|
|
6
|
-
serve: z.ZodNumber;
|
|
7
|
-
return: z.ZodNumber;
|
|
8
|
-
forehand: z.ZodNumber;
|
|
9
|
-
backhand: z.ZodNumber;
|
|
10
|
-
volley: z.ZodNumber;
|
|
11
|
-
overhead: z.ZodNumber;
|
|
12
|
-
dropShot: z.ZodNumber;
|
|
13
|
-
slice: z.ZodNumber;
|
|
14
|
-
strengthAndConditioning: z.ZodNumber;
|
|
15
|
-
speedAndEndurance: z.ZodNumber;
|
|
16
|
-
lesson: z.ZodNumber;
|
|
17
|
-
squad: z.ZodNumber;
|
|
18
|
-
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
slice: number;
|
|
20
|
-
serve: number;
|
|
21
|
-
return: number;
|
|
22
|
-
playerId: string;
|
|
23
|
-
matchPractice: number;
|
|
24
|
-
tactical: number;
|
|
25
|
-
forehand: number;
|
|
26
|
-
backhand: number;
|
|
27
|
-
volley: number;
|
|
28
|
-
overhead: number;
|
|
29
|
-
dropShot: number;
|
|
30
|
-
strengthAndConditioning: number;
|
|
31
|
-
speedAndEndurance: number;
|
|
32
|
-
lesson: number;
|
|
33
|
-
squad: number;
|
|
34
|
-
}, {
|
|
35
|
-
slice: number;
|
|
36
|
-
serve: number;
|
|
37
|
-
return: number;
|
|
38
|
-
playerId: string;
|
|
39
|
-
matchPractice: number;
|
|
40
|
-
tactical: number;
|
|
41
|
-
forehand: number;
|
|
42
|
-
backhand: number;
|
|
43
|
-
volley: number;
|
|
44
|
-
overhead: number;
|
|
45
|
-
dropShot: number;
|
|
46
|
-
strengthAndConditioning: number;
|
|
47
|
-
speedAndEndurance: number;
|
|
48
|
-
lesson: number;
|
|
49
|
-
squad: number;
|
|
50
|
-
}>;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export const trainingWeeklyItemSchema = z.object({
|
|
3
|
-
playerId: z.string().min(1, 'PlayerId is required.'),
|
|
4
|
-
// Applied Tennis
|
|
5
|
-
matchPractice: z.number().nonnegative('Match practice hours must be a non-negative number.'),
|
|
6
|
-
tactical: z.number().nonnegative('Tactical hours must be a non-negative number.'),
|
|
7
|
-
// Serve Phase
|
|
8
|
-
serve: z.number().nonnegative('Serve hours must be a non-negative number.'),
|
|
9
|
-
return: z.number().nonnegative('Return hours must be a non-negative number.'),
|
|
10
|
-
// Groundstrokes
|
|
11
|
-
forehand: z.number().nonnegative('Forehand hours must be a non-negative number.'),
|
|
12
|
-
backhand: z.number().nonnegative('Backhand hours must be a non-negative number.'),
|
|
13
|
-
// Net & Touch shots
|
|
14
|
-
volley: z.number().nonnegative('Volley hours must be a non-negative number.'),
|
|
15
|
-
overhead: z.number().nonnegative('Overhead hours must be a non-negative number.'),
|
|
16
|
-
dropShot: z.number().nonnegative('Drop shot hours must be a non-negative number.'),
|
|
17
|
-
slice: z.number().nonnegative('Slice hours must be a non-negative number.'),
|
|
18
|
-
// Physical
|
|
19
|
-
strengthAndConditioning: z.number().nonnegative('Strength & conditioning hours must be a non-negative number.'),
|
|
20
|
-
speedAndEndurance: z.number().nonnegative('Speed & endurance hours must be a non-negative number.'),
|
|
21
|
-
// Training Formats
|
|
22
|
-
lesson: z.number().nonnegative('Lesson hours must be a non-negative number.'),
|
|
23
|
-
squad: z.number().nonnegative('Squad hours must be a non-negative number.'),
|
|
24
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface TrainingWeeklyItem {
|
|
2
|
-
_id: string;
|
|
3
|
-
playerId: string;
|
|
4
|
-
matchPractice: number;
|
|
5
|
-
tactical: number;
|
|
6
|
-
serve: number;
|
|
7
|
-
return: number;
|
|
8
|
-
forehand: number;
|
|
9
|
-
backhand: number;
|
|
10
|
-
volley: number;
|
|
11
|
-
overhead: number;
|
|
12
|
-
dropShot: number;
|
|
13
|
-
slice: number;
|
|
14
|
-
strengthAndConditioning: number;
|
|
15
|
-
speedAndEndurance: number;
|
|
16
|
-
lesson: number;
|
|
17
|
-
squad: number;
|
|
18
|
-
}
|
|
19
|
-
export type TrainingWeeklyHoursField = Exclude<keyof TrainingWeeklyItem, '_id' | 'playerId'>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const trainingWeeklyItemSchema: z.ZodObject<{
|
|
3
|
-
playerId: z.ZodString;
|
|
4
|
-
matchPractice: z.ZodNumber;
|
|
5
|
-
tactical: z.ZodNumber;
|
|
6
|
-
serve: z.ZodNumber;
|
|
7
|
-
return: z.ZodNumber;
|
|
8
|
-
forehand: z.ZodNumber;
|
|
9
|
-
backhand: z.ZodNumber;
|
|
10
|
-
volley: z.ZodNumber;
|
|
11
|
-
overhead: z.ZodNumber;
|
|
12
|
-
dropShot: z.ZodNumber;
|
|
13
|
-
slice: z.ZodNumber;
|
|
14
|
-
strengthAndConditioning: z.ZodNumber;
|
|
15
|
-
speedAndEndurance: z.ZodNumber;
|
|
16
|
-
lesson: z.ZodNumber;
|
|
17
|
-
squad: z.ZodNumber;
|
|
18
|
-
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
slice: number;
|
|
20
|
-
serve: number;
|
|
21
|
-
return: number;
|
|
22
|
-
playerId: string;
|
|
23
|
-
matchPractice: number;
|
|
24
|
-
tactical: number;
|
|
25
|
-
forehand: number;
|
|
26
|
-
backhand: number;
|
|
27
|
-
volley: number;
|
|
28
|
-
overhead: number;
|
|
29
|
-
dropShot: number;
|
|
30
|
-
strengthAndConditioning: number;
|
|
31
|
-
speedAndEndurance: number;
|
|
32
|
-
lesson: number;
|
|
33
|
-
squad: number;
|
|
34
|
-
}, {
|
|
35
|
-
slice: number;
|
|
36
|
-
serve: number;
|
|
37
|
-
return: number;
|
|
38
|
-
playerId: string;
|
|
39
|
-
matchPractice: number;
|
|
40
|
-
tactical: number;
|
|
41
|
-
forehand: number;
|
|
42
|
-
backhand: number;
|
|
43
|
-
volley: number;
|
|
44
|
-
overhead: number;
|
|
45
|
-
dropShot: number;
|
|
46
|
-
strengthAndConditioning: number;
|
|
47
|
-
speedAndEndurance: number;
|
|
48
|
-
lesson: number;
|
|
49
|
-
squad: number;
|
|
50
|
-
}>;
|