@bash-app/bash-common 30.51.0 → 30.52.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 +668 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +467 -0
- package/dist/definitions.js.map +1 -0
- package/dist/extendedSchemas.d.ts +2206 -0
- package/dist/extendedSchemas.d.ts.map +1 -0
- package/dist/extendedSchemas.js +429 -0
- package/dist/extendedSchemas.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/addressUtils.d.ts +14 -0
- package/dist/utils/addressUtils.d.ts.map +1 -0
- package/dist/utils/addressUtils.js +177 -0
- package/dist/utils/addressUtils.js.map +1 -0
- package/dist/utils/apiUtils.d.ts +14 -0
- package/dist/utils/apiUtils.d.ts.map +1 -0
- package/dist/utils/apiUtils.js +61 -0
- package/dist/utils/apiUtils.js.map +1 -0
- package/dist/utils/arrayUtils.d.ts +2 -0
- package/dist/utils/arrayUtils.d.ts.map +1 -0
- package/dist/utils/arrayUtils.js +5 -0
- package/dist/utils/arrayUtils.js.map +1 -0
- package/dist/utils/awsS3Utils.d.ts +10 -0
- package/dist/utils/awsS3Utils.d.ts.map +1 -0
- package/dist/utils/awsS3Utils.js +89 -0
- package/dist/utils/awsS3Utils.js.map +1 -0
- package/dist/utils/badgeUtils.d.ts +33 -0
- package/dist/utils/badgeUtils.d.ts.map +1 -0
- package/dist/utils/badgeUtils.js +57 -0
- package/dist/utils/badgeUtils.js.map +1 -0
- package/dist/utils/blog/blogDbUtils.d.ts +48 -0
- package/dist/utils/blog/blogDbUtils.d.ts.map +1 -0
- package/dist/utils/blog/blogDbUtils.js +218 -0
- package/dist/utils/blog/blogDbUtils.js.map +1 -0
- package/dist/utils/blogUtils.d.ts +19 -0
- package/dist/utils/blogUtils.d.ts.map +1 -0
- package/dist/utils/blogUtils.js +118 -0
- package/dist/utils/blogUtils.js.map +1 -0
- package/dist/utils/dateTimeUtils.d.ts +38 -0
- package/dist/utils/dateTimeUtils.d.ts.map +1 -0
- package/dist/utils/dateTimeUtils.js +207 -0
- package/dist/utils/dateTimeUtils.js.map +1 -0
- package/dist/utils/entityUtils.d.ts +5 -0
- package/dist/utils/entityUtils.d.ts.map +1 -0
- package/dist/utils/entityUtils.js +5 -0
- package/dist/utils/entityUtils.js.map +1 -0
- package/dist/utils/generalDateTimeUtils.d.ts +15 -0
- package/dist/utils/generalDateTimeUtils.d.ts.map +1 -0
- package/dist/utils/generalDateTimeUtils.js +38 -0
- package/dist/utils/generalDateTimeUtils.js.map +1 -0
- package/dist/utils/luxonUtils.d.ts +95 -0
- package/dist/utils/luxonUtils.d.ts.map +1 -0
- package/dist/utils/luxonUtils.js +623 -0
- package/dist/utils/luxonUtils.js.map +1 -0
- package/dist/utils/mathUtils.d.ts +2 -0
- package/dist/utils/mathUtils.d.ts.map +1 -0
- package/dist/utils/mathUtils.js +4 -0
- package/dist/utils/mathUtils.js.map +1 -0
- package/dist/utils/objUtils.d.ts +3 -0
- package/dist/utils/objUtils.d.ts.map +1 -0
- package/dist/utils/objUtils.js +29 -0
- package/dist/utils/objUtils.js.map +1 -0
- package/dist/utils/paymentUtils.d.ts +18 -0
- package/dist/utils/paymentUtils.d.ts.map +1 -0
- package/dist/utils/paymentUtils.js +50 -0
- package/dist/utils/paymentUtils.js.map +1 -0
- package/dist/utils/promoCodesUtils.d.ts +6 -0
- package/dist/utils/promoCodesUtils.d.ts.map +1 -0
- package/dist/utils/promoCodesUtils.js +23 -0
- package/dist/utils/promoCodesUtils.js.map +1 -0
- package/dist/utils/qrCodeUtils.d.ts +4 -0
- package/dist/utils/qrCodeUtils.d.ts.map +1 -0
- package/dist/utils/qrCodeUtils.js +22 -0
- package/dist/utils/qrCodeUtils.js.map +1 -0
- package/dist/utils/recurrenceUtils.d.ts +8 -0
- package/dist/utils/recurrenceUtils.d.ts.map +1 -0
- package/dist/utils/recurrenceUtils.js +153 -0
- package/dist/utils/recurrenceUtils.js.map +1 -0
- package/dist/utils/reviewUtils.d.ts +29 -0
- package/dist/utils/reviewUtils.d.ts.map +1 -0
- package/dist/utils/reviewUtils.js +65 -0
- package/dist/utils/reviewUtils.js.map +1 -0
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts +21 -0
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts.map +1 -0
- package/dist/utils/service/apiServiceBookingApiUtils.js +131 -0
- package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -0
- package/dist/utils/service/attendeeOptionUtils.d.ts +11 -0
- package/dist/utils/service/attendeeOptionUtils.d.ts.map +1 -0
- package/dist/utils/service/attendeeOptionUtils.js +9 -0
- package/dist/utils/service/attendeeOptionUtils.js.map +1 -0
- package/dist/utils/service/frontendServiceBookingUtils.d.ts +53 -0
- package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -0
- package/dist/utils/service/frontendServiceBookingUtils.js +134 -0
- package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -0
- package/dist/utils/service/regexUtils.d.ts +6 -0
- package/dist/utils/service/regexUtils.d.ts.map +1 -0
- package/dist/utils/service/regexUtils.js +16 -0
- package/dist/utils/service/regexUtils.js.map +1 -0
- package/dist/utils/service/serviceBookingStatusUtils.d.ts +21 -0
- package/dist/utils/service/serviceBookingStatusUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceBookingStatusUtils.js +130 -0
- package/dist/utils/service/serviceBookingStatusUtils.js.map +1 -0
- package/dist/utils/service/serviceBookingTypes.d.ts +19 -0
- package/dist/utils/service/serviceBookingTypes.d.ts.map +1 -0
- package/dist/utils/service/serviceBookingTypes.js +2 -0
- package/dist/utils/service/serviceBookingTypes.js.map +1 -0
- package/dist/utils/service/serviceDBUtils.d.ts +5 -0
- package/dist/utils/service/serviceDBUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceDBUtils.js +48 -0
- package/dist/utils/service/serviceDBUtils.js.map +1 -0
- package/dist/utils/service/serviceRateDBUtils.d.ts +1 -0
- package/dist/utils/service/serviceRateDBUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceRateDBUtils.js +159 -0
- package/dist/utils/service/serviceRateDBUtils.js.map +1 -0
- package/dist/utils/service/serviceRateTypes.d.ts +9 -0
- package/dist/utils/service/serviceRateTypes.d.ts.map +1 -0
- package/dist/utils/service/serviceRateTypes.js +2 -0
- package/dist/utils/service/serviceRateTypes.js.map +1 -0
- package/dist/utils/service/serviceRateUtils.d.ts +24 -0
- package/dist/utils/service/serviceRateUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceRateUtils.js +183 -0
- package/dist/utils/service/serviceRateUtils.js.map +1 -0
- package/dist/utils/service/serviceUtils.d.ts +83 -0
- package/dist/utils/service/serviceUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceUtils.js +311 -0
- package/dist/utils/service/serviceUtils.js.map +1 -0
- package/dist/utils/service/venueUtils.d.ts +13 -0
- package/dist/utils/service/venueUtils.d.ts.map +1 -0
- package/dist/utils/service/venueUtils.js +18 -0
- package/dist/utils/service/venueUtils.js.map +1 -0
- package/dist/utils/slugUtils.d.ts +9 -0
- package/dist/utils/slugUtils.d.ts.map +1 -0
- package/dist/utils/slugUtils.js +47 -0
- package/dist/utils/slugUtils.js.map +1 -0
- package/dist/utils/sortUtils.d.ts +7 -0
- package/dist/utils/sortUtils.d.ts.map +1 -0
- package/dist/utils/sortUtils.js +26 -0
- package/dist/utils/sortUtils.js.map +1 -0
- package/dist/utils/stringUtils.d.ts +2 -0
- package/dist/utils/stringUtils.d.ts.map +1 -0
- package/dist/utils/stringUtils.js +6 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/dist/utils/stripeAccountUtils.d.ts +3 -0
- package/dist/utils/stripeAccountUtils.d.ts.map +1 -0
- package/dist/utils/stripeAccountUtils.js +10 -0
- package/dist/utils/stripeAccountUtils.js.map +1 -0
- package/dist/utils/ticketListUtils.d.ts +12 -0
- package/dist/utils/ticketListUtils.d.ts.map +1 -0
- package/dist/utils/ticketListUtils.js +78 -0
- package/dist/utils/ticketListUtils.js.map +1 -0
- package/dist/utils/typeUtils.d.ts +11 -0
- package/dist/utils/typeUtils.d.ts.map +1 -0
- package/dist/utils/typeUtils.js +8 -0
- package/dist/utils/typeUtils.js.map +1 -0
- package/dist/utils/urlUtils.d.ts +10 -0
- package/dist/utils/urlUtils.d.ts.map +1 -0
- package/dist/utils/urlUtils.js +66 -0
- package/dist/utils/urlUtils.js.map +1 -0
- package/dist/utils/userPromoCodeUtils.d.ts +21 -0
- package/dist/utils/userPromoCodeUtils.d.ts.map +1 -0
- package/dist/utils/userPromoCodeUtils.js +13 -0
- package/dist/utils/userPromoCodeUtils.js.map +1 -0
- package/dist/utils/userSubscriptionUtils.d.ts +36 -0
- package/dist/utils/userSubscriptionUtils.d.ts.map +1 -0
- package/dist/utils/userSubscriptionUtils.js +56 -0
- package/dist/utils/userSubscriptionUtils.js.map +1 -0
- package/dist/utils/userUtils.d.ts +2 -0
- package/dist/utils/userUtils.d.ts.map +1 -0
- package/dist/utils/userUtils.js +2 -0
- package/dist/utils/userUtils.js.map +1 -0
- package/package.json +4 -2
- package/prisma/schema.prisma +117 -0
- package/src/definitions.ts +52 -1
- package/src/extendedSchemas.ts +177 -6
- package/src/index.ts +32 -21
- package/src/utils/blog/blogDbUtils.ts +343 -0
- package/src/utils/blogUtils.ts +134 -0
- package/src/utils/qrCodeUtils.ts +4 -2
- package/src/utils/service/apiServiceBookingApiUtils.ts +0 -0
- package/src/utils/slugUtils.ts +60 -0
- package/src/utils/ticketListUtils.ts +24 -6
- package/src/utils/typeUtils.ts +0 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { generateSlug } from './slugUtils';
|
|
2
|
+
import { BLOG_DETAIL_URL, BLOG_EXCERPT_LENGTH, DEFAULT_BLOG_IMAGE, SITE_NAME } from '../definitions';
|
|
3
|
+
|
|
4
|
+
// Blog URL generation
|
|
5
|
+
export function generateBlogDetailUrl(blogId: string, slug?: string): string {
|
|
6
|
+
if (slug) {
|
|
7
|
+
return `${BLOG_DETAIL_URL}/${blogId}-${slug}`;
|
|
8
|
+
}
|
|
9
|
+
return `${BLOG_DETAIL_URL}/${blogId}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function getBlogDetailUrl(blogId: string, slug?: string, title?: string): string {
|
|
13
|
+
if (slug) {
|
|
14
|
+
return generateBlogDetailUrl(blogId, slug);
|
|
15
|
+
} else if (title) {
|
|
16
|
+
// Generate a temporary slug from title for URLs (not saved to DB)
|
|
17
|
+
const tempSlug = generateSlug(title);
|
|
18
|
+
return generateBlogDetailUrl(blogId, tempSlug);
|
|
19
|
+
} else {
|
|
20
|
+
// Ultimate fallback - use just the ID (backward compatible)
|
|
21
|
+
return `${BLOG_DETAIL_URL}/${blogId}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Parse blog URL parameters
|
|
26
|
+
export function parseBlogUrlParams(blogIdSlug: string): { id: string; slug?: string } | null {
|
|
27
|
+
if (!blogIdSlug) return null;
|
|
28
|
+
|
|
29
|
+
// Check if it contains a hyphen (ID-slug format)
|
|
30
|
+
const hyphenIndex = blogIdSlug.indexOf('-');
|
|
31
|
+
|
|
32
|
+
if (hyphenIndex === -1) {
|
|
33
|
+
// No hyphen found, treat as just an ID
|
|
34
|
+
return { id: blogIdSlug };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Split at the first hyphen
|
|
38
|
+
const id = blogIdSlug.substring(0, hyphenIndex);
|
|
39
|
+
const slug = blogIdSlug.substring(hyphenIndex + 1);
|
|
40
|
+
|
|
41
|
+
return { id, slug };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Content processing
|
|
45
|
+
export function generateExcerpt(content: string, length: number = BLOG_EXCERPT_LENGTH): string {
|
|
46
|
+
// Strip HTML tags
|
|
47
|
+
const textContent = content.replace(/<[^>]*>/g, '');
|
|
48
|
+
|
|
49
|
+
if (textContent.length <= length) {
|
|
50
|
+
return textContent;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Find the last complete word within the length limit
|
|
54
|
+
const truncated = textContent.substring(0, length);
|
|
55
|
+
const lastSpace = truncated.lastIndexOf(' ');
|
|
56
|
+
|
|
57
|
+
return lastSpace > 0
|
|
58
|
+
? truncated.substring(0, lastSpace) + '...'
|
|
59
|
+
: truncated + '...';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Calculate estimated reading time
|
|
63
|
+
export function calculateReadingTime(content: string): number {
|
|
64
|
+
const wordsPerMinute = 200;
|
|
65
|
+
const textContent = content.replace(/<[^>]*>/g, '');
|
|
66
|
+
const wordCount = textContent.split(/\s+/).length;
|
|
67
|
+
return Math.ceil(wordCount / wordsPerMinute);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Blog image handling
|
|
71
|
+
export function getBlogImageUrl(imageUrl?: string | null): string {
|
|
72
|
+
return imageUrl || DEFAULT_BLOG_IMAGE;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// SEO helpers
|
|
76
|
+
export function generateMetaTitle(title: string, siteName: string = 'Bash'): string {
|
|
77
|
+
return `${title} | ${siteName}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function generateMetaDescription(content: string, title: string): string {
|
|
81
|
+
const excerpt = generateExcerpt(content, 155);
|
|
82
|
+
return excerpt || `Read about ${title} on ${SITE_NAME}`;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Content validation
|
|
86
|
+
export function validateBlogContent(title: string, content: string): { isValid: boolean; errors: string[] } {
|
|
87
|
+
const errors: string[] = [];
|
|
88
|
+
|
|
89
|
+
if (!title || title.trim().length === 0) {
|
|
90
|
+
errors.push('Title is required');
|
|
91
|
+
} else if (title.length > 200) {
|
|
92
|
+
errors.push('Title must be less than 200 characters');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (!content || content.trim().length === 0) {
|
|
96
|
+
errors.push('Content is required');
|
|
97
|
+
} else if (content.length < 100) {
|
|
98
|
+
errors.push('Content must be at least 100 characters');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
isValid: errors.length === 0,
|
|
103
|
+
errors
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Tag processing
|
|
108
|
+
export function processTags(tagString: string): string[] {
|
|
109
|
+
if (!tagString) return [];
|
|
110
|
+
|
|
111
|
+
return tagString
|
|
112
|
+
.split(',')
|
|
113
|
+
.map(tag => tag.trim().toLowerCase())
|
|
114
|
+
.filter(tag => tag.length > 0)
|
|
115
|
+
.slice(0, 10); // Limit to 10 tags
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Search helpers
|
|
119
|
+
export function highlightSearchTerms(text: string, searchTerm: string): string {
|
|
120
|
+
if (!searchTerm) return text;
|
|
121
|
+
|
|
122
|
+
const regex = new RegExp(`(${searchTerm})`, 'gi');
|
|
123
|
+
return text.replace(regex, '<mark>$1</mark>');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Format publication date
|
|
127
|
+
export function formatPublishDate(date: Date | string): string {
|
|
128
|
+
const publishDate = typeof date === 'string' ? new Date(date) : date;
|
|
129
|
+
return publishDate.toLocaleDateString('en-US', {
|
|
130
|
+
year: 'numeric',
|
|
131
|
+
month: 'long',
|
|
132
|
+
day: 'numeric'
|
|
133
|
+
});
|
|
134
|
+
}
|
package/src/utils/qrCodeUtils.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import QRCode from "qrcode";
|
|
2
2
|
import { TICKET_DETAILS } from "../definitions";
|
|
3
|
+
import { generateBashDetailUrl } from "./slugUtils";
|
|
3
4
|
|
|
4
5
|
export function bashEventPrismaCheckoutQrCodeUrl(bashEventId: string | undefined | null, prismaCheckoutId: string | undefined | null): string {
|
|
5
6
|
return `${TICKET_DETAILS}/${bashEventId}/${prismaCheckoutId}`;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
export function bashEventQrCodeUrl(bashEventId: string | undefined | null, ticketTierId?: string | undefined | null, ticketId?: string | undefined | null): string {
|
|
9
|
-
const baseUrl = `${TICKET_DETAILS}/${bashEventId}`;
|
|
9
|
+
export function bashEventQrCodeUrl(bashEventId: string | undefined | null, ticketTierId?: string | undefined | null, ticketId?: string | undefined | null, slug?: string | undefined | null): string {
|
|
10
|
+
const baseUrl = slug ? generateBashDetailUrl(bashEventId!, slug).replace('/bash/', '/ticket-details/') : `${TICKET_DETAILS}/${bashEventId}`;
|
|
11
|
+
|
|
10
12
|
if (ticketId) {
|
|
11
13
|
return `${baseUrl}/ticket/${ticketId}`;
|
|
12
14
|
}
|
|
File without changes
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import slugify from 'slugify';
|
|
2
|
+
|
|
3
|
+
export function generateSlug(title: string): string {
|
|
4
|
+
return slugify(title, {
|
|
5
|
+
lower: true,
|
|
6
|
+
strict: true,
|
|
7
|
+
remove: /[*+~.()'"!:@]/g
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export async function generateUniqueSlug(
|
|
12
|
+
title: string,
|
|
13
|
+
checkSlugExists: (slug: string, excludeId?: string) => Promise<boolean>,
|
|
14
|
+
excludeId?: string
|
|
15
|
+
): Promise<string> {
|
|
16
|
+
const baseSlug = generateSlug(title);
|
|
17
|
+
let slug = baseSlug;
|
|
18
|
+
let counter = 1;
|
|
19
|
+
|
|
20
|
+
while (true) {
|
|
21
|
+
const exists = await checkSlugExists(slug, excludeId);
|
|
22
|
+
if (!exists) {
|
|
23
|
+
return slug;
|
|
24
|
+
}
|
|
25
|
+
slug = `${baseSlug}-${counter}`;
|
|
26
|
+
counter++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function generateBashDetailUrl(bashEventId: string, slug: string): string {
|
|
31
|
+
return `/bash/${bashEventId}-${slug}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function parseBashUrlParams(param: string): { id: string; slug: string | null } | null {
|
|
35
|
+
// Expected format: "id-slug" where id is first part before first dash
|
|
36
|
+
const dashIndex = param.indexOf('-');
|
|
37
|
+
|
|
38
|
+
if (dashIndex === -1) {
|
|
39
|
+
// Old format: just the ID
|
|
40
|
+
if (param && param.length > 0) {
|
|
41
|
+
return { id: param, slug: null };
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const id = param.substring(0, dashIndex);
|
|
47
|
+
const slug = param.substring(dashIndex + 1);
|
|
48
|
+
|
|
49
|
+
if (!id) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// New format: id-slug
|
|
54
|
+
return { id, slug: slug || null };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function validateSlug(slug: string): boolean {
|
|
58
|
+
// Check if slug only contains lowercase letters, numbers, and hyphens
|
|
59
|
+
return /^[a-z0-9-]+$/.test(slug);
|
|
60
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DateTime } from "luxon";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
NumberOfTicketsForDate,
|
|
4
|
+
URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM,
|
|
5
|
+
URL_PARAMS_TICKET_LIST_DELIM,
|
|
6
|
+
URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM,
|
|
7
|
+
URL_PARAMS_TICKETS_DATE_DELIM
|
|
8
8
|
} from "../definitions";
|
|
9
9
|
import { DATETIME_FORMAT_ISO_LIKE } from "./dateTimeUtils";
|
|
10
10
|
|
|
@@ -22,8 +22,26 @@ export function ticketListToString(ticketList: Map<string, NumberOfTicketsForDat
|
|
|
22
22
|
for (const ticketNumAndDates of ticketListArgs) {
|
|
23
23
|
if (ticketNumAndDates.numberOfTickets > 0) {
|
|
24
24
|
ticketsExist = true;
|
|
25
|
+
|
|
26
|
+
// Ensure ticketDateTime is in ISO format
|
|
27
|
+
let dateTimeStr = ticketNumAndDates.ticketDateTime;
|
|
28
|
+
if (dateTimeStr) {
|
|
29
|
+
// If it's already a string, try to parse it as DateTime and convert to ISO
|
|
30
|
+
const dateTime = typeof dateTimeStr === 'string'
|
|
31
|
+
? DateTime.fromFormat(dateTimeStr, DATETIME_FORMAT_ISO_LIKE).isValid
|
|
32
|
+
? DateTime.fromFormat(dateTimeStr, DATETIME_FORMAT_ISO_LIKE)
|
|
33
|
+
: DateTime.fromISO(dateTimeStr).isValid
|
|
34
|
+
? DateTime.fromISO(dateTimeStr)
|
|
35
|
+
: DateTime.fromJSDate(new Date(dateTimeStr))
|
|
36
|
+
: DateTime.fromJSDate(dateTimeStr as any);
|
|
37
|
+
|
|
38
|
+
if (dateTime.isValid) {
|
|
39
|
+
dateTimeStr = dateTime.toISO() || dateTimeStr;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
25
43
|
ticketArgs.push(
|
|
26
|
-
`${ticketNumAndDates.numberOfTickets}${URL_PARAMS_TICKETS_DATE_DELIM}${
|
|
44
|
+
`${ticketNumAndDates.numberOfTickets}${URL_PARAMS_TICKETS_DATE_DELIM}${dateTimeStr}`);
|
|
27
45
|
}
|
|
28
46
|
else {
|
|
29
47
|
ticketsExist = false;
|
package/src/utils/typeUtils.ts
CHANGED
|
File without changes
|