hevy-shared 1.0.1040 → 1.0.1042

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.
@@ -0,0 +1 @@
1
+ export declare const distanceMBetween: (lat1: number, lon1: number, lat2: number, lon2: number) => number;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distanceMBetween = void 0;
4
+ const haversineDistance = (lat1, lon1, lat2, lon2) => {
5
+ const R = 6371;
6
+ const dLat = ((lat2 - lat1) * Math.PI) / 180;
7
+ const dLon = ((lon2 - lon1) * Math.PI) / 180;
8
+ const a = Math.sin(dLat / 2) ** 2 +
9
+ Math.cos((lat1 * Math.PI) / 180) *
10
+ Math.cos((lat2 * Math.PI) / 180) *
11
+ Math.sin(dLon / 2) ** 2;
12
+ return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
13
+ };
14
+ const distanceMBetween = (lat1, lon1, lat2, lon2) => Math.round(haversineDistance(lat1, lon1, lat2, lon2) * 1000);
15
+ exports.distanceMBetween = distanceMBetween;
package/built/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export * from './hevyTrainer';
29
29
  export * from './translations';
30
30
  export * from './exerciseLocaleUtils';
31
31
  export * from './getVolumeComparison';
32
+ export * from './geography';
32
33
  export type WeightUnit = 'kg' | 'lbs';
33
34
  export declare const isWeightUnit: (x: string) => x is WeightUnit;
34
35
  export type DistanceUnit = 'kilometers' | 'miles';
@@ -1406,7 +1407,8 @@ type CommercialGym = {
1406
1407
  name: string;
1407
1408
  fullAddress: string;
1408
1409
  city: string;
1409
- distanceM: number;
1410
+ latitude: number;
1411
+ longitude: number;
1410
1412
  };
1411
1413
  export type Gym = CommercialGym;
1412
1414
  export interface StripePrice {
package/built/index.js CHANGED
@@ -41,6 +41,7 @@ __exportStar(require("./hevyTrainer"), exports);
41
41
  __exportStar(require("./translations"), exports);
42
42
  __exportStar(require("./exerciseLocaleUtils"), exports);
43
43
  __exportStar(require("./getVolumeComparison"), exports);
44
+ __exportStar(require("./geography"), exports);
44
45
  const isWeightUnit = (x) => {
45
46
  return x === 'kg' || x === 'lbs';
46
47
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const geography_1 = require("../geography");
13
+ describe('Geography utils', () => {
14
+ describe('distanceMBetween', () => {
15
+ it('Calculates the distance between two sets of coordinates', () => __awaiter(void 0, void 0, void 0, function* () {
16
+ expect((0, geography_1.distanceMBetween)(51.001, 52, 51, 52)).toBe(111);
17
+ expect((0, geography_1.distanceMBetween)(51.002, 52, 51, 52)).toBe(222);
18
+ expect((0, geography_1.distanceMBetween)(50.999, 52, 51, 52)).toBe(111);
19
+ expect((0, geography_1.distanceMBetween)(51.01, 52, 51, 52)).toBe(1112);
20
+ expect((0, geography_1.distanceMBetween)(51.04, 52, 51, 52)).toBe(4448);
21
+ expect((0, geography_1.distanceMBetween)(51.035, 52.035, 51, 52)).toBe(4598);
22
+ expect((0, geography_1.distanceMBetween)(50.965, 51.965, 51, 52)).toBe(4599);
23
+ }));
24
+ });
25
+ });
@@ -11,7 +11,7 @@ export interface WorkoutSync {
11
11
  isMore: boolean;
12
12
  updated_at?: string;
13
13
  }
14
- export type Workout = OwnedWorkout & Partial<UserWorkout>;
15
- export type WorkoutExercise = OwnedWorkoutExercise & Partial<UserWorkoutExercise>;
16
- export type WorkoutExerciseSet = OwnedWorkoutExerciseSet & Partial<UserWorkoutExerciseSet>;
14
+ export type Workout = OwnedWorkout | UserWorkout;
15
+ export type WorkoutExercise = OwnedWorkoutExercise | UserWorkoutExercise;
16
+ export type WorkoutExerciseSet = OwnedWorkoutExerciseSet | UserWorkoutExerciseSet;
17
17
  export declare function isOwnedWorkout(workout: OwnedWorkout | UserWorkout): workout is OwnedWorkout;
@@ -20,8 +20,7 @@ __exportStar(require("./userWorkout"), exports);
20
20
  __exportStar(require("./publicWorkout"), exports);
21
21
  __exportStar(require("./normalizedWorkout"), exports);
22
22
  __exportStar(require("./postWorkoutRequest"), exports);
23
- // Stub
23
+ // Placeholder, will be done better but this works for now
24
24
  function isOwnedWorkout(workout) {
25
- void workout;
26
- return true;
25
+ return 'gymId' in workout;
27
26
  }
@@ -1,4 +1,4 @@
1
- import { DistanceUnit, Equipment, ExerciseType, MuscleGroup, RPE, SetPersonalRecordType, SetType, WeightUnit } from '..';
1
+ import { DistanceUnit, ExerciseType, MuscleGroup, RPE, SetPersonalRecordType, SetType, WeightUnit } from '..';
2
2
  export declare const isPublicWorkout: (x: any) => x is PublicWorkout;
3
3
  export interface PublicWorkout {
4
4
  type: 'public';
@@ -39,11 +39,9 @@ export interface PublicWorkoutExercise {
39
39
  superset_id: number | null;
40
40
  rest_seconds: number | null;
41
41
  notes: string;
42
- priority: number;
43
42
  muscle_group: MuscleGroup;
44
43
  other_muscles: MuscleGroup[];
45
44
  exercise_type: ExerciseType;
46
- equipment_category: Equipment;
47
45
  url?: string;
48
46
  media_type?: string;
49
47
  custom_exercise_image_url?: string | null;
@@ -1,4 +1,4 @@
1
- import { Equipment, ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
1
+ import { ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
2
2
  export interface UserWorkout {
3
3
  id: string;
4
4
  short_id: string | null;
@@ -6,13 +6,9 @@ export interface UserWorkout {
6
6
  name: string;
7
7
  description?: string;
8
8
  like_count: number;
9
- /** @deprecated 2.3.4 */
10
- like_images: string[];
11
9
  preview_workout_likes: PreviewWorkoutLike[];
12
10
  comment_count: number;
13
11
  comments: WorkoutComment[];
14
- /** @deprecated 1.28.13 */
15
- image_urls?: string[];
16
12
  media: WorkoutMedia[];
17
13
  is_liked_by_user: boolean;
18
14
  start_time: number;
@@ -25,7 +21,6 @@ export interface UserWorkout {
25
21
  apple_watch: boolean;
26
22
  wearos_watch: boolean;
27
23
  verified: boolean;
28
- created_at: string;
29
24
  updated_at: string;
30
25
  nth_workout: number;
31
26
  /**
@@ -39,13 +34,8 @@ export interface UserWorkout {
39
34
  */
40
35
  include_warmup_sets: boolean;
41
36
  is_private: boolean;
42
- /**
43
- * If applicable, the user ID of the coach who logged this workout
44
- */
45
- logged_by_coach_id?: string;
46
37
  biometrics?: WorkoutBiometrics;
47
38
  is_biometrics_public: boolean;
48
- trainer_program_id: string | undefined;
49
39
  gym: UserWorkoutGym | undefined;
50
40
  }
51
41
  export interface UserWorkoutExercise {
@@ -66,17 +56,10 @@ export interface UserWorkoutExercise {
66
56
  superset_id: number | null;
67
57
  rest_seconds: number | null;
68
58
  notes: string;
69
- priority: number;
70
59
  muscle_group: MuscleGroup;
71
60
  other_muscles: MuscleGroup[];
72
61
  exercise_type: ExerciseType;
73
- equipment_category: Equipment;
74
- url?: string;
75
- media_type?: string;
76
- custom_exercise_image_url?: string | null;
77
62
  thumbnail_url?: string | null;
78
- manual_tag?: string;
79
- aka?: string;
80
63
  /**
81
64
  * for exercises with two dumbbells
82
65
  *
@@ -102,16 +85,6 @@ export interface UserWorkoutExerciseSet {
102
85
  duration_seconds?: number | null;
103
86
  custom_metric?: number | null;
104
87
  rpe?: RPE | null;
105
- /**
106
- * @deprecated 1.29.17 -
107
- * we can only set this to `best_weight`, `best_reps`, `best_duration` or
108
- * `best_distance`. sending anything else would cause older clients to crash.
109
- * newer clients will ignore this field and use the `prs` field instead.
110
- */
111
- personalRecords?: Array<{
112
- type: 'best_weight' | 'best_reps' | 'best_duration' | 'best_distance';
113
- value: number;
114
- }>;
115
88
  prs: {
116
89
  type: SetPersonalRecordType;
117
90
  value: number;
@@ -1,4 +1,4 @@
1
- import { Equipment, ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
1
+ import { ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
2
2
  export interface OwnedWorkout {
3
3
  id: string;
4
4
  short_id: string | null;
@@ -6,13 +6,9 @@ export interface OwnedWorkout {
6
6
  name: string;
7
7
  description?: string;
8
8
  like_count: number;
9
- /** @deprecated 2.3.4 */
10
- like_images: string[];
11
9
  preview_workout_likes: PreviewWorkoutLike[];
12
10
  comment_count: number;
13
11
  comments: WorkoutComment[];
14
- /** @deprecated 1.28.13 */
15
- image_urls?: string[];
16
12
  media: WorkoutMedia[];
17
13
  is_liked_by_user: boolean;
18
14
  start_time: number;
@@ -28,21 +24,7 @@ export interface OwnedWorkout {
28
24
  created_at: string;
29
25
  updated_at: string;
30
26
  nth_workout: number;
31
- /**
32
- * See https://github.com/hevyapp/hevy-backend/pull/193 to understand
33
- * why we added estimated_volume_kg
34
- */
35
- estimated_volume_kg: number;
36
- /**
37
- * Whether to include warmup sets in various calculations.
38
- * https://github.com/hevyapp/hevy-shared/pull/312
39
- */
40
- include_warmup_sets: boolean;
41
27
  is_private: boolean;
42
- /**
43
- * If applicable, the user ID of the coach who logged this workout
44
- */
45
- logged_by_coach_id?: string;
46
28
  biometrics?: WorkoutBiometrics;
47
29
  is_biometrics_public: boolean;
48
30
  trainer_program_id: string | undefined;
@@ -70,17 +52,10 @@ export interface OwnedWorkoutExercise {
70
52
  superset_id: number | null;
71
53
  rest_seconds: number | null;
72
54
  notes: string;
73
- priority: number;
74
55
  muscle_group: MuscleGroup;
75
56
  other_muscles: MuscleGroup[];
76
57
  exercise_type: ExerciseType;
77
- equipment_category: Equipment;
78
- url?: string;
79
- media_type?: string;
80
- custom_exercise_image_url?: string | null;
81
58
  thumbnail_url?: string | null;
82
- manual_tag?: string;
83
- aka?: string;
84
59
  /**
85
60
  * for exercises with two dumbbells
86
61
  *
@@ -106,16 +81,6 @@ export interface OwnedWorkoutExerciseSet {
106
81
  duration_seconds?: number | null;
107
82
  custom_metric?: number | null;
108
83
  rpe?: RPE | null;
109
- /**
110
- * @deprecated 1.29.17 -
111
- * we can only set this to `best_weight`, `best_reps`, `best_duration` or
112
- * `best_distance`. sending anything else would cause older clients to crash.
113
- * newer clients will ignore this field and use the `prs` field instead.
114
- */
115
- personalRecords?: Array<{
116
- type: 'best_weight' | 'best_reps' | 'best_duration' | 'best_distance';
117
- value: number;
118
- }>;
119
84
  prs: {
120
85
  type: SetPersonalRecordType;
121
86
  value: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hevy-shared",
3
- "version": "1.0.1040",
3
+ "version": "1.0.1042",
4
4
  "description": "",
5
5
  "main": "built/index.js",
6
6
  "types": "built/index.d.ts",