@futdevpro/fsm-dynamo 1.9.9 → 1.9.12

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.
Files changed (173) hide show
  1. package/.github/workflows/main.yml +196 -0
  2. package/HOWTO.md +15 -15
  3. package/README.md +17 -17
  4. package/build/_collections/constants/country-divisions.const.d.ts +1 -1
  5. package/build/_collections/constants/country-divisions.const.d.ts.map +1 -1
  6. package/build/_collections/constants/country-divisions.const.js +2 -2
  7. package/build/_collections/constants/country-divisions.const.js.map +1 -1
  8. package/build/_collections/constants/courtry-isos.const.d.ts +1 -1
  9. package/build/_collections/constants/courtry-isos.const.d.ts.map +1 -1
  10. package/build/_collections/constants/courtry-isos.const.js +2 -2
  11. package/build/_collections/constants/courtry-isos.const.js.map +1 -1
  12. package/build/_collections/constants/error-defaults.const.d.ts +1 -1
  13. package/build/_collections/constants/error-defaults.const.d.ts.map +1 -1
  14. package/build/_collections/constants/module-settings/usage-module-settings.const.js +1 -1
  15. package/build/_collections/constants/pipe-transforms.const.js +12 -12
  16. package/build/_collections/constants/pipe-transforms.const.js.map +1 -1
  17. package/build/_collections/utils/pipe-transforms/division-pipe.util.js +1 -1
  18. package/build/_collections/utils/pipe-transforms/division-pipe.util.js.map +1 -1
  19. package/build/_collections/utils/pipe-transforms/list-pipe.util.d.ts.map +1 -1
  20. package/build/_collections/utils/pipe-transforms/list-pipe.util.js.map +1 -1
  21. package/build/_collections/utils/pipe-transforms/range-pipe.util.d.ts +2 -2
  22. package/build/_collections/utils/pipe-transforms/range-pipe.util.d.ts.map +1 -1
  23. package/build/_collections/utils/pipe-transforms/range-pipe.util.js +11 -11
  24. package/build/_collections/utils/pipe-transforms/range-pipe.util.js.map +1 -1
  25. package/build/_collections/utils/regions.util.d.ts.map +1 -1
  26. package/build/_collections/utils/regions.util.js +3 -0
  27. package/build/_collections/utils/regions.util.js.map +1 -1
  28. package/build/_enums/range-pipe-setting.enum.d.ts +1 -1
  29. package/build/_enums/range-pipe-setting.enum.d.ts.map +1 -1
  30. package/build/_enums/range-pipe-setting.enum.js +12 -12
  31. package/build/_enums/range-pipe-setting.enum.js.map +1 -1
  32. package/build/_models/control-models/error.control-model.js +1 -1
  33. package/build/_models/control-models/error.control-model.js.map +1 -1
  34. package/build/_models/control-models/error.control-model.spec.js +25 -6
  35. package/build/_models/control-models/error.control-model.spec.js.map +1 -1
  36. package/build/_models/interfaces/index.d.ts +3 -0
  37. package/build/_models/interfaces/index.d.ts.map +1 -1
  38. package/build/_models/interfaces/index.js +3 -0
  39. package/build/_models/interfaces/index.js.map +1 -1
  40. package/build/_models/interfaces/pipe-transforms.interface.d.ts +2 -2
  41. package/build/_models/interfaces/pipe-transforms.interface.d.ts.map +1 -1
  42. package/futdevpro-fsm-dynamo-01.09.12.tgz +0 -0
  43. package/nodemon.json +11 -11
  44. package/package.json +151 -151
  45. package/src/_collections/assets/location/country-codes-ISO-3166.json +3239 -3239
  46. package/src/_collections/assets/location/country-divisions-ISO-3166-all-list.json +19035 -19035
  47. package/src/_collections/assets/location/country-divisions-ISO-3166.json +4993 -4993
  48. package/src/_collections/assets/location/country-phone-codes.json +1203 -1203
  49. package/src/_collections/constants/country-divisions.const.ts +9 -9
  50. package/src/_collections/constants/courtry-isos.const.ts +8 -8
  51. package/src/_collections/constants/error-defaults.const.ts +11 -11
  52. package/src/_collections/constants/index.ts +15 -15
  53. package/src/_collections/constants/module-settings/custom-data-module-settings.const.ts +15 -15
  54. package/src/_collections/constants/module-settings/index.ts +8 -8
  55. package/src/_collections/constants/module-settings/test-module-settings.const.ts +19 -19
  56. package/src/_collections/constants/module-settings/usage-module-settings.const.ts +19 -19
  57. package/src/_collections/constants/pipe-transforms.const.ts +35 -35
  58. package/src/_collections/constants/times.const.ts +8 -8
  59. package/src/_collections/index.ts +6 -6
  60. package/src/_collections/utils/array.util.spec.ts +39 -39
  61. package/src/_collections/utils/array.util.ts +137 -137
  62. package/src/_collections/utils/index.ts +18 -18
  63. package/src/_collections/utils/location.util.ts +55 -55
  64. package/src/_collections/utils/log.util.ts +239 -239
  65. package/src/_collections/utils/math/box-bounds.util.ts +85 -85
  66. package/src/_collections/utils/math/index.ts +5 -5
  67. package/src/_collections/utils/math/math.util.ts +53 -53
  68. package/src/_collections/utils/math/random.util.ts +80 -80
  69. package/src/_collections/utils/math/trigonometry.util.ts +73 -73
  70. package/src/_collections/utils/math/vector2.util.ts +197 -197
  71. package/src/_collections/utils/pipe-transforms/country-pipe.util.ts +18 -18
  72. package/src/_collections/utils/pipe-transforms/custom-pipe.util.ts +9 -9
  73. package/src/_collections/utils/pipe-transforms/division-pipe.util.ts +20 -20
  74. package/src/_collections/utils/pipe-transforms/index.ts +15 -15
  75. package/src/_collections/utils/pipe-transforms/list-pipe.util.ts +10 -14
  76. package/src/_collections/utils/pipe-transforms/multi-pipe-pipe.util.ts +160 -160
  77. package/src/_collections/utils/pipe-transforms/obj-key-pipe.util.ts +9 -9
  78. package/src/_collections/utils/pipe-transforms/range-pipe.util.ts +94 -94
  79. package/src/_collections/utils/pipe-transforms/region-pipe.util.ts +18 -18
  80. package/src/_collections/utils/pipe-transforms/replace-pipe.util.ts +11 -11
  81. package/src/_collections/utils/pipe-transforms/slider-pipe.util.ts +20 -20
  82. package/src/_collections/utils/pipe-transforms/smart-replace-pipe.util.ts +71 -71
  83. package/src/_collections/utils/regex/index.ts +4 -4
  84. package/src/_collections/utils/regex/password-regex.util.ts +52 -52
  85. package/src/_collections/utils/regex/regex.util.ts +6 -6
  86. package/src/_collections/utils/regex/username-regex.util.ts +33 -33
  87. package/src/_collections/utils/regions.util.ts +100 -97
  88. package/src/_collections/utils/round-list.util.ts +44 -44
  89. package/src/_collections/utils/shared.static-service.ts +177 -177
  90. package/src/_collections/utils/time.util.spec.ts +50 -50
  91. package/src/_collections/utils/time.util.ts +219 -219
  92. package/src/_collections/utils/type-cloning-facility.util.ts +121 -121
  93. package/src/_collections/utils/utilities.util.ts +130 -130
  94. package/src/_enums/basic-property-type.enum.ts +9 -9
  95. package/src/_enums/data-model-type.enum.ts +13 -13
  96. package/src/_enums/day-of-week.enum.ts +28 -28
  97. package/src/_enums/error-level.enum.ts +17 -17
  98. package/src/_enums/index.ts +16 -16
  99. package/src/_enums/location/index.ts +3 -3
  100. package/src/_enums/location/region.enum.ts +9 -9
  101. package/src/_enums/location/sub-region.enum.ts +26 -26
  102. package/src/_enums/location/subdivision-region-type.enum.ts +44 -44
  103. package/src/_enums/log-style.enum.ts +30 -30
  104. package/src/_enums/month.enum.ts +16 -16
  105. package/src/_enums/pipe.enum.ts +45 -45
  106. package/src/_enums/range-pipe-setting.enum.ts +11 -11
  107. package/src/_enums/time/day-of-week.enum.ts +28 -28
  108. package/src/_enums/time/index.ts +3 -3
  109. package/src/_enums/time/month.enum.ts +16 -16
  110. package/src/_enums/time/relative-date.enum.ts +13 -13
  111. package/src/_models/control-models/daily-usage-data.control-model.ts +21 -21
  112. package/src/_models/control-models/data-model-params.control-model.ts +39 -39
  113. package/src/_models/control-models/data-property-params.control-model.ts +106 -106
  114. package/src/_models/control-models/error.control-model.spec.ts +753 -716
  115. package/src/_models/control-models/error.control-model.ts +722 -722
  116. package/src/_models/control-models/index.ts +10 -10
  117. package/src/_models/control-models/poll.control-model.ts +113 -113
  118. package/src/_models/control-models/range-value.control-model.ts +142 -142
  119. package/src/_models/control-models/usage-action.control-model.ts +15 -15
  120. package/src/_models/control-models/usage-data.control-model.ts +20 -20
  121. package/src/_models/data-models/custom-data.data-model.ts +28 -28
  122. package/src/_models/data-models/index.ts +5 -5
  123. package/src/_models/data-models/metadata.data-model.ts +83 -83
  124. package/src/_models/data-models/usage-session.data-model.ts +53 -53
  125. package/src/_models/index.ts +12 -12
  126. package/src/_models/interfaces/error-defaults.interface.ts +11 -11
  127. package/src/_models/interfaces/index.ts +11 -8
  128. package/src/_models/interfaces/location/country-division.interface.ts +7 -7
  129. package/src/_models/interfaces/location/country-iso.interface.ts +21 -21
  130. package/src/_models/interfaces/location/country-phone-code.interface.ts +7 -7
  131. package/src/_models/interfaces/location/division-collection.interface.ts +10 -10
  132. package/src/_models/interfaces/location/division-region-data.interface.ts +8 -8
  133. package/src/_models/interfaces/location/geo-ip-location.interface.ts +26 -26
  134. package/src/_models/interfaces/location/index.ts +10 -10
  135. package/src/_models/interfaces/location/location-coordinates.interface.ts +5 -5
  136. package/src/_models/interfaces/multi-pipe-settings.type.ts +7 -7
  137. package/src/_models/interfaces/paged.interface.ts +11 -11
  138. package/src/_models/interfaces/pipe-transforms.interface.ts +29 -29
  139. package/src/_models/interfaces/random-weight.interface.ts +7 -7
  140. package/src/_models/interfaces/route-settings.interface.ts +11 -11
  141. package/src/_modules/collections.index.ts +2 -2
  142. package/src/_modules/constants.index.ts +2 -2
  143. package/src/_modules/custom-data-module.index.ts +6 -6
  144. package/src/_modules/data-modules.index.ts +9 -9
  145. package/src/_modules/enums.index.ts +2 -2
  146. package/src/_modules/error-module.index.ts +8 -8
  147. package/src/_modules/location.index.ts +15 -15
  148. package/src/_modules/models.index.ts +2 -2
  149. package/src/_modules/shared-service.index.ts +9 -9
  150. package/src/_modules/test-module.index.ts +5 -5
  151. package/src/_modules/usage-module.index.ts +10 -10
  152. package/tsconfig.json +29 -29
  153. package/tslint.json +153 -153
  154. package/build/_enums/region.enum.d.ts +0 -8
  155. package/build/_enums/region.enum.d.ts.map +0 -1
  156. package/build/_enums/region.enum.js +0 -12
  157. package/build/_enums/region.enum.js.map +0 -1
  158. package/build/_enums/relative-date.enum.d.ts +0 -9
  159. package/build/_enums/relative-date.enum.d.ts.map +0 -1
  160. package/build/_enums/relative-date.enum.js +0 -13
  161. package/build/_enums/relative-date.enum.js.map +0 -1
  162. package/build/_enums/sub-region.enum.d.ts +0 -20
  163. package/build/_enums/sub-region.enum.d.ts.map +0 -1
  164. package/build/_enums/sub-region.enum.js +0 -24
  165. package/build/_enums/sub-region.enum.js.map +0 -1
  166. package/build/_enums/subdivision-region-type.enum.d.ts +0 -41
  167. package/build/_enums/subdivision-region-type.enum.d.ts.map +0 -1
  168. package/build/_enums/subdivision-region-type.enum.js +0 -46
  169. package/build/_enums/subdivision-region-type.enum.js.map +0 -1
  170. package/src/_enums/region.enum.ts +0 -9
  171. package/src/_enums/relative-date.enum.ts +0 -13
  172. package/src/_enums/sub-region.enum.ts +0 -26
  173. package/src/_enums/subdivision-region-type.enum.ts +0 -44
@@ -1,137 +1,137 @@
1
-
2
- import { DynamoFM_Paged } from '../../_models/interfaces/paged.interface';
3
-
4
- export type DFM_Array = DynamoFM_Array;
5
- export class DynamoFM_Array {
6
-
7
- static async asyncForEach<T>(
8
- list: T[],
9
- func: (element: T, index?: number, array?: T[]) => Promise<void>
10
- ): Promise<void> {
11
- for (let i = 0; i < list.length; i++) {
12
- await func(list[i], i, list);
13
- }
14
- }
15
-
16
- static async asyncMap<T, R>(
17
- list: T[],
18
- mapFunc: (element: T, index?: number, array?: T[]) => Promise<R>
19
- ): Promise<R[]> {
20
- const resultList: R[] = [];
21
-
22
- for (let i = 0; i < list.length; i++) {
23
- resultList.push(await mapFunc(list[i], i, list));
24
- }
25
-
26
- return resultList;
27
- }
28
-
29
- static last<T>(array: T[]): T {
30
- return array.length ? array[array.length - 1] : null;
31
- }
32
-
33
- static remove<T>(array: T[], element: T): T[] {
34
- const index = array.indexOf(element);
35
-
36
- if (-1 < index) {
37
- array.splice(index, 1);
38
- }
39
-
40
- return array;
41
- }
42
-
43
- static findNRemove<T>(
44
- array: T[],
45
- func: (element: T, index?: number, array?: T[]) => boolean
46
- ): T[] {
47
- const index = array.findIndex(func);
48
-
49
- if (-1 < index) {
50
- array.splice(index, 1);
51
- }
52
-
53
- return array;
54
- }
55
-
56
- static shuffle<T>(array: T[]): T[] {
57
- let currentIndex = array.length;
58
- let randomIndex: number;
59
-
60
- while (0 < currentIndex) {
61
- randomIndex = Math.floor(Math.random() * currentIndex);
62
- currentIndex--;
63
-
64
- [ array[currentIndex], array[randomIndex] ] = [ array[randomIndex], array[currentIndex] ];
65
- }
66
-
67
- return array;
68
- }
69
-
70
- static page<T>(array: T[], pageIndex: number, pageSize: number): T[] {
71
- return array.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);
72
- }
73
-
74
- static paged<T>(array: T[], pageIndex: number, pageSize: number): DynamoFM_Paged<T> {
75
- return {
76
- pageIndex,
77
- pageSize,
78
- total: array.length,
79
- totalPageCount: Math.ceil(array.length / pageSize),
80
- items: this.page(array, pageIndex, pageSize)
81
- };
82
- }
83
-
84
- static swap<T>(array: T[], indexA: number, indexB: number): T[] {
85
- [ array[indexA], array[indexB] ] = [ array[indexB], array[indexA] ];
86
-
87
- return array;
88
- }
89
-
90
- /**
91
- * returns the opposite index as they circular
92
- * so after the last index, the first comes next
93
- * an array that has 8 elements, the opposite of 7 is 3
94
- * */
95
- static getRoundListOppositeIndex(
96
- arrayLength: number,
97
- index: number,
98
- roundUp: boolean = false
99
- ): number {
100
- const oppositeIndex = index + (
101
- roundUp ?
102
- Math.ceil(arrayLength / 2) :
103
- Math.floor(arrayLength / 2)
104
- );
105
-
106
- if (arrayLength <= oppositeIndex) {
107
- return oppositeIndex - arrayLength;
108
- } else {
109
- return oppositeIndex;
110
- }
111
- }
112
-
113
- getRoundListOutboundIndex<T>(array: T[], index: number): T {
114
- try {
115
- while (array.length <= index) {
116
- index -= array.length;
117
- }
118
-
119
- while (index < 0) {
120
- index += array.length;
121
- }
122
-
123
- return array[index];
124
- } catch (error) {
125
- console.error(
126
- 'DynamoFM_Array.getRoundListOutboundIndex error:', error,
127
- '\narray:', array,
128
- '\nindex:', index
129
- );
130
-
131
- return null;
132
- }
133
- }
134
-
135
- }
136
-
137
-
1
+
2
+ import { DynamoFM_Paged } from '../../_models/interfaces/paged.interface';
3
+
4
+ export type DFM_Array = DynamoFM_Array;
5
+ export class DynamoFM_Array {
6
+
7
+ static async asyncForEach<T>(
8
+ list: T[],
9
+ func: (element: T, index?: number, array?: T[]) => Promise<void>
10
+ ): Promise<void> {
11
+ for (let i = 0; i < list.length; i++) {
12
+ await func(list[i], i, list);
13
+ }
14
+ }
15
+
16
+ static async asyncMap<T, R>(
17
+ list: T[],
18
+ mapFunc: (element: T, index?: number, array?: T[]) => Promise<R>
19
+ ): Promise<R[]> {
20
+ const resultList: R[] = [];
21
+
22
+ for (let i = 0; i < list.length; i++) {
23
+ resultList.push(await mapFunc(list[i], i, list));
24
+ }
25
+
26
+ return resultList;
27
+ }
28
+
29
+ static last<T>(array: T[]): T {
30
+ return array.length ? array[array.length - 1] : null;
31
+ }
32
+
33
+ static remove<T>(array: T[], element: T): T[] {
34
+ const index = array.indexOf(element);
35
+
36
+ if (-1 < index) {
37
+ array.splice(index, 1);
38
+ }
39
+
40
+ return array;
41
+ }
42
+
43
+ static findNRemove<T>(
44
+ array: T[],
45
+ func: (element: T, index?: number, array?: T[]) => boolean
46
+ ): T[] {
47
+ const index = array.findIndex(func);
48
+
49
+ if (-1 < index) {
50
+ array.splice(index, 1);
51
+ }
52
+
53
+ return array;
54
+ }
55
+
56
+ static shuffle<T>(array: T[]): T[] {
57
+ let currentIndex = array.length;
58
+ let randomIndex: number;
59
+
60
+ while (0 < currentIndex) {
61
+ randomIndex = Math.floor(Math.random() * currentIndex);
62
+ currentIndex--;
63
+
64
+ [ array[currentIndex], array[randomIndex] ] = [ array[randomIndex], array[currentIndex] ];
65
+ }
66
+
67
+ return array;
68
+ }
69
+
70
+ static page<T>(array: T[], pageIndex: number, pageSize: number): T[] {
71
+ return array.slice(pageIndex * pageSize, (pageIndex + 1) * pageSize);
72
+ }
73
+
74
+ static paged<T>(array: T[], pageIndex: number, pageSize: number): DynamoFM_Paged<T> {
75
+ return {
76
+ pageIndex,
77
+ pageSize,
78
+ total: array.length,
79
+ totalPageCount: Math.ceil(array.length / pageSize),
80
+ items: this.page(array, pageIndex, pageSize)
81
+ };
82
+ }
83
+
84
+ static swap<T>(array: T[], indexA: number, indexB: number): T[] {
85
+ [ array[indexA], array[indexB] ] = [ array[indexB], array[indexA] ];
86
+
87
+ return array;
88
+ }
89
+
90
+ /**
91
+ * returns the opposite index as they circular
92
+ * so after the last index, the first comes next
93
+ * an array that has 8 elements, the opposite of 7 is 3
94
+ * */
95
+ static getRoundListOppositeIndex(
96
+ arrayLength: number,
97
+ index: number,
98
+ roundUp: boolean = false
99
+ ): number {
100
+ const oppositeIndex = index + (
101
+ roundUp ?
102
+ Math.ceil(arrayLength / 2) :
103
+ Math.floor(arrayLength / 2)
104
+ );
105
+
106
+ if (arrayLength <= oppositeIndex) {
107
+ return oppositeIndex - arrayLength;
108
+ } else {
109
+ return oppositeIndex;
110
+ }
111
+ }
112
+
113
+ getRoundListOutboundIndex<T>(array: T[], index: number): T {
114
+ try {
115
+ while (array.length <= index) {
116
+ index -= array.length;
117
+ }
118
+
119
+ while (index < 0) {
120
+ index += array.length;
121
+ }
122
+
123
+ return array[index];
124
+ } catch (error) {
125
+ console.error(
126
+ 'DynamoFM_Array.getRoundListOutboundIndex error:', error,
127
+ '\narray:', array,
128
+ '\nindex:', index
129
+ );
130
+
131
+ return null;
132
+ }
133
+ }
134
+
135
+ }
136
+
137
+
@@ -1,18 +1,18 @@
1
-
2
- export * from './math';
3
- export * from './pipe-transforms';
4
- export * from './regex';
5
-
6
-
7
- // TOOLS
8
- export * from './array.util';
9
- export * from './location.util';
10
- export * from './log.util';
11
- export * from './regions.util';
12
- export * from './round-list.util';
13
- export * from './shared.static-service';
14
- export * from './time.util';
15
- export * from './type-cloning-facility.util';
16
- export * from './utilities.util';
17
-
18
-
1
+
2
+ export * from './math';
3
+ export * from './pipe-transforms';
4
+ export * from './regex';
5
+
6
+
7
+ // TOOLS
8
+ export * from './array.util';
9
+ export * from './location.util';
10
+ export * from './log.util';
11
+ export * from './regions.util';
12
+ export * from './round-list.util';
13
+ export * from './shared.static-service';
14
+ export * from './time.util';
15
+ export * from './type-cloning-facility.util';
16
+ export * from './utilities.util';
17
+
18
+
@@ -1,55 +1,55 @@
1
-
2
- import { DynamoFM_Error } from '../../_models/control-models/error.control-model';
3
- import { DynamoFM_Trigonometry } from './math/trigonometry.util';
4
- import { DynamoFM_LocationCoordinates } from '../../_models/interfaces/location/location-coordinates.interface';
5
-
6
- export type DFM_Location = DynamoFM_Location;
7
- export class DynamoFM_Location {
8
-
9
- static getDistanceInKilometres(
10
- from: DynamoFM_LocationCoordinates,
11
- to: DynamoFM_LocationCoordinates
12
- ): number {
13
-
14
- const R = 6371; // kilometres
15
- const φ1 = DynamoFM_Trigonometry.angleToRadians(from.latitude);
16
- const φ2 = DynamoFM_Trigonometry.angleToRadians(to.latitude);
17
- const Δφ = DynamoFM_Trigonometry.angleToRadians(to.latitude - from.latitude);
18
- const Δλ = DynamoFM_Trigonometry.angleToRadians(to.longitude - from.longitude);
19
-
20
- const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
21
- Math.cos(φ1) * Math.cos(φ2) *
22
- Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
23
- const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
24
-
25
- return R * c;
26
- }
27
-
28
- static getLocationDegByKilometers(
29
- latiOrLong: 'latitude' | 'longitude',
30
- distanceInKm: number,
31
- latitude?: number
32
- ): number {
33
- if (latiOrLong === 'latitude') {
34
- return distanceInKm / 110.574;
35
- } else {
36
- if (latitude) {
37
- return distanceInKm / (Math.cos(DynamoFM_Trigonometry.angleToRadians(latitude)) * 111.320);
38
- } else {
39
- throw new DynamoFM_Error({
40
- status: 417,
41
- errorCode: 'FSM-DSS-505',
42
- addECToUserMsg: true,
43
- message:
44
- `When using getLocationDegByKilometers for longitude, you need to give latitude! ` +
45
- `(latiOrLong: ${latiOrLong}, distanceInKm: ${distanceInKm}, latitude: ${latitude})`,
46
- userMessage:
47
- `We encountered an uncought BackEnd Error, ` +
48
- `please contact the responsible development team.`
49
- });
50
- }
51
- }
52
- }
53
- }
54
-
55
-
1
+
2
+ import { DynamoFM_Error } from '../../_models/control-models/error.control-model';
3
+ import { DynamoFM_Trigonometry } from './math/trigonometry.util';
4
+ import { DynamoFM_LocationCoordinates } from '../../_models/interfaces/location/location-coordinates.interface';
5
+
6
+ export type DFM_Location = DynamoFM_Location;
7
+ export class DynamoFM_Location {
8
+
9
+ static getDistanceInKilometres(
10
+ from: DynamoFM_LocationCoordinates,
11
+ to: DynamoFM_LocationCoordinates
12
+ ): number {
13
+
14
+ const R = 6371; // kilometres
15
+ const φ1 = DynamoFM_Trigonometry.angleToRadians(from.latitude);
16
+ const φ2 = DynamoFM_Trigonometry.angleToRadians(to.latitude);
17
+ const Δφ = DynamoFM_Trigonometry.angleToRadians(to.latitude - from.latitude);
18
+ const Δλ = DynamoFM_Trigonometry.angleToRadians(to.longitude - from.longitude);
19
+
20
+ const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
21
+ Math.cos(φ1) * Math.cos(φ2) *
22
+ Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
23
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
24
+
25
+ return R * c;
26
+ }
27
+
28
+ static getLocationDegByKilometers(
29
+ latiOrLong: 'latitude' | 'longitude',
30
+ distanceInKm: number,
31
+ latitude?: number
32
+ ): number {
33
+ if (latiOrLong === 'latitude') {
34
+ return distanceInKm / 110.574;
35
+ } else {
36
+ if (latitude) {
37
+ return distanceInKm / (Math.cos(DynamoFM_Trigonometry.angleToRadians(latitude)) * 111.320);
38
+ } else {
39
+ throw new DynamoFM_Error({
40
+ status: 417,
41
+ errorCode: 'FSM-DSS-505',
42
+ addECToUserMsg: true,
43
+ message:
44
+ `When using getLocationDegByKilometers for longitude, you need to give latitude! ` +
45
+ `(latiOrLong: ${latiOrLong}, distanceInKm: ${distanceInKm}, latitude: ${latitude})`,
46
+ userMessage:
47
+ `We encountered an uncought BackEnd Error, ` +
48
+ `please contact the responsible development team.`
49
+ });
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+