@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.
Files changed (184) hide show
  1. package/dist/definitions.d.ts +668 -0
  2. package/dist/definitions.d.ts.map +1 -0
  3. package/dist/definitions.js +467 -0
  4. package/dist/definitions.js.map +1 -0
  5. package/dist/extendedSchemas.d.ts +2206 -0
  6. package/dist/extendedSchemas.d.ts.map +1 -0
  7. package/dist/extendedSchemas.js +429 -0
  8. package/dist/extendedSchemas.js.map +1 -0
  9. package/dist/index.d.ts +39 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +40 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/utils/addressUtils.d.ts +14 -0
  14. package/dist/utils/addressUtils.d.ts.map +1 -0
  15. package/dist/utils/addressUtils.js +177 -0
  16. package/dist/utils/addressUtils.js.map +1 -0
  17. package/dist/utils/apiUtils.d.ts +14 -0
  18. package/dist/utils/apiUtils.d.ts.map +1 -0
  19. package/dist/utils/apiUtils.js +61 -0
  20. package/dist/utils/apiUtils.js.map +1 -0
  21. package/dist/utils/arrayUtils.d.ts +2 -0
  22. package/dist/utils/arrayUtils.d.ts.map +1 -0
  23. package/dist/utils/arrayUtils.js +5 -0
  24. package/dist/utils/arrayUtils.js.map +1 -0
  25. package/dist/utils/awsS3Utils.d.ts +10 -0
  26. package/dist/utils/awsS3Utils.d.ts.map +1 -0
  27. package/dist/utils/awsS3Utils.js +89 -0
  28. package/dist/utils/awsS3Utils.js.map +1 -0
  29. package/dist/utils/badgeUtils.d.ts +33 -0
  30. package/dist/utils/badgeUtils.d.ts.map +1 -0
  31. package/dist/utils/badgeUtils.js +57 -0
  32. package/dist/utils/badgeUtils.js.map +1 -0
  33. package/dist/utils/blog/blogDbUtils.d.ts +48 -0
  34. package/dist/utils/blog/blogDbUtils.d.ts.map +1 -0
  35. package/dist/utils/blog/blogDbUtils.js +218 -0
  36. package/dist/utils/blog/blogDbUtils.js.map +1 -0
  37. package/dist/utils/blogUtils.d.ts +19 -0
  38. package/dist/utils/blogUtils.d.ts.map +1 -0
  39. package/dist/utils/blogUtils.js +118 -0
  40. package/dist/utils/blogUtils.js.map +1 -0
  41. package/dist/utils/dateTimeUtils.d.ts +38 -0
  42. package/dist/utils/dateTimeUtils.d.ts.map +1 -0
  43. package/dist/utils/dateTimeUtils.js +207 -0
  44. package/dist/utils/dateTimeUtils.js.map +1 -0
  45. package/dist/utils/entityUtils.d.ts +5 -0
  46. package/dist/utils/entityUtils.d.ts.map +1 -0
  47. package/dist/utils/entityUtils.js +5 -0
  48. package/dist/utils/entityUtils.js.map +1 -0
  49. package/dist/utils/generalDateTimeUtils.d.ts +15 -0
  50. package/dist/utils/generalDateTimeUtils.d.ts.map +1 -0
  51. package/dist/utils/generalDateTimeUtils.js +38 -0
  52. package/dist/utils/generalDateTimeUtils.js.map +1 -0
  53. package/dist/utils/luxonUtils.d.ts +95 -0
  54. package/dist/utils/luxonUtils.d.ts.map +1 -0
  55. package/dist/utils/luxonUtils.js +623 -0
  56. package/dist/utils/luxonUtils.js.map +1 -0
  57. package/dist/utils/mathUtils.d.ts +2 -0
  58. package/dist/utils/mathUtils.d.ts.map +1 -0
  59. package/dist/utils/mathUtils.js +4 -0
  60. package/dist/utils/mathUtils.js.map +1 -0
  61. package/dist/utils/objUtils.d.ts +3 -0
  62. package/dist/utils/objUtils.d.ts.map +1 -0
  63. package/dist/utils/objUtils.js +29 -0
  64. package/dist/utils/objUtils.js.map +1 -0
  65. package/dist/utils/paymentUtils.d.ts +18 -0
  66. package/dist/utils/paymentUtils.d.ts.map +1 -0
  67. package/dist/utils/paymentUtils.js +50 -0
  68. package/dist/utils/paymentUtils.js.map +1 -0
  69. package/dist/utils/promoCodesUtils.d.ts +6 -0
  70. package/dist/utils/promoCodesUtils.d.ts.map +1 -0
  71. package/dist/utils/promoCodesUtils.js +23 -0
  72. package/dist/utils/promoCodesUtils.js.map +1 -0
  73. package/dist/utils/qrCodeUtils.d.ts +4 -0
  74. package/dist/utils/qrCodeUtils.d.ts.map +1 -0
  75. package/dist/utils/qrCodeUtils.js +22 -0
  76. package/dist/utils/qrCodeUtils.js.map +1 -0
  77. package/dist/utils/recurrenceUtils.d.ts +8 -0
  78. package/dist/utils/recurrenceUtils.d.ts.map +1 -0
  79. package/dist/utils/recurrenceUtils.js +153 -0
  80. package/dist/utils/recurrenceUtils.js.map +1 -0
  81. package/dist/utils/reviewUtils.d.ts +29 -0
  82. package/dist/utils/reviewUtils.d.ts.map +1 -0
  83. package/dist/utils/reviewUtils.js +65 -0
  84. package/dist/utils/reviewUtils.js.map +1 -0
  85. package/dist/utils/service/apiServiceBookingApiUtils.d.ts +21 -0
  86. package/dist/utils/service/apiServiceBookingApiUtils.d.ts.map +1 -0
  87. package/dist/utils/service/apiServiceBookingApiUtils.js +131 -0
  88. package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -0
  89. package/dist/utils/service/attendeeOptionUtils.d.ts +11 -0
  90. package/dist/utils/service/attendeeOptionUtils.d.ts.map +1 -0
  91. package/dist/utils/service/attendeeOptionUtils.js +9 -0
  92. package/dist/utils/service/attendeeOptionUtils.js.map +1 -0
  93. package/dist/utils/service/frontendServiceBookingUtils.d.ts +53 -0
  94. package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -0
  95. package/dist/utils/service/frontendServiceBookingUtils.js +134 -0
  96. package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -0
  97. package/dist/utils/service/regexUtils.d.ts +6 -0
  98. package/dist/utils/service/regexUtils.d.ts.map +1 -0
  99. package/dist/utils/service/regexUtils.js +16 -0
  100. package/dist/utils/service/regexUtils.js.map +1 -0
  101. package/dist/utils/service/serviceBookingStatusUtils.d.ts +21 -0
  102. package/dist/utils/service/serviceBookingStatusUtils.d.ts.map +1 -0
  103. package/dist/utils/service/serviceBookingStatusUtils.js +130 -0
  104. package/dist/utils/service/serviceBookingStatusUtils.js.map +1 -0
  105. package/dist/utils/service/serviceBookingTypes.d.ts +19 -0
  106. package/dist/utils/service/serviceBookingTypes.d.ts.map +1 -0
  107. package/dist/utils/service/serviceBookingTypes.js +2 -0
  108. package/dist/utils/service/serviceBookingTypes.js.map +1 -0
  109. package/dist/utils/service/serviceDBUtils.d.ts +5 -0
  110. package/dist/utils/service/serviceDBUtils.d.ts.map +1 -0
  111. package/dist/utils/service/serviceDBUtils.js +48 -0
  112. package/dist/utils/service/serviceDBUtils.js.map +1 -0
  113. package/dist/utils/service/serviceRateDBUtils.d.ts +1 -0
  114. package/dist/utils/service/serviceRateDBUtils.d.ts.map +1 -0
  115. package/dist/utils/service/serviceRateDBUtils.js +159 -0
  116. package/dist/utils/service/serviceRateDBUtils.js.map +1 -0
  117. package/dist/utils/service/serviceRateTypes.d.ts +9 -0
  118. package/dist/utils/service/serviceRateTypes.d.ts.map +1 -0
  119. package/dist/utils/service/serviceRateTypes.js +2 -0
  120. package/dist/utils/service/serviceRateTypes.js.map +1 -0
  121. package/dist/utils/service/serviceRateUtils.d.ts +24 -0
  122. package/dist/utils/service/serviceRateUtils.d.ts.map +1 -0
  123. package/dist/utils/service/serviceRateUtils.js +183 -0
  124. package/dist/utils/service/serviceRateUtils.js.map +1 -0
  125. package/dist/utils/service/serviceUtils.d.ts +83 -0
  126. package/dist/utils/service/serviceUtils.d.ts.map +1 -0
  127. package/dist/utils/service/serviceUtils.js +311 -0
  128. package/dist/utils/service/serviceUtils.js.map +1 -0
  129. package/dist/utils/service/venueUtils.d.ts +13 -0
  130. package/dist/utils/service/venueUtils.d.ts.map +1 -0
  131. package/dist/utils/service/venueUtils.js +18 -0
  132. package/dist/utils/service/venueUtils.js.map +1 -0
  133. package/dist/utils/slugUtils.d.ts +9 -0
  134. package/dist/utils/slugUtils.d.ts.map +1 -0
  135. package/dist/utils/slugUtils.js +47 -0
  136. package/dist/utils/slugUtils.js.map +1 -0
  137. package/dist/utils/sortUtils.d.ts +7 -0
  138. package/dist/utils/sortUtils.d.ts.map +1 -0
  139. package/dist/utils/sortUtils.js +26 -0
  140. package/dist/utils/sortUtils.js.map +1 -0
  141. package/dist/utils/stringUtils.d.ts +2 -0
  142. package/dist/utils/stringUtils.d.ts.map +1 -0
  143. package/dist/utils/stringUtils.js +6 -0
  144. package/dist/utils/stringUtils.js.map +1 -0
  145. package/dist/utils/stripeAccountUtils.d.ts +3 -0
  146. package/dist/utils/stripeAccountUtils.d.ts.map +1 -0
  147. package/dist/utils/stripeAccountUtils.js +10 -0
  148. package/dist/utils/stripeAccountUtils.js.map +1 -0
  149. package/dist/utils/ticketListUtils.d.ts +12 -0
  150. package/dist/utils/ticketListUtils.d.ts.map +1 -0
  151. package/dist/utils/ticketListUtils.js +78 -0
  152. package/dist/utils/ticketListUtils.js.map +1 -0
  153. package/dist/utils/typeUtils.d.ts +11 -0
  154. package/dist/utils/typeUtils.d.ts.map +1 -0
  155. package/dist/utils/typeUtils.js +8 -0
  156. package/dist/utils/typeUtils.js.map +1 -0
  157. package/dist/utils/urlUtils.d.ts +10 -0
  158. package/dist/utils/urlUtils.d.ts.map +1 -0
  159. package/dist/utils/urlUtils.js +66 -0
  160. package/dist/utils/urlUtils.js.map +1 -0
  161. package/dist/utils/userPromoCodeUtils.d.ts +21 -0
  162. package/dist/utils/userPromoCodeUtils.d.ts.map +1 -0
  163. package/dist/utils/userPromoCodeUtils.js +13 -0
  164. package/dist/utils/userPromoCodeUtils.js.map +1 -0
  165. package/dist/utils/userSubscriptionUtils.d.ts +36 -0
  166. package/dist/utils/userSubscriptionUtils.d.ts.map +1 -0
  167. package/dist/utils/userSubscriptionUtils.js +56 -0
  168. package/dist/utils/userSubscriptionUtils.js.map +1 -0
  169. package/dist/utils/userUtils.d.ts +2 -0
  170. package/dist/utils/userUtils.d.ts.map +1 -0
  171. package/dist/utils/userUtils.js +2 -0
  172. package/dist/utils/userUtils.js.map +1 -0
  173. package/package.json +4 -2
  174. package/prisma/schema.prisma +117 -0
  175. package/src/definitions.ts +52 -1
  176. package/src/extendedSchemas.ts +177 -6
  177. package/src/index.ts +32 -21
  178. package/src/utils/blog/blogDbUtils.ts +343 -0
  179. package/src/utils/blogUtils.ts +134 -0
  180. package/src/utils/qrCodeUtils.ts +4 -2
  181. package/src/utils/service/apiServiceBookingApiUtils.ts +0 -0
  182. package/src/utils/slugUtils.ts +60 -0
  183. package/src/utils/ticketListUtils.ts +24 -6
  184. package/src/utils/typeUtils.ts +0 -0
@@ -0,0 +1,218 @@
1
+ import { BlogStatus } from '@prisma/client';
2
+ import { generateSlug, generateUniqueSlug } from '../slugUtils';
3
+ import { generateExcerpt, calculateReadingTime } from '../blogUtils';
4
+ import { BLOG_POST_DATA_TO_INCLUDE, BLOG_POST_PREVIEW_DATA_TO_INCLUDE } from '../../extendedSchemas';
5
+ // Blog slug utilities
6
+ export async function checkBlogSlugExists(prisma, slug, excludeId) {
7
+ const existingPost = await prisma.blogPost.findFirst({
8
+ where: {
9
+ slug,
10
+ ...(excludeId && { id: { not: excludeId } }),
11
+ },
12
+ });
13
+ return !!existingPost;
14
+ }
15
+ export async function generateUniqueBlogSlug(prisma, title, excludeId) {
16
+ return generateUniqueSlug(title, (slug, excludeId) => checkBlogSlugExists(prisma, slug, excludeId), excludeId);
17
+ }
18
+ // Blog CRUD operations
19
+ export async function createBlogPost(prisma, data) {
20
+ const slug = await generateUniqueBlogSlug(prisma, data.title);
21
+ const excerpt = data.excerpt || generateExcerpt(data.content);
22
+ const readTime = calculateReadingTime(data.content);
23
+ // Handle tags
24
+ const tagConnections = data.tags ? await connectOrCreateTags(prisma, data.tags) : [];
25
+ const blogPost = await prisma.blogPost.create({
26
+ data: {
27
+ title: data.title,
28
+ slug,
29
+ content: data.content,
30
+ excerpt,
31
+ readTime,
32
+ authorId: data.authorId,
33
+ coverImage: data.coverImage,
34
+ categoryId: data.categoryId,
35
+ metaTitle: data.metaTitle,
36
+ metaDescription: data.metaDescription,
37
+ metaKeywords: data.metaKeywords || [],
38
+ status: data.status || BlogStatus.Draft,
39
+ publishedAt: data.status === BlogStatus.Published ? (data.publishedAt || new Date()) : data.publishedAt,
40
+ scheduledFor: data.scheduledFor,
41
+ tags: {
42
+ connect: tagConnections,
43
+ },
44
+ },
45
+ include: BLOG_POST_DATA_TO_INCLUDE,
46
+ });
47
+ return blogPost;
48
+ }
49
+ export async function updateBlogPost(prisma, id, data) {
50
+ const updateData = { ...data };
51
+ // Generate new slug if title changed
52
+ if (data.title) {
53
+ updateData.slug = await generateUniqueBlogSlug(prisma, data.title, id);
54
+ }
55
+ // Update excerpt if content changed
56
+ if (data.content) {
57
+ updateData.excerpt = data.excerpt || generateExcerpt(data.content);
58
+ updateData.readTime = calculateReadingTime(data.content);
59
+ }
60
+ // Handle publishing
61
+ if (data.status === BlogStatus.Published && !data.publishedAt) {
62
+ updateData.publishedAt = new Date();
63
+ }
64
+ // Handle tags
65
+ if (data.tags) {
66
+ const tagConnections = await connectOrCreateTags(prisma, data.tags);
67
+ updateData.tags = {
68
+ set: tagConnections,
69
+ };
70
+ }
71
+ const blogPost = await prisma.blogPost.update({
72
+ where: { id },
73
+ data: updateData,
74
+ include: BLOG_POST_DATA_TO_INCLUDE,
75
+ });
76
+ return blogPost;
77
+ }
78
+ export async function getBlogPost(prisma, id, includeComments = true) {
79
+ const blogPost = await prisma.blogPost.findUnique({
80
+ where: { id },
81
+ include: includeComments ? BLOG_POST_DATA_TO_INCLUDE : BLOG_POST_PREVIEW_DATA_TO_INCLUDE,
82
+ });
83
+ return blogPost;
84
+ }
85
+ export async function getBlogPostBySlug(prisma, slug, includeComments = true) {
86
+ const blogPost = await prisma.blogPost.findUnique({
87
+ where: { slug },
88
+ include: includeComments ? BLOG_POST_DATA_TO_INCLUDE : BLOG_POST_PREVIEW_DATA_TO_INCLUDE,
89
+ });
90
+ return blogPost;
91
+ }
92
+ export async function searchBlogPosts(prisma, params) {
93
+ const { query, category, tag, author, status = BlogStatus.Published, page = 1, limit = 12, sortBy = 'publishedAt', sortOrder = 'desc', } = params;
94
+ const skip = (page - 1) * limit;
95
+ // Build where clause
96
+ const where = {
97
+ status,
98
+ };
99
+ if (query) {
100
+ where.OR = [
101
+ { title: { contains: query, mode: 'insensitive' } },
102
+ { excerpt: { contains: query, mode: 'insensitive' } },
103
+ { content: { contains: query, mode: 'insensitive' } },
104
+ ];
105
+ }
106
+ if (category) {
107
+ where.category = { slug: category };
108
+ }
109
+ if (tag) {
110
+ where.tags = { some: { slug: tag } };
111
+ }
112
+ if (author) {
113
+ where.author = { username: author };
114
+ }
115
+ // Get posts
116
+ const posts = await prisma.blogPost.findMany({
117
+ where,
118
+ include: BLOG_POST_PREVIEW_DATA_TO_INCLUDE,
119
+ orderBy: { [sortBy]: sortOrder },
120
+ skip,
121
+ take: limit,
122
+ });
123
+ // Get total count
124
+ const totalCount = await prisma.blogPost.count({ where });
125
+ // Get categories and tags for filters
126
+ const [categories, tags] = await Promise.all([
127
+ prisma.blogCategory.findMany({
128
+ include: {
129
+ _count: {
130
+ select: {
131
+ posts: {
132
+ where: { status: BlogStatus.Published },
133
+ },
134
+ },
135
+ },
136
+ },
137
+ orderBy: { name: 'asc' },
138
+ }),
139
+ prisma.blogTag.findMany({
140
+ include: {
141
+ _count: {
142
+ select: {
143
+ posts: {
144
+ where: { status: BlogStatus.Published },
145
+ },
146
+ },
147
+ },
148
+ },
149
+ orderBy: { name: 'asc' },
150
+ }),
151
+ ]);
152
+ return {
153
+ posts: posts,
154
+ totalCount,
155
+ totalPages: Math.ceil(totalCount / limit),
156
+ currentPage: page,
157
+ categories,
158
+ tags,
159
+ };
160
+ }
161
+ export async function incrementBlogPostViews(prisma, id) {
162
+ await prisma.blogPost.update({
163
+ where: { id },
164
+ data: {
165
+ viewCount: {
166
+ increment: 1,
167
+ },
168
+ },
169
+ });
170
+ }
171
+ // Category utilities
172
+ export async function createBlogCategory(prisma, data) {
173
+ const slug = generateSlug(data.name);
174
+ return prisma.blogCategory.create({
175
+ data: {
176
+ name: data.name,
177
+ slug,
178
+ description: data.description,
179
+ color: data.color,
180
+ },
181
+ });
182
+ }
183
+ // Tag utilities
184
+ export async function connectOrCreateTags(prisma, tagNames) {
185
+ const connections = [];
186
+ for (const tagName of tagNames) {
187
+ const slug = generateSlug(tagName);
188
+ const tag = await prisma.blogTag.upsert({
189
+ where: { slug },
190
+ update: {},
191
+ create: {
192
+ name: tagName,
193
+ slug,
194
+ },
195
+ });
196
+ connections.push({ id: tag.id });
197
+ }
198
+ return connections;
199
+ }
200
+ export async function getPopularBlogPosts(prisma, limit = 5) {
201
+ const posts = await prisma.blogPost.findMany({
202
+ where: { status: BlogStatus.Published },
203
+ include: BLOG_POST_PREVIEW_DATA_TO_INCLUDE,
204
+ orderBy: { viewCount: 'desc' },
205
+ take: limit,
206
+ });
207
+ return posts;
208
+ }
209
+ export async function getRecentBlogPosts(prisma, limit = 5) {
210
+ const posts = await prisma.blogPost.findMany({
211
+ where: { status: BlogStatus.Published },
212
+ include: BLOG_POST_PREVIEW_DATA_TO_INCLUDE,
213
+ orderBy: { publishedAt: 'desc' },
214
+ take: limit,
215
+ });
216
+ return posts;
217
+ }
218
+ //# sourceMappingURL=blogDbUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogDbUtils.js","sourceRoot":"","sources":["../../../src/utils/blog/blogDbUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,iCAAiC,EAAmD,MAAM,uBAAuB,CAAC;AAEtJ,sBAAsB;AACtB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,IAAY,EACZ,SAAkB;IAElB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnD,KAAK,EAAE;YACL,IAAI;YACJ,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;SAC7C;KACF,CAAC,CAAC;IACH,OAAO,CAAC,CAAC,YAAY,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAoB,EACpB,KAAa,EACb,SAAkB;IAElB,OAAO,kBAAkB,CACvB,KAAK,EACL,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EACjE,SAAS,CACV,CAAC;AACJ,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,IAcC;IAED,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpD,cAAc;IACd,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAErF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO;YACP,QAAQ;YACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK;YACvC,WAAW,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YACvG,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE;gBACJ,OAAO,EAAE,cAAc;aACxB;SACF;QACD,OAAO,EAAE,yBAAyB;KACnC,CAAC,CAAC;IAEH,OAAO,QAAuB,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,EAAU,EACV,IAaC;IAED,MAAM,UAAU,GAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAEpC,qCAAqC;IACrC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,UAAU,CAAC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9D,UAAU,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,cAAc;IACd,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,UAAU,CAAC,IAAI,GAAG;YAChB,GAAG,EAAE,cAAc;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,KAAK,EAAE,EAAE,EAAE,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,yBAAyB;KACnC,CAAC,CAAC;IAEH,OAAO,QAAuB,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAoB,EACpB,EAAU,EACV,kBAA2B,IAAI;IAE/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChD,KAAK,EAAE,EAAE,EAAE,EAAE;QACb,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,iCAAiC;KACzF,CAAC,CAAC;IAEH,OAAO,QAA8B,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,IAAY,EACZ,kBAA2B,IAAI;IAE/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChD,KAAK,EAAE,EAAE,IAAI,EAAE;QACf,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,iCAAiC;KACzF,CAAC,CAAC;IAEH,OAAO,QAA8B,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,MAAwB;IAExB,MAAM,EACJ,KAAK,EACL,QAAQ,EACR,GAAG,EACH,MAAM,EACN,MAAM,GAAG,UAAU,CAAC,SAAS,EAC7B,IAAI,GAAG,CAAC,EACR,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,aAAa,EACtB,SAAS,GAAG,MAAM,GACnB,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAEhC,qBAAqB;IACrB,MAAM,KAAK,GAAQ;QACjB,MAAM;KACP,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,EAAE,GAAG;YACT,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YACnD,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;YACrD,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;SACtD,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACtC,CAAC;IAED,YAAY;IACZ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3C,KAAK;QACL,OAAO,EAAE,iCAAiC;QAC1C,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE;QAChC,IAAI;QACJ,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1D,sCAAsC;IACtC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC3B,OAAO,EAAE;gBACP,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE;yBACxC;qBACF;iBACF;aACF;YACD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACzB,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE;gBACP,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE;yBACxC;qBACF;iBACF;aACF;YACD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACzB,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,KAAsB;QAC7B,UAAU;QACV,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACzC,WAAW,EAAE,IAAI;QACjB,UAAU;QACV,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAoB,EACpB,EAAU;IAEV,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,KAAK,EAAE,EAAE,EAAE,EAAE;QACb,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,SAAS,EAAE,CAAC;aACb;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,qBAAqB;AACrB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,IAIC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QAChC,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB;KACF,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,QAAkB;IAElB,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,KAAK,EAAE,EAAE,IAAI,EAAE;YACf,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,IAAI;aACL;SACF,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,QAAgB,CAAC;IAEjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3C,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE;QACvC,OAAO,EAAE,iCAAiC;QAC1C,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC9B,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,QAAgB,CAAC;IAEjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3C,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE;QACvC,OAAO,EAAE,iCAAiC;QAC1C,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;QAChC,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,OAAO,KAAsB,CAAC;AAChC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare function generateBlogDetailUrl(blogId: string, slug?: string): string;
2
+ export declare function getBlogDetailUrl(blogId: string, slug?: string, title?: string): string;
3
+ export declare function parseBlogUrlParams(blogIdSlug: string): {
4
+ id: string;
5
+ slug?: string;
6
+ } | null;
7
+ export declare function generateExcerpt(content: string, length?: number): string;
8
+ export declare function calculateReadingTime(content: string): number;
9
+ export declare function getBlogImageUrl(imageUrl?: string | null): string;
10
+ export declare function generateMetaTitle(title: string, siteName?: string): string;
11
+ export declare function generateMetaDescription(content: string, title: string): string;
12
+ export declare function validateBlogContent(title: string, content: string): {
13
+ isValid: boolean;
14
+ errors: string[];
15
+ };
16
+ export declare function processTags(tagString: string): string[];
17
+ export declare function highlightSearchTerms(text: string, searchTerm: string): string;
18
+ export declare function formatPublishDate(date: Date | string): string;
19
+ //# sourceMappingURL=blogUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogUtils.d.ts","sourceRoot":"","sources":["../../src/utils/blogUtils.ts"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAWtF;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgB3F;AAGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAA4B,GAAG,MAAM,CAe7F;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAGD,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEhE;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe,GAAG,MAAM,CAElF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB1G;AAGD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAQvD;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK7E;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAO7D"}
@@ -0,0 +1,118 @@
1
+ import { generateSlug } from './slugUtils';
2
+ import { BLOG_DETAIL_URL, BLOG_EXCERPT_LENGTH, DEFAULT_BLOG_IMAGE, SITE_NAME } from '../definitions';
3
+ // Blog URL generation
4
+ export function generateBlogDetailUrl(blogId, slug) {
5
+ if (slug) {
6
+ return `${BLOG_DETAIL_URL}/${blogId}-${slug}`;
7
+ }
8
+ return `${BLOG_DETAIL_URL}/${blogId}`;
9
+ }
10
+ export function getBlogDetailUrl(blogId, slug, title) {
11
+ if (slug) {
12
+ return generateBlogDetailUrl(blogId, slug);
13
+ }
14
+ else if (title) {
15
+ // Generate a temporary slug from title for URLs (not saved to DB)
16
+ const tempSlug = generateSlug(title);
17
+ return generateBlogDetailUrl(blogId, tempSlug);
18
+ }
19
+ else {
20
+ // Ultimate fallback - use just the ID (backward compatible)
21
+ return `${BLOG_DETAIL_URL}/${blogId}`;
22
+ }
23
+ }
24
+ // Parse blog URL parameters
25
+ export function parseBlogUrlParams(blogIdSlug) {
26
+ if (!blogIdSlug)
27
+ return null;
28
+ // Check if it contains a hyphen (ID-slug format)
29
+ const hyphenIndex = blogIdSlug.indexOf('-');
30
+ if (hyphenIndex === -1) {
31
+ // No hyphen found, treat as just an ID
32
+ return { id: blogIdSlug };
33
+ }
34
+ // Split at the first hyphen
35
+ const id = blogIdSlug.substring(0, hyphenIndex);
36
+ const slug = blogIdSlug.substring(hyphenIndex + 1);
37
+ return { id, slug };
38
+ }
39
+ // Content processing
40
+ export function generateExcerpt(content, length = BLOG_EXCERPT_LENGTH) {
41
+ // Strip HTML tags
42
+ const textContent = content.replace(/<[^>]*>/g, '');
43
+ if (textContent.length <= length) {
44
+ return textContent;
45
+ }
46
+ // Find the last complete word within the length limit
47
+ const truncated = textContent.substring(0, length);
48
+ const lastSpace = truncated.lastIndexOf(' ');
49
+ return lastSpace > 0
50
+ ? truncated.substring(0, lastSpace) + '...'
51
+ : truncated + '...';
52
+ }
53
+ // Calculate estimated reading time
54
+ export function calculateReadingTime(content) {
55
+ const wordsPerMinute = 200;
56
+ const textContent = content.replace(/<[^>]*>/g, '');
57
+ const wordCount = textContent.split(/\s+/).length;
58
+ return Math.ceil(wordCount / wordsPerMinute);
59
+ }
60
+ // Blog image handling
61
+ export function getBlogImageUrl(imageUrl) {
62
+ return imageUrl || DEFAULT_BLOG_IMAGE;
63
+ }
64
+ // SEO helpers
65
+ export function generateMetaTitle(title, siteName = 'Bash') {
66
+ return `${title} | ${siteName}`;
67
+ }
68
+ export function generateMetaDescription(content, title) {
69
+ const excerpt = generateExcerpt(content, 155);
70
+ return excerpt || `Read about ${title} on ${SITE_NAME}`;
71
+ }
72
+ // Content validation
73
+ export function validateBlogContent(title, content) {
74
+ const errors = [];
75
+ if (!title || title.trim().length === 0) {
76
+ errors.push('Title is required');
77
+ }
78
+ else if (title.length > 200) {
79
+ errors.push('Title must be less than 200 characters');
80
+ }
81
+ if (!content || content.trim().length === 0) {
82
+ errors.push('Content is required');
83
+ }
84
+ else if (content.length < 100) {
85
+ errors.push('Content must be at least 100 characters');
86
+ }
87
+ return {
88
+ isValid: errors.length === 0,
89
+ errors
90
+ };
91
+ }
92
+ // Tag processing
93
+ export function processTags(tagString) {
94
+ if (!tagString)
95
+ return [];
96
+ return tagString
97
+ .split(',')
98
+ .map(tag => tag.trim().toLowerCase())
99
+ .filter(tag => tag.length > 0)
100
+ .slice(0, 10); // Limit to 10 tags
101
+ }
102
+ // Search helpers
103
+ export function highlightSearchTerms(text, searchTerm) {
104
+ if (!searchTerm)
105
+ return text;
106
+ const regex = new RegExp(`(${searchTerm})`, 'gi');
107
+ return text.replace(regex, '<mark>$1</mark>');
108
+ }
109
+ // Format publication date
110
+ export function formatPublishDate(date) {
111
+ const publishDate = typeof date === 'string' ? new Date(date) : date;
112
+ return publishDate.toLocaleDateString('en-US', {
113
+ year: 'numeric',
114
+ month: 'long',
115
+ day: 'numeric'
116
+ });
117
+ }
118
+ //# sourceMappingURL=blogUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogUtils.js","sourceRoot":"","sources":["../../src/utils/blogUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { DateTime } from "luxon";
2
+ import { DateType, DateValueType } from "react-tailwindcss-datepicker";
3
+ import { DateTimeArgType } from "../definitions";
4
+ export declare const DATETIME_FORMAT_STANDARD = "MMM d, yyyy - h:mm a";
5
+ export declare const DATETIME_FORMAT_ISO_LIKE = "yyyy-MM-dd HH:mm";
6
+ export declare const DATE_FORMAT_STANDARD = "MM/dd/yyyy";
7
+ export declare const DATE_FORMAT_ISO = "yyyy-MM-dd";
8
+ export declare const TIME_FORMAT_AM_PM = "h:mm a";
9
+ export interface ITime {
10
+ hours: number;
11
+ minutes: number;
12
+ ampm: "AM" | "PM";
13
+ }
14
+ export declare function getLocalTimezoneName(): string;
15
+ export declare function formatDateRangeBasic(startDateTimeArg: Date | null, endDateTimeArg: Date | null): string;
16
+ export declare function formatDateRange(startDateTimeArg: Date | null, endDateTimeArg: Date | null): string;
17
+ export declare function ensureIsDateTime(possiblyADate: DateTimeArgType): Date | undefined;
18
+ export declare function normalizeDate(validDate: Date | string | undefined | null): Date | undefined;
19
+ export declare function normalizeDates(dates: (Date | string | undefined | null)[]): Date[];
20
+ export declare function formatDateTimeToISODateTimeString(date: DateTimeArgType): string | undefined;
21
+ export declare function dateWithinDateRange(date: DateTimeArgType, dateRange: DateValueType | undefined): boolean;
22
+ export declare function findLatestDateTime(date1Arg: DateTimeArgType, date2Arg: DateTimeArgType): Date | undefined;
23
+ export declare function isDateTimeLaterThanNow(date: DateTimeArgType): boolean;
24
+ export declare function areDateTimesEqual(date1: DateTimeArgType, date2: DateTimeArgType): boolean;
25
+ /**
26
+ * Returns a 1 if date1 is later than date2; 0 if both dates are equal; -1 if date2 is later than date1
27
+ * @param date1
28
+ * @param date2
29
+ */
30
+ export declare function compareDateTime(date1: DateTimeArgType, date2: DateTimeArgType): number;
31
+ export declare function setDateButPreserveTime(dateArg: DateType, dateWithTheTimeYouWantToKeep: DateType | undefined): Date;
32
+ export declare function setTimeOnDate(date: DateType | Date | undefined, parsedTime: ITime | null): Date;
33
+ export declare function ensureDateTimeIsLocalDateTime(dateArg: DateType | DateTime | undefined): DateTime;
34
+ export declare function formatDateTimeToTimeString(date: Date | string | undefined | null): string;
35
+ export declare function formatDateTimeToTimeString24hr(date: Date | string | undefined | null): string;
36
+ export declare function parseTimeString(timeStr: string): ITime | null;
37
+ export declare function timestampMinutesFromNow(minutes: number): number;
38
+ //# sourceMappingURL=dateTimeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateTimeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateTimeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAIjD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,IAAI,GAAG,IAAI,EAC7B,cAAc,EAAE,IAAI,GAAG,IAAI,GAC1B,MAAM,CAcR;AAED,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,IAAI,GAAG,IAAI,EAC7B,cAAc,EAAE,IAAI,GAAG,IAAI,GAC1B,MAAM,CAcR;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,eAAe,GAC7B,IAAI,GAAG,SAAS,CAOlB;AAGD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAC1C,IAAI,GAAG,SAAS,CAYlB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GAC1C,IAAI,EAAE,CAIR;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,eAAe,GACpB,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,aAAa,GAAG,SAAS,GACnC,OAAO,CAMT;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,eAAe,GACxB,IAAI,GAAG,SAAS,CAIlB;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAErE;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,eAAe,GACrB,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,eAAe,GACrB,MAAM,CA4BR;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,QAAQ,EACjB,4BAA4B,EAAE,QAAQ,GAAG,SAAS,GACjD,IAAI,CAyCN;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACjC,UAAU,EAAE,KAAK,GAAG,IAAI,GACvB,IAAI,CAaN;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GACvC,QAAQ,CAWV;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GACrC,MAAM,CAGR;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GACrC,MAAM,CAGR;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAuB7D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,207 @@
1
+ import { DateTime } from "luxon";
2
+ const PARSE_TIME_REG = /^(\d{1,2}):(\d{2}) ?([APM]{0,2})$/i;
3
+ export const DATETIME_FORMAT_STANDARD = "MMM d, yyyy - h:mm a";
4
+ export const DATETIME_FORMAT_ISO_LIKE = "yyyy-MM-dd HH:mm";
5
+ export const DATE_FORMAT_STANDARD = "MM/dd/yyyy";
6
+ export const DATE_FORMAT_ISO = "yyyy-MM-dd";
7
+ export const TIME_FORMAT_AM_PM = "h:mm a";
8
+ export function getLocalTimezoneName() {
9
+ return DateTime.local().zoneName;
10
+ }
11
+ export function formatDateRangeBasic(startDateTimeArg, endDateTimeArg) {
12
+ const userTimezone = getLocalTimezoneName();
13
+ const startDateTime = DateTime.fromJSDate(startDateTimeArg || new Date()).setZone(userTimezone);
14
+ const endDateTime = DateTime.fromJSDate(endDateTimeArg || new Date()).setZone(userTimezone);
15
+ if (startDateTime.hasSame(endDateTime, "day")) {
16
+ return `${startDateTime.toFormat(DATETIME_FORMAT_STANDARD)} to ${endDateTime.toFormat(TIME_FORMAT_AM_PM)}`;
17
+ }
18
+ return `${startDateTime.toFormat(DATETIME_FORMAT_STANDARD)} to ${endDateTime.toFormat(DATETIME_FORMAT_STANDARD)}`;
19
+ }
20
+ export function formatDateRange(startDateTimeArg, endDateTimeArg) {
21
+ const userTimezone = getLocalTimezoneName();
22
+ const startDateTime = ensureDateTimeIsLocalDateTime(startDateTimeArg).setZone(userTimezone);
23
+ const endDateTime = ensureDateTimeIsLocalDateTime(endDateTimeArg).setZone(userTimezone);
24
+ if (startDateTime.hasSame(endDateTime, "day")) {
25
+ return `${startDateTime.toFormat(DATETIME_FORMAT_STANDARD)} to ${endDateTime.toFormat(TIME_FORMAT_AM_PM)}`;
26
+ }
27
+ return `${startDateTime.toFormat(DATETIME_FORMAT_STANDARD)} to ${endDateTime.toFormat(DATETIME_FORMAT_STANDARD)}`;
28
+ }
29
+ export function ensureIsDateTime(possiblyADate) {
30
+ if (!possiblyADate) {
31
+ return undefined;
32
+ }
33
+ return typeof possiblyADate === "string"
34
+ ? new Date(possiblyADate)
35
+ : possiblyADate;
36
+ }
37
+ //convert to utc and round minutes
38
+ export function normalizeDate(validDate) {
39
+ if (!validDate)
40
+ return undefined;
41
+ const date = new Date(validDate);
42
+ if (isNaN(date.getTime())) {
43
+ console.error("Invalid date provided:", validDate);
44
+ return undefined;
45
+ }
46
+ // Normalize to UTC and start of minute
47
+ return DateTime.fromJSDate(date).toUTC().startOf("minute").toJSDate();
48
+ }
49
+ export function normalizeDates(dates) {
50
+ return dates
51
+ .map((date) => normalizeDate(date)) // Normalize each date
52
+ .filter((date) => !!date); // Filter out invalid dates
53
+ }
54
+ export function formatDateTimeToISODateTimeString(date) {
55
+ if (!date) {
56
+ return undefined;
57
+ }
58
+ date = new Date(date);
59
+ return date.toISOString();
60
+ }
61
+ export function dateWithinDateRange(date, dateRange) {
62
+ const startDate = DateTime.fromJSDate(dateRange?.startDate || new Date()).startOf("day");
63
+ const endDate = DateTime.fromJSDate(dateRange?.endDate || new Date()).endOf("day");
64
+ const checkDate = DateTime.fromJSDate(new Date(date || ''));
65
+ return checkDate >= startDate && checkDate < endDate;
66
+ }
67
+ export function findLatestDateTime(date1Arg, date2Arg) {
68
+ const date1 = dateTimeTypeToDate(date1Arg);
69
+ const date2 = dateTimeTypeToDate(date2Arg);
70
+ return compareDateTime(date1, date2) > 0 ? date1 : date2;
71
+ }
72
+ function dateTimeTypeToDate(date) {
73
+ if (typeof date === "string") {
74
+ return new Date(date);
75
+ }
76
+ else {
77
+ return date ?? undefined;
78
+ }
79
+ }
80
+ export function isDateTimeLaterThanNow(date) {
81
+ return compareDateTime(date, new Date()) > 0;
82
+ }
83
+ export function areDateTimesEqual(date1, date2) {
84
+ return compareDateTime(date1, date2) === 0;
85
+ }
86
+ /**
87
+ * Returns a 1 if date1 is later than date2; 0 if both dates are equal; -1 if date2 is later than date1
88
+ * @param date1
89
+ * @param date2
90
+ */
91
+ export function compareDateTime(date1, date2) {
92
+ if (!date1 && !date2) {
93
+ return 0;
94
+ }
95
+ if (!date1) {
96
+ return -1;
97
+ }
98
+ if (!date2) {
99
+ return 1;
100
+ }
101
+ if (typeof date1 === "string") {
102
+ date1 = new Date(date1);
103
+ }
104
+ if (typeof date2 === "string") {
105
+ date2 = new Date(date2);
106
+ }
107
+ const date1Time = date1.getTime();
108
+ const date2Time = date2.getTime();
109
+ if (date1Time > date2Time) {
110
+ return 1;
111
+ }
112
+ if (date1Time === date2Time) {
113
+ return 0;
114
+ }
115
+ else {
116
+ return -1;
117
+ }
118
+ }
119
+ export function setDateButPreserveTime(dateArg, dateWithTheTimeYouWantToKeep) {
120
+ if (!dateArg || !dateWithTheTimeYouWantToKeep) {
121
+ console.error("Invalid arguments:", {
122
+ dateArg,
123
+ dateWithTheTimeYouWantToKeep,
124
+ });
125
+ throw new Error("Both dateArg and dateWithTheTimeYouWantToKeep are required.");
126
+ }
127
+ // Get local timezone
128
+ const localTimeZone = getLocalTimezoneName();
129
+ // Extract date and time components using Luxon
130
+ const dateOnly = DateTime.fromJSDate(new Date(dateArg)).setZone(localTimeZone);
131
+ const timeOnly = DateTime.fromJSDate(new Date(dateWithTheTimeYouWantToKeep)).setZone(localTimeZone);
132
+ // Combine date from first argument with time from second argument
133
+ const combinedDateTime = dateOnly.set({
134
+ hour: timeOnly.hour,
135
+ minute: timeOnly.minute,
136
+ second: 0,
137
+ millisecond: 0
138
+ });
139
+ console.log("Combining date and time:", {
140
+ dateOnly: dateOnly.toISO(),
141
+ timeOnly: timeOnly.toFormat("HH:mm"),
142
+ combinedDateTime: combinedDateTime.toISO(),
143
+ localTimeZone,
144
+ });
145
+ const result = combinedDateTime.toJSDate();
146
+ if (isNaN(result.getTime())) {
147
+ console.error("Invalid combined datetime:", combinedDateTime.toISO());
148
+ throw new Error("Invalid date or time format.");
149
+ }
150
+ console.log("Final combined DateTime (UTC):", result);
151
+ return result;
152
+ }
153
+ export function setTimeOnDate(date, parsedTime) {
154
+ const dateTime = DateTime.fromJSDate(date ? new Date(date) : new Date());
155
+ if (parsedTime) {
156
+ const updatedDateTime = dateTime.set({
157
+ hour: parsedTime.hours,
158
+ minute: parsedTime.minutes,
159
+ second: 0,
160
+ millisecond: 0
161
+ });
162
+ return setDateButPreserveTime(dateTime.toJSDate(), updatedDateTime.toJSDate());
163
+ }
164
+ return dateTime.toJSDate();
165
+ }
166
+ export function ensureDateTimeIsLocalDateTime(dateArg) {
167
+ if (!dateArg) {
168
+ return DateTime.local();
169
+ }
170
+ if (dateArg instanceof DateTime) {
171
+ return dateArg.setZone(getLocalTimezoneName());
172
+ }
173
+ const dt = DateTime.fromJSDate(new Date(dateArg));
174
+ return dt.setZone(getLocalTimezoneName());
175
+ }
176
+ export function formatDateTimeToTimeString(date) {
177
+ const dt = DateTime.fromJSDate(new Date(date ?? Date.now()));
178
+ return dt.toFormat("h:mm a");
179
+ }
180
+ export function formatDateTimeToTimeString24hr(date) {
181
+ const dt = DateTime.fromJSDate(new Date(date ?? Date.now()));
182
+ return dt.toFormat("H:mm");
183
+ }
184
+ export function parseTimeString(timeStr) {
185
+ const match = timeStr.match(PARSE_TIME_REG);
186
+ if (match) {
187
+ const hours = parseInt(match[1], 10);
188
+ const minutes = parseInt(match[2], 10);
189
+ const ampm = match[3].toUpperCase();
190
+ if (hours >= 0 &&
191
+ hours <= 12 &&
192
+ minutes >= 0 &&
193
+ minutes <= 59 &&
194
+ (ampm === "AM" || ampm === "PM")) {
195
+ return {
196
+ hours: ampm === "PM" && hours < 12 ? hours + 12 : hours,
197
+ minutes,
198
+ ampm,
199
+ };
200
+ }
201
+ }
202
+ return null;
203
+ }
204
+ export function timestampMinutesFromNow(minutes) {
205
+ return Math.floor(DateTime.local().plus({ minutes }).toSeconds());
206
+ }
207
+ //# sourceMappingURL=dateTimeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateTimeUtils.js","sourceRoot":"","sources":["../../src/utils/dateTimeUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const ENTITIES: {
2
+ readonly Service: "Service";
3
+ readonly BashEvent: "BashEvent";
4
+ };
5
+ //# sourceMappingURL=entityUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entityUtils.d.ts","sourceRoot":"","sources":["../../src/utils/entityUtils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;CAGX,CAAC"}