@bash-app/bash-common 30.113.0 → 30.114.0
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.
- package/dist/definitions.d.ts +2 -2
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +2 -2
- package/dist/definitions.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/__tests__/recurrenceUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/recurrenceUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/recurrenceUtils.test.js +193 -0
- package/dist/utils/__tests__/recurrenceUtils.test.js.map +1 -0
- package/dist/utils/discountEngine/bestPriceResolver.d.ts +31 -0
- package/dist/utils/discountEngine/bestPriceResolver.d.ts.map +1 -0
- package/dist/utils/discountEngine/bestPriceResolver.js +147 -0
- package/dist/utils/discountEngine/bestPriceResolver.js.map +1 -0
- package/dist/utils/discountEngine/discountCalculator.d.ts +56 -0
- package/dist/utils/discountEngine/discountCalculator.d.ts.map +1 -0
- package/dist/utils/discountEngine/discountCalculator.js +219 -0
- package/dist/utils/discountEngine/discountCalculator.js.map +1 -0
- package/dist/utils/discountEngine/eligibilityValidator.d.ts +36 -0
- package/dist/utils/discountEngine/eligibilityValidator.d.ts.map +1 -0
- package/dist/utils/discountEngine/eligibilityValidator.js +189 -0
- package/dist/utils/discountEngine/eligibilityValidator.js.map +1 -0
- package/dist/utils/discountEngine/index.d.ts +4 -0
- package/dist/utils/discountEngine/index.d.ts.map +1 -0
- package/dist/utils/discountEngine/index.js +5 -0
- package/dist/utils/discountEngine/index.js.map +1 -0
- package/dist/utils/recurrenceUtils.d.ts.map +1 -1
- package/dist/utils/recurrenceUtils.js +17 -4
- package/dist/utils/recurrenceUtils.js.map +1 -1
- package/package.json +1 -1
- package/prisma/schema.prisma +366 -81
- package/src/definitions.ts +2 -1
- package/src/index.ts +2 -0
- package/src/utils/discountEngine/bestPriceResolver.ts +212 -0
- package/src/utils/discountEngine/discountCalculator.ts +281 -0
- package/src/utils/discountEngine/eligibilityValidator.ts +256 -0
- package/src/utils/discountEngine/index.ts +5 -0
- package/src/utils/recurrenceUtils.ts +20 -4
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { SpecialOfferType } from "@prisma/client";
|
|
2
|
+
/**
|
|
3
|
+
* Validate if a user is eligible to use a promo code
|
|
4
|
+
*/
|
|
5
|
+
export const validatePromoCodeEligibility = (promoCode, userId, usersWhoUsedCode = []) => {
|
|
6
|
+
// Check if expired
|
|
7
|
+
if (promoCode.redeemBy && new Date() > promoCode.redeemBy) {
|
|
8
|
+
return {
|
|
9
|
+
eligible: false,
|
|
10
|
+
reason: `This promo code expired on ${promoCode.redeemBy.toLocaleDateString()}`,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// Check max redemptions
|
|
14
|
+
if (promoCode.maxRedemptions && usersWhoUsedCode.length >= promoCode.maxRedemptions) {
|
|
15
|
+
return {
|
|
16
|
+
eligible: false,
|
|
17
|
+
reason: "This promo code has reached its maximum number of uses",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// Check if user already used this code
|
|
21
|
+
if (usersWhoUsedCode.includes(userId)) {
|
|
22
|
+
return {
|
|
23
|
+
eligible: false,
|
|
24
|
+
reason: "You have already used this promo code",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return { eligible: true };
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Validate if a user is eligible for a special offer
|
|
31
|
+
*/
|
|
32
|
+
export const validateOfferEligibility = (offer, userId, quantity, currentDate, userRedemptionCount = 0) => {
|
|
33
|
+
// Check if offer is active
|
|
34
|
+
if (!offer.isActive) {
|
|
35
|
+
return {
|
|
36
|
+
eligible: false,
|
|
37
|
+
reason: "This offer is no longer active",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Check start date
|
|
41
|
+
if (offer.startDate && currentDate < offer.startDate) {
|
|
42
|
+
return {
|
|
43
|
+
eligible: false,
|
|
44
|
+
reason: `This offer starts on ${offer.startDate.toLocaleDateString()}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Check end date
|
|
48
|
+
if (offer.endDate && currentDate > offer.endDate) {
|
|
49
|
+
return {
|
|
50
|
+
eligible: false,
|
|
51
|
+
reason: `This offer ended on ${offer.endDate.toLocaleDateString()}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Check early bird cutoff
|
|
55
|
+
if (offer.availableUntil && currentDate > offer.availableUntil) {
|
|
56
|
+
return {
|
|
57
|
+
eligible: false,
|
|
58
|
+
reason: "The early bird period has ended",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Check price increase countdown
|
|
62
|
+
if (offer.priceIncreasesAt && currentDate > offer.priceIncreasesAt) {
|
|
63
|
+
return {
|
|
64
|
+
eligible: false,
|
|
65
|
+
reason: "This special pricing is no longer available",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Check max redemptions (total)
|
|
69
|
+
if (offer.maxRedemptions && offer.currentRedemptions >= offer.maxRedemptions) {
|
|
70
|
+
return {
|
|
71
|
+
eligible: false,
|
|
72
|
+
reason: "This offer has reached its maximum number of uses",
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Check max redemptions per user
|
|
76
|
+
if (offer.maxPerUser && userRedemptionCount >= offer.maxPerUser) {
|
|
77
|
+
return {
|
|
78
|
+
eligible: false,
|
|
79
|
+
reason: "You have reached the maximum number of times you can use this offer",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Check limited quantity
|
|
83
|
+
if (offer.limitedQuantity && offer.currentRedemptions >= offer.limitedQuantity) {
|
|
84
|
+
return {
|
|
85
|
+
eligible: false,
|
|
86
|
+
reason: "This offer is sold out",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Check quantity requirements for specific offer types
|
|
90
|
+
if (offer.offerType === SpecialOfferType.GROUP_DISCOUNT) {
|
|
91
|
+
if (offer.minGroupSize && quantity < offer.minGroupSize) {
|
|
92
|
+
return {
|
|
93
|
+
eligible: false,
|
|
94
|
+
reason: `You must purchase at least ${offer.minGroupSize} tickets to qualify for this group discount`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (offer.maxGroupSize && quantity > offer.maxGroupSize) {
|
|
98
|
+
return {
|
|
99
|
+
eligible: false,
|
|
100
|
+
reason: `This group discount only applies to groups of ${offer.maxGroupSize} or fewer`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (offer.offerType === SpecialOfferType.BOGO) {
|
|
105
|
+
const buyQuantity = offer.buyQuantity || 1;
|
|
106
|
+
const getQuantity = offer.getQuantity || 1;
|
|
107
|
+
const minQuantity = buyQuantity + getQuantity;
|
|
108
|
+
if (quantity < minQuantity) {
|
|
109
|
+
return {
|
|
110
|
+
eligible: false,
|
|
111
|
+
reason: `You must purchase at least ${minQuantity} tickets for this Buy ${buyQuantity} Get ${getQuantity} offer`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// All checks passed
|
|
116
|
+
return { eligible: true };
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Validate if an offer can stack with promo codes
|
|
120
|
+
*/
|
|
121
|
+
export const validateOfferStacking = (offer, hasPromoCode, hasOtherOffer) => {
|
|
122
|
+
if (hasPromoCode && !offer.canStackWithPromoCodes) {
|
|
123
|
+
return {
|
|
124
|
+
eligible: false,
|
|
125
|
+
reason: "This offer cannot be combined with promo codes",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (hasOtherOffer && !offer.canStackWithOtherOffers) {
|
|
129
|
+
return {
|
|
130
|
+
eligible: false,
|
|
131
|
+
reason: "This offer cannot be combined with other offers",
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return { eligible: true };
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Validate loyalty offer requirements
|
|
138
|
+
*/
|
|
139
|
+
export const validateLoyaltyRequirements = (offer, userEventAttendanceCount, isHostEvent) => {
|
|
140
|
+
if (offer.offerType !== SpecialOfferType.LOYALTY) {
|
|
141
|
+
return { eligible: true };
|
|
142
|
+
}
|
|
143
|
+
// Check event attendance requirement
|
|
144
|
+
if (offer.requiresEventAttendance && userEventAttendanceCount < offer.requiresEventAttendance) {
|
|
145
|
+
return {
|
|
146
|
+
eligible: false,
|
|
147
|
+
reason: `You must have attended at least ${offer.requiresEventAttendance} events to qualify for this loyalty offer`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Check if it's host-specific loyalty
|
|
151
|
+
if (offer.hostSpecificLoyalty && !isHostEvent) {
|
|
152
|
+
return {
|
|
153
|
+
eligible: false,
|
|
154
|
+
reason: "This loyalty offer only applies to events by this host",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return { eligible: true };
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Batch validate multiple offers for a user
|
|
161
|
+
*/
|
|
162
|
+
export const validateMultipleOffers = (offers, userId, quantity, currentDate, userRedemptions) => {
|
|
163
|
+
const results = new Map();
|
|
164
|
+
offers.forEach(offer => {
|
|
165
|
+
const userCount = userRedemptions.get(offer.id) || 0;
|
|
166
|
+
const result = validateOfferEligibility(offer, userId, quantity, currentDate, userCount);
|
|
167
|
+
results.set(offer.id, result);
|
|
168
|
+
});
|
|
169
|
+
return results;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Get time remaining until offer expires (for countdown timers)
|
|
173
|
+
*/
|
|
174
|
+
export const getTimeRemaining = (offer, currentDate) => {
|
|
175
|
+
const expiryDate = offer.endDate || offer.priceIncreasesAt || offer.availableUntil;
|
|
176
|
+
if (!expiryDate) {
|
|
177
|
+
return { expired: false, days: 999, hours: 0, minutes: 0, seconds: 0 };
|
|
178
|
+
}
|
|
179
|
+
const diff = expiryDate.getTime() - currentDate.getTime();
|
|
180
|
+
if (diff <= 0) {
|
|
181
|
+
return { expired: true, days: 0, hours: 0, minutes: 0, seconds: 0 };
|
|
182
|
+
}
|
|
183
|
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
184
|
+
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
185
|
+
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
|
|
186
|
+
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
|
|
187
|
+
return { expired: false, days, hours, minutes, seconds };
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=eligibilityValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eligibilityValidator.js","sourceRoot":"","sources":["../../../src/utils/discountEngine/eligibilityValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOpF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAA6B,EAC7B,MAAc,EACd,mBAA6B,EAAE,EACZ,EAAE;IACrB,mBAAmB;IACnB,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1D,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,8BAA8B,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE;SAChF,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,IAAI,SAAS,CAAC,cAAc,IAAI,gBAAgB,CAAC,MAAM,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;QACpF,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,wDAAwD;SACjE,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,uCAAuC;SAChD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAmB,EACnB,MAAc,EACd,QAAgB,EAChB,WAAiB,EACjB,sBAA8B,CAAC,EACZ,EAAE;IACrB,2BAA2B;IAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,gCAAgC;SACzC,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,CAAC,SAAS,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACrD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,wBAAwB,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE;SACvE,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,uBAAuB,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE;SACpE,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAC/D,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,iCAAiC;SAC1C,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,KAAK,CAAC,gBAAgB,IAAI,WAAW,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACnE,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,6CAA6C;SACtD,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7E,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,mDAAmD;SAC5D,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,KAAK,CAAC,UAAU,IAAI,mBAAmB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChE,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,qEAAqE;SAC9E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC/E,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,wBAAwB;SACjC,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,IAAI,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,KAAK,CAAC,YAAY,IAAI,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YACxD,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,8BAA8B,KAAK,CAAC,YAAY,6CAA6C;aACtG,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,IAAI,QAAQ,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YACxD,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,iDAAiD,KAAK,CAAC,YAAY,WAAW;aACvF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;QAE9C,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC3B,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,8BAA8B,WAAW,yBAAyB,WAAW,QAAQ,WAAW,QAAQ;aACjH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAmB,EACnB,YAAqB,EACrB,aAAsB,EACH,EAAE;IACrB,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,gDAAgD;SACzD,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QACpD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,iDAAiD;SAC1D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAmB,EACnB,wBAAgC,EAChC,WAAoB,EACD,EAAE;IACrB,IAAI,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,IAAI,KAAK,CAAC,uBAAuB,IAAI,wBAAwB,GAAG,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAC9F,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,mCAAmC,KAAK,CAAC,uBAAuB,2CAA2C;SACpH,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,wDAAwD;SACjE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAsB,EACtB,MAAc,EACd,QAAgB,EAChB,WAAiB,EACjB,eAAoC,EACJ,EAAE;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAErD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACrB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAmB,EAAE,WAAiB,EAMrE,EAAE;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,cAAc,CAAC;IAEnF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;IAE1D,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAExD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/discountEngine/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/discountEngine/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrenceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/recurrenceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAUjD,wBAAgB,sCAAsC,CACpD,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GACxC,IAAI,EAAE,CAMR;AAED,wBAAgB,uCAAuC,CACrD,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GACxC,QAAQ,EAAE,CAMZ;
|
|
1
|
+
{"version":3,"file":"recurrenceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/recurrenceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAUjD,wBAAgB,sCAAsC,CACpD,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GACxC,IAAI,EAAE,CAMR;AAED,wBAAgB,uCAAuC,CACrD,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GACxC,QAAQ,EAAE,CAMZ;AAwQD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,WAAW,GAAE,OAAe,GAC3B,MAAM,CAqBR;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,eAAe,GAChC,QAAQ,GAAG,SAAS,CAEtB"}
|
|
@@ -38,6 +38,10 @@ function getRecurringBashEventPossibleDatesTimesInternal(startDateTime, recurren
|
|
|
38
38
|
default:
|
|
39
39
|
console.error(`Unsupported frequency: ${recurrence.frequency}`);
|
|
40
40
|
}
|
|
41
|
+
// If repeatCount is specified, limit to that many occurrences
|
|
42
|
+
if (recurrence.repeatCount && recurrence.repeatCount > 0) {
|
|
43
|
+
recurrenceDates = recurrenceDates.slice(0, recurrence.repeatCount);
|
|
44
|
+
}
|
|
41
45
|
return recurrenceDates
|
|
42
46
|
.map((date) => date.toFormat(LUXON_DATETIME_FORMAT_ISO_LIKE))
|
|
43
47
|
.sort()
|
|
@@ -61,7 +65,10 @@ function getDailyRecurringDates(beginningDateTime, recurrence) {
|
|
|
61
65
|
throw new Error(`Cannot do a daily recurrence if the frequency isn't daily.`);
|
|
62
66
|
}
|
|
63
67
|
const interval = recurrence.interval ?? 1;
|
|
64
|
-
|
|
68
|
+
// Default to 1 year from now if no end date specified
|
|
69
|
+
const recurrenceEnds = recurrence.ends
|
|
70
|
+
? dateTimeFromDate(recurrence.ends).endOf("day")
|
|
71
|
+
: DateTime.local().plus({ years: 1 }).endOf("day");
|
|
65
72
|
const numberOfDays = recurrenceEnds.diff(beginningDateTime, "days").days;
|
|
66
73
|
const numberOfOccurrences = Math.ceil(numberOfDays / interval);
|
|
67
74
|
const recurrenceDates = [];
|
|
@@ -84,7 +91,9 @@ function getWeeklyRecurringDates(beginningDateTime, recurrence) {
|
|
|
84
91
|
throw new Error(`Cannot do a weekly recurrence if the frequency isn't weekly.`);
|
|
85
92
|
}
|
|
86
93
|
const interval = recurrence.interval ?? 1;
|
|
87
|
-
const recurrenceEnds =
|
|
94
|
+
const recurrenceEnds = recurrence.ends
|
|
95
|
+
? dateTimeFromDate(recurrence.ends).endOf("day")
|
|
96
|
+
: DateTime.local().plus({ years: 1 }).endOf("day");
|
|
88
97
|
const numberOfDays = recurrenceEnds.diff(beginningDateTime, "days").days;
|
|
89
98
|
const numberOfWeeks = Math.ceil(numberOfDays / 7 / interval); // Get the number of days and then round up so that we include the ending date
|
|
90
99
|
const recurrenceDates = [];
|
|
@@ -133,7 +142,9 @@ function getMonthlyRecurringDates(beginningDateTime, recurrence) {
|
|
|
133
142
|
throw new Error(`Cannot do a monthly recurrence if the frequency isn't monthly.`);
|
|
134
143
|
}
|
|
135
144
|
const interval = recurrence.interval ?? 1;
|
|
136
|
-
const recurrenceEnds =
|
|
145
|
+
const recurrenceEnds = recurrence.ends
|
|
146
|
+
? dateTimeFromDate(recurrence.ends).endOf("day")
|
|
147
|
+
: DateTime.local().plus({ years: 1 }).endOf("day");
|
|
137
148
|
const dayOfMonth = recurrence.repeatOnDayOfMonth ?? beginningDateTime.day;
|
|
138
149
|
const recurrenceDates = [];
|
|
139
150
|
let currentDate = beginningDateTime.set({ day: Math.min(dayOfMonth, beginningDateTime.daysInMonth || 31) });
|
|
@@ -166,7 +177,9 @@ function getYearlyRecurringDates(beginningDateTime, recurrence) {
|
|
|
166
177
|
throw new Error(`Cannot do a yearly recurrence if the frequency isn't yearly.`);
|
|
167
178
|
}
|
|
168
179
|
const interval = recurrence.interval ?? 1;
|
|
169
|
-
const recurrenceEnds =
|
|
180
|
+
const recurrenceEnds = recurrence.ends
|
|
181
|
+
? dateTimeFromDate(recurrence.ends).endOf("day")
|
|
182
|
+
: DateTime.local().plus({ years: 20 }).endOf("day");
|
|
170
183
|
// Use the repeatYearlyDate if provided, otherwise use the beginning date
|
|
171
184
|
const baseDate = recurrence.repeatYearlyDate
|
|
172
185
|
? dateTimeFromDate(recurrence.repeatYearlyDate)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrenceUtils.js","sourceRoot":"","sources":["../../src/utils/recurrenceUtils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recurrenceUtils.js","sourceRoot":"","sources":["../../src/utils/recurrenceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,UAAU,sCAAsC,CACpD,aAA8B,EAC9B,UAAyC;IAEzC,OAAO,+CAA+C,CACpD,aAAa,EACb,UAAU,EACV,IAAI,CACK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,aAA8B,EAC9B,UAAyC;IAEzC,OAAO,+CAA+C,CACpD,aAAa,EACb,UAAU,EACV,KAAK,CACQ,CAAC;AAClB,CAAC;AAED,SAAS,+CAA+C,CACtD,aAA8B,EAC9B,UAAyC,EACzC,MAAe;IAEf,IACE,CAAC,UAAU;QACX,CAAC,UAAU,CAAC,SAAS;QACrB,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,KAAK,EACjD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,eAAe,GAAe,EAAE,CAAC;IAErC,0EAA0E;IAC1E,kEAAkE;IAClE,MAAM,kBAAkB,GACtB,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,OAAO;QACnD,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,MAAM,CAAC;IAErD,MAAM,aAAa,GAAG,kBAAkB;QACtC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClF,CAAC,CAAC,iCAAiC,CAAC,aAAa,CAAa,CAAC;IAEjE,QAAQ,UAAU,CAAC,SAAS,EAAE,CAAC;QAC7B,KAAK,kBAAkB,CAAC,KAAK;YAC3B,eAAe,GAAG,sBAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM;QACR,KAAK,kBAAkB,CAAC,MAAM;YAC5B,eAAe,GAAG,uBAAuB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACrE,MAAM;QACR,KAAK,kBAAkB,CAAC,OAAO;YAC7B,eAAe,GAAG,wBAAwB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM;QACR,KAAK,kBAAkB,CAAC,MAAM;YAC5B,eAAe,GAAG,uBAAuB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACrE,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CAAC,0BAA0B,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,8DAA8D;IAC9D,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACzD,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,eAAe;SACnB,GAAG,CAAC,CAAC,IAAc,EAAU,EAAE,CAC9B,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAC9C;SACA,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,OAAe,EAAmB,EAAE;QACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CACnC,OAAO,EACP,8BAA8B,CAC/B,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,iBAA2B,EAC3B,UAAsB;IAEtB,IAAI,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;IAE1C,sDAAsD;IACtD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC;IAE/D,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,IAAI,WAAW,GAAG,iBAAiB,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9E,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;YACrC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,iBAA2B,EAC3B,UAAsB;IAEtB,IAAI,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,8EAA8E;IAE5I,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,IAAI,wBAAwB,GAAG,iBAAiB,CAAC;IAEjD,mDAAmD;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,OAAO,GAAoB,IAAI,CAAC;QACpC,KAAK,MAAM,aAAa,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YACpD,OAAO,GAAG,wBAAwB,CAAC,GAAG,CAAC;gBACrC,OAAO,EAAE,YAA8B;aACxC,CAAC,CAAC;YACH,IAAI,OAAO,GAAG,cAAc,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;gBAC5D,SAAS,CAAC,oEAAoE;YAChF,CAAC;YACD,6EAA6E;YAC7E,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACtD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,wBAAwB,GAAG,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,IAAc,EACd,QAAgB;IAEhB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU;IAC1B,CAAC;IACD,qGAAqG;IACrG,MAAM,iBAAiB,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAC/B,iBAA2B,EAC3B,UAAsB;IAEtB,IAAI,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,UAAU,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,GAAG,CAAC;IAE1E,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,IAAI,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAE5G,6EAA6E;IAC7E,IAAI,WAAW,GAAG,iBAAiB,EAAE,CAAC;QACpC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,WAAW,IAAI,cAAc,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACzD,UAAU,EAAE,CAAC;QAEb,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;YACrC,2CAA2C;YAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;YACrE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,4DAA4D;QAC5D,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAC9B,iBAA2B,EAC3B,UAAsB;IAEtB,IAAI,UAAU,CAAC,SAAS,KAAK,kBAAkB,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEtD,yEAAyE;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB;QAC1C,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC;IAEtB,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,IAAI,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC7B,IAAI,EAAE,iBAAiB,CAAC,IAAI;QAC5B,IAAI,EAAE,iBAAiB,CAAC,IAAI;QAC5B,MAAM,EAAE,iBAAiB,CAAC,MAAM;QAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM;KACjC,CAAC,CAAC;IAEH,oEAAoE;IACpE,IAAI,WAAW,GAAG,iBAAiB,EAAE,CAAC;QACpC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,WAAW,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;YACrC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QACD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAwB,EACxB,QAA4B,EAC5B,cAAuB,KAAK;IAE5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,GAAW,IAAI,CAAC;IAC1B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB,CAAC,KAAK;YAC3B,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YACnC,MAAM;QACR,KAAK,kBAAkB,CAAC,MAAM;YAC5B,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACrC,MAAM;QACR,KAAK,kBAAkB,CAAC,OAAO;YAC7B,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC,MAAM;QACR,KAAK,kBAAkB,CAAC,MAAM;YAC5B,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACrC,MAAM;IACV,CAAC;IACD,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,gBAAiC;IAEjC,OAAO,yCAAyC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,yCAAyC,CAChD,gBAAiC,EACjC,SAAkB;IAElB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,4CAA4C;IAC5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzC,MAAM,gBAAgB,GAAG,eAAe,CACtC,eAAe,CAAC,QAAQ,EAAE,EAC1B,gBAAgB,CACjB,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC;IAChE,CAAC;AACH,CAAC"}
|