@odynn/awayz-hotels 0.13.4 → 0.13.5

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.
@@ -12,7 +12,6 @@ export interface IHotelDetails {
12
12
  amount: number;
13
13
  };
14
14
  cashBookingOffers?: ICashBookingOffers;
15
- chainRating: number;
16
15
  city: string;
17
16
  cityCode: string;
18
17
  coordinates: ICoordinates;
@@ -61,6 +60,7 @@ export interface IHotelDetails {
61
60
  checkInInformation?: ICheckInInformation;
62
61
  checkinDate?: string;
63
62
  checkoutDate?: string;
63
+ starRating: number;
64
64
  }
65
65
  export interface IHotelPartner {
66
66
  bonus: number;
@@ -2,6 +2,12 @@ import { ITransferPartner } from '@type-op/shared';
2
2
  import { ICashBookingOffers, IHotelDetails, ILiveHotelCheck } from '../../components/HotelResult/HotelResult.types';
3
3
  import { IAmenity, IRate, IRoom } from '../booking/BookingService.types';
4
4
  import { ICashBookingOffersResponse, IHotelResultResponse, ILiveHotelCheckResponse, IRateResponse, IRoomResponse, ITransferPartnerResponse } from './HotelService.types';
5
+ /**
6
+ * Resolves hotel star rating.
7
+ * Prioritizes Duffel (cash booking offers) ratings,
8
+ * then falls back to scraped chain rating.
9
+ */
10
+ export declare const resolveHotelStarRating: (hotel: IHotelResultResponse) => number;
5
11
  /**
6
12
  * Map API rate response to IRate.
7
13
  */
@@ -1,66 +1,70 @@
1
- const n = (e) => {
1
+ const a = (e) => {
2
2
  if (e == null) return 0;
3
3
  if (typeof e == "number") return e;
4
4
  if (typeof e == "string") {
5
- const a = parseFloat(e);
6
- return isNaN(a) ? 0 : a;
5
+ const n = parseFloat(e);
6
+ return isNaN(n) ? 0 : n;
7
7
  }
8
8
  return 0;
9
9
  }, d = (e) => {
10
10
  if (e != null) {
11
11
  if (typeof e == "number") return e;
12
12
  if (typeof e == "string") {
13
- const a = parseFloat(e);
14
- return isNaN(a) ? void 0 : a;
13
+ const n = parseFloat(e);
14
+ return isNaN(n) ? void 0 : n;
15
15
  }
16
16
  }
17
17
  }, w = (e) => {
18
- var a;
18
+ var i;
19
+ const n = e.cash_booking_offers, t = (i = n == null ? void 0 : n.ratings) != null && i.length ? Math.max(...n.ratings.map((s) => s.value)) : void 0;
20
+ return (n == null ? void 0 : n.rating) ?? t ?? e.chain_rating ?? 0;
21
+ }, R = (e) => {
22
+ var n;
19
23
  return {
20
24
  publicCurrency: e.public_currency,
21
25
  dueAtAccommodationCurrency: e.due_at_accommodation_currency,
22
26
  dueAtAccommodationAmount: d(
23
27
  e.due_at_accommodation_amount
24
28
  ),
25
- quantityAvailable: n(e.quantity_available),
29
+ quantityAvailable: a(e.quantity_available),
26
30
  publicAmount: d(e.public_amount),
27
31
  dealTypes: e.deal_types ?? void 0,
28
- cancellationTimeline: ((a = e.cancellation_timeline) == null ? void 0 : a.map((t) => ({
32
+ cancellationTimeline: ((n = e.cancellation_timeline) == null ? void 0 : n.map((t) => ({
29
33
  before: t.before,
30
34
  currency: t.currency,
31
- refundAmount: n(t.refund_amount)
35
+ refundAmount: a(t.refund_amount)
32
36
  }))) ?? [],
33
37
  boardType: e.board_type,
34
38
  supportedLoyaltyProgramme: e.supported_loyalty_programme ?? void 0,
35
39
  availablePaymentMethods: e.available_payment_methods ?? [],
36
- feeAmount: n(e.fee_amount),
40
+ feeAmount: a(e.fee_amount),
37
41
  taxCurrency: e.tax_currency,
38
42
  baseCurrency: e.base_currency,
39
- baseAmount: n(e.base_amount),
40
- taxAmount: n(e.tax_amount),
43
+ baseAmount: a(e.base_amount),
44
+ taxAmount: a(e.tax_amount),
41
45
  feeCurrency: e.fee_currency,
42
46
  totalCurrency: e.total_currency,
43
47
  paymentType: e.payment_type,
44
- totalAmount: n(e.total_amount),
48
+ totalAmount: a(e.total_amount),
45
49
  conditions: e.conditions ?? [],
46
50
  source: e.source,
47
51
  id: e.id
48
52
  };
49
53
  }, p = (e) => {
50
- var a, t, i, s;
54
+ var n, t, i, s;
51
55
  return {
52
56
  roomId: e.room_id,
53
- rates: ((a = e.rates) == null ? void 0 : a.map(w)) ?? [],
57
+ rates: ((n = e.rates) == null ? void 0 : n.map(R)) ?? [],
54
58
  roomTitle: e.room_title,
55
59
  roomType: e.room_type,
56
60
  roomCategory: e.room_category,
57
61
  roomDescription: e.room_description,
58
62
  roomImage: e.room_image,
59
- lowestPointsRate: n(e.lowest_points_rate),
60
- lowestAwardPointsRate: n(e.lowest_award_points_rate),
63
+ lowestPointsRate: a(e.lowest_points_rate),
64
+ lowestAwardPointsRate: a(e.lowest_award_points_rate),
61
65
  lowestCashRate: {
62
66
  currency: ((t = e.lowest_cash_rate) == null ? void 0 : t.currency) ?? "",
63
- cashAmount: n((i = e.lowest_cash_rate) == null ? void 0 : i.cash_amount)
67
+ cashAmount: a((i = e.lowest_cash_rate) == null ? void 0 : i.cash_amount)
64
68
  },
65
69
  roomRatePlans: ((s = e.room_rate_plans) == null ? void 0 : s.map((o) => {
66
70
  var _, m;
@@ -69,9 +73,9 @@ const n = (e) => {
69
73
  ratePlanName: o.rate_plan_name,
70
74
  ratePlanType: o.rate_plan_type,
71
75
  ratePlanCategory: o.rate_plan_category,
72
- ratePlanPoints: n(o.rate_plan_points),
76
+ ratePlanPoints: a(o.rate_plan_points),
73
77
  ratePlanCash: {
74
- cashAmount: n((_ = o.rate_plan_cash) == null ? void 0 : _.cash_amount),
78
+ cashAmount: a((_ = o.rate_plan_cash) == null ? void 0 : _.cash_amount),
75
79
  currency: ((m = o.rate_plan_cash) == null ? void 0 : m.currency) ?? ""
76
80
  }
77
81
  };
@@ -81,24 +85,24 @@ const n = (e) => {
81
85
  beds: e.beds
82
86
  };
83
87
  }, T = (e) => {
84
- var a, t, i, s, o, _, m, c, u, r, l, y, g, f, h, C, v, b, k, P;
88
+ var n, t, i, s, o, _, m, c, u, r, l, y, g, f, h, v, C, k, b, P;
85
89
  if (e)
86
90
  return {
87
91
  searchRoomRateId: e.search_room_rate_id,
88
92
  accommodationId: e.accommodation_id,
89
93
  matchedType: e.matched_type,
90
- rooms: ((a = e.rooms) == null ? void 0 : a.map(p)) ?? [],
94
+ rooms: ((n = e.rooms) == null ? void 0 : n.map(p)) ?? [],
91
95
  ratings: e.ratings ?? [],
92
- rating: n(e.rating),
93
- reviewScore: n(e.review_score),
96
+ rating: a(e.rating),
97
+ reviewScore: a(e.review_score),
94
98
  reviewCount: d(e.review_count),
95
99
  photos: e.photos ?? [],
96
100
  phoneNumber: e.phone_number ?? "",
97
101
  name: e.name ?? "",
98
102
  location: {
99
103
  geographicCoordinates: {
100
- latitude: n((i = (t = e.location) == null ? void 0 : t.geographic_coordinates) == null ? void 0 : i.latitude),
101
- longitude: n((o = (s = e.location) == null ? void 0 : s.geographic_coordinates) == null ? void 0 : o.longitude)
104
+ latitude: a((i = (t = e.location) == null ? void 0 : t.geographic_coordinates) == null ? void 0 : i.latitude),
105
+ longitude: a((o = (s = e.location) == null ? void 0 : s.geographic_coordinates) == null ? void 0 : o.longitude)
102
106
  },
103
107
  address: {
104
108
  region: ((m = (_ = e.location) == null ? void 0 : _.address) == null ? void 0 : m.region) ?? null,
@@ -112,15 +116,15 @@ const n = (e) => {
112
116
  email: e.email,
113
117
  description: e.description ?? "",
114
118
  checkInInformation: {
115
- checkInAfterTime: ((C = e.check_in_information) == null ? void 0 : C.check_in_after_time) ?? "",
116
- checkOutBeforeTime: ((v = e.check_in_information) == null ? void 0 : v.check_out_before_time) ?? "",
117
- checkInBeforeTime: ((b = e.check_in_information) == null ? void 0 : b.check_in_before_time) ?? ""
119
+ checkInAfterTime: ((v = e.check_in_information) == null ? void 0 : v.check_in_after_time) ?? "",
120
+ checkOutBeforeTime: ((C = e.check_in_information) == null ? void 0 : C.check_out_before_time) ?? "",
121
+ checkInBeforeTime: ((k = e.check_in_information) == null ? void 0 : k.check_in_before_time) ?? ""
118
122
  },
119
- matchedScore: n(e.matched_score),
123
+ matchedScore: a(e.matched_score),
120
124
  keyCollection: e.key_collection,
121
- cheapestRateTotalAmount: n(e.cheapest_rate_total_amount),
125
+ cheapestRateTotalAmount: a(e.cheapest_rate_total_amount),
122
126
  cheapestRateCurrency: e.cheapest_rate_currency ?? "",
123
- chain: { name: ((k = e.chain) == null ? void 0 : k.name) ?? "" },
127
+ chain: { name: ((b = e.chain) == null ? void 0 : b.name) ?? "" },
124
128
  brand: { name: ((P = e.brand) == null ? void 0 : P.name) ?? "" },
125
129
  supportedLoyaltyProgramme: e.supported_loyalty_programme,
126
130
  amenities: e.amenities ?? []
@@ -128,7 +132,7 @@ const n = (e) => {
128
132
  }, A = (e) => ({
129
133
  bonus: (e == null ? void 0 : e.bonus) ?? 0,
130
134
  stepThreshold: (e == null ? void 0 : e.step_threshold) ?? 0
131
- }), R = (e) => ({
135
+ }), N = (e) => ({
132
136
  program: e.program,
133
137
  ratio: e.ratio,
134
138
  bonus: e.bonus,
@@ -136,7 +140,7 @@ const n = (e) => {
136
140
  minimumTransfer: e.minimum_transfer,
137
141
  transferDenominator: e.transfer_denominator,
138
142
  stepBonus: A(e.step_bonus)
139
- }), N = (e) => {
143
+ }), I = (e) => {
140
144
  if (e)
141
145
  return {
142
146
  program: e.program,
@@ -149,7 +153,7 @@ const n = (e) => {
149
153
  valueCent: e.value_cent,
150
154
  logo: e.logo
151
155
  };
152
- }, I = (e) => {
156
+ }, L = (e) => {
153
157
  if (e)
154
158
  return {
155
159
  pointsAsCashRequired: e.points_as_cash_required,
@@ -157,9 +161,9 @@ const n = (e) => {
157
161
  totalPointsUsed: e.total_points_used,
158
162
  awardProgram: e.award_program
159
163
  };
160
- }, L = (e, a) => {
164
+ }, x = (e, n) => {
161
165
  var i, s, o, _, m, c, u;
162
- const t = a ?? ((r) => ({
166
+ const t = n ?? ((r) => ({
163
167
  description: r,
164
168
  type: r.toLowerCase().replace(/\s/g, "_")
165
169
  }));
@@ -174,14 +178,13 @@ const n = (e) => {
174
178
  bookingLinkPoints: e.booking_link_points,
175
179
  cashValue: {
176
180
  currency: ((s = e.cash_value) == null ? void 0 : s.currency) ?? "",
177
- amount: n((o = e.cash_value) == null ? void 0 : o.amount)
181
+ amount: a((o = e.cash_value) == null ? void 0 : o.amount)
178
182
  },
179
- chainRating: e.chain_rating,
180
183
  city: e.city,
181
184
  cityCode: e.city_code,
182
185
  coordinates: {
183
- latitude: n((_ = e.coordinates) == null ? void 0 : _.latitude),
184
- longitude: n((m = e.coordinates) == null ? void 0 : m.longitude)
186
+ latitude: a((_ = e.coordinates) == null ? void 0 : _.latitude),
187
+ longitude: a((m = e.coordinates) == null ? void 0 : m.longitude)
185
188
  },
186
189
  country: e.country,
187
190
  countryCode: e.country_code,
@@ -211,19 +214,20 @@ const n = (e) => {
211
214
  premiumPointsAvailable: e.premium_points_available,
212
215
  standardPointsAvailable: e.standard_points_available,
213
216
  liveScrapingCheckNeeded: e.live_scraping_check_needed,
214
- partners: ((u = e.partners) == null ? void 0 : u.map(R)) ?? [],
215
- hotelProgram: N(e.hotel_program),
217
+ partners: ((u = e.partners) == null ? void 0 : u.map(N)) ?? [],
218
+ hotelProgram: I(e.hotel_program),
216
219
  pointsProgramDisplay: e.points_program_display,
217
220
  bestValue: e.best_value,
218
- pointsAsCash: I(e.points_as_cash),
221
+ pointsAsCash: L(e.points_as_cash),
219
222
  cashBookingOffers: T(e.cash_booking_offers),
220
223
  distance: 0,
221
224
  // Calculated separately
222
- pointsCalculated: 0
225
+ pointsCalculated: 0,
223
226
  // Calculated separately
227
+ starRating: w(e)
224
228
  };
225
- }, x = (e) => {
226
- var a, t, i, s, o;
229
+ }, S = (e) => {
230
+ var n, t, i, s, o;
227
231
  return {
228
232
  hotelName: e.hotel_name,
229
233
  hotelNameKey: e.hotel_name_key,
@@ -232,24 +236,24 @@ const n = (e) => {
232
236
  state: e.state,
233
237
  hotelId: e.hotel_id,
234
238
  points: {
235
- pointsType: ((a = e.points) == null ? void 0 : a.points_type) ?? "",
236
- pointsValue: n((t = e.points) == null ? void 0 : t.points_value),
237
- awardPointsValue: n((i = e.points) == null ? void 0 : i.award_points_value),
239
+ pointsType: ((n = e.points) == null ? void 0 : n.points_type) ?? "",
240
+ pointsValue: a((t = e.points) == null ? void 0 : t.points_value),
241
+ awardPointsValue: a((i = e.points) == null ? void 0 : i.award_points_value),
238
242
  availability: ((s = e.points) == null ? void 0 : s.availability) ?? !1
239
243
  },
240
244
  rooms: ((o = e.rooms) == null ? void 0 : o.map(p)) ?? []
241
245
  };
242
246
  }, D = (e) => {
243
- var a, t;
247
+ var n, t;
244
248
  return {
245
249
  partnerProgram: e.partner_program,
246
- ratio: n(e.ratio),
247
- bonus: n(e.bonus),
248
- transferMinutes: n(e.transfer_minutes),
249
- minimumTransfer: n(e.minimum_transfer),
250
- transferDenominator: n(e.transfer_denominator),
250
+ ratio: a(e.ratio),
251
+ bonus: a(e.bonus),
252
+ transferMinutes: a(e.transfer_minutes),
253
+ minimumTransfer: a(e.minimum_transfer),
254
+ transferDenominator: a(e.transfer_denominator),
251
255
  stepBonus: {
252
- bonus: ((a = e.step_bonus) == null ? void 0 : a.bonus) ?? 0,
256
+ bonus: ((n = e.step_bonus) == null ? void 0 : n.bonus) ?? 0,
253
257
  stepThreshold: ((t = e.step_bonus) == null ? void 0 : t.step_threshold) ?? 0
254
258
  },
255
259
  steps: e.steps ?? [],
@@ -263,9 +267,10 @@ const n = (e) => {
263
267
  };
264
268
  export {
265
269
  T as mapCashBookingOffersResponse,
266
- L as mapHotelResponse,
267
- x as mapLiveHotelCheckResponse,
268
- w as mapRateResponse,
270
+ x as mapHotelResponse,
271
+ S as mapLiveHotelCheckResponse,
272
+ R as mapRateResponse,
269
273
  p as mapRoomResponse,
270
- D as mapTransferPartnerResponse
274
+ D as mapTransferPartnerResponse,
275
+ w as resolveHotelStarRating
271
276
  };
@@ -1,128 +1,127 @@
1
- import { HotelChains as f } from "../../definitions/HotelChains.js";
2
- var l = class m {
3
- static initParams(t, n) {
4
- return [t.replace(/\s+/g, "").toLowerCase(), n.replace(/\s+/g, "").toLowerCase()];
1
+ import { HotelChains as m } from "../../definitions/HotelChains.js";
2
+ var f = class l {
3
+ static initParams(e, n) {
4
+ return [e.replace(/\s+/g, "").toLowerCase(), n.replace(/\s+/g, "").toLowerCase()];
5
5
  }
6
- static checkThanosType(t) {
7
- if (typeof t != "string") throw new Error("first argument should be a string");
6
+ static checkThanosType(e) {
7
+ if (typeof e != "string") throw new Error("first argument should be a string");
8
8
  }
9
- static checkRivalType(t) {
10
- if (typeof t != "string") throw new Error("second argument should be a string");
9
+ static checkRivalType(e) {
10
+ if (typeof e != "string") throw new Error("second argument should be a string");
11
11
  }
12
- static checkAvengersType(t) {
13
- if (!Array.isArray(t)) throw new Error("second argument should be an array of strings");
14
- if (t.find((n) => typeof n != "string")) throw new Error("second argument should be an array of strings");
12
+ static checkAvengersType(e) {
13
+ if (!Array.isArray(e)) throw new Error("second argument should be an array of strings");
14
+ if (e.find((n) => typeof n != "string")) throw new Error("second argument should be an array of strings");
15
15
  }
16
- sortMatch(t, n) {
17
- return m.checkThanosType(t), m.checkAvengersType(n), n.map((o, s) => ({ member: o, index: s, rating: this.similarity(t, o) })).sort((o, s) => o.rating - s.rating);
16
+ sortMatch(e, n) {
17
+ return l.checkThanosType(e), l.checkAvengersType(n), n.map((s, o) => ({ member: s, index: o, rating: this.similarity(e, s) })).sort((s, o) => s.rating - o.rating);
18
18
  }
19
- }, g = class extends l {
20
- similarity(e, t) {
21
- l.checkThanosType(e), l.checkRivalType(t);
22
- let [n, o] = l.initParams(e, t), [s, a] = [n.length, o.length];
23
- if (!n.length && !o.length || n === o) return 1;
24
- if (s < 2 || a < 2) return 0;
19
+ }, g = class extends f {
20
+ similarity(t, e) {
21
+ f.checkThanosType(t), f.checkRivalType(e);
22
+ let [n, s] = f.initParams(t, e), [o, a] = [n.length, s.length];
23
+ if (!n.length && !s.length || n === s) return 1;
24
+ if (o < 2 || a < 2) return 0;
25
25
  let c = /* @__PURE__ */ new Map();
26
- for (let r = 0; r < s - 1; r++) {
26
+ for (let r = 0; r < o - 1; r++) {
27
27
  let i = n.slice(r, r + 2), h = c.has(i) ? c.get(i) + 1 : 1;
28
28
  c.set(i, h);
29
29
  }
30
30
  let u = 0;
31
31
  for (let r = 0; r < a - 1; r++) {
32
- let i = o.slice(r, r + 2), h = c.has(i) ? c.get(i) : 0;
32
+ let i = s.slice(r, r + 2), h = c.has(i) ? c.get(i) : 0;
33
33
  h > 0 && (c.set(i, h - 1), ++u);
34
34
  }
35
- return 2 * u / (s + a - 2);
35
+ return 2 * u / (o + a - 2);
36
36
  }
37
- distance(e, t) {
38
- return 1 - this.similarity(e, t);
37
+ distance(t, e) {
38
+ return 1 - this.similarity(t, e);
39
39
  }
40
- }, y = new g(), w = { diceCoefficient: y }, d = w;
41
- const N = (e, t, n, o) => {
42
- const s = (p) => p * Math.PI / 180, c = s(Number(e)), u = s(Number(n)), r = s(Number(n) - Number(e)), i = s(Number(o) - Number(t)), h = Math.sin(r / 2) ** 2 + Math.cos(c) * Math.cos(u) * Math.sin(i / 2) ** 2;
40
+ }, y = new g(), w = { diceCoefficient: y }, b = w;
41
+ const v = (t, e, n, s) => {
42
+ const o = (p) => p * Math.PI / 180, c = o(Number(t)), u = o(Number(n)), r = o(Number(n) - Number(t)), i = o(Number(s) - Number(e)), h = Math.sin(r / 2) ** 2 + Math.cos(c) * Math.cos(u) * Math.sin(i / 2) ** 2;
43
43
  return 6371 * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));
44
- }, T = (e) => {
45
- var o;
46
- const t = e.cashBookingOffers, n = (o = t == null ? void 0 : t.ratings) != null && o.length ? Math.max(...t.ratings.map((s) => s.value)) : void 0;
44
+ }, T = (t) => {
45
+ const e = t.cashBookingOffers;
47
46
  return {
48
- starRating: (t == null ? void 0 : t.rating) ?? n ?? e.chainRating ?? 0,
49
- userRating: (t == null ? void 0 : t.reviewScore) ?? (e.reviewRating ? Number(e.reviewRating) * 2 : ""),
50
- reviewCount: (t == null ? void 0 : t.reviewCount) ?? e.reviewCount
47
+ starRating: t.starRating,
48
+ userRating: (e == null ? void 0 : e.reviewScore) ?? (t.reviewRating ? Number(t.reviewRating) * 2 : ""),
49
+ reviewCount: (e == null ? void 0 : e.reviewCount) ?? t.reviewCount
51
50
  };
52
- }, k = (e) => {
53
- const t = typeof e == "number" ? e : Number(e);
54
- if (isNaN(t)) return String(e);
55
- const n = t.toFixed(1);
56
- return n.endsWith(".0") ? String(Math.trunc(t)) : n;
57
- }, M = (e) => {
58
- if (!e) return null;
59
- const t = typeof e == "number" ? e : Number(e);
60
- if (isNaN(t)) return String(e);
61
- if (t >= 1e3) {
62
- const n = t / 1e3, o = n.toFixed(1);
63
- return `${o.endsWith(".0") ? n.toFixed(0) : o}k`;
51
+ }, k = (t) => {
52
+ const e = typeof t == "number" ? t : Number(t);
53
+ if (isNaN(e)) return String(t);
54
+ const n = e.toFixed(1);
55
+ return n.endsWith(".0") ? String(Math.trunc(e)) : n;
56
+ }, M = (t) => {
57
+ if (!t) return null;
58
+ const e = typeof t == "number" ? t : Number(t);
59
+ if (isNaN(e)) return String(t);
60
+ if (e >= 1e3) {
61
+ const n = e / 1e3, s = n.toFixed(1);
62
+ return `${s.endsWith(".0") ? n.toFixed(0) : s}k`;
64
63
  }
65
- return String(t);
66
- }, x = (e) => {
64
+ return String(e);
65
+ }, C = (t) => {
67
66
  var h;
68
- const t = e.freeNight || e.nthNightFree !== 0 ? e.awardPoints : e.points, n = {
67
+ const e = t.freeNight || t.nthNightFree !== 0 ? t.awardPoints : t.points, n = {
69
68
  type: "",
70
69
  value: -1
71
- }, o = typeof e.cashValue.amount == "number" ? e.cashValue.amount : parseFloat(e.cashValue.amount), s = { ...n }, { cashBookingOffers: a } = e, c = (a == null ? void 0 : a.cheapestRateCurrency) || e.cashValue.currency, u = a == null ? void 0 : a.cheapestRateTotalAmount, r = u && u > 0 ? u : o, i = f.isHotelChain(e.hotelGroup);
72
- return e.bestValue === "cash" ? (n.type = "cash", n.value = r, s.type = "points", s.value = t || -1) : e.bestValue === "points" && (n.type = "points", n.value = t || -1, s.type = "cash", s.value = r), {
73
- transferPartners: ((h = e.partners) == null ? void 0 : h.map((p) => ({
70
+ }, s = typeof t.cashValue.amount == "number" ? t.cashValue.amount : parseFloat(t.cashValue.amount), o = { ...n }, { cashBookingOffers: a } = t, c = (a == null ? void 0 : a.cheapestRateCurrency) || t.cashValue.currency, u = a == null ? void 0 : a.cheapestRateTotalAmount, r = u && u > 0 ? u : s, i = m.isHotelChain(t.hotelGroup);
71
+ return t.bestValue === "cash" ? (n.type = "cash", n.value = r, o.type = "points", o.value = e || -1) : t.bestValue === "points" && (n.type = "points", n.value = e || -1, o.type = "cash", o.value = r), {
72
+ transferPartners: ((h = t.partners) == null ? void 0 : h.map((p) => ({
74
73
  ...p,
75
- value: t ? Math.ceil(t * p.ratio) : -1
74
+ value: e ? Math.ceil(e * p.ratio) : -1
76
75
  }))) || [],
77
76
  bestBookingOption: n,
78
- alternateBookingOption: s,
79
- points: t || -1,
80
- hasPoints: typeof t == "number" && t > 0,
77
+ alternateBookingOption: o,
78
+ points: e || -1,
79
+ hasPoints: typeof e == "number" && e > 0,
81
80
  cashAmount: r,
82
81
  cashCurrency: c,
83
82
  duffelCashBookingOffers: a,
84
83
  isHotelChain: i
85
84
  };
86
- }, C = (e) => (e == null ? void 0 : e.hotelGroup) === f.IHG ? e.freeNight || e.nthNightFree ? e.awardPoints : e.points : e.awardPoints;
87
- function L(e) {
88
- return !e || !Array.isArray(e) || e.length === 0 ? [] : e.map((t) => typeof t == "string" ? t : t && typeof t == "object" && "url" in t ? t.url : "").filter((t) => t !== "");
85
+ }, L = (t) => (t == null ? void 0 : t.hotelGroup) === m.IHG ? t.freeNight || t.nthNightFree ? t.awardPoints : t.points : t.awardPoints;
86
+ function x(t) {
87
+ return !t || !Array.isArray(t) || t.length === 0 ? [] : t.map((e) => typeof e == "string" ? e : e && typeof e == "object" && "url" in e ? e.url : "").filter((e) => e !== "");
89
88
  }
90
- const R = async (e, t, n) => {
91
- const o = (s) => new Promise((a, c) => {
89
+ const A = async (t, e, n) => {
90
+ const s = (o) => new Promise((a, c) => {
92
91
  const u = new Image();
93
- u.src = s, u.onload = () => a(s), u.onerror = () => c();
92
+ u.src = o, u.onload = () => a(o), u.onerror = () => c();
94
93
  });
95
- return e && await o(e).catch(() => !1) ? e : t && await o(t).catch(() => !1) ? t : n;
96
- }, v = (e, t) => {
97
- const n = e.toLowerCase().trim(), o = t.toLowerCase().trim();
98
- return d.diceCoefficient.similarity(n, o) * 100;
99
- }, A = (e) => (e == null ? void 0 : e.startsWith("duff_")) ?? !1, P = (e, t, n, o) => {
100
- const s = e.toLowerCase().trim(), a = o.map((r) => {
94
+ return t && await s(t).catch(() => !1) ? t : e && await s(e).catch(() => !1) ? e : n;
95
+ }, d = (t, e) => {
96
+ const n = t.toLowerCase().trim(), s = e.toLowerCase().trim();
97
+ return b.diceCoefficient.similarity(n, s) * 100;
98
+ }, P = (t) => (t == null ? void 0 : t.startsWith("duff_")) ?? !1, R = (t, e, n, s) => {
99
+ const o = t.toLowerCase().trim(), a = s.map((r) => {
101
100
  const i = r.description.toLowerCase().trim();
102
101
  return {
103
102
  ...r,
104
- score: v(e, r.description),
103
+ score: d(t, r.description),
105
104
  startsWithText: i
106
105
  };
107
106
  }), c = a.filter(
108
- (r) => r.startsWithText.startsWith(s) && r.score >= t
107
+ (r) => r.startsWithText.startsWith(o) && r.score >= e
109
108
  ), u = a.filter(
110
- (r) => r.score < t
109
+ (r) => r.score < e
111
110
  );
112
111
  return c.sort((r, i) => i.score - r.score), u.sort(
113
112
  (r, i) => n[r.searchType] - n[i.searchType]
114
113
  ), [...c, ...u];
115
114
  };
116
115
  export {
117
- v as calculateStringSimilarity,
116
+ d as calculateStringSimilarity,
118
117
  k as formatRating,
119
118
  M as formatReviewCount,
120
- x as getBookingOptions,
121
- N as getHaversineDistanceKm,
122
- L as getHotelImageUrls,
119
+ C as getBookingOptions,
120
+ v as getHaversineDistanceKm,
121
+ x as getHotelImageUrls,
123
122
  T as getHotelRatingInfo,
124
- C as getPointsValue,
125
- A as isDuffelHotelId,
126
- R as loadImageWithFallback,
127
- P as sortLocationResults
123
+ L as getPointsValue,
124
+ P as isDuffelHotelId,
125
+ A as loadImageWithFallback,
126
+ R as sortLocationResults
128
127
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@odynn/awayz-hotels",
3
3
  "private": false,
4
- "version": "0.13.4",
4
+ "version": "0.13.5",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"