@bash-app/bash-common 30.246.0 → 30.253.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.
Files changed (180) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/bashSectionTitleForBashType.test.js +32 -1
  3. package/dist/__tests__/bashSectionTitleForBashType.test.js.map +1 -1
  4. package/dist/__tests__/definitionsHelpers.test.d.ts +2 -0
  5. package/dist/__tests__/definitionsHelpers.test.d.ts.map +1 -0
  6. package/dist/__tests__/definitionsHelpers.test.js +85 -0
  7. package/dist/__tests__/definitionsHelpers.test.js.map +1 -0
  8. package/dist/__tests__/extendedSchemas.test.d.ts +2 -0
  9. package/dist/__tests__/extendedSchemas.test.d.ts.map +1 -0
  10. package/dist/__tests__/extendedSchemas.test.js +40 -0
  11. package/dist/__tests__/extendedSchemas.test.js.map +1 -0
  12. package/dist/__tests__/membershipDefinitions.test.d.ts +2 -0
  13. package/dist/__tests__/membershipDefinitions.test.d.ts.map +1 -0
  14. package/dist/__tests__/membershipDefinitions.test.js +95 -0
  15. package/dist/__tests__/membershipDefinitions.test.js.map +1 -0
  16. package/dist/__tests__/ticketAdmission.test.d.ts +5 -0
  17. package/dist/__tests__/ticketAdmission.test.d.ts.map +1 -0
  18. package/dist/__tests__/ticketAdmission.test.js +42 -0
  19. package/dist/__tests__/ticketAdmission.test.js.map +1 -0
  20. package/dist/__tests__/utmAttribution.test.d.ts +2 -0
  21. package/dist/__tests__/utmAttribution.test.d.ts.map +1 -0
  22. package/dist/__tests__/utmAttribution.test.js +92 -0
  23. package/dist/__tests__/utmAttribution.test.js.map +1 -0
  24. package/dist/definitions.d.ts +18 -5
  25. package/dist/definitions.d.ts.map +1 -1
  26. package/dist/definitions.js +84 -22
  27. package/dist/definitions.js.map +1 -1
  28. package/dist/extendedSchemas.d.ts +41 -1
  29. package/dist/extendedSchemas.d.ts.map +1 -1
  30. package/dist/extendedSchemas.js +27 -0
  31. package/dist/extendedSchemas.js.map +1 -1
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/sms/smsTemplates.d.ts +27 -0
  37. package/dist/sms/smsTemplates.d.ts.map +1 -0
  38. package/dist/sms/smsTemplates.js +11 -0
  39. package/dist/sms/smsTemplates.js.map +1 -0
  40. package/dist/utils/__tests__/addressUtils.test.d.ts +2 -0
  41. package/dist/utils/__tests__/addressUtils.test.d.ts.map +1 -0
  42. package/dist/utils/__tests__/addressUtils.test.js +138 -0
  43. package/dist/utils/__tests__/addressUtils.test.js.map +1 -0
  44. package/dist/utils/__tests__/apiUtils.test.d.ts +5 -0
  45. package/dist/utils/__tests__/apiUtils.test.d.ts.map +1 -0
  46. package/dist/utils/__tests__/apiUtils.test.js +161 -0
  47. package/dist/utils/__tests__/apiUtils.test.js.map +1 -0
  48. package/dist/utils/__tests__/arrayUtils.test.d.ts +2 -0
  49. package/dist/utils/__tests__/arrayUtils.test.d.ts.map +1 -0
  50. package/dist/utils/__tests__/arrayUtils.test.js +23 -0
  51. package/dist/utils/__tests__/arrayUtils.test.js.map +1 -0
  52. package/dist/utils/__tests__/blogUtils.test.d.ts +2 -0
  53. package/dist/utils/__tests__/blogUtils.test.d.ts.map +1 -0
  54. package/dist/utils/__tests__/blogUtils.test.js +102 -0
  55. package/dist/utils/__tests__/blogUtils.test.js.map +1 -0
  56. package/dist/utils/__tests__/dateTimeUtils.test.d.ts +2 -0
  57. package/dist/utils/__tests__/dateTimeUtils.test.d.ts.map +1 -0
  58. package/dist/utils/__tests__/dateTimeUtils.test.js +180 -0
  59. package/dist/utils/__tests__/dateTimeUtils.test.js.map +1 -0
  60. package/dist/utils/__tests__/discountEngine/discountCalculator.test.d.ts +2 -0
  61. package/dist/utils/__tests__/discountEngine/discountCalculator.test.d.ts.map +1 -0
  62. package/dist/utils/__tests__/discountEngine/discountCalculator.test.js +356 -0
  63. package/dist/utils/__tests__/discountEngine/discountCalculator.test.js.map +1 -0
  64. package/dist/utils/__tests__/generalDateTimeUtils.test.d.ts +2 -0
  65. package/dist/utils/__tests__/generalDateTimeUtils.test.d.ts.map +1 -0
  66. package/dist/utils/__tests__/generalDateTimeUtils.test.js +26 -0
  67. package/dist/utils/__tests__/generalDateTimeUtils.test.js.map +1 -0
  68. package/dist/utils/__tests__/luxonUtils.test.d.ts +2 -0
  69. package/dist/utils/__tests__/luxonUtils.test.d.ts.map +1 -0
  70. package/dist/utils/__tests__/luxonUtils.test.js +139 -0
  71. package/dist/utils/__tests__/luxonUtils.test.js.map +1 -0
  72. package/dist/utils/__tests__/mathUtils.test.d.ts +5 -0
  73. package/dist/utils/__tests__/mathUtils.test.d.ts.map +1 -0
  74. package/dist/utils/__tests__/mathUtils.test.js +26 -0
  75. package/dist/utils/__tests__/mathUtils.test.js.map +1 -0
  76. package/dist/utils/__tests__/objUtils.test.d.ts +5 -0
  77. package/dist/utils/__tests__/objUtils.test.d.ts.map +1 -0
  78. package/dist/utils/__tests__/objUtils.test.js +41 -0
  79. package/dist/utils/__tests__/objUtils.test.js.map +1 -0
  80. package/dist/utils/__tests__/paymentUtils.test.js +48 -1
  81. package/dist/utils/__tests__/paymentUtils.test.js.map +1 -1
  82. package/dist/utils/__tests__/qrCodeUtils.test.js +16 -1
  83. package/dist/utils/__tests__/qrCodeUtils.test.js.map +1 -1
  84. package/dist/utils/__tests__/reviewUtils.test.d.ts +2 -0
  85. package/dist/utils/__tests__/reviewUtils.test.d.ts.map +1 -0
  86. package/dist/utils/__tests__/reviewUtils.test.js +49 -0
  87. package/dist/utils/__tests__/reviewUtils.test.js.map +1 -0
  88. package/dist/utils/__tests__/slugUtils.test.d.ts +2 -0
  89. package/dist/utils/__tests__/slugUtils.test.d.ts.map +1 -0
  90. package/dist/utils/__tests__/slugUtils.test.js +103 -0
  91. package/dist/utils/__tests__/slugUtils.test.js.map +1 -0
  92. package/dist/utils/__tests__/sortUtils.test.d.ts +5 -0
  93. package/dist/utils/__tests__/sortUtils.test.d.ts.map +1 -0
  94. package/dist/utils/__tests__/sortUtils.test.js +28 -0
  95. package/dist/utils/__tests__/sortUtils.test.js.map +1 -0
  96. package/dist/utils/__tests__/stringUtils.test.d.ts +2 -0
  97. package/dist/utils/__tests__/stringUtils.test.d.ts.map +1 -0
  98. package/dist/utils/__tests__/stringUtils.test.js +27 -0
  99. package/dist/utils/__tests__/stringUtils.test.js.map +1 -0
  100. package/dist/utils/__tests__/ticketListUtils.test.d.ts +2 -0
  101. package/dist/utils/__tests__/ticketListUtils.test.d.ts.map +1 -0
  102. package/dist/utils/__tests__/ticketListUtils.test.js +41 -0
  103. package/dist/utils/__tests__/ticketListUtils.test.js.map +1 -0
  104. package/dist/utils/__tests__/typeUtils.test.d.ts +2 -0
  105. package/dist/utils/__tests__/typeUtils.test.d.ts.map +1 -0
  106. package/dist/utils/__tests__/typeUtils.test.js +11 -0
  107. package/dist/utils/__tests__/typeUtils.test.js.map +1 -0
  108. package/dist/utils/__tests__/userSubscriptionUtils.test.d.ts +5 -0
  109. package/dist/utils/__tests__/userSubscriptionUtils.test.d.ts.map +1 -0
  110. package/dist/utils/__tests__/userSubscriptionUtils.test.js +66 -0
  111. package/dist/utils/__tests__/userSubscriptionUtils.test.js.map +1 -0
  112. package/dist/utils/__tests__/userUtils.test.d.ts +2 -0
  113. package/dist/utils/__tests__/userUtils.test.d.ts.map +1 -0
  114. package/dist/utils/__tests__/userUtils.test.js +34 -0
  115. package/dist/utils/__tests__/userUtils.test.js.map +1 -0
  116. package/dist/utils/__tests__/venueTypeFormatter.test.d.ts +2 -0
  117. package/dist/utils/__tests__/venueTypeFormatter.test.d.ts.map +1 -0
  118. package/dist/utils/__tests__/venueTypeFormatter.test.js +25 -0
  119. package/dist/utils/__tests__/venueTypeFormatter.test.js.map +1 -0
  120. package/dist/utils/service/__tests__/regexUtils.test.d.ts +2 -0
  121. package/dist/utils/service/__tests__/regexUtils.test.d.ts.map +1 -0
  122. package/dist/utils/service/__tests__/regexUtils.test.js +51 -0
  123. package/dist/utils/service/__tests__/regexUtils.test.js.map +1 -0
  124. package/dist/utils/service/__tests__/serviceDBUtils.test.d.ts +2 -0
  125. package/dist/utils/service/__tests__/serviceDBUtils.test.d.ts.map +1 -0
  126. package/dist/utils/service/__tests__/serviceDBUtils.test.js +17 -0
  127. package/dist/utils/service/__tests__/serviceDBUtils.test.js.map +1 -0
  128. package/dist/utils/service/__tests__/serviceFeaturedSortUtils.test.d.ts +2 -0
  129. package/dist/utils/service/__tests__/serviceFeaturedSortUtils.test.d.ts.map +1 -0
  130. package/dist/utils/service/__tests__/serviceFeaturedSortUtils.test.js +60 -0
  131. package/dist/utils/service/__tests__/serviceFeaturedSortUtils.test.js.map +1 -0
  132. package/dist/utils/service/__tests__/serviceUtils.test.d.ts +2 -0
  133. package/dist/utils/service/__tests__/serviceUtils.test.d.ts.map +1 -0
  134. package/dist/utils/service/__tests__/serviceUtils.test.js +135 -0
  135. package/dist/utils/service/__tests__/serviceUtils.test.js.map +1 -0
  136. package/dist/utils/service/serviceFeaturedSortUtils.d.ts.map +1 -1
  137. package/dist/utils/service/serviceFeaturedSortUtils.js +5 -1
  138. package/dist/utils/service/serviceFeaturedSortUtils.js.map +1 -1
  139. package/dist/utils/ticketListUtils.d.ts.map +1 -1
  140. package/dist/utils/ticketListUtils.js +11 -7
  141. package/dist/utils/ticketListUtils.js.map +1 -1
  142. package/package.json +1 -1
  143. package/prisma/schema.prisma +47 -0
  144. package/src/__tests__/bashSectionTitleForBashType.test.ts +48 -1
  145. package/src/__tests__/definitionsHelpers.test.ts +136 -0
  146. package/src/__tests__/extendedSchemas.test.ts +50 -0
  147. package/src/__tests__/membershipDefinitions.test.ts +144 -0
  148. package/src/__tests__/ticketAdmission.test.ts +73 -0
  149. package/src/__tests__/utmAttribution.test.ts +118 -0
  150. package/src/definitions.ts +86 -23
  151. package/src/extendedSchemas.ts +35 -1
  152. package/src/index.ts +1 -0
  153. package/src/sms/smsTemplates.ts +20 -0
  154. package/src/utils/__tests__/addressUtils.test.ts +176 -0
  155. package/src/utils/__tests__/apiUtils.test.ts +219 -0
  156. package/src/utils/__tests__/arrayUtils.test.ts +26 -0
  157. package/src/utils/__tests__/blogUtils.test.ts +145 -0
  158. package/src/utils/__tests__/dateTimeUtils.test.ts +233 -0
  159. package/src/utils/__tests__/discountEngine/discountCalculator.test.ts +410 -0
  160. package/src/utils/__tests__/generalDateTimeUtils.test.ts +34 -0
  161. package/src/utils/__tests__/luxonUtils.test.ts +171 -0
  162. package/src/utils/__tests__/mathUtils.test.ts +30 -0
  163. package/src/utils/__tests__/objUtils.test.ts +48 -0
  164. package/src/utils/__tests__/paymentUtils.test.ts +59 -0
  165. package/src/utils/__tests__/qrCodeUtils.test.ts +28 -1
  166. package/src/utils/__tests__/reviewUtils.test.ts +65 -0
  167. package/src/utils/__tests__/slugUtils.test.ts +143 -0
  168. package/src/utils/__tests__/sortUtils.test.ts +33 -0
  169. package/src/utils/__tests__/stringUtils.test.ts +37 -0
  170. package/src/utils/__tests__/ticketListUtils.test.ts +47 -0
  171. package/src/utils/__tests__/typeUtils.test.ts +12 -0
  172. package/src/utils/__tests__/userSubscriptionUtils.test.ts +87 -0
  173. package/src/utils/__tests__/userUtils.test.ts +41 -0
  174. package/src/utils/__tests__/venueTypeFormatter.test.ts +31 -0
  175. package/src/utils/service/__tests__/regexUtils.test.ts +66 -0
  176. package/src/utils/service/__tests__/serviceDBUtils.test.ts +19 -0
  177. package/src/utils/service/__tests__/serviceFeaturedSortUtils.test.ts +67 -0
  178. package/src/utils/service/__tests__/serviceUtils.test.ts +190 -0
  179. package/src/utils/service/serviceFeaturedSortUtils.ts +5 -1
  180. package/src/utils/ticketListUtils.ts +13 -6
package/README.md CHANGED
@@ -6,3 +6,7 @@ If you have issues with a Prisma enum being undefined:
6
6
 
7
7
  You can add an unused enum to the model `unusedModelButNeededForSomeTypesToBeDefinedForTypescript`
8
8
  2. Delete node_modules directory and reinstall.
9
+
10
+ After **pulling** changes to `prisma/schema.prisma` (new fields, models), run **`npx prisma generate`** locally before **`npm run typecheck`**. Otherwise `satisfies Prisma.UserSelect` in `extendedSchemas.ts` may error until the generated client catches up (`npm run build` / CI does this).
11
+
12
+ <!-- housekeeping: README bump (cosmetic) -->
@@ -13,7 +13,7 @@
13
13
  * a `" bashes"` suffix tacked on.
14
14
  */
15
15
  import { BashEventType } from "@prisma/client";
16
- import { bashSectionTitleForBashType } from "../definitions.js";
16
+ import { bashSectionTitleForBashType, canonicalBashEventRowKey, } from "../definitions.js";
17
17
  describe("bashSectionTitleForBashType", () => {
18
18
  describe("free-text scraper section keys (non-enum)", () => {
19
19
  it("returns 'Raves' verbatim, not 'Raves bashes'", () => {
@@ -71,5 +71,36 @@ describe("bashSectionTitleForBashType", () => {
71
71
  expect(bashSectionTitleForBashType("Party")).toBe("Parties");
72
72
  });
73
73
  });
74
+ describe("keys that diverge from Prisma enum literals (case or display labels)", () => {
75
+ it("lower-case prisma value 'party' → 'Parties'", () => {
76
+ expect(bashSectionTitleForBashType("party")).toBe("Parties");
77
+ });
78
+ it("lower-case 'fundraiser' → 'Fundraisers'", () => {
79
+ expect(bashSectionTitleForBashType("fundraiser")).toBe("Fundraisers");
80
+ });
81
+ it("singular display label row key 'House Party' → 'House Parties'", () => {
82
+ expect(bashSectionTitleForBashType("House Party")).toBe("House Parties");
83
+ });
84
+ it("trimmed stray whitespace still pluralizes", () => {
85
+ expect(bashSectionTitleForBashType(" Fundraiser ")).toBe("Fundraisers");
86
+ });
87
+ });
88
+ describe("already-plural enum headings", () => {
89
+ it("normalizes casing when the row key matches a pluralized enum title", () => {
90
+ expect(bashSectionTitleForBashType("House Parties")).toBe("House Parties");
91
+ expect(bashSectionTitleForBashType("house parties")).toBe("House Parties");
92
+ expect(bashSectionTitleForBashType("Comedy Shows")).toBe("Comedy Shows");
93
+ });
94
+ });
95
+ });
96
+ describe("canonicalBashEventRowKey", () => {
97
+ it("maps singular labels and enum literals to the Prisma enum string", () => {
98
+ expect(canonicalBashEventRowKey("House Party")).toBe(BashEventType.HouseParty);
99
+ expect(canonicalBashEventRowKey(BashEventType.HouseParty)).toBe(BashEventType.HouseParty);
100
+ expect(canonicalBashEventRowKey("houseparty")).toBe(BashEventType.HouseParty);
101
+ });
102
+ it("returns trimmed free-text when no enum matches", () => {
103
+ expect(canonicalBashEventRowKey("Graduation")).toBe("Graduation");
104
+ });
74
105
  });
75
106
  //# sourceMappingURL=bashSectionTitleForBashType.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=definitionsHelpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitionsHelpers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/definitionsHelpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { describe, expect, test } from "@jest/globals";
2
+ import { createEmptyFilterFields, removeDataFromResult, canonicalBashEventRowKey, PASSWORD_REQUIREMENTS_REGEX, PASSWORD_MIN_LENGTH, EMPTY_FILTER_FIELDS, ticketIsPaidForEventAdmission, isUnpaidPayAtDoorTicket, TICKET_PURCHASE_TYPE_COMP, TICKET_PURCHASE_TYPE_PAY_AT_DOOR, } from "../definitions.js";
3
+ describe("definitions helpers", () => {
4
+ describe("createEmptyFilterFields", () => {
5
+ test("returns fresh arrays not shared with EMPTY_FILTER_FIELDS", () => {
6
+ const a = createEmptyFilterFields();
7
+ const b = createEmptyFilterFields();
8
+ a.price.push("free");
9
+ expect(b.price).toEqual([]);
10
+ expect(EMPTY_FILTER_FIELDS.price).toEqual([]);
11
+ });
12
+ test("includes default boolean flags", () => {
13
+ expect(createEmptyFilterFields()).toMatchObject({
14
+ hasOpenTasks: false,
15
+ acceptsBashPoints: false,
16
+ ambashadorOnly: false,
17
+ });
18
+ });
19
+ });
20
+ describe("removeDataFromResult", () => {
21
+ test("strips data while preserving error metadata", () => {
22
+ const result = {
23
+ data: { id: "1" },
24
+ error: true,
25
+ code: "ERR",
26
+ };
27
+ expect(removeDataFromResult(result)).toEqual({ error: true, code: "ERR" });
28
+ });
29
+ test("returns undefined for nullish input", () => {
30
+ expect(removeDataFromResult(null)).toBeUndefined();
31
+ expect(removeDataFromResult(undefined)).toBeUndefined();
32
+ });
33
+ });
34
+ describe("canonicalBashEventRowKey", () => {
35
+ test("normalizes singular labels to enum keys", () => {
36
+ expect(canonicalBashEventRowKey("House Party")).toBe("HouseParty");
37
+ });
38
+ test("passes through unknown trimmed values", () => {
39
+ expect(canonicalBashEventRowKey(" Custom Row ")).toBe("Custom Row");
40
+ });
41
+ test("returns empty string for blank input", () => {
42
+ expect(canonicalBashEventRowKey(" ")).toBe("");
43
+ });
44
+ });
45
+ describe("PASSWORD_REQUIREMENTS_REGEX", () => {
46
+ test("requires min length and mixed character classes", () => {
47
+ expect(PASSWORD_MIN_LENGTH).toBe(8);
48
+ expect(PASSWORD_REQUIREMENTS_REGEX.test("Abcd1234!")).toBe(true);
49
+ expect(PASSWORD_REQUIREMENTS_REGEX.test("Sh0rt!")).toBe(false);
50
+ expect(PASSWORD_REQUIREMENTS_REGEX.test("alllowercase1!")).toBe(false);
51
+ });
52
+ });
53
+ describe("ticketIsPaidForEventAdmission", () => {
54
+ test("free tiers always admit without payment", () => {
55
+ expect(ticketIsPaidForEventAdmission({ purchaseType: "USD", paidOn: null }, 0)).toBe(true);
56
+ });
57
+ test("comp tickets admit without paidOn", () => {
58
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_COMP, paidOn: null }, 2500)).toBe(true);
59
+ });
60
+ test("pay-at-door requires paidOn when tier has price", () => {
61
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: null }, 1000)).toBe(false);
62
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: new Date() }, 1000)).toBe(true);
63
+ });
64
+ test("standard paid tickets require paidOn", () => {
65
+ expect(ticketIsPaidForEventAdmission({ purchaseType: "USD", paidOn: null }, 500)).toBe(false);
66
+ expect(ticketIsPaidForEventAdmission({ purchaseType: "USD", paidOn: new Date() }, 500)).toBe(true);
67
+ });
68
+ });
69
+ describe("isUnpaidPayAtDoorTicket", () => {
70
+ test("true only for pay-at-door without paidOn", () => {
71
+ expect(isUnpaidPayAtDoorTicket({
72
+ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR,
73
+ paidOn: null,
74
+ })).toBe(true);
75
+ });
76
+ test("false once paid or for other purchase types", () => {
77
+ expect(isUnpaidPayAtDoorTicket({
78
+ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR,
79
+ paidOn: new Date(),
80
+ })).toBe(false);
81
+ expect(isUnpaidPayAtDoorTicket({ purchaseType: "USD", paidOn: null })).toBe(false);
82
+ });
83
+ });
84
+ });
85
+ //# sourceMappingURL=definitionsHelpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitionsHelpers.test.js","sourceRoot":"","sources":["../../src/__tests__/definitionsHelpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extendedSchemas.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedSchemas.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/extendedSchemas.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, test } from "@jest/globals";
2
+ import { BASH_EVENT_DATA_TO_CLONE, BASH_EVENT_DATA_TO_REMOVE, FRONT_END_USER_DATA_TO_SELECT, PUBLIC_USER_SUBSCRIPTION_DATA_TO_SELECT, TICKET_TIER_DATA_TO_INCLUDE, } from "../extendedSchemas.js";
3
+ describe("extendedSchemas exports", () => {
4
+ test("PUBLIC_USER_SUBSCRIPTION_DATA_TO_SELECT includes subscription counters", () => {
5
+ expect(PUBLIC_USER_SUBSCRIPTION_DATA_TO_SELECT).toMatchObject({
6
+ type: true,
7
+ status: true,
8
+ ownerId: true,
9
+ subscriptionCount: true,
10
+ listedCount: true,
11
+ });
12
+ });
13
+ test("FRONT_END_USER_DATA_TO_SELECT exposes public profile fields", () => {
14
+ expect(FRONT_END_USER_DATA_TO_SELECT).toMatchObject({
15
+ id: true,
16
+ username: true,
17
+ email: true,
18
+ givenName: true,
19
+ familyName: true,
20
+ });
21
+ });
22
+ test("TICKET_TIER_DATA_TO_INCLUDE nests tickets and promoCodes", () => {
23
+ expect(TICKET_TIER_DATA_TO_INCLUDE.tickets).toBeDefined();
24
+ expect(TICKET_TIER_DATA_TO_INCLUDE.promoCodes).toBe(true);
25
+ });
26
+ test("BASH_EVENT_DATA_TO_CLONE lists cloneable relations", () => {
27
+ expect(BASH_EVENT_DATA_TO_CLONE).toEqual([
28
+ "ticketTiers",
29
+ "media",
30
+ "recurrence",
31
+ "invitations",
32
+ ]);
33
+ });
34
+ test("BASH_EVENT_DATA_TO_REMOVE strips nested creator and tasks", () => {
35
+ expect(BASH_EVENT_DATA_TO_REMOVE).toContain("creator");
36
+ expect(BASH_EVENT_DATA_TO_REMOVE).toContain("eventTasks");
37
+ expect(BASH_EVENT_DATA_TO_REMOVE).toContain("tickets");
38
+ });
39
+ });
40
+ //# sourceMappingURL=extendedSchemas.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedSchemas.test.js","sourceRoot":"","sources":["../../src/__tests__/extendedSchemas.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,uCAAuC,EACvC,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,uCAAuC,CAAC,CAAC,aAAa,CAAC;YAC5D,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,iBAAiB,EAAE,IAAI;YACvB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,6BAA6B,CAAC,CAAC,aAAa,CAAC;YAClD,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;YACvC,aAAa;YACb,OAAO;YACP,YAAY;YACZ,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=membershipDefinitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membershipDefinitions.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/membershipDefinitions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import { describe, expect, test } from "@jest/globals";
2
+ import { MembershipTier } from "@prisma/client";
3
+ import { BashPassTier } from "@prisma/client";
4
+ import { calculateBashEventFee, calculateServiceBookingFee, calculatePartnerPaymentFee, isTrustedHostMembershipTier, hasFeatureAccess, getRequiredTierForFeature, hasFeatureLimit, getFeatureLimit, hasReachedFeatureLimit, MEMBERSHIP_FEATURES, BASIC_TIER_MAX_PROMO_CODES_PER_EVENT, MEMBERSHIP_BASH_PASS_TIER, MEMBERSHIP_TIER_ORDER, MEMBERSHIP_TIER_HIERARCHY, } from "../membershipDefinitions.js";
5
+ describe("membershipDefinitions helpers", () => {
6
+ describe("fee calculators", () => {
7
+ test("calculateBashEventFee applies percent, minimum, and cap", () => {
8
+ expect(calculateBashEventFee(10000, MembershipTier.Basic)).toBeGreaterThanOrEqual(0);
9
+ expect(calculateBashEventFee(0, MembershipTier.Premium)).toBe(calculateBashEventFee(1, MembershipTier.Premium));
10
+ });
11
+ test("calculateServiceBookingFee includes Stripe fixed fee", () => {
12
+ const fee = calculateServiceBookingFee(10000, MembershipTier.Basic);
13
+ expect(fee).toBeGreaterThan(0);
14
+ });
15
+ test("calculatePartnerPaymentFee scales with amount", () => {
16
+ const small = calculatePartnerPaymentFee(1000, MembershipTier.Pro);
17
+ const large = calculatePartnerPaymentFee(100000, MembershipTier.Pro);
18
+ expect(large).toBeGreaterThan(small);
19
+ });
20
+ });
21
+ describe("isTrustedHostMembershipTier", () => {
22
+ test("Premium and above are trusted", () => {
23
+ expect(isTrustedHostMembershipTier(MembershipTier.Premium)).toBe(true);
24
+ expect(isTrustedHostMembershipTier(MembershipTier.Legend)).toBe(true);
25
+ });
26
+ test("Basic and missing tier are not trusted", () => {
27
+ expect(isTrustedHostMembershipTier(MembershipTier.Basic)).toBe(false);
28
+ expect(isTrustedHostMembershipTier(null)).toBe(false);
29
+ });
30
+ });
31
+ describe("hasFeatureAccess", () => {
32
+ test("Basic gets promo codes", () => {
33
+ expect(hasFeatureAccess(MembershipTier.Basic, MEMBERSHIP_FEATURES.PROMO_CODES)).toBe(true);
34
+ });
35
+ test("Pro unlocks vendor directory", () => {
36
+ expect(hasFeatureAccess(MembershipTier.Pro, MEMBERSHIP_FEATURES.VENDOR_DIRECTORY)).toBe(true);
37
+ expect(hasFeatureAccess(MembershipTier.Premium, MEMBERSHIP_FEATURES.VENDOR_DIRECTORY)).toBe(false);
38
+ });
39
+ test("unknown feature returns false", () => {
40
+ expect(hasFeatureAccess(MembershipTier.Legend, "not_a_feature")).toBe(false);
41
+ });
42
+ });
43
+ describe("getRequiredTierForFeature", () => {
44
+ test("returns minimum tier that unlocks feature", () => {
45
+ expect(getRequiredTierForFeature(MEMBERSHIP_FEATURES.PROMO_CODES)).toBe(MembershipTier.Basic);
46
+ expect(getRequiredTierForFeature(MEMBERSHIP_FEATURES.VENDOR_DIRECTORY)).toBe(MembershipTier.Pro);
47
+ });
48
+ });
49
+ describe("hasFeatureLimit / getFeatureLimit", () => {
50
+ test("reads boolean limits from MEMBERSHIP_LIMITS", () => {
51
+ expect(hasFeatureLimit(MembershipTier.Basic, "canCreateEvents")).toBe(true);
52
+ expect(hasFeatureLimit(MembershipTier.Basic, "analyticsAccess")).toBe(false);
53
+ expect(getFeatureLimit(MembershipTier.Pro, "maxServiceListings")).toBe(3);
54
+ });
55
+ });
56
+ describe("hasReachedFeatureLimit", () => {
57
+ test("blocks when featured event quota is exhausted", () => {
58
+ expect(hasReachedFeatureLimit(MembershipTier.Pro, "featuredEvents", 1)).toBe(true);
59
+ expect(hasReachedFeatureLimit(MembershipTier.Pro, "featuredEvents", 0)).toBe(false);
60
+ });
61
+ });
62
+ test("Basic tier promo code cap constant", () => {
63
+ expect(BASIC_TIER_MAX_PROMO_CODES_PER_EVENT).toBe(3);
64
+ });
65
+ describe("tier ordering constants", () => {
66
+ test("MEMBERSHIP_TIER_HIERARCHY starts at Basic and ends at Legend", () => {
67
+ expect(MEMBERSHIP_TIER_HIERARCHY[0]).toBe(MembershipTier.Basic);
68
+ expect(MEMBERSHIP_TIER_HIERARCHY.at(-1)).toBe(MembershipTier.Legend);
69
+ });
70
+ test("MEMBERSHIP_TIER_ORDER increases with tier level", () => {
71
+ expect(MEMBERSHIP_TIER_ORDER[MembershipTier.Basic]).toBeLessThan(MEMBERSHIP_TIER_ORDER[MembershipTier.Premium]);
72
+ expect(MEMBERSHIP_TIER_ORDER[MembershipTier.Pro]).toBeLessThan(MEMBERSHIP_TIER_ORDER[MembershipTier.Legend]);
73
+ });
74
+ });
75
+ describe("MEMBERSHIP_BASH_PASS_TIER", () => {
76
+ test("maps paid membership tiers to bundled BashPass levels", () => {
77
+ expect(MEMBERSHIP_BASH_PASS_TIER[MembershipTier.Premium]).toBe(BashPassTier.LITE);
78
+ expect(MEMBERSHIP_BASH_PASS_TIER[MembershipTier.Pro]).toBe(BashPassTier.STANDARD);
79
+ expect(MEMBERSHIP_BASH_PASS_TIER[MembershipTier.Elite]).toBe(BashPassTier.UNLIMITED);
80
+ expect(MEMBERSHIP_BASH_PASS_TIER[MembershipTier.Basic]).toBeUndefined();
81
+ });
82
+ });
83
+ describe("getRequiredTierForFeature edge cases", () => {
84
+ test("returns null for unknown feature", () => {
85
+ expect(getRequiredTierForFeature("__not_a_real_feature__")).toBeNull();
86
+ });
87
+ });
88
+ describe("hasReachedFeatureLimit default branch", () => {
89
+ test("returns false for unsupported feature keys", () => {
90
+ expect(hasReachedFeatureLimit(MembershipTier.Pro, "featuredEvents", 999)).toBe(true);
91
+ expect(hasReachedFeatureLimit(MembershipTier.Pro, "unknownFeature", 0)).toBe(false);
92
+ });
93
+ });
94
+ });
95
+ //# sourceMappingURL=membershipDefinitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membershipDefinitions.test.js","sourceRoot":"","sources":["../../src/__tests__/membershipDefinitions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Ticket admission helpers — paid vs pay-at-door state.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=ticketAdmission.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketAdmission.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ticketAdmission.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Ticket admission helpers — paid vs pay-at-door state.
3
+ */
4
+ import { describe, expect, test } from "@jest/globals";
5
+ import { ticketIsPaidForEventAdmission, isUnpaidPayAtDoorTicket, TICKET_PURCHASE_TYPE_COMP, TICKET_PURCHASE_TYPE_PAY_AT_DOOR, TICKET_PURCHASE_TYPE_USD, } from "../definitions.js";
6
+ describe("ticketIsPaidForEventAdmission", () => {
7
+ test("free tiers always admit without payment", () => {
8
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_USD, paidOn: null }, 0)).toBe(true);
9
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: null }, 0)).toBe(true);
10
+ });
11
+ test("comp tickets admit regardless of paidOn", () => {
12
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_COMP, paidOn: null }, 2500)).toBe(true);
13
+ });
14
+ test("paid USD tickets admit when paidOn is set", () => {
15
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_USD, paidOn: new Date("2024-01-01") }, 2500)).toBe(true);
16
+ });
17
+ test("unpaid USD tickets do not admit", () => {
18
+ expect(ticketIsPaidForEventAdmission({ purchaseType: TICKET_PURCHASE_TYPE_USD, paidOn: null }, 2500)).toBe(false);
19
+ });
20
+ test("pay-at-door tickets admit only after paidOn is set", () => {
21
+ const unpaid = { purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: null };
22
+ const paid = { purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: "2024-06-01T12:00:00Z" };
23
+ expect(ticketIsPaidForEventAdmission(unpaid, 1500)).toBe(false);
24
+ expect(ticketIsPaidForEventAdmission(paid, 1500)).toBe(true);
25
+ });
26
+ });
27
+ describe("isUnpaidPayAtDoorTicket", () => {
28
+ test("returns true only for pay-at-door without paidOn", () => {
29
+ expect(isUnpaidPayAtDoorTicket({ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR, paidOn: null })).toBe(true);
30
+ });
31
+ test("returns false once pay-at-door ticket is marked paid", () => {
32
+ expect(isUnpaidPayAtDoorTicket({
33
+ purchaseType: TICKET_PURCHASE_TYPE_PAY_AT_DOOR,
34
+ paidOn: new Date(),
35
+ })).toBe(false);
36
+ });
37
+ test("returns false for other purchase types even when unpaid", () => {
38
+ expect(isUnpaidPayAtDoorTicket({ purchaseType: TICKET_PURCHASE_TYPE_USD, paidOn: null })).toBe(false);
39
+ expect(isUnpaidPayAtDoorTicket({ purchaseType: TICKET_PURCHASE_TYPE_COMP, paidOn: null })).toBe(false);
40
+ });
41
+ });
42
+ //# sourceMappingURL=ticketAdmission.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketAdmission.test.js","sourceRoot":"","sources":["../../src/__tests__/ticketAdmission.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utmAttribution.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utmAttribution.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utmAttribution.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ import { describe, expect, test, beforeEach, afterEach } from "@jest/globals";
2
+ import { getStoredUtmFields, utmFieldsFromCheckoutArgs, utmFieldsFromStripeMetadata, utmFieldsToStripeMetadata, utmFieldsToTicketColumns, } from "../utmAttribution.js";
3
+ describe("utmAttribution", () => {
4
+ describe("utmFieldsFromCheckoutArgs", () => {
5
+ test("returns undefined when all fields blank", () => {
6
+ expect(utmFieldsFromCheckoutArgs({ utmSource: " ", utmMedium: "", utmCampaign: undefined })).toBeUndefined();
7
+ });
8
+ test("trims and includes only non-empty fields", () => {
9
+ expect(utmFieldsFromCheckoutArgs({
10
+ utmSource: " newsletter ",
11
+ utmMedium: "email",
12
+ })).toEqual({ utmSource: "newsletter", utmMedium: "email" });
13
+ });
14
+ test("caps field length at 500 characters", () => {
15
+ const long = "a".repeat(600);
16
+ const result = utmFieldsFromCheckoutArgs({ utmSource: long });
17
+ expect(result?.utmSource?.length).toBe(500);
18
+ });
19
+ });
20
+ describe("utmFieldsToStripeMetadata", () => {
21
+ test("maps to snake_case Stripe keys", () => {
22
+ expect(utmFieldsToStripeMetadata({
23
+ utmSource: "google",
24
+ utmCampaign: "spring",
25
+ })).toEqual({ utm_source: "google", utm_campaign: "spring" });
26
+ });
27
+ test("returns empty object for undefined input", () => {
28
+ expect(utmFieldsToStripeMetadata(undefined)).toEqual({});
29
+ });
30
+ });
31
+ describe("utmFieldsToTicketColumns", () => {
32
+ test("maps to Prisma Ticket column names", () => {
33
+ expect(utmFieldsToTicketColumns({
34
+ utmSource: "fb",
35
+ utmMedium: "cpc",
36
+ utmCampaign: "launch",
37
+ })).toEqual({
38
+ utmSource: "fb",
39
+ utmMedium: "cpc",
40
+ utmCampaign: "launch",
41
+ });
42
+ });
43
+ test("omits empty fields", () => {
44
+ expect(utmFieldsToTicketColumns({ utmSource: "x" })).toEqual({ utmSource: "x" });
45
+ });
46
+ });
47
+ describe("utmFieldsFromStripeMetadata", () => {
48
+ test("reads snake_case metadata into camelCase fields", () => {
49
+ expect(utmFieldsFromStripeMetadata({
50
+ utm_source: " twitter ",
51
+ utm_medium: "social",
52
+ })).toEqual({ utmSource: "twitter", utmMedium: "social" });
53
+ });
54
+ test("returns empty object for null metadata", () => {
55
+ expect(utmFieldsFromStripeMetadata(null)).toEqual({});
56
+ });
57
+ });
58
+ describe("getStoredUtmFields", () => {
59
+ const originalSessionStorage = global.sessionStorage;
60
+ beforeEach(() => {
61
+ const store = new Map();
62
+ Object.defineProperty(global, "sessionStorage", {
63
+ configurable: true,
64
+ value: {
65
+ getItem: (key) => store.get(key) ?? null,
66
+ setItem: (key, value) => {
67
+ store.set(key, value);
68
+ },
69
+ removeItem: (key) => {
70
+ store.delete(key);
71
+ },
72
+ clear: () => store.clear(),
73
+ },
74
+ });
75
+ });
76
+ afterEach(() => {
77
+ Object.defineProperty(global, "sessionStorage", {
78
+ configurable: true,
79
+ value: originalSessionStorage,
80
+ });
81
+ });
82
+ test("reads previously stored session values", () => {
83
+ sessionStorage.setItem("bash_utm_source", "newsletter");
84
+ sessionStorage.setItem("bash_utm_campaign", "june");
85
+ expect(getStoredUtmFields()).toEqual({
86
+ utmSource: "newsletter",
87
+ utmCampaign: "june",
88
+ });
89
+ });
90
+ });
91
+ });
92
+ //# sourceMappingURL=utmAttribution.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utmAttribution.test.js","sourceRoot":"","sources":["../../src/__tests__/utmAttribution.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { AgePolicy, BashEventType, BracketType, CompetitionType, Contact, DietaryOption, EntertainmentServiceType, IncomeRange, JudgingType, MembershipTier, MusicGenreType, SchoolNameSource, ServiceTypes, Ticket, TicketTier, User } from "@prisma/client";
2
- import type { BashPassTier, BashEventDressTags, BashEventVibeTags, GovIdRetentionPolicy as GovIdRetentionPolicyEnum, ServiceBookingOfferStatus as ServiceBookingOfferStatusEnum, YearsOfExperience as YearsOfExperienceEnum } from "@prisma/client";
3
- import { CheckoutExt, PublicUser, ServiceBookingExt, type UserExt } from "./extendedSchemas.js";
1
+ import { BashEventType, BracketType, CompetitionType, Contact, DietaryOption, EntertainmentServiceType, IncomeRange, JudgingType, MembershipTier, MusicGenreType, SchoolNameSource, ServiceTypes, Ticket, TicketTier, User } from "@prisma/client";
2
+ import type { AgePolicy as AgePolicyEnum, BashPassTier, BashEventDressTags, BashEventVibeTags, GovIdRetentionPolicy as GovIdRetentionPolicyEnum, ServiceBookingOfferStatus as ServiceBookingOfferStatusEnum, YearsOfExperience as YearsOfExperienceEnum } from "@prisma/client";
3
+ import { CheckoutExt, PublicTeaserUser, PublicUser, ServiceBookingExt, type UserExt } from "./extendedSchemas.js";
4
4
  import { LuxonDateRange } from "./utils/luxonUtils.js";
5
5
  import { ApiServiceCantBookReason } from "./utils/service/apiServiceBookingApiUtils.js";
6
6
  import { ServiceAttendeeOption } from "./utils/service/attendeeOptionUtils.js";
@@ -38,6 +38,13 @@ export declare const GovIdRetentionPolicy: {
38
38
  readonly Indefinite: "Indefinite";
39
39
  };
40
40
  export type GovIdRetentionPolicy = GovIdRetentionPolicyEnum;
41
+ /** Mirrors Prisma `AgePolicy` — `@prisma/client` browser bundle omits runtime enum exports. */
42
+ export declare const AgePolicy: {
43
+ readonly AllAges: "AllAges";
44
+ readonly EighteenPlus: "EighteenPlus";
45
+ readonly TwentyOnePlus: "TwentyOnePlus";
46
+ };
47
+ export type AgePolicy = AgePolicyEnum;
41
48
  export declare const PASSWORD_MIN_LENGTH: 8;
42
49
  export declare const PASSWORD_REQUIREMENTS_REGEX: RegExp;
43
50
  export declare const STRIPE_CHECKOUT_TIMEOUT_MS: 20000;
@@ -425,7 +432,7 @@ export interface LoginSession {
425
432
  token: string;
426
433
  }
427
434
  export interface AttendeeOfBashEvent {
428
- user: PublicUser;
435
+ user: PublicUser | PublicTeaserUser;
429
436
  tickets: Ticket[];
430
437
  }
431
438
  export interface FirstFewAttendingBashEvent {
@@ -733,7 +740,7 @@ export declare const DressTagsToString: {
733
740
  export declare const YearsOfExperienceToString: {
734
741
  [key in YearsOfExperienceEnum]: string;
735
742
  };
736
- export { AgePolicy, BracketType, CompetitionType, EntertainmentServiceType, JudgingType, MusicGenreType, SchoolNameSource, ServiceTypes, };
743
+ export { BracketType, CompetitionType, EntertainmentServiceType, JudgingType, MusicGenreType, SchoolNameSource, ServiceTypes, };
737
744
  /**
738
745
  * Display labels for `User.govIdRetentionPolicy` (settings UI, ID verification gate).
739
746
  *
@@ -803,6 +810,12 @@ export declare const IncomeRangeShortLabel: IncomeRangeToStringType;
803
810
  * Audience-targeting only — never use to gate ticket purchase or entry.
804
811
  */
805
812
  export declare const INCOME_RANGE_VALUES: ReadonlyArray<IncomeRange>;
813
+ /**
814
+ * Stable row key for homepage/category grouping when `eventType` may be stored
815
+ * as a Prisma enum literal (e.g. `HouseParty`) or as the singular UI label
816
+ * (`House Party`).
817
+ */
818
+ export declare function canonicalBashEventRowKey(raw: string): string;
806
819
  /**
807
820
  * Heading shown on the home page row and the `/category/...` page for a bash
808
821
  * `eventType` / section key. Uses plural-friendly copy for Prisma