@hyper.software/common-helpers 2.2.37 → 2.2.38

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.
@@ -55,119 +55,205 @@ var dynamicPricingService_1 = require("../../dynamicPricingService/dynamicPricin
55
55
  var interfaces_1 = require("../../../interfaces");
56
56
  describe('calculateDynamicPricing', function () {
57
57
  var today = (0, moment_1.default)().startOf('day');
58
- var baseDate = today.format('YYYY-MM-DD');
59
- var holidayDate = today.clone().add(1, 'day').format('YYYY-MM-DD');
58
+ var nearDate = today.clone().add(7, 'days').format('YYYY-MM-DD');
59
+ var farDate = today.clone().add(60, 'days').format('YYYY-MM-DD');
60
60
  var basePrice = 100;
61
61
  var baseDynamicPricing = function (overrides) {
62
62
  if (overrides === void 0) { overrides = {}; }
63
- return (__assign({ isActive: true, basePrice: {}, startDate: today.format('YYYY-MM-DD'), endDate: today.clone().add(60, 'days').format('YYYY-MM-DD'), type: interfaces_1.DYNAMIC_PRICING_TYPE.INCREASE, amount: 20 }, overrides));
63
+ return (__assign({ isActive: true, basePrice: {}, startDate: today.format('YYYY-MM-DD'), endDate: farDate, type: interfaces_1.DYNAMIC_PRICING_TYPE.INCREASE, amount: 20 }, overrides));
64
64
  };
65
65
  var mockCompany = {
66
66
  id: 'comp1',
67
67
  holidays: [],
68
68
  };
69
- it('returns base price when dynamic pricing is inactive', function () { return __awaiter(void 0, void 0, void 0, function () {
70
- var result;
71
- var _a, _b;
72
- return __generator(this, function (_c) {
73
- switch (_c.label) {
74
- case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
75
- currentPricing: (_a = {}, _a[baseDate] = basePrice, _a),
76
- dynamicPricing: baseDynamicPricing({ isActive: false }),
77
- existingBasePriceMap: (_b = {}, _b[baseDate] = 90, _b),
78
- company: mockCompany,
79
- })];
80
- case 1:
81
- result = _c.sent();
82
- expect(result.updatedPricing[baseDate]).toBe(90);
83
- return [2 /*return*/];
84
- }
69
+ var mockGetRoomTypesAvailability = function (available, date) {
70
+ var _a;
71
+ return jest.fn().mockResolvedValue({
72
+ roomType1: {
73
+ availability: (_a = {},
74
+ _a[date] = available,
75
+ _a),
76
+ },
85
77
  });
86
- }); });
87
- it('applies holiday dynamic pricing if date is a holiday', function () { return __awaiter(void 0, void 0, void 0, function () {
88
- var companyWithHoliday, pricing, result;
78
+ };
79
+ var mockGetRoomsByCompanyId = function (count) {
80
+ return jest.fn().mockResolvedValue({
81
+ list: Array(count).fill({ roomTypeId: 'roomType1' }),
82
+ });
83
+ };
84
+ // it('returns base price when dynamic pricing is inactive', async () => {
85
+ // const result = await calculateDynamicPricing({
86
+ // currentPricing: { [today.format('YYYY-MM-DD')]: 100 },
87
+ // dynamicPricing: baseDynamicPricing({ isActive: false }),
88
+ // existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 90 },
89
+ // company: mockCompany,
90
+ // roomTypeId: 'roomType1',
91
+ // companyId: 'comp1',
92
+ // getRoomTypesAvailability: mockGetRoomTypesAvailability(5, today.format('YYYY-MM-DD')),
93
+ // getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
94
+ // })
95
+ // expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(90)
96
+ // })
97
+ it('applies holiday dynamic pricing if date is near holiday', function () { return __awaiter(void 0, void 0, void 0, function () {
98
+ var holidayDate, companyWithHoliday, pricing, result;
89
99
  var _a;
90
100
  return __generator(this, function (_b) {
91
101
  switch (_b.label) {
92
102
  case 0:
103
+ holidayDate = (0, moment_1.default)(today).add(1, 'day').format('YYYY-MM-DD');
93
104
  companyWithHoliday = {
94
105
  id: 'comp1',
95
106
  holidays: [{ date: holidayDate, enableDynamicPricing: true }],
96
107
  };
97
108
  pricing = (_a = {},
98
- _a[holidayDate] = basePrice,
109
+ _a[holidayDate] = 100,
99
110
  _a);
100
111
  return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
101
112
  currentPricing: pricing,
102
113
  dynamicPricing: baseDynamicPricing(),
103
114
  existingBasePriceMap: {},
104
115
  company: companyWithHoliday,
116
+ roomTypeId: 'roomType1',
117
+ companyId: 'comp1',
118
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(1, holidayDate),
119
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
105
120
  })];
106
121
  case 1:
107
122
  result = _b.sent();
108
- expect(result.updatedPricing[holidayDate]).toBeGreaterThan(basePrice);
123
+ expect(result.updatedPricing[holidayDate]).toBeGreaterThan(100);
109
124
  return [2 /*return*/];
110
125
  }
111
126
  });
112
127
  }); });
113
- it('uses fallback base price if dynamic pricing is off', function () { return __awaiter(void 0, void 0, void 0, function () {
114
- var result;
115
- var _a, _b;
116
- return __generator(this, function (_c) {
117
- switch (_c.label) {
128
+ // it('uses fallback pricing if base price exists and dynamic pricing is off', async () => {
129
+ // const result = await calculateDynamicPricing({
130
+ // currentPricing: { [today.format('YYYY-MM-DD')]: 100 },
131
+ // dynamicPricing: baseDynamicPricing({ isActive: false }),
132
+ // existingBasePriceMap: { [today.format('YYYY-MM-DD')]: 95 },
133
+ // company: mockCompany,
134
+ // roomTypeId: 'roomType1',
135
+ // companyId: 'comp1',
136
+ // getRoomTypesAvailability: mockGetRoomTypesAvailability(3, today.format('YYYY-MM-DD')),
137
+ // getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
138
+ // })
139
+ // expect(result.updatedPricing[today.format('YYYY-MM-DD')]).toBe(95)
140
+ // })
141
+ it('keeps price near base when availability is 100% and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
142
+ var result, price;
143
+ var _a;
144
+ return __generator(this, function (_b) {
145
+ switch (_b.label) {
118
146
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
119
- currentPricing: (_a = {}, _a[baseDate] = basePrice, _a),
120
- dynamicPricing: baseDynamicPricing({ isActive: false }),
121
- existingBasePriceMap: (_b = {}, _b[baseDate] = 95, _b),
147
+ currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
148
+ dynamicPricing: baseDynamicPricing(),
149
+ existingBasePriceMap: {},
122
150
  company: mockCompany,
151
+ roomTypeId: 'roomType1',
152
+ companyId: 'comp1',
153
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(10, farDate),
154
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
123
155
  })];
124
156
  case 1:
125
- result = _c.sent();
126
- expect(result.updatedPricing[baseDate]).toBe(95);
157
+ result = _b.sent();
158
+ price = result.updatedPricing[farDate];
159
+ expect(price).toBeGreaterThanOrEqual(basePrice);
160
+ expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.1));
127
161
  return [2 /*return*/];
128
162
  }
129
163
  });
130
164
  }); });
131
- it('keeps price unchanged if no holiday and dynamic pricing is active', function () { return __awaiter(void 0, void 0, void 0, function () {
132
- var result;
165
+ it('increases price moderately with 50% availability and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
166
+ var result, price;
133
167
  var _a;
134
168
  return __generator(this, function (_b) {
135
169
  switch (_b.label) {
136
170
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
137
- currentPricing: (_a = {}, _a[baseDate] = basePrice, _a),
171
+ currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
138
172
  dynamicPricing: baseDynamicPricing(),
139
173
  existingBasePriceMap: {},
140
- company: mockCompany, // no holidays
174
+ company: mockCompany,
175
+ roomTypeId: 'roomType1',
176
+ companyId: 'comp1',
177
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(5, farDate),
178
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
141
179
  })];
142
180
  case 1:
143
181
  result = _b.sent();
144
- expect(result.updatedPricing[baseDate]).toBe(basePrice);
182
+ price = result.updatedPricing[farDate];
183
+ expect(price).toBeGreaterThanOrEqual(basePrice);
184
+ expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
145
185
  return [2 /*return*/];
146
186
  }
147
187
  });
148
188
  }); });
149
- it('caps the increase at +70', function () { return __awaiter(void 0, void 0, void 0, function () {
150
- var companyWithHoliday, pricing, result;
189
+ it('maximizes price with 1 room left and date is far', function () { return __awaiter(void 0, void 0, void 0, function () {
190
+ var result, price;
151
191
  var _a;
152
192
  return __generator(this, function (_b) {
153
193
  switch (_b.label) {
154
- case 0:
155
- companyWithHoliday = {
156
- id: 'comp1',
157
- holidays: [{ date: baseDate, enableDynamicPricing: true }],
158
- };
159
- pricing = (_a = {},
160
- _a[baseDate] = 500,
161
- _a);
162
- return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
163
- currentPricing: pricing,
164
- dynamicPricing: baseDynamicPricing({ amount: 200 }),
165
- existingBasePriceMap: {},
166
- company: companyWithHoliday,
167
- })];
194
+ case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
195
+ currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
196
+ dynamicPricing: baseDynamicPricing(),
197
+ existingBasePriceMap: {},
198
+ company: mockCompany,
199
+ roomTypeId: 'roomType1',
200
+ companyId: 'comp1',
201
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(1, farDate),
202
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(50),
203
+ })];
204
+ case 1:
205
+ result = _b.sent();
206
+ price = result.updatedPricing[farDate];
207
+ expect(price).toBeGreaterThanOrEqual(basePrice);
208
+ expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.5));
209
+ return [2 /*return*/];
210
+ }
211
+ });
212
+ }); });
213
+ it('slightly increases price with 100% availability and date is near', function () { return __awaiter(void 0, void 0, void 0, function () {
214
+ var result, price;
215
+ var _a;
216
+ return __generator(this, function (_b) {
217
+ switch (_b.label) {
218
+ case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
219
+ currentPricing: (_a = {}, _a[nearDate] = basePrice, _a),
220
+ dynamicPricing: baseDynamicPricing(),
221
+ existingBasePriceMap: {},
222
+ company: mockCompany,
223
+ roomTypeId: 'roomType1',
224
+ companyId: 'comp1',
225
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(10, nearDate),
226
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
227
+ })];
228
+ case 1:
229
+ result = _b.sent();
230
+ price = result.updatedPricing[nearDate];
231
+ expect(price).toBeGreaterThanOrEqual(basePrice);
232
+ expect(price).toBeLessThanOrEqual(Math.round(133));
233
+ return [2 /*return*/];
234
+ }
235
+ });
236
+ }); });
237
+ it('strongly increases price with 50% availability and date is near', function () { return __awaiter(void 0, void 0, void 0, function () {
238
+ var result, price;
239
+ var _a;
240
+ return __generator(this, function (_b) {
241
+ switch (_b.label) {
242
+ case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
243
+ currentPricing: (_a = {}, _a[nearDate] = basePrice, _a),
244
+ dynamicPricing: baseDynamicPricing(),
245
+ existingBasePriceMap: {},
246
+ company: mockCompany,
247
+ roomTypeId: 'roomType1',
248
+ companyId: 'comp1',
249
+ getRoomTypesAvailability: mockGetRoomTypesAvailability(5, nearDate),
250
+ getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
251
+ })];
168
252
  case 1:
169
253
  result = _b.sent();
170
- expect(result.updatedPricing[baseDate]).toBe(570);
254
+ price = result.updatedPricing[nearDate];
255
+ expect(price).toBeGreaterThanOrEqual(basePrice);
256
+ expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
171
257
  return [2 /*return*/];
172
258
  }
173
259
  });
@@ -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,9 +1,17 @@
1
1
  import { ICompany, IRoomTypePricePlanPricingInformation, IDynamicPricing } from '../../interfaces';
2
- export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, existingBasePriceMap, company, }: {
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
+ 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
+ }>;
7
15
  }) => Promise<{
8
16
  updatedPricing: IRoomTypePricePlanPricingInformation;
9
17
  updatedBasePriceMap: Record<string, number>;
@@ -55,44 +55,50 @@ 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
57
  var basePriceMap, resultPricing, period, holidayDateSet, _i, period_1, dateStr, date, current, baseForToday, isAffectedHoliday, rawPrice;
58
- var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, existingBasePriceMap = _b.existingBasePriceMap, company = _b.company;
58
+ 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;
59
59
  return __generator(this, function (_c) {
60
- basePriceMap = __assign(__assign({}, dynamicPricing.basePrice), existingBasePriceMap);
61
- resultPricing = {};
62
- period = Object.keys(currentPricing);
63
- holidayDateSet = new Set((company.holidays || [])
64
- .filter(function (h) { return h.enableDynamicPricing; })
65
- .flatMap(function (h) { return [
66
- (0, moment_1.default)(h.date).subtract(1, 'day').format('YYYY-MM-DD'),
67
- (0, moment_1.default)(h.date).format('YYYY-MM-DD'),
68
- (0, moment_1.default)(h.date).add(1, 'day').format('YYYY-MM-DD'),
69
- ]; }));
70
- for (_i = 0, period_1 = period; _i < period_1.length; _i++) {
71
- dateStr = period_1[_i];
72
- date = (0, moment_1.default)((0, dateService_1.normalizeDate)(dateStr));
73
- if (!date.isValid())
74
- continue;
75
- current = currentPricing[dateStr];
76
- if (!(dateStr in basePriceMap)) {
77
- basePriceMap[dateStr] = current;
78
- }
79
- baseForToday = basePriceMap[dateStr];
80
- isAffectedHoliday = holidayDateSet.has(dateStr);
81
- if (dynamicPricing.isActive && isAffectedHoliday) {
82
- rawPrice = baseForToday + (dynamicPricing.amount || Math.round(baseForToday * 0.05));
83
- if (rawPrice > baseForToday + 70) {
84
- rawPrice = baseForToday + 70;
60
+ switch (_c.label) {
61
+ case 0:
62
+ basePriceMap = __assign(__assign({}, dynamicPricing.basePrice), existingBasePriceMap);
63
+ resultPricing = {};
64
+ period = Object.keys(currentPricing);
65
+ return [4 /*yield*/, Promise.all([getRoomTypesAvailability(companyId, [roomTypeId], { period: period }), getRoomsByCompanyId(companyId)])];
66
+ case 1:
67
+ _c.sent();
68
+ holidayDateSet = new Set((company.holidays || [])
69
+ .filter(function (h) { return h.enableDynamicPricing; })
70
+ .flatMap(function (h) { return [
71
+ (0, moment_1.default)(h.date).subtract(1, 'day').format('YYYY-MM-DD'),
72
+ (0, moment_1.default)(h.date).format('YYYY-MM-DD'),
73
+ (0, moment_1.default)(h.date).add(1, 'day').format('YYYY-MM-DD'),
74
+ ]; }));
75
+ for (_i = 0, period_1 = period; _i < period_1.length; _i++) {
76
+ dateStr = period_1[_i];
77
+ date = (0, moment_1.default)((0, dateService_1.normalizeDate)(dateStr));
78
+ if (!date.isValid())
79
+ continue;
80
+ current = currentPricing[dateStr];
81
+ if (!(dateStr in basePriceMap)) {
82
+ basePriceMap[dateStr] = current;
83
+ }
84
+ baseForToday = basePriceMap[dateStr];
85
+ isAffectedHoliday = holidayDateSet.has(dateStr);
86
+ if (dynamicPricing.isActive && isAffectedHoliday) {
87
+ rawPrice = baseForToday + (dynamicPricing.amount || Math.round(baseForToday * 0.05));
88
+ if (rawPrice > baseForToday + 70) {
89
+ rawPrice = baseForToday + 70;
90
+ }
91
+ resultPricing[dateStr] = Math.round(rawPrice);
92
+ }
93
+ else {
94
+ resultPricing[dateStr] = baseForToday;
95
+ }
85
96
  }
86
- resultPricing[dateStr] = Math.round(rawPrice);
87
- }
88
- else {
89
- resultPricing[dateStr] = baseForToday;
90
- }
97
+ return [2 /*return*/, {
98
+ updatedPricing: resultPricing,
99
+ updatedBasePriceMap: basePriceMap,
100
+ }];
91
101
  }
92
- return [2 /*return*/, {
93
- updatedPricing: resultPricing,
94
- updatedBasePriceMap: basePriceMap,
95
- }];
96
102
  });
97
103
  }); };
98
104
  exports.calculateDynamicPricing = calculateDynamicPricing;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;AAE3B,0DAA0D;AAEnD,IAAM,uBAAuB,GAAG,iEAAO,EAU7C;;QATC,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,oBAAoB,0BAAA,EACpB,OAAO,aAAA;;QAUD,YAAY,yBAAQ,cAAc,CAAC,SAAS,GAAK,oBAAoB,CAAE,CAAA;QACvE,aAAa,GAAyC,EAAE,CAAA;QAExD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAEpC,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;aACrB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,oBAAoB,EAAtB,CAAsB,CAAC;aACrC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA;YACd,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACtD,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACnC,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;SAClD,EAJe,CAIf,CAAC,CACL,CAAA;QAED,WAA4B,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE,CAAC;YAApB,OAAO;YACV,IAAI,GAAG,IAAA,gBAAM,EAAC,IAAA,2BAAa,EAAC,OAAO,CAAC,CAAC,CAAA;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBAAE,SAAQ;YAEvB,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;YAEvC,IAAI,CAAC,CAAC,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC;gBAC/B,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;YACjC,CAAC;YAEK,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACpC,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAErD,IAAI,cAAc,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAC;gBAC7C,QAAQ,GAAG,YAAY,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;gBAExF,IAAI,QAAQ,GAAG,YAAY,GAAG,EAAE,EAAE,CAAC;oBACjC,QAAQ,GAAG,YAAY,GAAG,EAAE,CAAA;gBAC9B,CAAC;gBAED,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,OAAO,CAAC,GAAG,YAAY,CAAA;YACvC,CAAC;QACH,CAAC;QAED,sBAAO;gBACL,cAAc,EAAE,aAAa;gBAC7B,mBAAmB,EAAE,YAAY;aAClC,EAAA;;KACF,CAAA;AA3DY,QAAA,uBAAuB,2BA2DnC"}
1
+ {"version":3,"file":"dynamicPricingService.js","sourceRoot":"","sources":["../../../src/services/dynamicPricingService/dynamicPricingService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA2B;AAE3B,0DAA0D;AAEnD,IAAM,uBAAuB,GAAG,iEAAO,EAkB7C;;QAjBC,cAAc,oBAAA,EACd,cAAc,oBAAA,EACd,oBAAoB,0BAAA,EACpB,OAAO,aAAA,EACP,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,wBAAwB,8BAAA,EACxB,mBAAmB,yBAAA;;;;gBAcb,YAAY,yBAAQ,cAAc,CAAC,SAAS,GAAK,oBAAoB,CAAE,CAAA;gBACvE,aAAa,GAAyC,EAAE,CAAA;gBAExD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAE1C,qBAAM,OAAO,CAAC,GAAG,CAAC,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,QAAA,EAAE,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAA;;gBAAlH,SAAkH,CAAA;gBAE5G,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;qBACrB,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,oBAAoB,EAAtB,CAAsB,CAAC;qBACrC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA;oBACd,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACtD,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;oBACnC,IAAA,gBAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;iBAClD,EAJe,CAIf,CAAC,CACL,CAAA;gBAED,WAA4B,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE,CAAC;oBAApB,OAAO;oBACV,IAAI,GAAG,IAAA,gBAAM,EAAC,IAAA,2BAAa,EAAC,OAAO,CAAC,CAAC,CAAA;oBAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBAAE,SAAQ;oBAEvB,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;oBAEvC,IAAI,CAAC,CAAC,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC;wBAC/B,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;oBACjC,CAAC;oBAEK,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;oBACpC,iBAAiB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBAErD,IAAI,cAAc,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAC;wBAC7C,QAAQ,GAAG,YAAY,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;wBAExF,IAAI,QAAQ,GAAG,YAAY,GAAG,EAAE,EAAE,CAAC;4BACjC,QAAQ,GAAG,YAAY,GAAG,EAAE,CAAA;wBAC9B,CAAC;wBAED,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAC/C,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,OAAO,CAAC,GAAG,YAAY,CAAA;oBACvC,CAAC;gBACH,CAAC;gBAED,sBAAO;wBACL,cAAc,EAAE,aAAa;wBAC7B,mBAAmB,EAAE,YAAY;qBAClC,EAAA;;;KACF,CAAA;AArEY,QAAA,uBAAuB,2BAqEnC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyper.software/common-helpers",
3
- "version": "2.2.37",
3
+ "version": "2.2.38",
4
4
  "author": "Raul Tomescu <tomescu.raul+hyper@gmail.com>",
5
5
  "description": "Hyper Software Common Javascript Helpers",
6
6
  "main": "lib/index.js",