@odynn/awayz-hotels 0.13.3 → 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
  */
@@ -84,6 +84,7 @@ export interface IHotelResultResponse {
84
84
  best_value: string;
85
85
  points_as_cash?: IPointsAsCashResponse;
86
86
  cash_booking_offers?: ICashBookingOffersResponse;
87
+ chain_rating: number;
87
88
  }
88
89
  interface IHotelPartnerResponse {
89
90
  program: string;
@@ -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,15 +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: 0,
180
- // Not in API response
181
183
  city: e.city,
182
184
  cityCode: e.city_code,
183
185
  coordinates: {
184
- latitude: n((_ = e.coordinates) == null ? void 0 : _.latitude),
185
- 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)
186
188
  },
187
189
  country: e.country,
188
190
  countryCode: e.country_code,
@@ -212,19 +214,20 @@ const n = (e) => {
212
214
  premiumPointsAvailable: e.premium_points_available,
213
215
  standardPointsAvailable: e.standard_points_available,
214
216
  liveScrapingCheckNeeded: e.live_scraping_check_needed,
215
- partners: ((u = e.partners) == null ? void 0 : u.map(R)) ?? [],
216
- hotelProgram: N(e.hotel_program),
217
+ partners: ((u = e.partners) == null ? void 0 : u.map(N)) ?? [],
218
+ hotelProgram: I(e.hotel_program),
217
219
  pointsProgramDisplay: e.points_program_display,
218
220
  bestValue: e.best_value,
219
- pointsAsCash: I(e.points_as_cash),
221
+ pointsAsCash: L(e.points_as_cash),
220
222
  cashBookingOffers: T(e.cash_booking_offers),
221
223
  distance: 0,
222
224
  // Calculated separately
223
- pointsCalculated: 0
225
+ pointsCalculated: 0,
224
226
  // Calculated separately
227
+ starRating: w(e)
225
228
  };
226
- }, x = (e) => {
227
- var a, t, i, s, o;
229
+ }, S = (e) => {
230
+ var n, t, i, s, o;
228
231
  return {
229
232
  hotelName: e.hotel_name,
230
233
  hotelNameKey: e.hotel_name_key,
@@ -233,24 +236,24 @@ const n = (e) => {
233
236
  state: e.state,
234
237
  hotelId: e.hotel_id,
235
238
  points: {
236
- pointsType: ((a = e.points) == null ? void 0 : a.points_type) ?? "",
237
- pointsValue: n((t = e.points) == null ? void 0 : t.points_value),
238
- 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),
239
242
  availability: ((s = e.points) == null ? void 0 : s.availability) ?? !1
240
243
  },
241
244
  rooms: ((o = e.rooms) == null ? void 0 : o.map(p)) ?? []
242
245
  };
243
246
  }, D = (e) => {
244
- var a, t;
247
+ var n, t;
245
248
  return {
246
249
  partnerProgram: e.partner_program,
247
- ratio: n(e.ratio),
248
- bonus: n(e.bonus),
249
- transferMinutes: n(e.transfer_minutes),
250
- minimumTransfer: n(e.minimum_transfer),
251
- 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),
252
255
  stepBonus: {
253
- bonus: ((a = e.step_bonus) == null ? void 0 : a.bonus) ?? 0,
256
+ bonus: ((n = e.step_bonus) == null ? void 0 : n.bonus) ?? 0,
254
257
  stepThreshold: ((t = e.step_bonus) == null ? void 0 : t.step_threshold) ?? 0
255
258
  },
256
259
  steps: e.steps ?? [],
@@ -264,9 +267,10 @@ const n = (e) => {
264
267
  };
265
268
  export {
266
269
  T as mapCashBookingOffersResponse,
267
- L as mapHotelResponse,
268
- x as mapLiveHotelCheckResponse,
269
- w as mapRateResponse,
270
+ x as mapHotelResponse,
271
+ S as mapLiveHotelCheckResponse,
272
+ R as mapRateResponse,
270
273
  p as mapRoomResponse,
271
- D as mapTransferPartnerResponse
274
+ D as mapTransferPartnerResponse,
275
+ w as resolveHotelStarRating
272
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.3",
4
+ "version": "0.13.5",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"