hevy-shared 1.0.1060 → 1.0.1062

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,6 +1,5 @@
1
1
  import { LibraryExercise, Lookup } from '.';
2
2
  import { Language } from './translations';
3
- import { LocalizedExerciseTitles } from './workout/shared';
4
3
  /** Keeping exercise instruction/title localization utils here instead of translations
5
4
  * so I don't need to import exercise types from here in translations (translations was
6
5
  * created so that hevy-web can import utils from shared without importing something from
@@ -9,7 +8,7 @@ import { LocalizedExerciseTitles } from './workout/shared';
9
8
  export declare const supportedInstructionsLanguages: readonly ["en", "it", "de", "es", "fr", "pt"];
10
9
  export type InstructionsLanguage = Lookup<typeof supportedInstructionsLanguages>;
11
10
  export declare const isSupportedInstructionsLanguage: (lang: string) => lang is InstructionsLanguage;
12
- type LocalizableExerciseTemplate = Pick<LibraryExercise, 'title' | keyof LocalizedExerciseTitles | 'localised_instructions' | 'is_custom'>;
11
+ type LocalizableExerciseTemplate = Pick<LibraryExercise, 'title' | 'es_title' | 'de_title' | 'fr_title' | 'it_title' | 'ja_title' | 'ko_title' | 'pt_title' | 'ru_title' | 'tr_title' | 'zh_cn_title' | 'zh_tw_title' | 'localised_instructions' | 'is_custom'>;
13
12
  export declare const localisedExerciseTitle: (locale: Language, template: LocalizableExerciseTemplate) => string;
14
13
  export declare const localisedExerciseInstructions: (locale: Language, exerciseTemplate: LocalizableExerciseTemplate) => string;
15
14
  export declare const localeSelect: <T>(locale: Language, options: {
package/built/index.d.ts CHANGED
@@ -5,7 +5,6 @@ import { Language } from './translations';
5
5
  import { Lookup } from './typeUtils';
6
6
  import { z } from 'zod';
7
7
  import { UserWorkout } from './workout';
8
- import { LocalizedExerciseTitles } from './workout/shared';
9
8
  export * from './schemas';
10
9
  export * from './constants';
11
10
  export * from './utils';
@@ -30,7 +29,6 @@ export * from './hevyTrainer';
30
29
  export * from './translations';
31
30
  export * from './exerciseLocaleUtils';
32
31
  export * from './getVolumeComparison';
33
- export * from './geography';
34
32
  export type WeightUnit = 'kg' | 'lbs';
35
33
  export declare const isWeightUnit: (x: string) => x is WeightUnit;
36
34
  export type DistanceUnit = 'kilometers' | 'miles';
@@ -703,7 +701,7 @@ export interface BaseExerciseTemplate {
703
701
  * They are stored on the database and downloaded to the client
704
702
  * They have additional properties like translations, leaderboard eligibility, etc.
705
703
  */
706
- export interface LibraryExercise extends BaseExerciseTemplate, LocalizedExerciseTitles {
704
+ export interface LibraryExercise extends BaseExerciseTemplate {
707
705
  is_custom: false;
708
706
  aka?: string;
709
707
  manual_tag?: string;
@@ -711,6 +709,17 @@ export interface LibraryExercise extends BaseExerciseTemplate, LocalizedExercise
711
709
  leaderboard_exercise?: boolean;
712
710
  hundred_percent_bodyweight_exercise?: boolean;
713
711
  strength_level_exercise?: boolean;
712
+ es_title?: string;
713
+ de_title?: string;
714
+ fr_title?: string;
715
+ it_title?: string;
716
+ pt_title?: string;
717
+ ko_title?: string;
718
+ ja_title?: string;
719
+ tr_title?: string;
720
+ ru_title?: string;
721
+ zh_cn_title?: string;
722
+ zh_tw_title?: string;
714
723
  localised_instructions?: {
715
724
  [language in InstructionsLanguage]?: string;
716
725
  };
@@ -828,7 +837,7 @@ export interface RoutineSet {
828
837
  rpe?: RPE | null;
829
838
  rep_range?: RepRange;
830
839
  }
831
- export interface RoutineExercise extends LocalizedExerciseTitles {
840
+ export interface RoutineExercise {
832
841
  id: string;
833
842
  /** This is the username of the exercise_template */
834
843
  username: string;
@@ -836,6 +845,17 @@ export interface RoutineExercise extends LocalizedExerciseTitles {
836
845
  warmup_set_count: number;
837
846
  normal_set_count: number;
838
847
  title: string;
848
+ es_title?: string | null;
849
+ de_title?: string | null;
850
+ fr_title?: string | null;
851
+ it_title?: string | null;
852
+ pt_title?: string | null;
853
+ ko_title?: string | null;
854
+ ja_title?: string | null;
855
+ tr_title?: string | null;
856
+ ru_title?: string | null;
857
+ zh_cn_title?: string | null;
858
+ zh_tw_title?: string | null;
839
859
  muscle_group: MuscleGroup;
840
860
  other_muscles: MuscleGroup[];
841
861
  exercise_type: ExerciseType;
@@ -1507,8 +1527,7 @@ type CommercialGym = {
1507
1527
  name: string;
1508
1528
  fullAddress: string;
1509
1529
  city: string;
1510
- latitude: number;
1511
- longitude: number;
1530
+ distanceM: number;
1512
1531
  };
1513
1532
  export type Gym = CommercialGym;
1514
1533
  export interface StripePrice {
@@ -1753,7 +1772,7 @@ export interface BackofficeAppLogIndexResponse {
1753
1772
  fileSizeBytes: number;
1754
1773
  }[];
1755
1774
  }
1756
- declare const _suggestedUserSources: readonly ["popular", "local", "contact", "mutual_follows", "follows_you", "featured", "hyper_local"];
1775
+ declare const _suggestedUserSources: readonly ["popular", "local", "contact", "mutual_follows", "follows_you", "featured", "hyper_local", "top_discovery"];
1757
1776
  export type SuggestedUserSource = Lookup<typeof _suggestedUserSources>;
1758
1777
  export declare const isSuggestedUserSource: (source: string) => source is SuggestedUserSource;
1759
1778
  export type SuggestedUserLabel = 'contact' | 'mutual_friends' | 'follows_you' | 'featured';
package/built/index.js CHANGED
@@ -41,7 +41,6 @@ __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);
45
44
  const isWeightUnit = (x) => {
46
45
  return x === 'kg' || x === 'lbs';
47
46
  };
@@ -357,6 +356,7 @@ const _suggestedUserSources = [
357
356
  'follows_you',
358
357
  'featured',
359
358
  'hyper_local',
359
+ 'top_discovery',
360
360
  ];
361
361
  const isSuggestedUserSource = (source) => (0, typeUtils_1.isInArray)(source, _suggestedUserSources);
362
362
  exports.isSuggestedUserSource = isSuggestedUserSource;
@@ -4,10 +4,7 @@ export type DeepReadonly<T> = {
4
4
  readonly [P in keyof T]: T[P] extends (...args: any[]) => any ? T[P] : DeepReadonly<T[P]>;
5
5
  };
6
6
  export declare const exhaustiveTypeCheck: (_: never) => undefined;
7
- export declare class ExhaustiveTypeException extends Error {
8
- constructor(type: never);
9
- }
10
- export declare const exhaustiveTypeException: (type: never) => ExhaustiveTypeException;
7
+ export declare const exhaustiveTypeException: (type: never) => Error;
11
8
  export type Some<T> = {
12
9
  hasValue: true;
13
10
  value: T;
@@ -1,21 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TODO = exports.typeSafeIndex = exports.parseJSON = exports.assertNonNullish = exports.dangerousUncheckedTypeCast = exports.exhaustiveTypeException = exports.ExhaustiveTypeException = exports.exhaustiveTypeCheck = exports.isInArray = void 0;
3
+ exports.TODO = exports.typeSafeIndex = exports.parseJSON = exports.assertNonNullish = exports.dangerousUncheckedTypeCast = exports.exhaustiveTypeException = exports.exhaustiveTypeCheck = exports.isInArray = void 0;
4
4
  exports.isNonNullish = isNonNullish;
5
5
  const isInArray = (value, array) => array.includes(value);
6
6
  exports.isInArray = isInArray;
7
7
  const exhaustiveTypeCheck = (_) => void _;
8
8
  exports.exhaustiveTypeCheck = exhaustiveTypeCheck;
9
- class ExhaustiveTypeException extends Error {
10
- constructor(type) {
11
- const message = `Assertion failed: "unreachable" code reached with unknown type: ${typeof type === 'object' ? JSON.stringify(type) : String(type)}`;
12
- super(message);
13
- this.name = 'ExhaustiveTypeException';
14
- this.message = message;
15
- }
16
- }
17
- exports.ExhaustiveTypeException = ExhaustiveTypeException;
18
- const exhaustiveTypeException = (type) => new ExhaustiveTypeException(type);
9
+ const exhaustiveTypeException = (type) => new Error(`Assertion failed: "unreachable" code reached with unknown type: ${typeof type === 'object' ? JSON.stringify(type) : String(type)}`);
19
10
  exports.exhaustiveTypeException = exhaustiveTypeException;
20
11
  /**
21
12
  * Please use this instead of using the 'as' keyword directly, so it's easier
@@ -1,5 +1,5 @@
1
- import { OwnedWorkout } from './workout';
2
- export * from './shared';
1
+ import { OwnedWorkout, OwnedWorkoutExercise, OwnedWorkoutExerciseSet } from './workout';
2
+ import { UserWorkout, UserWorkoutExercise, UserWorkoutExerciseSet } from './userWorkout';
3
3
  export * from './workout';
4
4
  export * from './userWorkout';
5
5
  export * from './publicWorkout';
@@ -11,3 +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>;
17
+ export declare function isOwnedWorkout(workout: OwnedWorkout | UserWorkout): workout is OwnedWorkout;
@@ -14,9 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./shared"), exports);
17
+ exports.isOwnedWorkout = isOwnedWorkout;
18
18
  __exportStar(require("./workout"), exports);
19
19
  __exportStar(require("./userWorkout"), exports);
20
20
  __exportStar(require("./publicWorkout"), exports);
21
21
  __exportStar(require("./normalizedWorkout"), exports);
22
22
  __exportStar(require("./postWorkoutRequest"), exports);
23
+ // Stub
24
+ function isOwnedWorkout(workout) {
25
+ void workout;
26
+ return true;
27
+ }
@@ -1,5 +1,4 @@
1
- import { DistanceUnit, ExerciseType, MuscleGroup, RPE, SetPersonalRecordType, SetType, WeightUnit } from '..';
2
- import { LocalizedExerciseTitles } from './shared';
1
+ import { DistanceUnit, Equipment, ExerciseType, MuscleGroup, RPE, SetPersonalRecordType, SetType, WeightUnit } from '..';
3
2
  export declare const isPublicWorkout: (x: any) => x is PublicWorkout;
4
3
  export interface PublicWorkout {
5
4
  type: 'public';
@@ -22,16 +21,29 @@ export interface PublicWorkout {
22
21
  distance_unit: DistanceUnit;
23
22
  estimated_volume_kg: number;
24
23
  }
25
- export interface PublicWorkoutExercise extends LocalizedExerciseTitles {
24
+ export interface PublicWorkoutExercise {
26
25
  id: string;
27
26
  exercise_template_id: string;
28
27
  title: string;
28
+ es_title?: string | null;
29
+ de_title?: string | null;
30
+ fr_title?: string | null;
31
+ it_title?: string | null;
32
+ pt_title?: string | null;
33
+ ko_title?: string | null;
34
+ ja_title?: string | null;
35
+ tr_title?: string | null;
36
+ ru_title?: string | null;
37
+ zh_cn_title?: string | null;
38
+ zh_tw_title?: string | null;
29
39
  superset_id: number | null;
30
40
  rest_seconds: number | null;
31
41
  notes: string;
42
+ priority: number;
32
43
  muscle_group: MuscleGroup;
33
44
  other_muscles: MuscleGroup[];
34
45
  exercise_type: ExerciseType;
46
+ equipment_category: Equipment;
35
47
  url?: string;
36
48
  media_type?: string;
37
49
  custom_exercise_image_url?: string | null;
@@ -1,5 +1,4 @@
1
- import { ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
2
- import { LocalizedExerciseTitles } from './shared';
1
+ import { Equipment, ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
3
2
  export interface UserWorkout {
4
3
  id: string;
5
4
  short_id: string | null;
@@ -7,9 +6,13 @@ export interface UserWorkout {
7
6
  name: string;
8
7
  description?: string;
9
8
  like_count: number;
9
+ /** @deprecated 2.3.4 */
10
+ like_images: string[];
10
11
  preview_workout_likes: PreviewWorkoutLike[];
11
12
  comment_count: number;
12
13
  comments: WorkoutComment[];
14
+ /** @deprecated 1.28.13 */
15
+ image_urls?: string[];
13
16
  media: WorkoutMedia[];
14
17
  is_liked_by_user: boolean;
15
18
  start_time: number;
@@ -22,6 +25,7 @@ export interface UserWorkout {
22
25
  apple_watch: boolean;
23
26
  wearos_watch: boolean;
24
27
  verified: boolean;
28
+ created_at: string;
25
29
  updated_at: string;
26
30
  nth_workout: number;
27
31
  /**
@@ -35,22 +39,45 @@ export interface UserWorkout {
35
39
  */
36
40
  include_warmup_sets: boolean;
37
41
  is_private: boolean;
42
+ /**
43
+ * If applicable, the user ID of the coach who logged this workout
44
+ */
45
+ logged_by_coach_id?: string;
38
46
  biometrics?: WorkoutBiometrics;
39
47
  is_biometrics_public: boolean;
48
+ trainer_program_id: string | undefined;
49
+ trainer_workout_template_id: string | undefined;
40
50
  gym: UserWorkoutGym | undefined;
41
- is_home_gym: boolean;
42
51
  }
43
- export interface UserWorkoutExercise extends LocalizedExerciseTitles {
52
+ export interface UserWorkoutExercise {
44
53
  id: string;
45
54
  exercise_template_id: string;
46
55
  title: string;
56
+ es_title?: string | null;
57
+ de_title?: string | null;
58
+ fr_title?: string | null;
59
+ it_title?: string | null;
60
+ pt_title?: string | null;
61
+ ko_title?: string | null;
62
+ ja_title?: string | null;
63
+ tr_title?: string | null;
64
+ ru_title?: string | null;
65
+ zh_cn_title?: string | null;
66
+ zh_tw_title?: string | null;
47
67
  superset_id: number | null;
48
68
  rest_seconds: number | null;
49
69
  notes: string;
70
+ priority: number;
50
71
  muscle_group: MuscleGroup;
51
72
  other_muscles: MuscleGroup[];
52
73
  exercise_type: ExerciseType;
74
+ equipment_category: Equipment;
75
+ url?: string;
76
+ media_type?: string;
77
+ custom_exercise_image_url?: string | null;
53
78
  thumbnail_url?: string | null;
79
+ manual_tag?: string;
80
+ aka?: string;
54
81
  /**
55
82
  * for exercises with two dumbbells
56
83
  *
@@ -76,6 +103,16 @@ export interface UserWorkoutExerciseSet {
76
103
  duration_seconds?: number | null;
77
104
  custom_metric?: number | null;
78
105
  rpe?: RPE | null;
106
+ /**
107
+ * @deprecated 1.29.17 -
108
+ * we can only set this to `best_weight`, `best_reps`, `best_duration` or
109
+ * `best_distance`. sending anything else would cause older clients to crash.
110
+ * newer clients will ignore this field and use the `prs` field instead.
111
+ */
112
+ personalRecords?: Array<{
113
+ type: 'best_weight' | 'best_reps' | 'best_duration' | 'best_distance';
114
+ value: number;
115
+ }>;
79
116
  prs: {
80
117
  type: SetPersonalRecordType;
81
118
  value: number;
@@ -1,5 +1,4 @@
1
- import { ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
2
- import { LocalizedExerciseTitles } from './shared';
1
+ import { Equipment, ExerciseType, MuscleGroup, PreviewWorkoutLike, RPE, SetPersonalRecordType, SetType, WorkoutBiometrics, WorkoutComment, WorkoutMedia } from '..';
3
2
  export interface OwnedWorkout {
4
3
  id: string;
5
4
  short_id: string | null;
@@ -7,9 +6,13 @@ export interface OwnedWorkout {
7
6
  name: string;
8
7
  description?: string;
9
8
  like_count: number;
9
+ /** @deprecated 2.3.4 */
10
+ like_images: string[];
10
11
  preview_workout_likes: PreviewWorkoutLike[];
11
12
  comment_count: number;
12
13
  comments: WorkoutComment[];
14
+ /** @deprecated 1.28.13 */
15
+ image_urls?: string[];
13
16
  media: WorkoutMedia[];
14
17
  is_liked_by_user: boolean;
15
18
  start_time: number;
@@ -25,27 +28,60 @@ export interface OwnedWorkout {
25
28
  created_at: string;
26
29
  updated_at: string;
27
30
  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;
28
41
  is_private: boolean;
42
+ /**
43
+ * If applicable, the user ID of the coach who logged this workout
44
+ */
45
+ logged_by_coach_id?: string;
29
46
  biometrics?: WorkoutBiometrics;
30
47
  is_biometrics_public: boolean;
48
+ trainer_program_id: string | undefined;
31
49
  trainer_workout_template_id: string | undefined;
32
50
  gym_id: string | undefined;
33
51
  is_home_gym: boolean;
34
52
  }
35
53
  export interface TrainerWorkout extends OwnedWorkout {
36
- trainer_workout_template_id: string;
54
+ trainer_program_id: string;
37
55
  }
38
- export interface OwnedWorkoutExercise extends LocalizedExerciseTitles {
56
+ export interface OwnedWorkoutExercise {
39
57
  id: string;
40
58
  exercise_template_id: string;
41
59
  title: string;
60
+ es_title?: string | null;
61
+ de_title?: string | null;
62
+ fr_title?: string | null;
63
+ it_title?: string | null;
64
+ pt_title?: string | null;
65
+ ko_title?: string | null;
66
+ ja_title?: string | null;
67
+ tr_title?: string | null;
68
+ ru_title?: string | null;
69
+ zh_cn_title?: string | null;
70
+ zh_tw_title?: string | null;
42
71
  superset_id: number | null;
43
72
  rest_seconds: number | null;
44
73
  notes: string;
74
+ priority: number;
45
75
  muscle_group: MuscleGroup;
46
76
  other_muscles: MuscleGroup[];
47
77
  exercise_type: ExerciseType;
78
+ equipment_category: Equipment;
79
+ url?: string;
80
+ media_type?: string;
81
+ custom_exercise_image_url?: string | null;
48
82
  thumbnail_url?: string | null;
83
+ manual_tag?: string;
84
+ aka?: string;
49
85
  /**
50
86
  * for exercises with two dumbbells
51
87
  *
@@ -71,6 +107,16 @@ export interface OwnedWorkoutExerciseSet {
71
107
  duration_seconds?: number | null;
72
108
  custom_metric?: number | null;
73
109
  rpe?: RPE | null;
110
+ /**
111
+ * @deprecated 1.29.17 -
112
+ * we can only set this to `best_weight`, `best_reps`, `best_duration` or
113
+ * `best_distance`. sending anything else would cause older clients to crash.
114
+ * newer clients will ignore this field and use the `prs` field instead.
115
+ */
116
+ personalRecords?: Array<{
117
+ type: 'best_weight' | 'best_reps' | 'best_duration' | 'best_distance';
118
+ value: number;
119
+ }>;
74
120
  prs: {
75
121
  type: SetPersonalRecordType;
76
122
  value: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hevy-shared",
3
- "version": "1.0.1060",
3
+ "version": "1.0.1062",
4
4
  "description": "",
5
5
  "main": "built/index.js",
6
6
  "types": "built/index.d.ts",
@@ -1 +0,0 @@
1
- export declare const distanceMBetween: (lat1: number, lon1: number, lat2: number, lon2: number) => number;
@@ -1,15 +0,0 @@
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;
@@ -1 +0,0 @@
1
- export {};
@@ -1,25 +0,0 @@
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
- });
@@ -1,13 +0,0 @@
1
- export interface LocalizedExerciseTitles {
2
- es_title?: string | null;
3
- de_title?: string | null;
4
- fr_title?: string | null;
5
- it_title?: string | null;
6
- pt_title?: string | null;
7
- ko_title?: string | null;
8
- ja_title?: string | null;
9
- tr_title?: string | null;
10
- ru_title?: string | null;
11
- zh_cn_title?: string | null;
12
- zh_tw_title?: string | null;
13
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });