@hyper.software/common-helpers 2.10.16 → 2.10.18

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.
@@ -66,30 +66,39 @@ describe('calculateDynamicPricing', function () {
66
66
  id: 'comp1',
67
67
  holidays: [],
68
68
  };
69
- var getRoomsList = function (count) { return Array(count).fill({ roomTypeId: 'roomType1' }); };
70
- var getRoomTypeAvailability = function (date, available) {
69
+ var mockGetRoomTypesAvailability = function (available, date) {
71
70
  var _a;
72
- return (_a = {}, _a[date] = available, _a);
71
+ return jest.fn().mockResolvedValue({
72
+ roomType1: {
73
+ availability: (_a = {},
74
+ _a[date] = available,
75
+ _a),
76
+ },
77
+ });
78
+ };
79
+ var mockGetRoomsByCompanyId = function (count) {
80
+ return jest.fn().mockResolvedValue({
81
+ list: Array(count).fill({ roomTypeId: 'roomType1' }),
82
+ });
73
83
  };
74
84
  it('returns base price when dynamic pricing is inactive', function () { return __awaiter(void 0, void 0, void 0, function () {
75
- var dateStr, result;
85
+ var result;
76
86
  var _a, _b;
77
87
  return __generator(this, function (_c) {
78
88
  switch (_c.label) {
79
- case 0:
80
- dateStr = today.format('YYYY-MM-DD');
81
- return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
82
- currentPricing: (_a = {}, _a[dateStr] = 100, _a),
83
- dynamicPricing: baseDynamicPricing({ isActive: false }),
84
- existingBasePriceMap: (_b = {}, _b[dateStr] = 90, _b),
85
- company: mockCompany,
86
- roomTypeId: 'roomType1',
87
- roomTypeAvailability: getRoomTypeAvailability(dateStr, 5),
88
- roomsList: getRoomsList(10),
89
- })];
89
+ case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
90
+ currentPricing: (_a = {}, _a[today.format('YYYY-MM-DD')] = 100, _a),
91
+ dynamicPricing: baseDynamicPricing({ isActive: false }),
92
+ existingBasePriceMap: (_b = {}, _b[today.format('YYYY-MM-DD')] = 90, _b),
93
+ company: mockCompany,
94
+ roomTypeId: 'roomType1',
95
+ companyId: 'comp1',
96
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(5, today.format('YYYY-MM-DD')),
97
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
98
+ })];
90
99
  case 1:
91
100
  result = _c.sent();
92
- expect(result.updatedPricing[dateStr]).toBe(90);
101
+ expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(90);
93
102
  return [2 /*return*/];
94
103
  }
95
104
  });
@@ -114,8 +123,9 @@ describe('calculateDynamicPricing', function () {
114
123
  existingBasePriceMap: {},
115
124
  company: companyWithHoliday,
116
125
  roomTypeId: 'roomType1',
117
- roomTypeAvailability: getRoomTypeAvailability(holidayDate, 1),
118
- roomsList: getRoomsList(10),
126
+ companyId: 'comp1',
127
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(1, holidayDate),
128
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
119
129
  })];
120
130
  case 1:
121
131
  result = _b.sent();
@@ -125,24 +135,23 @@ describe('calculateDynamicPricing', function () {
125
135
  });
126
136
  }); });
127
137
  it('uses fallback pricing if base price exists and dynamic pricing is off', function () { return __awaiter(void 0, void 0, void 0, function () {
128
- var dateStr, result;
138
+ var result;
129
139
  var _a, _b;
130
140
  return __generator(this, function (_c) {
131
141
  switch (_c.label) {
132
- case 0:
133
- dateStr = today.format('YYYY-MM-DD');
134
- return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
135
- currentPricing: (_a = {}, _a[dateStr] = 100, _a),
136
- dynamicPricing: baseDynamicPricing({ isActive: false }),
137
- existingBasePriceMap: (_b = {}, _b[dateStr] = 95, _b),
138
- company: mockCompany,
139
- roomTypeId: 'roomType1',
140
- roomTypeAvailability: getRoomTypeAvailability(dateStr, 3),
141
- roomsList: getRoomsList(10),
142
- })];
142
+ case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
143
+ currentPricing: (_a = {}, _a[today.format('YYYY-MM-DD')] = 100, _a),
144
+ dynamicPricing: baseDynamicPricing({ isActive: false }),
145
+ existingBasePriceMap: (_b = {}, _b[today.format('YYYY-MM-DD')] = 95, _b),
146
+ company: mockCompany,
147
+ roomTypeId: 'roomType1',
148
+ companyId: 'comp1',
149
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(3, today.format('YYYY-MM-DD')),
150
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
151
+ })];
143
152
  case 1:
144
153
  result = _c.sent();
145
- expect(result.updatedPricing[dateStr]).toBe(95);
154
+ expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(95);
146
155
  return [2 /*return*/];
147
156
  }
148
157
  });
@@ -150,21 +159,21 @@ describe('calculateDynamicPricing', function () {
150
159
  it('keeps price near base when availability is 100% and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
151
160
  var result, price;
152
161
  var _a;
153
- var _b;
154
- return __generator(this, function (_c) {
155
- switch (_c.label) {
162
+ return __generator(this, function (_b) {
163
+ switch (_b.label) {
156
164
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
157
165
  currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
158
166
  dynamicPricing: baseDynamicPricing(),
159
167
  existingBasePriceMap: {},
160
168
  company: mockCompany,
161
169
  roomTypeId: 'roomType1',
162
- roomTypeAvailability: getRoomTypeAvailability(farDate, 10),
163
- roomsList: getRoomsList(10),
170
+ companyId: 'comp1',
171
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(10, farDate),
172
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
164
173
  })];
165
174
  case 1:
166
- result = _c.sent();
167
- price = (_b = result.updatedPricing[farDate]) !== null && _b !== void 0 ? _b : basePrice;
175
+ result = _b.sent();
176
+ price = result.updatedPricing[farDate];
168
177
  expect(price).toBeGreaterThanOrEqual(basePrice);
169
178
  expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.1));
170
179
  return [2 /*return*/];
@@ -174,21 +183,21 @@ describe('calculateDynamicPricing', function () {
174
183
  it('increases price moderately with 50% availability and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
175
184
  var result, price;
176
185
  var _a;
177
- var _b;
178
- return __generator(this, function (_c) {
179
- switch (_c.label) {
186
+ return __generator(this, function (_b) {
187
+ switch (_b.label) {
180
188
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
181
189
  currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
182
190
  dynamicPricing: baseDynamicPricing(),
183
191
  existingBasePriceMap: {},
184
192
  company: mockCompany,
185
193
  roomTypeId: 'roomType1',
186
- roomTypeAvailability: getRoomTypeAvailability(farDate, 5),
187
- roomsList: getRoomsList(10),
194
+ companyId: 'comp1',
195
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(5, farDate),
196
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
188
197
  })];
189
198
  case 1:
190
- result = _c.sent();
191
- price = (_b = result.updatedPricing[farDate]) !== null && _b !== void 0 ? _b : basePrice;
199
+ result = _b.sent();
200
+ price = result.updatedPricing[farDate];
192
201
  expect(price).toBeGreaterThanOrEqual(basePrice);
193
202
  expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
194
203
  return [2 /*return*/];
@@ -198,21 +207,21 @@ describe('calculateDynamicPricing', function () {
198
207
  it('maximizes price with 1 room left and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
199
208
  var result, price;
200
209
  var _a;
201
- var _b;
202
- return __generator(this, function (_c) {
203
- switch (_c.label) {
210
+ return __generator(this, function (_b) {
211
+ switch (_b.label) {
204
212
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
205
213
  currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
206
214
  dynamicPricing: baseDynamicPricing(),
207
215
  existingBasePriceMap: {},
208
216
  company: mockCompany,
209
217
  roomTypeId: 'roomType1',
210
- roomTypeAvailability: getRoomTypeAvailability(farDate, 1),
211
- roomsList: getRoomsList(50),
218
+ companyId: 'comp1',
219
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(1, farDate),
220
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(50),
212
221
  })];
213
222
  case 1:
214
- result = _c.sent();
215
- price = (_b = result.updatedPricing[farDate]) !== null && _b !== void 0 ? _b : basePrice;
223
+ result = _b.sent();
224
+ price = result.updatedPricing[farDate];
216
225
  expect(price).toBeGreaterThanOrEqual(basePrice);
217
226
  expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.5));
218
227
  return [2 /*return*/];
@@ -222,21 +231,21 @@ describe('calculateDynamicPricing', function () {
222
231
  it('slightly increases price with 100% availability and date is near', function () { return __awaiter(void 0, void 0, void 0, function () {
223
232
  var result, price;
224
233
  var _a;
225
- var _b;
226
- return __generator(this, function (_c) {
227
- switch (_c.label) {
234
+ return __generator(this, function (_b) {
235
+ switch (_b.label) {
228
236
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
229
237
  currentPricing: (_a = {}, _a[nearDate] = basePrice, _a),
230
238
  dynamicPricing: baseDynamicPricing(),
231
239
  existingBasePriceMap: {},
232
240
  company: mockCompany,
233
241
  roomTypeId: 'roomType1',
234
- roomTypeAvailability: getRoomTypeAvailability(nearDate, 10),
235
- roomsList: getRoomsList(10),
242
+ companyId: 'comp1',
243
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(10, nearDate),
244
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
236
245
  })];
237
246
  case 1:
238
- result = _c.sent();
239
- price = (_b = result.updatedPricing[nearDate]) !== null && _b !== void 0 ? _b : basePrice;
247
+ result = _b.sent();
248
+ price = result.updatedPricing[nearDate];
240
249
  expect(price).toBeGreaterThanOrEqual(basePrice);
241
250
  expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.2));
242
251
  return [2 /*return*/];
@@ -246,21 +255,21 @@ describe('calculateDynamicPricing', function () {
246
255
  it('strongly increases price with 50% availability and date is near', function () { return __awaiter(void 0, void 0, void 0, function () {
247
256
  var result, price;
248
257
  var _a;
249
- var _b;
250
- return __generator(this, function (_c) {
251
- switch (_c.label) {
258
+ return __generator(this, function (_b) {
259
+ switch (_b.label) {
252
260
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
253
261
  currentPricing: (_a = {}, _a[nearDate] = basePrice, _a),
254
262
  dynamicPricing: baseDynamicPricing(),
255
263
  existingBasePriceMap: {},
256
264
  company: mockCompany,
257
265
  roomTypeId: 'roomType1',
258
- roomTypeAvailability: getRoomTypeAvailability(nearDate, 5),
259
- roomsList: getRoomsList(10),
266
+ companyId: 'comp1',
267
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(5, nearDate),
268
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
260
269
  })];
261
270
  case 1:
262
- result = _c.sent();
263
- price = (_b = result.updatedPricing[nearDate]) !== null && _b !== void 0 ? _b : basePrice;
271
+ result = _b.sent();
272
+ price = result.updatedPricing[nearDate];
264
273
  expect(price).toBeGreaterThanOrEqual(basePrice);
265
274
  expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
266
275
  return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bookingService.calculateDynamic.test.js","sourceRoot":"","sources":["../../../../src/services/bookingService/__tests__/bookingService.calculateDynamic.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,17 @@
1
1
  import { ICompany, IRoomTypePricePlanPricingInformation, IDynamicPricing } from '../../interfaces';
2
- export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, existingBasePriceMap, company, roomTypeAvailability, roomsList, roomTypeId, }: {
2
+ export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, existingBasePriceMap, company, roomTypeId, companyId, getRoomTypesAvailability, getRoomsByCompanyId, }: {
3
3
  currentPricing: IRoomTypePricePlanPricingInformation;
4
4
  dynamicPricing: IDynamicPricing;
5
5
  existingBasePriceMap: Record<string, number>;
6
6
  company: ICompany;
7
- roomTypeAvailability: Record<string, number>;
8
- roomsList: any[];
9
7
  roomTypeId: string;
8
+ companyId: string;
9
+ getRoomTypesAvailability: (companyId: string, roomTypeIds: string[], options: {
10
+ period: string[];
11
+ }) => Promise<any>;
12
+ getRoomsByCompanyId: (companyId: string) => Promise<{
13
+ list: any[];
14
+ }>;
10
15
  }) => Promise<{
11
16
  updatedPricing: IRoomTypePricePlanPricingInformation;
12
17
  updatedBasePriceMap: Record<string, number>;
@@ -54,67 +54,68 @@ exports.getDynamicMultiplier = exports.calculateDynamicPricing = void 0;
54
54
  var moment_1 = __importDefault(require("moment"));
55
55
  var dateService_1 = require("../dateService/dateService");
56
56
  var calculateDynamicPricing = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
57
- var basePriceMap, resultPricing, period, totalRooms, holidayDates, _i, period_1, dateStr, date, current, isAffectedHoliday, availableRooms, availabilityRatio, leadTimeDays, isNearHoliday, isNearFuture, base, occupancyMultiplier, leadTimeMultiplier, combinedMultiplier, rawPrice, cappedPrice, base, fallback;
58
- var _c, _d, _e, _f;
59
- var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, existingBasePriceMap = _b.existingBasePriceMap, company = _b.company, roomTypeAvailability = _b.roomTypeAvailability, roomsList = _b.roomsList, roomTypeId = _b.roomTypeId;
60
- return __generator(this, function (_g) {
61
- basePriceMap = __assign(__assign({}, dynamicPricing.basePrice), existingBasePriceMap);
62
- resultPricing = {};
63
- period = Object.keys(currentPricing);
64
- totalRooms = roomsList.filter(function (r) { return (r === null || r === void 0 ? void 0 : r.roomTypeId) === roomTypeId; }).length || 1;
65
- holidayDates = (company.holidays || [])
66
- .filter(function (h) { return h.enableDynamicPricing; })
67
- .flatMap(function (h) { return [
68
- (0, moment_1.default)(h.date).subtract(1, 'day').format('YYYY-MM-DD'),
69
- (0, moment_1.default)(h.date).format('YYYY-MM-DD'),
70
- (0, moment_1.default)(h.date).add(1, 'day').format('YYYY-MM-DD'),
71
- ]; });
72
- for (_i = 0, period_1 = period; _i < period_1.length; _i++) {
73
- dateStr = period_1[_i];
74
- date = (0, moment_1.default)((0, dateService_1.normalizeDate)(dateStr));
75
- if (!date.isValid())
76
- continue;
77
- current = currentPricing[dateStr];
78
- isAffectedHoliday = holidayDates.includes(dateStr);
79
- availableRooms = (_c = roomTypeAvailability[dateStr]) !== null && _c !== void 0 ? _c : 0;
80
- availabilityRatio = availableRooms / totalRooms;
81
- leadTimeDays = date.diff((0, moment_1.default)(), 'days');
82
- isNearHoliday = leadTimeDays <= 7;
83
- isNearFuture = leadTimeDays < 30;
84
- // Always preserve manual price if it's already in currentPricing
85
- if (typeof current === 'number') {
86
- resultPricing[dateStr] = current;
87
- basePriceMap[dateStr] = (_d = basePriceMap[dateStr]) !== null && _d !== void 0 ? _d : current;
88
- continue;
89
- }
90
- // Otherwise (e.g., undefined or invalid), try to calculate fallback price
91
- if (dynamicPricing.isActive && isAffectedHoliday) {
92
- base = (_e = basePriceMap[dateStr]) !== null && _e !== void 0 ? _e : current;
93
- occupancyMultiplier = (0, exports.getDynamicMultiplier)({ availabilityRatio: availabilityRatio, isNearFuture: isNearFuture });
94
- leadTimeMultiplier = leadTimeDays >= 60 ? 1.0 : 1 + (60 - leadTimeDays) * 0.005;
95
- combinedMultiplier = occupancyMultiplier * leadTimeMultiplier;
96
- rawPrice = base * combinedMultiplier;
97
- cappedPrice = rawPrice;
98
- if (isNearHoliday && availableRooms <= 1) {
99
- cappedPrice = Math.min(rawPrice, base + 70);
100
- }
101
- else {
102
- cappedPrice = Math.min(rawPrice, base * 1.45);
57
+ var basePriceMap, resultPricing, period, _c, roomTypesAvailability, roomsData, roomTypeAvailability, totalRooms, holidayDates, _i, period_1, dateStr, date, current, isAffectedHoliday, base, availableRooms, availabilityRatio, leadTimeDays, isNearHoliday, isNearFuture, occupancyMultiplier, leadTimeMultiplier, rawPrice, cappedPrice, expected;
58
+ var _d, _e, _f, _g, _h;
59
+ var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, existingBasePriceMap = _b.existingBasePriceMap, company = _b.company, roomTypeId = _b.roomTypeId, companyId = _b.companyId, getRoomTypesAvailability = _b.getRoomTypesAvailability, getRoomsByCompanyId = _b.getRoomsByCompanyId;
60
+ return __generator(this, function (_j) {
61
+ switch (_j.label) {
62
+ case 0:
63
+ basePriceMap = __assign(__assign({}, dynamicPricing.basePrice), existingBasePriceMap);
64
+ resultPricing = {};
65
+ period = Object.keys(currentPricing);
66
+ return [4 /*yield*/, Promise.all([
67
+ getRoomTypesAvailability(companyId, [roomTypeId], { period: period }),
68
+ getRoomsByCompanyId(companyId),
69
+ ])];
70
+ case 1:
71
+ _c = _j.sent(), roomTypesAvailability = _c[0], roomsData = _c[1];
72
+ roomTypeAvailability = (_e = (_d = roomTypesAvailability === null || roomTypesAvailability === void 0 ? void 0 : roomTypesAvailability[roomTypeId]) === null || _d === void 0 ? void 0 : _d.availability) !== null && _e !== void 0 ? _e : {};
73
+ totalRooms = ((_f = roomsData === null || roomsData === void 0 ? void 0 : roomsData.list) === null || _f === void 0 ? void 0 : _f.filter(function (r) { return (r === null || r === void 0 ? void 0 : r.roomTypeId) === roomTypeId; }).length) || 1;
74
+ holidayDates = (company.holidays || [])
75
+ .filter(function (h) { return h.enableDynamicPricing; })
76
+ .flatMap(function (h) { return [
77
+ (0, moment_1.default)(h.date).subtract(1, 'day').format('YYYY-MM-DD'),
78
+ (0, moment_1.default)(h.date).format('YYYY-MM-DD'),
79
+ (0, moment_1.default)(h.date).add(1, 'day').format('YYYY-MM-DD'),
80
+ ]; });
81
+ for (_i = 0, period_1 = period; _i < period_1.length; _i++) {
82
+ dateStr = period_1[_i];
83
+ date = (0, moment_1.default)((0, dateService_1.normalizeDate)(dateStr));
84
+ if (!date.isValid())
85
+ continue;
86
+ current = currentPricing[dateStr];
87
+ isAffectedHoliday = holidayDates.includes(dateStr);
88
+ base = (_g = basePriceMap[dateStr]) !== null && _g !== void 0 ? _g : current;
89
+ availableRooms = (_h = roomTypeAvailability[dateStr]) !== null && _h !== void 0 ? _h : 0;
90
+ availabilityRatio = availableRooms / totalRooms;
91
+ leadTimeDays = date.diff((0, moment_1.default)(), 'days');
92
+ isNearHoliday = leadTimeDays <= 7;
93
+ isNearFuture = leadTimeDays < 30;
94
+ if (dynamicPricing.isActive && isAffectedHoliday) {
95
+ basePriceMap[dateStr] = base;
96
+ occupancyMultiplier = (0, exports.getDynamicMultiplier)({
97
+ availabilityRatio: availabilityRatio,
98
+ isNearFuture: isNearFuture,
99
+ });
100
+ leadTimeMultiplier = leadTimeDays >= 60 ? 1.0 : 1 + (60 - leadTimeDays) * 0.005;
101
+ rawPrice = base * occupancyMultiplier * leadTimeMultiplier;
102
+ cappedPrice = isNearHoliday && availableRooms <= 1 ? Math.min(rawPrice, base + 70) : Math.min(rawPrice, base * 1.45);
103
+ resultPricing[dateStr] = Math.round(cappedPrice);
104
+ }
105
+ else if (!dynamicPricing.isActive && base !== undefined) {
106
+ resultPricing[dateStr] = base;
107
+ }
108
+ else {
109
+ expected = base ? Math.round(base * (0, exports.getDynamicMultiplier)({ availabilityRatio: availabilityRatio, isNearFuture: isNearFuture })) : current;
110
+ resultPricing[dateStr] =
111
+ current === expected || current === Math.round((base !== null && base !== void 0 ? base : 0) * 1.2) ? (base !== null && base !== void 0 ? base : current) : current;
112
+ }
103
113
  }
104
- resultPricing[dateStr] = Math.round(cappedPrice);
105
- basePriceMap[dateStr] = base;
106
- }
107
- else {
108
- base = (_f = basePriceMap === null || basePriceMap === void 0 ? void 0 : basePriceMap[dateStr]) !== null && _f !== void 0 ? _f : current;
109
- fallback = Math.round(base * (0, exports.getDynamicMultiplier)({ availabilityRatio: availabilityRatio, isNearFuture: isNearFuture }));
110
- resultPricing[dateStr] = fallback;
111
- basePriceMap[dateStr] = base;
112
- }
114
+ return [2 /*return*/, {
115
+ updatedPricing: resultPricing,
116
+ updatedBasePriceMap: basePriceMap,
117
+ }];
113
118
  }
114
- return [2 /*return*/, {
115
- updatedPricing: resultPricing,
116
- updatedBasePriceMap: basePriceMap,
117
- }];
118
119
  });
119
120
  }); };
120
121
  exports.calculateDynamicPricing = calculateDynamicPricing;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyper.software/common-helpers",
3
- "version": "2.10.16",
3
+ "version": "2.10.18",
4
4
  "author": "Raul Tomescu <tomescu.raul+hyper@gmail.com>",
5
5
  "description": "Hyper Software Common Javascript Helpers",
6
6
  "main": "lib/index.js",