@hyper.software/common-helpers 2.2.35 → 2.2.37

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,205 +55,119 @@ 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 nearDate = today.clone().add(7, 'days').format('YYYY-MM-DD');
59
- var farDate = today.clone().add(60, 'days').format('YYYY-MM-DD');
58
+ var baseDate = today.format('YYYY-MM-DD');
59
+ var holidayDate = today.clone().add(1, 'day').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: farDate, type: interfaces_1.DYNAMIC_PRICING_TYPE.INCREASE, amount: 20 }, 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));
64
64
  };
65
65
  var mockCompany = {
66
66
  id: 'comp1',
67
67
  holidays: [],
68
68
  };
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
- },
77
- });
78
- };
79
- var mockGetRoomsByCompanyId = function (count) {
80
- return jest.fn().mockResolvedValue({
81
- list: Array(count).fill({ roomTypeId: 'roomType1' }),
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
+ }
82
85
  });
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;
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;
99
89
  var _a;
100
90
  return __generator(this, function (_b) {
101
91
  switch (_b.label) {
102
92
  case 0:
103
- holidayDate = (0, moment_1.default)(today).add(1, 'day').format('YYYY-MM-DD');
104
93
  companyWithHoliday = {
105
94
  id: 'comp1',
106
95
  holidays: [{ date: holidayDate, enableDynamicPricing: true }],
107
96
  };
108
97
  pricing = (_a = {},
109
- _a[holidayDate] = 100,
98
+ _a[holidayDate] = basePrice,
110
99
  _a);
111
100
  return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
112
101
  currentPricing: pricing,
113
102
  dynamicPricing: baseDynamicPricing(),
114
103
  existingBasePriceMap: {},
115
104
  company: companyWithHoliday,
116
- roomTypeId: 'roomType1',
117
- companyId: 'comp1',
118
- getRoomTypesAvailability: mockGetRoomTypesAvailability(1, holidayDate),
119
- getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
120
105
  })];
121
106
  case 1:
122
107
  result = _b.sent();
123
- expect(result.updatedPricing[holidayDate]).toBeGreaterThan(100);
124
- return [2 /*return*/];
125
- }
126
- });
127
- }); });
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) {
146
- case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
147
- currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
148
- dynamicPricing: baseDynamicPricing(),
149
- existingBasePriceMap: {},
150
- company: mockCompany,
151
- roomTypeId: 'roomType1',
152
- companyId: 'comp1',
153
- getRoomTypesAvailability: mockGetRoomTypesAvailability(10, farDate),
154
- getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
155
- })];
156
- case 1:
157
- result = _b.sent();
158
- price = result.updatedPricing[farDate];
159
- expect(price).toBeGreaterThanOrEqual(basePrice);
160
- expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.1));
161
- return [2 /*return*/];
162
- }
163
- });
164
- }); });
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;
167
- var _a;
168
- return __generator(this, function (_b) {
169
- switch (_b.label) {
170
- case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
171
- currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
172
- dynamicPricing: baseDynamicPricing(),
173
- existingBasePriceMap: {},
174
- company: mockCompany,
175
- roomTypeId: 'roomType1',
176
- companyId: 'comp1',
177
- getRoomTypesAvailability: mockGetRoomTypesAvailability(5, farDate),
178
- getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
179
- })];
180
- case 1:
181
- result = _b.sent();
182
- price = result.updatedPricing[farDate];
183
- expect(price).toBeGreaterThanOrEqual(basePrice);
184
- expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
108
+ expect(result.updatedPricing[holidayDate]).toBeGreaterThan(basePrice);
185
109
  return [2 /*return*/];
186
110
  }
187
111
  });
188
112
  }); });
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;
191
- var _a;
192
- return __generator(this, function (_b) {
193
- switch (_b.label) {
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) {
194
118
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
195
- currentPricing: (_a = {}, _a[farDate] = basePrice, _a),
196
- dynamicPricing: baseDynamicPricing(),
197
- existingBasePriceMap: {},
119
+ currentPricing: (_a = {}, _a[baseDate] = basePrice, _a),
120
+ dynamicPricing: baseDynamicPricing({ isActive: false }),
121
+ existingBasePriceMap: (_b = {}, _b[baseDate] = 95, _b),
198
122
  company: mockCompany,
199
- roomTypeId: 'roomType1',
200
- companyId: 'comp1',
201
- getRoomTypesAvailability: mockGetRoomTypesAvailability(1, farDate),
202
- getRoomsByCompanyId: mockGetRoomsByCompanyId(50),
203
123
  })];
204
124
  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));
125
+ result = _c.sent();
126
+ expect(result.updatedPricing[baseDate]).toBe(95);
209
127
  return [2 /*return*/];
210
128
  }
211
129
  });
212
130
  }); });
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;
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;
215
133
  var _a;
216
134
  return __generator(this, function (_b) {
217
135
  switch (_b.label) {
218
136
  case 0: return [4 /*yield*/, (0, dynamicPricingService_1.calculateDynamicPricing)({
219
- currentPricing: (_a = {}, _a[nearDate] = basePrice, _a),
137
+ currentPricing: (_a = {}, _a[baseDate] = basePrice, _a),
220
138
  dynamicPricing: baseDynamicPricing(),
221
139
  existingBasePriceMap: {},
222
- company: mockCompany,
223
- roomTypeId: 'roomType1',
224
- companyId: 'comp1',
225
- getRoomTypesAvailability: mockGetRoomTypesAvailability(10, nearDate),
226
- getRoomsByCompanyId: mockGetRoomsByCompanyId(10),
140
+ company: mockCompany, // no holidays
227
141
  })];
228
142
  case 1:
229
143
  result = _b.sent();
230
- price = result.updatedPricing[nearDate];
231
- expect(price).toBeGreaterThanOrEqual(basePrice);
232
- expect(price).toBeLessThanOrEqual(Math.round(133));
144
+ expect(result.updatedPricing[baseDate]).toBe(basePrice);
233
145
  return [2 /*return*/];
234
146
  }
235
147
  });
236
148
  }); });
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;
149
+ it('caps the increase at +70', function () { return __awaiter(void 0, void 0, void 0, function () {
150
+ var companyWithHoliday, pricing, result;
239
151
  var _a;
240
152
  return __generator(this, function (_b) {
241
153
  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
- })];
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
+ })];
252
168
  case 1:
253
169
  result = _b.sent();
254
- price = result.updatedPricing[nearDate];
255
- expect(price).toBeGreaterThanOrEqual(basePrice);
256
- expect(price).toBeLessThanOrEqual(Math.round(basePrice * 1.4));
170
+ expect(result.updatedPricing[baseDate]).toBe(570);
257
171
  return [2 /*return*/];
258
172
  }
259
173
  });
@@ -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,17 +1,9 @@
1
1
  import { ICompany, IRoomTypePricePlanPricingInformation, IDynamicPricing } from '../../interfaces';
2
- export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, existingBasePriceMap, company, roomTypeId, companyId, getRoomTypesAvailability, getRoomsByCompanyId, }: {
2
+ export declare const calculateDynamicPricing: ({ currentPricing, dynamicPricing, existingBasePriceMap, company, }: {
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
- }>;
15
7
  }) => Promise<{
16
8
  updatedPricing: IRoomTypePricePlanPricingInformation;
17
9
  updatedBasePriceMap: Record<string, number>;
@@ -55,48 +55,44 @@ 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, roomTypeId = _b.roomTypeId, companyId = _b.companyId, getRoomTypesAvailability = _b.getRoomTypesAvailability, getRoomsByCompanyId = _b.getRoomsByCompanyId;
58
+ var currentPricing = _b.currentPricing, dynamicPricing = _b.dynamicPricing, existingBasePriceMap = _b.existingBasePriceMap, company = _b.company;
59
59
  return __generator(this, function (_c) {
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
- basePriceMap[dateStr] = current;
82
- baseForToday = basePriceMap[dateStr];
83
- isAffectedHoliday = holidayDateSet.has(dateStr);
84
- if (dynamicPricing.isActive && isAffectedHoliday) {
85
- rawPrice = current + (dynamicPricing.amount || Math.round(baseForToday * 0.05));
86
- if (rawPrice > baseForToday + 70) {
87
- rawPrice = baseForToday + 70;
88
- }
89
- resultPricing[dateStr] = Math.round(rawPrice);
90
- }
91
- else {
92
- resultPricing[dateStr] = current;
93
- }
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;
94
85
  }
95
- return [2 /*return*/, {
96
- updatedPricing: resultPricing,
97
- updatedBasePriceMap: basePriceMap,
98
- }];
86
+ resultPricing[dateStr] = Math.round(rawPrice);
87
+ }
88
+ else {
89
+ resultPricing[dateStr] = baseForToday;
90
+ }
99
91
  }
92
+ return [2 /*return*/, {
93
+ updatedPricing: resultPricing,
94
+ updatedBasePriceMap: basePriceMap,
95
+ }];
100
96
  });
101
97
  }); };
102
98
  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,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,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;oBAEzB,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,OAAO,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;wBAEnF,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,OAAO,CAAA;oBAClC,CAAC;gBACH,CAAC;gBAED,sBAAO;wBACL,cAAc,EAAE,aAAa;wBAC7B,mBAAmB,EAAE,YAAY;qBAClC,EAAA;;;KACF,CAAA;AAnEY,QAAA,uBAAuB,2BAmEnC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyper.software/common-helpers",
3
- "version": "2.2.35",
3
+ "version": "2.2.37",
4
4
  "author": "Raul Tomescu <tomescu.raul+hyper@gmail.com>",
5
5
  "description": "Hyper Software Common Javascript Helpers",
6
6
  "main": "lib/index.js",