@nanas-home/hub-common 0.12.299 → 0.12.378

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.
@@ -2,21 +2,294 @@ import dayjs from 'dayjs';
2
2
  import { Token, Container } from '@freshgum/typedi';
3
3
  import { jwtDecode } from 'jwt-decode';
4
4
 
5
- // src/helpers/asyncHelper.ts
6
- var timeout = (ms) => {
7
- return new Promise((resolve) => setTimeout(resolve, ms));
5
+ // src/constants/mouseEvent.ts
6
+ var MouseButton = {
7
+ left: 0,
8
+ middle: 1,
9
+ right: 2
8
10
  };
9
- var addToParallelTasks = async (tasks, newTask, numTasksInParallel = 5) => {
10
- if (tasks.length >= numTasksInParallel) {
11
- const finishedTask = Promise.any(tasks);
12
- const indexOfTask = tasks.indexOf(finishedTask);
13
- tasks.splice(indexOfTask, 1);
14
- await finishedTask;
11
+
12
+ // src/constants/validation.ts
13
+ var minUrlLength = 5;
14
+ var portalGlyphLength = 12;
15
+ var validUuidChars = [
16
+ "1",
17
+ "2",
18
+ "3",
19
+ "4",
20
+ "5",
21
+ "6",
22
+ "7",
23
+ "8",
24
+ "9",
25
+ "0",
26
+ "A",
27
+ "B",
28
+ "C",
29
+ "D",
30
+ "E",
31
+ "F"
32
+ ];
33
+
34
+ // src/contracts/generated/apiRoute.ts
35
+ var apiRouteParam = {
36
+ userUuid: ":userUuid",
37
+ petUuid: ":petUuid",
38
+ addressUuid: ":addressUuid",
39
+ bookingUuid: ":bookingUuid"
40
+ };
41
+ var apiRoute = {
42
+ home: "/",
43
+ swagger: "/swagger",
44
+ common: {
45
+ auth: {
46
+ prefix: "/auth",
47
+ devJwt: "/jwt",
48
+ login: "/login",
49
+ signup: "/signup",
50
+ swagger: { name: "Auth", description: "Endpoints for login, sign up etc" },
51
+ token: {
52
+ prefix: "/token",
53
+ swagger: { name: "AuthToken", description: "Endpoints for creating an API token" }
54
+ }
55
+ },
56
+ version: "/version"
57
+ },
58
+ admin: {
59
+ activity: {
60
+ prefix: "/admin/activity",
61
+ swagger: {
62
+ name: "Activity",
63
+ description: "Endpoints for retrieving and managing activities"
64
+ }
65
+ },
66
+ address: {
67
+ prefix: "/admin/address",
68
+ byLink: "/link",
69
+ lookup: "/lookup",
70
+ swagger: { name: "Addresses", description: "Endpoints for managing addresses" }
71
+ },
72
+ answer: {
73
+ prefix: "/admin/answer",
74
+ swagger: { name: "Answers", description: "Endpoints for managing answers to signup questions" }
75
+ },
76
+ booking: {
77
+ prefix: "/admin/booking",
78
+ byUser: "/user",
79
+ swagger: { name: "Bookings", description: "Endpoints for managing bookings" }
80
+ },
81
+ comment: {
82
+ prefix: "/admin/comment",
83
+ byLink: "/link",
84
+ swagger: { name: "Comments", description: "Endpoints for managing Comments" }
85
+ },
86
+ membership: {
87
+ prefix: "/admin/membership",
88
+ swagger: { name: "Memberships", description: "Endpoints for managing Memberships" }
89
+ },
90
+ pet: {
91
+ prefix: "/admin/pet",
92
+ byUser: "/user",
93
+ swagger: { name: "Pets", description: "Endpoints for managing Pets" }
94
+ },
95
+ question: {
96
+ prefix: "/admin/question",
97
+ swagger: {
98
+ name: "Questions",
99
+ description: "Endpoints for managing questions that users need to answer in order to complete their profiles"
100
+ }
101
+ },
102
+ upload: {
103
+ prefix: "/admin/upload",
104
+ viewRaw: "/view-raw",
105
+ image: "/image",
106
+ swagger: { name: "Uploads", description: "Endpoints for managing Uploads" }
107
+ },
108
+ user: {
109
+ prefix: "/admin/user",
110
+ swagger: { name: "Users", description: "Endpoints for Admins to manage Users" }
111
+ },
112
+ userMembership: {
113
+ prefix: "/admin/user-membership",
114
+ byUser: "/user",
115
+ swagger: { name: "UserMemberships", description: "Endpoints for managing User's Memberships" }
116
+ },
117
+ userPermission: {
118
+ prefix: "/admin/user-permission",
119
+ swagger: { name: "UserPermissions", description: "Endpoints for getting and managing user permissions." }
120
+ }
121
+ },
122
+ client: {
123
+ address: {
124
+ prefix: "/address",
125
+ getAll: "",
126
+ getById: apiRouteParam.addressUuid,
127
+ create: "",
128
+ update: apiRouteParam.addressUuid,
129
+ delete: apiRouteParam.addressUuid,
130
+ swagger: { name: "Answers", description: "Endpoints for User to manage their Addresses" }
131
+ },
132
+ answer: {
133
+ prefix: "/answer",
134
+ getForProfile: "/profile",
135
+ getForPet: `/pet/${apiRouteParam.petUuid}`,
136
+ swagger: { name: "Answers", description: "Endpoints for managing answers to signup questions" }
137
+ },
138
+ booking: {
139
+ prefix: "/booking",
140
+ getAll: "",
141
+ getById: apiRouteParam.bookingUuid,
142
+ create: "",
143
+ update: apiRouteParam.bookingUuid,
144
+ delete: apiRouteParam.bookingUuid,
145
+ swagger: { name: "Bookings", description: "Endpoints for User to manage their Bookings" }
146
+ },
147
+ bookingAddon: {
148
+ prefix: "/booking-addon",
149
+ getByBookingId: apiRouteParam.bookingUuid,
150
+ addToBooking: apiRouteParam.bookingUuid,
151
+ removeToBooking: apiRouteParam.bookingUuid,
152
+ swagger: { name: "BookingAddons", description: "Endpoints for User to manage their Booking Addons" }
153
+ },
154
+ membership: {
155
+ prefix: "/membership",
156
+ getAll: "",
157
+ swagger: { name: "MembershipTiers", description: "Endpoints for public TierMemberships" }
158
+ },
159
+ pet: {
160
+ prefix: "/pet",
161
+ getAll: "",
162
+ getById: `${apiRouteParam.petUuid}`,
163
+ create: "",
164
+ update: apiRouteParam.petUuid,
165
+ delete: apiRouteParam.petUuid,
166
+ getProfileById: `${apiRouteParam.petUuid}/profile.png`,
167
+ swagger: { name: "Pets", description: "Endpoints for User to manage their Pets" }
168
+ },
169
+ profile: {
170
+ prefix: "/profile",
171
+ getForRequester: "",
172
+ update: "",
173
+ getProfileById: `/${apiRouteParam.userUuid}/profile.png`,
174
+ swagger: { name: "Profile", description: "Endpoints for User to manage their Profile" }
175
+ },
176
+ upload: {
177
+ prefix: "/upload",
178
+ image: "/image",
179
+ swagger: { name: "Uploads", description: "Endpoints for managing Uploads" }
180
+ },
181
+ userMembership: {
182
+ prefix: "/user-membership",
183
+ bookingDays: "/booking-days",
184
+ swagger: { name: "UserMembership", description: "Endpoints for User to get info about their Memberships" }
185
+ }
15
186
  }
16
- tasks.push(newTask);
17
- return tasks;
18
187
  };
19
188
 
189
+ // src/contracts/generated/enum/activityType.ts
190
+ var ActivityType = /* @__PURE__ */ ((ActivityType2) => {
191
+ ActivityType2[ActivityType2["Unknown"] = 0] = "Unknown";
192
+ ActivityType2[ActivityType2["Create"] = 1] = "Create";
193
+ ActivityType2[ActivityType2["Read"] = 2] = "Read";
194
+ ActivityType2[ActivityType2["Update"] = 3] = "Update";
195
+ ActivityType2[ActivityType2["Delete"] = 4] = "Delete";
196
+ return ActivityType2;
197
+ })(ActivityType || {});
198
+
199
+ // src/contracts/generated/enum/addressLinkType.ts
200
+ var AddressLinkType = /* @__PURE__ */ ((AddressLinkType2) => {
201
+ AddressLinkType2[AddressLinkType2["Unknown"] = 0] = "Unknown";
202
+ AddressLinkType2[AddressLinkType2["User"] = 1] = "User";
203
+ return AddressLinkType2;
204
+ })(AddressLinkType || {});
205
+
206
+ // src/contracts/generated/enum/answerLinkType.ts
207
+ var AnswerLinkType = /* @__PURE__ */ ((AnswerLinkType2) => {
208
+ AnswerLinkType2[AnswerLinkType2["Unknown"] = 0] = "Unknown";
209
+ AnswerLinkType2[AnswerLinkType2["User"] = 1] = "User";
210
+ AnswerLinkType2[AnswerLinkType2["Pet"] = 2] = "Pet";
211
+ return AnswerLinkType2;
212
+ })(AnswerLinkType || {});
213
+
214
+ // src/contracts/generated/enum/appType.ts
215
+ var AppType = /* @__PURE__ */ ((AppType2) => {
216
+ AppType2[AppType2["Admin"] = 0] = "Admin";
217
+ AppType2[AppType2["Client"] = 1] = "Client";
218
+ AppType2[AppType2["Api"] = 2] = "Api";
219
+ AppType2[AppType2["Test"] = 3] = "Test";
220
+ AppType2[AppType2["Interactive"] = 4] = "Interactive";
221
+ return AppType2;
222
+ })(AppType || {});
223
+ var webAppTypes = [
224
+ 0 /* Admin */,
225
+ //
226
+ 1 /* Client */
227
+ ];
228
+ var isWebApp = (appType) => webAppTypes.includes(appType);
229
+
230
+ // src/contracts/generated/enum/bookingAddonType.ts
231
+ var BookingAddonType = /* @__PURE__ */ ((BookingAddonType2) => {
232
+ BookingAddonType2[BookingAddonType2["None"] = 0] = "None";
233
+ BookingAddonType2[BookingAddonType2["PetTaxi"] = 1] = "PetTaxi";
234
+ return BookingAddonType2;
235
+ })(BookingAddonType || {});
236
+
237
+ // src/contracts/generated/enum/bookingStatus.ts
238
+ var BookingStatusType = /* @__PURE__ */ ((BookingStatusType2) => {
239
+ BookingStatusType2[BookingStatusType2["Pending"] = 0] = "Pending";
240
+ BookingStatusType2[BookingStatusType2["Cancelled"] = 1] = "Cancelled";
241
+ BookingStatusType2[BookingStatusType2["FindPlacement"] = 2] = "FindPlacement";
242
+ BookingStatusType2[BookingStatusType2["Request"] = 3] = "Request";
243
+ BookingStatusType2[BookingStatusType2["PaidWithHostMatch"] = 4] = "PaidWithHostMatch";
244
+ BookingStatusType2[BookingStatusType2["Complete"] = 5] = "Complete";
245
+ BookingStatusType2[BookingStatusType2["CompleteWithHostFeedback"] = 6] = "CompleteWithHostFeedback";
246
+ return BookingStatusType2;
247
+ })(BookingStatusType || {});
248
+
249
+ // src/contracts/generated/enum/commentLinkType.ts
250
+ var CommentLinkType = /* @__PURE__ */ ((CommentLinkType2) => {
251
+ CommentLinkType2[CommentLinkType2["Unknown"] = 0] = "Unknown";
252
+ CommentLinkType2[CommentLinkType2["User"] = 1] = "User";
253
+ CommentLinkType2[CommentLinkType2["Pet"] = 2] = "Pet";
254
+ CommentLinkType2[CommentLinkType2["Booking"] = 3] = "Booking";
255
+ return CommentLinkType2;
256
+ })(CommentLinkType || {});
257
+
258
+ // src/contracts/generated/enum/membershipStatus.ts
259
+ var MembershipStatus = /* @__PURE__ */ ((MembershipStatus2) => {
260
+ MembershipStatus2[MembershipStatus2["Unknown"] = 0] = "Unknown";
261
+ MembershipStatus2[MembershipStatus2["Active"] = 1] = "Active";
262
+ MembershipStatus2[MembershipStatus2["PendingPayment"] = 2] = "PendingPayment";
263
+ MembershipStatus2[MembershipStatus2["Paused"] = 5] = "Paused";
264
+ MembershipStatus2[MembershipStatus2["Cancelled"] = 10] = "Cancelled";
265
+ MembershipStatus2[MembershipStatus2["Removed"] = 11] = "Removed";
266
+ return MembershipStatus2;
267
+ })(MembershipStatus || {});
268
+
269
+ // src/contracts/generated/enum/membershipType.ts
270
+ var MembershipType = /* @__PURE__ */ ((MembershipType2) => {
271
+ MembershipType2[MembershipType2["None"] = 0] = "None";
272
+ MembershipType2[MembershipType2["Club"] = 1] = "Club";
273
+ MembershipType2[MembershipType2["ClubPlus"] = 2] = "ClubPlus";
274
+ return MembershipType2;
275
+ })(MembershipType || {});
276
+
277
+ // src/contracts/generated/enum/networkState.ts
278
+ var NetworkState = /* @__PURE__ */ ((NetworkState2) => {
279
+ NetworkState2[NetworkState2["Pending"] = 0] = "Pending";
280
+ NetworkState2[NetworkState2["Loading"] = 1] = "Loading";
281
+ NetworkState2[NetworkState2["Success"] = 2] = "Success";
282
+ NetworkState2[NetworkState2["Error"] = 3] = "Error";
283
+ return NetworkState2;
284
+ })(NetworkState || {});
285
+
286
+ // src/contracts/generated/enum/orderDirectionType.ts
287
+ var OrderDirectionType = /* @__PURE__ */ ((OrderDirectionType2) => {
288
+ OrderDirectionType2["ASC"] = "ASC";
289
+ OrderDirectionType2["DESC"] = "DESC";
290
+ return OrderDirectionType2;
291
+ })(OrderDirectionType || {});
292
+
20
293
  // src/contracts/generated/enum/permissionType.ts
21
294
  var PermissionType = /* @__PURE__ */ ((PermissionType2) => {
22
295
  PermissionType2[PermissionType2["None"] = 0] = "None";
@@ -59,71 +332,190 @@ var PermissionType = /* @__PURE__ */ ((PermissionType2) => {
59
332
  return PermissionType2;
60
333
  })(PermissionType || {});
61
334
 
62
- // src/helpers/permissionHelper.ts
63
- var hasRequiredPermissions = (props) => {
64
- if (props.userPermissions.includes(1 /* All */)) {
65
- props.hasAdminPermission?.();
66
- return true;
67
- }
68
- const missingPermissions = props.requiredPermissions.filter((p) => props.userPermissions.includes(p) == false);
69
- if (missingPermissions.length > 0) {
70
- props.doesNotHavePermission?.(missingPermissions);
71
- return false;
72
- }
73
- return true;
335
+ // src/contracts/generated/enum/petSexType.ts
336
+ var PetSexType = /* @__PURE__ */ ((PetSexType2) => {
337
+ PetSexType2[PetSexType2["Other"] = 0] = "Other";
338
+ PetSexType2[PetSexType2["Male"] = 1] = "Male";
339
+ PetSexType2[PetSexType2["Female"] = 2] = "Female";
340
+ return PetSexType2;
341
+ })(PetSexType || {});
342
+
343
+ // src/contracts/generated/enum/petStatusType.ts
344
+ var PetStatusType = /* @__PURE__ */ ((PetStatusType2) => {
345
+ PetStatusType2[PetStatusType2["Unknown"] = 0] = "Unknown";
346
+ PetStatusType2[PetStatusType2["Active"] = 1] = "Active";
347
+ PetStatusType2[PetStatusType2["Deceased"] = 2] = "Deceased";
348
+ PetStatusType2[PetStatusType2["Blacklisted"] = 3] = "Blacklisted";
349
+ return PetStatusType2;
350
+ })(PetStatusType || {});
351
+
352
+ // src/contracts/generated/enum/petType.ts
353
+ var PetType = /* @__PURE__ */ ((PetType2) => {
354
+ PetType2[PetType2["Unknown"] = 0] = "Unknown";
355
+ PetType2[PetType2["Dog"] = 1] = "Dog";
356
+ PetType2[PetType2["Cat"] = 2] = "Cat";
357
+ return PetType2;
358
+ })(PetType || {});
359
+
360
+ // src/contracts/generated/enum/questionType.ts
361
+ var QuestionType = /* @__PURE__ */ ((QuestionType2) => {
362
+ QuestionType2[QuestionType2["Unknown"] = 0] = "Unknown";
363
+ QuestionType2[QuestionType2["ShortText"] = 1] = "ShortText";
364
+ QuestionType2[QuestionType2["LongText"] = 2] = "LongText";
365
+ QuestionType2[QuestionType2["YesNo"] = 3] = "YesNo";
366
+ QuestionType2[QuestionType2["YesNoUnknown"] = 4] = "YesNoUnknown";
367
+ QuestionType2[QuestionType2["StarRating5"] = 5] = "StarRating5";
368
+ return QuestionType2;
369
+ })(QuestionType || {});
370
+ var QuestionForType = /* @__PURE__ */ ((QuestionForType2) => {
371
+ QuestionForType2[QuestionForType2["Unknown"] = 0] = "Unknown";
372
+ QuestionForType2[QuestionForType2["Host"] = 1] = "Host";
373
+ QuestionForType2[QuestionForType2["Owner"] = 2] = "Owner";
374
+ QuestionForType2[QuestionForType2["Pet"] = 3] = "Pet";
375
+ QuestionForType2[QuestionForType2["Dog"] = 4] = "Dog";
376
+ QuestionForType2[QuestionForType2["Cat"] = 5] = "Cat";
377
+ return QuestionForType2;
378
+ })(QuestionForType || {});
379
+ var getAllPetQuestionForType = () => [3 /* Pet */, 4 /* Dog */, 5 /* Cat */];
380
+
381
+ // src/contracts/generated/enum/searchableColumnInfo.ts
382
+ var SearchableColumnType = /* @__PURE__ */ ((SearchableColumnType2) => {
383
+ SearchableColumnType2[SearchableColumnType2["STRING_ENUM"] = 0] = "STRING_ENUM";
384
+ SearchableColumnType2[SearchableColumnType2["STRING_OF_ENUMS"] = 1] = "STRING_OF_ENUMS";
385
+ SearchableColumnType2[SearchableColumnType2["STRING"] = 2] = "STRING";
386
+ SearchableColumnType2[SearchableColumnType2["NUMBER"] = 3] = "NUMBER";
387
+ SearchableColumnType2[SearchableColumnType2["BOOLEAN"] = 4] = "BOOLEAN";
388
+ SearchableColumnType2[SearchableColumnType2["DATE"] = 5] = "DATE";
389
+ return SearchableColumnType2;
390
+ })(SearchableColumnType || {});
391
+
392
+ // src/contracts/generated/enum/uploadLinkType.ts
393
+ var UploadLinkType = /* @__PURE__ */ ((UploadLinkType2) => {
394
+ UploadLinkType2[UploadLinkType2["Unknown"] = 0] = "Unknown";
395
+ UploadLinkType2[UploadLinkType2["User"] = 1] = "User";
396
+ UploadLinkType2[UploadLinkType2["Pet"] = 2] = "Pet";
397
+ return UploadLinkType2;
398
+ })(UploadLinkType || {});
399
+ var UploadType = /* @__PURE__ */ ((UploadType2) => {
400
+ UploadType2[UploadType2["Unknown"] = 0] = "Unknown";
401
+ UploadType2[UploadType2["UserProfilePic"] = 5] = "UserProfilePic";
402
+ UploadType2[UploadType2["PetProfilePic"] = 10] = "PetProfilePic";
403
+ UploadType2[UploadType2["PetExtraPic"] = 11] = "PetExtraPic";
404
+ UploadType2[UploadType2["HomePhoto"] = 20] = "HomePhoto";
405
+ return UploadType2;
406
+ })(UploadType || {});
407
+ var uploadsThatNeedEncryption = [];
408
+
409
+ // src/contracts/generated/enum/userAccountFlagType.ts
410
+ var UserAccountFlagType = /* @__PURE__ */ ((UserAccountFlagType2) => {
411
+ UserAccountFlagType2[UserAccountFlagType2["Unknown"] = 0] = "Unknown";
412
+ UserAccountFlagType2[UserAccountFlagType2["ChangePassword"] = 1] = "ChangePassword";
413
+ return UserAccountFlagType2;
414
+ })(UserAccountFlagType || {});
415
+
416
+ // src/contracts/generated/enum/userType.ts
417
+ var UserType = /* @__PURE__ */ ((UserType2) => {
418
+ UserType2[UserType2["Unknown"] = 0] = "Unknown";
419
+ UserType2[UserType2["Owner"] = 1] = "Owner";
420
+ UserType2[UserType2["Host"] = 2] = "Host";
421
+ UserType2[UserType2["Driver"] = 3] = "Driver";
422
+ UserType2[UserType2["Admin"] = 50] = "Admin";
423
+ UserType2[UserType2["BotToken"] = 99] = "BotToken";
424
+ return UserType2;
425
+ })(UserType || {});
426
+
427
+ // src/contracts/generated/restrictions/activityRestriction.ts
428
+ var ActivityRestriction = {
429
+ details: { maxLength: 500 }
74
430
  };
75
431
 
76
- // src/helpers/commonHelper.ts
77
- var getUsersName = (details) => `${details?.firstName} ${details?.lastName}`;
432
+ // src/contracts/generated/restrictions/addressRestriction.ts
433
+ var AddressRestriction = {
434
+ name: { minLength: 3, maxLength: 50 },
435
+ street: { minLength: 3, maxLength: 150 },
436
+ city: { minLength: 3, maxLength: 80 },
437
+ postalCode: { minLength: 3, maxLength: 20 },
438
+ country: { minLength: 3, maxLength: 100 },
439
+ notes: { minLength: 0, maxLength: 1e3 }
440
+ };
78
441
 
79
- // src/helpers/promiseHelper.ts
80
- var promiseFromValue = (value) => {
81
- return new Promise((resolve) => resolve(value));
442
+ // src/contracts/generated/restrictions/answerRestriction.ts
443
+ var AnswerRestriction = {
444
+ answer: { minLength: 1, maxLength: 500 },
445
+ notes: { minLength: 0, maxLength: 1e3 }
82
446
  };
83
447
 
84
- // src/helpers/mimeHelper.ts
85
- var mimeTypeLookup = {
86
- txt: "text/plain",
87
- html: "text/html",
88
- css: "text/css",
89
- js: "application/javascript",
90
- json: "application/json",
91
- png: "image/png",
92
- jpg: "image/jpeg",
93
- jpeg: "image/jpeg",
94
- gif: "image/gif"
448
+ // src/contracts/generated/restrictions/bookingRestriction.ts
449
+ var BookingRestriction = {
450
+ notes: { maxLength: 250 }
95
451
  };
96
- var getMimeTypeFromExtension = (extension, logger) => {
97
- if (extension == null) return "application/octet-stream";
98
- const lowerCaseExtension = extension.toLowerCase();
99
- const knownMimeType = mimeTypeLookup[lowerCaseExtension];
100
- if (knownMimeType != null) return knownMimeType;
101
- logger.w(`Extension '${extension}' is not known`);
102
- return "application/octet-stream";
452
+ var BookingAddonRestriction = {
453
+ notes: { maxLength: 250 },
454
+ quantity: { min: 0, max: 1e3 }
103
455
  };
104
456
 
105
- // src/helpers/arrayHelper.ts
106
- var makeArrayOrDefault = (propsVal, defaultValue = []) => {
107
- if (propsVal == null) return defaultValue;
108
- if (Array.isArray(propsVal) == true) return [...propsVal];
109
- return [propsVal];
457
+ // src/contracts/generated/restrictions/commentRestriction.ts
458
+ var CommentRestriction = {
459
+ name: { maxLength: 80 },
460
+ comment: { maxLength: 1e3 }
110
461
  };
111
- var onlyUnique = (value, index, array) => {
112
- return array.indexOf(value) === index;
462
+
463
+ // src/contracts/generated/restrictions/drivingRouteRestriction.ts
464
+ var DrivingRouteRestriction = {
465
+ notes: { maxLength: 500 }
113
466
  };
114
- var arrayOfNLength = (length) => Array.from(Array(length).keys());
115
- var arrayContains = (arr, items, method = "AND") => {
116
- for (const item of items) {
117
- const hasItem = arr.includes(item);
118
- if (method == "AND" && hasItem == false) return false;
119
- if (method == "OR" && hasItem == true) return true;
120
- }
121
- return true;
467
+
468
+ // src/contracts/generated/restrictions/permissionRestriction.ts
469
+ var PermissionRestriction = {
470
+ name: { maxLength: 50 }
122
471
  };
123
472
 
124
- // src/helpers/typescriptHacks.ts
125
- var anyObject = () => ({});
126
- var fakePromise = () => new Promise((res) => res({}));
473
+ // src/contracts/generated/restrictions/petRestriction.ts
474
+ var PetRestriction = {
475
+ name: { minLength: 3, maxLength: 80 },
476
+ breed: { minLength: 3, maxLength: 80 },
477
+ notes: { minLength: 0, maxLength: 1e3 }
478
+ };
479
+
480
+ // src/contracts/generated/restrictions/questionRestriction.ts
481
+ var QuestionRestriction = {
482
+ transKey: { minLength: 3, maxLength: 50 },
483
+ fallback: { minLength: 1, maxLength: 500 },
484
+ forTypes: { minLength: 0, maxLength: 100 },
485
+ category: { minLength: 0, maxLength: 100 },
486
+ notes: { minLength: 0, maxLength: 1e3 }
487
+ };
488
+
489
+ // src/contracts/generated/restrictions/unavailabilityRestriction.ts
490
+ var UnavailabilityRestriction = {
491
+ notes: { maxLength: 500 }
492
+ };
493
+
494
+ // src/contracts/generated/restrictions/uploadRestriction.ts
495
+ var UploadRestriction = {
496
+ fileName: { minLength: 3, maxLength: 150 },
497
+ blobType: { minLength: 1, maxLength: 50 }
498
+ };
499
+
500
+ // src/contracts/generated/restrictions/userRestriction.ts
501
+ var UserRestriction = {
502
+ firstName: { minLength: 3, maxLength: 80 },
503
+ lastName: { minLength: 3, maxLength: 80 },
504
+ email: { minLength: 5, maxLength: 150 },
505
+ password: { minLength: 5, maxLength: 50 },
506
+ hubspotId: { maxLength: 50 },
507
+ flags: { maxLength: 150 }
508
+ };
509
+
510
+ // src/contracts/generated/searchColumns.ts
511
+ var searchColumns = {
512
+ upload: [{ "property": "linkUuid", "type": 2 }, { "property": "linkType", "type": 2 }, { "property": "type", "type": 2 }, { "property": "fileName", "type": 2 }, { "property": "blobType", "type": 2 }, { "property": "sizeInKb", "type": 2 }, { "property": "dateCreated", "type": 5 }],
513
+ address: [{ "property": "name", "type": 2 }, { "property": "street", "type": 2 }, { "property": "city", "type": 2 }, { "property": "postalCode", "type": 2 }, { "property": "country", "type": 2 }],
514
+ booking: [{ "property": "startDate", "type": 5 }, { "property": "endDate", "type": 5 }, { "property": "status", "type": 2 }, { "property": "notes", "type": 2 }],
515
+ user: [{ "property": "types", "type": 1 }, { "property": "firstName", "type": 2 }, { "property": "lastName", "type": 2 }, { "property": "email", "type": 2 }, { "property": "hubspotId", "type": 2 }, { "property": "flags", "type": 1 }, { "property": "dateCreated", "type": 5 }],
516
+ pet: [{ "property": "type", "type": 1 }, { "property": "sex", "type": 2 }, { "property": "breed", "type": 2 }, { "property": "neutered", "type": 2 }, { "property": "name", "type": 2 }, { "property": "notes", "type": 2 }, { "property": "dateOfBirth", "type": 5 }],
517
+ question: [{ "property": "forTypes", "type": 1 }, { "property": "transKey", "type": 2 }, { "property": "fallback", "type": 2 }, { "property": "category", "type": 2 }, { "property": "type", "type": 0 }, { "property": "sortOrder", "type": 3 }, { "property": "visible", "type": 4 }, { "property": "notes", "type": 2 }]
518
+ };
127
519
  var formatDate = (date, format = "DD MMM YYYY HH:mm") => {
128
520
  const dateStr = dayjs(date).format(format);
129
521
  if (dateStr.includes("Invalid")) return "";
@@ -163,189 +555,17 @@ var getWeekNumber = (d) => {
163
555
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
164
556
  return Math.ceil(((d.getTime() - yearStart.getTime()) / 864e5 + 1) / 7);
165
557
  };
166
-
167
- // src/assets/meta.json
168
- var meta_default = {
169
- packageVersion: "0.12.0",
170
- date: "2025-09-09",
171
- gitCommitHash: "832a08fcdc07dd2aab395af01b66b2b355c4baa1"
172
- };
173
-
174
- // src/assets/packagesUsed.json
175
- var packagesUsed_default = {
176
- generatedDate: "2025-09-09T15:28:23.978Z",
177
- generatedDateFormat: "2025-09-09",
178
- list: [
179
- {
180
- name: "@chromatic-com/storybook",
181
- version: "4.1.1",
182
- licenseType: "MIT",
183
- repoUrl: "https://github.com/chromaui/addon-visual-tests.git",
184
- licenceUrl: "https://github.com/chromaui/addon-visual-tests/blob/master/LICENSE"
185
- },
186
- {
187
- name: "@kachurun/storybook-solid-vite",
188
- version: "9.0.11",
189
- licenseType: "MIT",
190
- repoUrl: "https://github.com/solidjs-community/storybook.git",
191
- licenceUrl: "https://github.com/solidjs-community/storybook/blob/master/LICENSE"
192
- },
193
- {
194
- name: "@storybook/addon-a11y",
195
- version: "9.1.5",
196
- licenseType: "MIT",
197
- repoUrl: "https://github.com/storybookjs/storybook.git"
198
- },
199
- {
200
- name: "@storybook/addon-docs",
201
- version: "9.1.5",
202
- licenseType: "MIT",
203
- repoUrl: "https://github.com/storybookjs/storybook.git"
204
- },
205
- {
206
- name: "@storybook/addon-links",
207
- version: "9.1.5",
208
- licenseType: "MIT",
209
- repoUrl: "https://github.com/storybookjs/storybook.git"
210
- },
211
- {
212
- name: "@storybook/addon-onboarding",
213
- version: "9.1.5",
214
- licenseType: "MIT",
215
- repoUrl: "https://github.com/storybookjs/storybook.git"
216
- },
217
- {
218
- name: "@storybook/addon-vitest",
219
- version: "9.1.5",
220
- licenseType: "MIT",
221
- repoUrl: "https://github.com/storybookjs/storybook.git"
222
- },
223
- {
224
- name: "@types/node",
225
- version: "24.3.1",
226
- licenseType: "MIT",
227
- repoUrl: "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
228
- licenceUrl: "https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE"
229
- },
230
- {
231
- name: "@vitest/browser",
232
- version: "3.2.4",
233
- licenseType: "MIT",
234
- repoUrl: "https://github.com/vitest-dev/vitest.git",
235
- licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
236
- },
237
- {
238
- name: "@vitest/coverage-v8",
239
- version: "3.2.4",
240
- licenseType: "MIT",
241
- repoUrl: "https://github.com/vitest-dev/vitest.git",
242
- licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
243
- },
244
- {
245
- name: "@vitest/ui",
246
- version: "3.2.4",
247
- licenseType: "MIT",
248
- repoUrl: "https://github.com/vitest-dev/vitest.git",
249
- licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
250
- },
251
- {
252
- name: "dotenv-cli",
253
- version: "10.0.0",
254
- licenseType: "MIT",
255
- repoUrl: "https://www.npmjs.com/package/dotenv-cli"
256
- },
257
- {
258
- name: "sass",
259
- version: "1.92.1",
260
- licenseType: "MIT",
261
- repoUrl: "https://github.com/sass/dart-sass",
262
- licenceUrl: "https://github.com/sass/dart-sass/blob/master/LICENSE"
263
- },
264
- {
265
- name: "storybook",
266
- version: "9.1.5",
267
- licenseType: "MIT",
268
- repoUrl: "https://github.com/storybookjs/storybook.git"
269
- },
270
- {
271
- name: "tsup",
272
- version: "8.5.0",
273
- licenseType: "MIT",
274
- repoUrl: "https://github.com/egoist/tsup.git",
275
- licenceUrl: "https://github.com/egoist/tsup/blob/master/LICENSE"
276
- },
277
- {
278
- name: "tsup-preset-solid",
279
- version: "2.2.0",
280
- licenseType: "MIT",
281
- repoUrl: "https://github.com/solidjs-community/tsup-preset-solid.git",
282
- licenceUrl: "https://github.com/solidjs-community/tsup-preset-solid/blob/master/LICENSE"
283
- },
284
- {
285
- name: "typescript",
286
- version: "5.9.2",
287
- licenseType: "Apache-2.0",
288
- repoUrl: "https://github.com/microsoft/TypeScript.git"
289
- },
290
- {
291
- name: "vite",
292
- version: "7.1.5",
293
- licenseType: "MIT",
294
- repoUrl: "https://github.com/vitejs/vite.git"
295
- },
296
- {
297
- name: "vite-plugin-solid",
298
- version: "2.11.8",
299
- licenseType: "MIT",
300
- repoUrl: "https://github.com/solidjs/vite-plugin-solid.git"
301
- },
302
- {
303
- name: "vitest",
304
- version: "3.2.4",
305
- licenseType: "MIT",
306
- repoUrl: "https://github.com/vitest-dev/vitest.git"
307
- }
308
- ]
309
- };
310
-
311
- // src/helpers/metaHelper.ts
312
- var getMeta = () => meta_default;
313
- var getPackagesUsed = () => packagesUsed_default;
314
-
315
- // src/helpers/stringHelper.ts
316
- var capitalizeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
317
- var capitalizeFirstLetter = (orig) => {
318
- if ((orig?.length ?? 0) == 0) return orig;
319
- return [orig[0].toUpperCase(), ...orig.slice(1, orig.length)].join("");
320
- };
321
- var lowercaseFirstLetter = (orig) => {
322
- if (orig.length == 0) return orig;
323
- return [orig[0].toLowerCase(), ...orig.slice(1, orig.length)].join("");
324
- };
325
- var addSpacesForEnum = (orig) => {
326
- if (orig.length == 0) return orig;
327
- let result = "";
328
- for (const char of orig) {
329
- if (capitalizeAlphabet.includes(char)) {
330
- result += " ";
331
- }
332
- result += char;
333
- }
334
- return result;
335
- };
336
- var formatFileSize = (sizeInKb) => {
337
- const units = ["KB", "MB", "GB", "TB"];
338
- let size = sizeInKb;
339
- let unitIndex = 0;
340
- while (size >= 1024 && unitIndex < units.length - 1) {
341
- size /= 1024;
342
- unitIndex++;
343
- }
344
- const formatter = new Intl.NumberFormat("en-US", {
345
- minimumFractionDigits: 0,
346
- maximumFractionDigits: 0
347
- });
348
- return `${formatter.format(size)} ${units[unitIndex]}`;
558
+ var showSecondCalendar = (startDateStr, endDateStr) => {
559
+ const startDate = new Date(startDateStr);
560
+ const endDate = new Date(endDateStr);
561
+ const isDifferentMonths = startDate.getMonth() != endDate.getMonth();
562
+ if (isDifferentMonths == false) return false;
563
+ const lastDayOfTheStartDateMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0);
564
+ const lastDayOfStartMonthWeekNum = getWeekNumber(lastDayOfTheStartDateMonth);
565
+ const endDateWeekNum = getWeekNumber(endDate);
566
+ const isDifferentWeekNum = lastDayOfStartMonthWeekNum != endDateWeekNum;
567
+ if (isDifferentWeekNum == false) return false;
568
+ return true;
349
569
  };
350
570
 
351
571
  // src/services/internal/config/commonConfigService.ts
@@ -490,16 +710,43 @@ var setContainerToken = (id, value) => Container.set({ id, value });
490
710
  var getCommonConfig = () => Container.get(CommonConfigService);
491
711
  var getLog = () => Container.get(LogService);
492
712
 
493
- // src/helpers/urlHelper.ts
494
- var urlRef = (url) => {
495
- const { ref } = getSiteConfig()?.ref ?? anyObject();
496
- if (ref == null) return url;
497
- if (url.includes("?")) {
498
- return url + `&ref=${ref}`;
713
+ // src/helpers/arrayHelper.ts
714
+ var makeArrayOrDefault = (propsVal, defaultValue = []) => {
715
+ if (propsVal == null) return defaultValue;
716
+ if (Array.isArray(propsVal) == true) return [...propsVal];
717
+ return [propsVal];
718
+ };
719
+ var onlyUnique = (value, index, array) => {
720
+ return array.indexOf(value) === index;
721
+ };
722
+ var arrayOfNLength = (length) => Array.from(Array(length).keys());
723
+ var arrayContains = (arr, items, method = "AND") => {
724
+ for (const item of items) {
725
+ const hasItem = arr.includes(item);
726
+ if (method == "AND" && hasItem == false) return false;
727
+ if (method == "OR" && hasItem == true) return true;
499
728
  }
500
- return url + `?ref=${ref}`;
729
+ return true;
730
+ };
731
+
732
+ // src/helpers/asyncHelper.ts
733
+ var timeout = (ms) => {
734
+ return new Promise((resolve) => setTimeout(resolve, ms));
735
+ };
736
+ var addToParallelTasks = async (tasks, newTask, numTasksInParallel = 5) => {
737
+ if (tasks.length >= numTasksInParallel) {
738
+ const finishedTask = Promise.any(tasks);
739
+ const indexOfTask = tasks.indexOf(finishedTask);
740
+ tasks.splice(indexOfTask, 1);
741
+ await finishedTask;
742
+ }
743
+ tasks.push(newTask);
744
+ return tasks;
501
745
  };
502
746
 
747
+ // src/helpers/commonHelper.ts
748
+ var getUsersName = (details) => `${details?.firstName} ${details?.lastName}`;
749
+
503
750
  // src/helpers/debounceHelper.ts
504
751
  function debounceLeading(fn, ms) {
505
752
  let timer;
@@ -515,6 +762,29 @@ function debounceLeading(fn, ms) {
515
762
  return { func, destroy };
516
763
  }
517
764
 
765
+ // src/helpers/enumHelper.ts
766
+ var getArrFromEnum = (enumType, isNan = false) => {
767
+ const result = Object.values(enumType).filter((dt) => isNaN(dt) == isNan);
768
+ return result;
769
+ };
770
+
771
+ // src/helpers/guidHelper.ts
772
+ var uuidv4 = () => {
773
+ var d = (/* @__PURE__ */ new Date()).getTime();
774
+ var d2 = typeof performance !== "undefined" && performance.now && performance.now() * 1e3 || 0;
775
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
776
+ var r = Math.random() * 16;
777
+ if (d > 0) {
778
+ r = (d + r) % 16 | 0;
779
+ d = Math.floor(d / 16);
780
+ } else {
781
+ r = (d2 + r) % 16 | 0;
782
+ d2 = Math.floor(d2 / 16);
783
+ }
784
+ return (c === "x" ? r : r & 3 | 8).toString(16);
785
+ });
786
+ };
787
+
518
788
  // src/helpers/hashHelper.ts
519
789
  var cyrb53 = (input, seed = 0) => {
520
790
  let h1 = 3735928559 ^ seed, h2 = 1103547991 ^ seed;
@@ -530,57 +800,6 @@ var cyrb53 = (input, seed = 0) => {
530
800
  return 4294967296 * (2097151 & h2) + (h1 >>> 0);
531
801
  };
532
802
 
533
- // src/helpers/enumHelper.ts
534
- var getArrFromEnum = (enumType, isNan = false) => {
535
- const result = Object.values(enumType).filter((dt) => isNaN(dt) == isNan);
536
- return result;
537
- };
538
-
539
- // src/helpers/eventHelper.ts
540
- var onTargetValue = (funcOnEvent) => (event) => {
541
- const value = event.target?.value;
542
- if (value == null) return;
543
- funcOnEvent(value);
544
- };
545
- var onTargetChecked = (funcOnEvent) => (event) => {
546
- const value = event.target?.checked;
547
- if (value == null) return;
548
- funcOnEvent(value);
549
- };
550
- var onTargetFiles = (funcOnEvent) => (event) => {
551
- const fileList = event.target.files;
552
- if (fileList == null || fileList.length < 1) return;
553
- funcOnEvent(fileList);
554
- };
555
- var preventDefault = (event) => {
556
- event?.preventDefault?.();
557
- return event;
558
- };
559
- var stopPropagation = (event) => {
560
- event?.stopPropagation?.();
561
- return event;
562
- };
563
-
564
- // src/helpers/performanceHelper.ts
565
- var getPerformanceTimer = () => ({
566
- start: performance.now(),
567
- getTimeElapsed: (start) => performance.now() - start
568
- });
569
-
570
- // src/helpers/randomHelper.ts
571
- var randomIntFromRange = (min, max) => {
572
- return Math.floor(Math.random() * (max - min) + min);
573
- };
574
- var randomItemFromArray = (items) => {
575
- const randomIndex = randomIntFromRange(0, items.length);
576
- return items[randomIndex];
577
- };
578
-
579
- // src/helpers/propHelper.ts
580
- function nameof(key1, key2) {
581
- return key2 ?? key1;
582
- }
583
-
584
803
  // src/helpers/imageHelper.ts
585
804
  var getImageParams = (file) => {
586
805
  const fileExtension = file.name?.split?.(".")?.pop?.() ?? ".png";
@@ -607,23 +826,6 @@ var getImageParams = (file) => {
607
826
  reader.readAsDataURL(file);
608
827
  });
609
828
  };
610
-
611
- // src/helpers/guidHelper.ts
612
- var uuidv4 = () => {
613
- var d = (/* @__PURE__ */ new Date()).getTime();
614
- var d2 = typeof performance !== "undefined" && performance.now && performance.now() * 1e3 || 0;
615
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
616
- var r = Math.random() * 16;
617
- if (d > 0) {
618
- r = (d + r) % 16 | 0;
619
- d = Math.floor(d / 16);
620
- } else {
621
- r = (d2 + r) % 16 | 0;
622
- d2 = Math.floor(d2 / 16);
623
- }
624
- return (c === "x" ? r : r & 3 | 8).toString(16);
625
- });
626
- };
627
829
  var getPayloadFromJwt = (token) => {
628
830
  try {
629
831
  const decoded = jwtDecode(token);
@@ -643,132 +845,199 @@ var getPayloadFromJwt = (token) => {
643
845
  }
644
846
  };
645
847
 
646
- // src/contracts/generated/apiRoute.ts
647
- var apiParams = {
648
- general: {
649
- segment: "segment"
650
- },
651
- user: {
652
- id: "id"
653
- }
848
+ // src/assets/meta.json
849
+ var meta_default = {
850
+ packageVersion: "0.12.1",
851
+ date: "2026-01-06",
852
+ gitCommitHash: "5786c5b332ec8d0e4553847f2043523b8e54f53f"
654
853
  };
655
- var apiRoute = {
656
- home: "/",
657
- swagger: "/swagger",
658
- common: {
659
- auth: {
660
- prefix: "/auth",
661
- devJwt: "/jwt",
662
- login: "/login",
663
- signup: "/signup",
664
- swagger: { name: "Auth", description: "Endpoints for login, sign up etc" },
665
- token: {
666
- prefix: "/token",
667
- swagger: { name: "AuthToken", description: "Endpoints for creating an API token" }
668
- }
669
- },
670
- version: "/version"
671
- },
672
- admin: {
673
- activity: {
674
- prefix: "/admin/activity",
675
- swagger: {
676
- name: "Activity",
677
- description: "Endpoints for retrieving and managing activities"
678
- }
854
+
855
+ // src/assets/packagesUsed.json
856
+ var packagesUsed_default = {
857
+ generatedDate: "2026-01-06T18:23:33.959Z",
858
+ generatedDateFormat: "2026-01-06",
859
+ list: [
860
+ {
861
+ name: "@chromatic-com/storybook",
862
+ version: "4.1.3",
863
+ licenseType: "MIT",
864
+ repoUrl: "https://github.com/chromaui/addon-visual-tests.git",
865
+ licenceUrl: "https://github.com/chromaui/addon-visual-tests/blob/master/LICENSE"
679
866
  },
680
- address: {
681
- prefix: "/admin/address",
682
- byLink: "/link",
683
- lookup: "/lookup",
684
- swagger: { name: "Addresses", description: "Endpoints for managing addresses" }
867
+ {
868
+ name: "@kachurun/storybook-solid-vite",
869
+ version: "9.0.11",
870
+ licenseType: "MIT",
871
+ repoUrl: "https://github.com/solidjs-community/storybook.git",
872
+ licenceUrl: "https://github.com/solidjs-community/storybook/blob/master/LICENSE"
685
873
  },
686
- answer: {
687
- prefix: "/admin/answer",
688
- swagger: { name: "Answers", description: "Endpoints for managing answers to signup questions" }
874
+ {
875
+ name: "@storybook/addon-a11y",
876
+ version: "10.1.11",
877
+ licenseType: "MIT",
878
+ repoUrl: "https://github.com/storybookjs/storybook.git"
689
879
  },
690
- booking: {
691
- prefix: "/admin/booking",
692
- byUser: "/user",
693
- swagger: { name: "Bookings", description: "Endpoints for managing bookings" }
880
+ {
881
+ name: "@storybook/addon-docs",
882
+ version: "10.1.11",
883
+ licenseType: "MIT",
884
+ repoUrl: "https://github.com/storybookjs/storybook.git"
694
885
  },
695
- comment: {
696
- prefix: "/admin/comment",
697
- byLink: "/link",
698
- swagger: { name: "Comments", description: "Endpoints for managing Comments" }
886
+ {
887
+ name: "@storybook/addon-links",
888
+ version: "10.1.11",
889
+ licenseType: "MIT",
890
+ repoUrl: "https://github.com/storybookjs/storybook.git"
699
891
  },
700
- membership: {
701
- prefix: "/admin/membership",
702
- swagger: { name: "Memberships", description: "Endpoints for managing Memberships" }
892
+ {
893
+ name: "@storybook/addon-onboarding",
894
+ version: "10.1.11",
895
+ licenseType: "MIT",
896
+ repoUrl: "https://github.com/storybookjs/storybook.git"
703
897
  },
704
- pet: {
705
- prefix: "/admin/pet",
706
- byUser: "/user",
707
- swagger: { name: "Pets", description: "Endpoints for managing Pets" }
898
+ {
899
+ name: "@storybook/addon-vitest",
900
+ version: "10.1.11",
901
+ licenseType: "MIT",
902
+ repoUrl: "https://github.com/storybookjs/storybook.git"
708
903
  },
709
- question: {
710
- prefix: "/admin/question",
711
- swagger: {
712
- name: "Questions",
713
- description: "Endpoints for managing questions that users need to answer in order to complete their profiles"
714
- }
904
+ {
905
+ name: "@types/node",
906
+ version: "25.0.3",
907
+ licenseType: "MIT",
908
+ repoUrl: "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
909
+ licenceUrl: "https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE"
715
910
  },
716
- upload: {
717
- prefix: "/admin/upload",
718
- viewRaw: "/view-raw",
719
- image: "/image",
720
- swagger: { name: "Uploads", description: "Endpoints for managing Uploads" }
911
+ {
912
+ name: "@vitest/browser",
913
+ version: "4.0.16",
914
+ licenseType: "MIT",
915
+ repoUrl: "https://github.com/vitest-dev/vitest.git",
916
+ licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
721
917
  },
722
- user: {
723
- prefix: "/admin/user",
724
- swagger: { name: "Users", description: "Endpoints for Admins to manage Users" }
918
+ {
919
+ name: "@vitest/coverage-v8",
920
+ version: "4.0.16",
921
+ licenseType: "MIT",
922
+ repoUrl: "https://github.com/vitest-dev/vitest.git",
923
+ licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
725
924
  },
726
- userMembership: {
727
- prefix: "/admin/user-membership",
728
- byUser: "/user",
729
- swagger: { name: "UserMemberships", description: "Endpoints for managing User's Memberships" }
925
+ {
926
+ name: "@vitest/ui",
927
+ version: "4.0.16",
928
+ licenseType: "MIT",
929
+ repoUrl: "https://github.com/vitest-dev/vitest.git",
930
+ licenceUrl: "https://github.com/vitest-dev/vitest/blob/master/LICENSE"
730
931
  },
731
- userPermission: {
732
- prefix: "/admin/user-permission",
733
- swagger: { name: "UserPermissions", description: "Endpoints for getting and managing user permissions." }
734
- }
735
- },
736
- client: {
737
- answer: {
738
- prefix: "/answer",
739
- forProfile: "/profile",
740
- forPet: "/pet",
741
- swagger: { name: "Answers", description: "Endpoints for managing answers to signup questions" }
932
+ {
933
+ name: "dotenv-cli",
934
+ version: "11.0.0",
935
+ licenseType: "MIT",
936
+ repoUrl: "https://www.npmjs.com/package/dotenv-cli"
742
937
  },
743
- booking: {
744
- prefix: "/booking",
745
- swagger: { name: "Bookings", description: "Endpoints for User to manage their Bookings" }
938
+ {
939
+ name: "jsdom",
940
+ version: "27.4.0",
941
+ licenseType: "MIT",
942
+ repoUrl: "https://github.com/jsdom/jsdom.git"
746
943
  },
747
- membership: {
748
- prefix: "/membership",
749
- swagger: { name: "MembershipTiers", description: "Endpoints for public TierMemberships" }
944
+ {
945
+ name: "sass",
946
+ version: "1.97.2",
947
+ licenseType: "MIT",
948
+ repoUrl: "https://github.com/sass/dart-sass",
949
+ licenceUrl: "https://github.com/sass/dart-sass/blob/master/LICENSE"
750
950
  },
751
- pet: {
752
- prefix: "/pet",
753
- swagger: { name: "Pets", description: "Endpoints for User to manage their Pets" }
951
+ {
952
+ name: "storybook",
953
+ version: "10.1.11",
954
+ licenseType: "MIT",
955
+ repoUrl: "https://github.com/storybookjs/storybook.git"
754
956
  },
755
- profile: {
756
- prefix: "/profile",
757
- avatar: "/avatar",
758
- answers: "/answers",
759
- swagger: { name: "Profile", description: "Endpoints for User to manage their Profile" }
957
+ {
958
+ name: "tsup",
959
+ version: "8.5.1",
960
+ licenseType: "MIT",
961
+ repoUrl: "https://github.com/egoist/tsup.git",
962
+ licenceUrl: "https://github.com/egoist/tsup/blob/master/LICENSE"
760
963
  },
761
- upload: {
762
- prefix: "/upload",
763
- image: "/image",
764
- swagger: { name: "Uploads", description: "Endpoints for managing Uploads" }
964
+ {
965
+ name: "tsup-preset-solid",
966
+ version: "2.2.0",
967
+ licenseType: "MIT",
968
+ repoUrl: "https://github.com/solidjs-community/tsup-preset-solid.git",
969
+ licenceUrl: "https://github.com/solidjs-community/tsup-preset-solid/blob/master/LICENSE"
765
970
  },
766
- userMembership: {
767
- prefix: "/user-membership",
768
- bookingDays: "/booking-days",
769
- swagger: { name: "UserMembership", description: "Endpoints for User to get info about their Memberships" }
971
+ {
972
+ name: "typescript",
973
+ version: "5.9.3",
974
+ licenseType: "Apache-2.0",
975
+ repoUrl: "https://github.com/microsoft/TypeScript.git"
976
+ },
977
+ {
978
+ name: "vite",
979
+ version: "7.3.0",
980
+ licenseType: "MIT",
981
+ repoUrl: "https://github.com/vitejs/vite.git"
982
+ },
983
+ {
984
+ name: "vite-plugin-solid",
985
+ version: "2.11.10",
986
+ licenseType: "MIT",
987
+ repoUrl: "https://github.com/solidjs/vite-plugin-solid.git"
988
+ },
989
+ {
990
+ name: "vitest",
991
+ version: "4.0.16",
992
+ licenseType: "MIT",
993
+ repoUrl: "https://github.com/vitest-dev/vitest.git"
770
994
  }
995
+ ]
996
+ };
997
+
998
+ // src/helpers/metaHelper.ts
999
+ var getMeta = () => meta_default;
1000
+ var getPackagesUsed = () => packagesUsed_default;
1001
+
1002
+ // src/helpers/mimeHelper.ts
1003
+ var mimeTypeLookup = {
1004
+ txt: "text/plain",
1005
+ html: "text/html",
1006
+ css: "text/css",
1007
+ js: "application/javascript",
1008
+ json: "application/json",
1009
+ png: "image/png",
1010
+ jpg: "image/jpeg",
1011
+ jpeg: "image/jpeg",
1012
+ gif: "image/gif"
1013
+ };
1014
+ var getMimeTypeFromExtension = (extension, logger) => {
1015
+ if (extension == null) return "application/octet-stream";
1016
+ const lowerCaseExtension = extension.toLowerCase();
1017
+ const knownMimeType = mimeTypeLookup[lowerCaseExtension];
1018
+ if (knownMimeType != null) return knownMimeType;
1019
+ logger.w(`Extension '${extension}' is not known`);
1020
+ return "application/octet-stream";
1021
+ };
1022
+
1023
+ // src/helpers/performanceHelper.ts
1024
+ var getPerformanceTimer = () => ({
1025
+ start: performance.now(),
1026
+ getTimeElapsed: (start) => performance.now() - start
1027
+ });
1028
+
1029
+ // src/helpers/permissionHelper.ts
1030
+ var hasRequiredPermissions = (props) => {
1031
+ if (props.userPermissions.includes(1 /* All */)) {
1032
+ props.hasAdminPermission?.();
1033
+ return true;
1034
+ }
1035
+ const missingPermissions = props.requiredPermissions.filter((p) => props.userPermissions.includes(p) == false);
1036
+ if (missingPermissions.length > 0) {
1037
+ props.doesNotHavePermission?.(missingPermissions);
1038
+ return false;
771
1039
  }
1040
+ return true;
772
1041
  };
773
1042
 
774
1043
  // src/helpers/profileHelper.ts
@@ -779,152 +1048,73 @@ var getPetAvatarUrl = (petUuid) => {
779
1048
  return `${getCommonConfig().getHubApiUrl()}${apiRoute.client.pet.prefix}/${petUuid}/profile.png`;
780
1049
  };
781
1050
 
782
- // src/contracts/generated/enum/appType.ts
783
- var AppType = /* @__PURE__ */ ((AppType2) => {
784
- AppType2[AppType2["Admin"] = 0] = "Admin";
785
- AppType2[AppType2["Client"] = 1] = "Client";
786
- AppType2[AppType2["Api"] = 2] = "Api";
787
- AppType2[AppType2["Test"] = 3] = "Test";
788
- AppType2[AppType2["Interactive"] = 4] = "Interactive";
789
- return AppType2;
790
- })(AppType || {});
791
- var webAppTypes = [
792
- 0 /* Admin */,
793
- //
794
- 1 /* Client */
795
- ];
796
- var isWebApp = (appType) => webAppTypes.includes(appType);
797
-
798
- // src/validation/baseValidation.ts
799
- var noValidation = (_) => ({ isValid: true });
800
- var notNull = (customTransKey, customErrMsg) => (value) => {
801
- if (value != null) {
802
- return { isValid: true };
803
- }
804
- return {
805
- isValid: false,
806
- errorMessageTransKey: customTransKey ?? "not_null_validator",
807
- errorMessage: customErrMsg ?? `Field shouldn't be empty`
808
- };
1051
+ // src/helpers/promiseHelper.ts
1052
+ var promiseFromValue = (value) => {
1053
+ return new Promise((resolve) => resolve(value));
809
1054
  };
810
- var multiValidation = (...validations) => (value) => {
811
- for (const validation of validations) {
812
- const result = validation(value);
813
- if (result.isValid === false) return result;
814
- }
815
- return { isValid: true };
816
- };
817
- var separateValidation = (validators) => (value) => {
818
- const appType = getAppType()?.toString?.();
819
- const validatorForAppType = validators[AppType[appType]];
820
- if (validatorForAppType == null) {
821
- getLog().getLogger("separateValidation").w(`${appType} validator not found`);
822
- return { isValid: true };
823
- }
824
- return validatorForAppType(value);
1055
+
1056
+ // src/helpers/propHelper.ts
1057
+ function nameof(key1, key2) {
1058
+ return key2 ?? key1;
1059
+ }
1060
+
1061
+ // src/helpers/randomHelper.ts
1062
+ var randomIntFromRange = (min, max) => {
1063
+ return Math.floor(Math.random() * (max - min) + min);
825
1064
  };
826
- var validateForEach = (validation) => (values) => {
827
- const safeArr = makeArrayOrDefault(values);
828
- for (const value of safeArr) {
829
- const result = validation(value);
830
- if (result.isValid === false) return result;
831
- }
832
- return { isValid: true };
1065
+ var randomItemFromArray = (items) => {
1066
+ const randomIndex = randomIntFromRange(0, items.length);
1067
+ return items[randomIndex];
833
1068
  };
834
1069
 
835
- // src/validation/textValidation.ts
836
- var minLength = (minLengthVal) => (value) => {
837
- if ((value?.length ?? 0) >= minLengthVal) {
838
- return { isValid: true };
839
- }
840
- return {
841
- isValid: false,
842
- errorMessageTransKey: "min_length_validator",
843
- errorMessageParams: { count: minLengthVal },
844
- errorMessage: `Minimum length required is {count}`
845
- };
1070
+ // src/helpers/stringHelper.ts
1071
+ var capitalizeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1072
+ var capitalizeFirstLetter = (orig) => {
1073
+ if ((orig?.length ?? 0) == 0) return orig;
1074
+ return [orig[0].toUpperCase(), ...orig.slice(1, orig.length)].join("");
846
1075
  };
847
- var maxLength = (maxLengthVal) => (value) => {
848
- if ((value?.length ?? 0) <= maxLengthVal) {
849
- return { isValid: true };
850
- }
851
- return {
852
- isValid: false,
853
- errorMessageTransKey: "max_length_validator",
854
- errorMessageParams: { count: maxLengthVal },
855
- errorMessage: `Text is too long! Maximum length allowed is {count}`
856
- };
1076
+ var lowercaseFirstLetter = (orig) => {
1077
+ if (orig.length == 0) return orig;
1078
+ return [orig[0].toLowerCase(), ...orig.slice(1, orig.length)].join("");
857
1079
  };
858
- var shouldBeUrl = (value) => {
859
- const validationFailures = [];
860
- const safeValue = `${value}`;
861
- const numPeriods = safeValue.split("").filter((c) => c === ".").length;
862
- const isLastCharPeriod = safeValue[safeValue.length - 1] === ".";
863
- if (numPeriods < 1 || isLastCharPeriod) {
864
- validationFailures.push("Should have at least one period in a sensible location.");
865
- }
866
- if (validationFailures.length > 0) {
867
- return {
868
- isValid: false,
869
- errorMessageTransKey: "link_validator",
870
- errorMessageParams: { current: value },
871
- errorMessage: `Should be a valid link/url. ({current}) does not meet the requirements: ${validationFailures.join(
872
- ". "
873
- )}.`
874
- };
1080
+ var addSpacesForEnum = (orig) => {
1081
+ if (orig.length == 0) return orig;
1082
+ let result = "";
1083
+ for (const char of orig) {
1084
+ if (capitalizeAlphabet.includes(char)) {
1085
+ result += " ";
1086
+ }
1087
+ result += char;
875
1088
  }
876
- return { isValid: true };
1089
+ return result;
877
1090
  };
878
- var shouldBeYoutubeUrl = (value) => {
879
- const safeValue = `${value}`;
880
- const youtubePartialUrl = "https://www.youtube.com/watch?v=";
881
- if (safeValue.includes(youtubePartialUrl)) {
882
- return { isValid: true };
1091
+ var formatFileSize = (sizeInKb) => {
1092
+ const units = ["KB", "MB", "GB", "TB"];
1093
+ let size = sizeInKb;
1094
+ let unitIndex = 0;
1095
+ while (size >= 1024 && unitIndex < units.length - 1) {
1096
+ size /= 1024;
1097
+ unitIndex++;
883
1098
  }
884
- return {
885
- isValid: false,
886
- errorMessageTransKey: "youtube_url_validator",
887
- errorMessageParams: { startUrl: youtubePartialUrl },
888
- errorMessage: `Youtube url should start with {startUrl}`
889
- };
1099
+ const formatter = new Intl.NumberFormat("en-US", {
1100
+ minimumFractionDigits: 0,
1101
+ maximumFractionDigits: 0
1102
+ });
1103
+ return `${formatter.format(size)} ${units[unitIndex]}`;
890
1104
  };
891
1105
 
892
- // src/validation/dateValidation.ts
893
- var minDate = (minDate2) => (value) => {
894
- if (isBefore(minDate2, value)) {
895
- return { isValid: true };
896
- }
897
- return {
898
- isValid: false,
899
- errorMessageTransKey: "min_date_validator",
900
- errorMessageParams: { date: formatDate(minDate2, "DD MMM YY") },
901
- errorMessage: "Minimum date is {date}"
902
- };
903
- };
904
- var maxDate = (maxDate2) => (value) => {
905
- if (isBefore(value, maxDate2)) {
906
- return { isValid: true };
907
- }
908
- return {
909
- isValid: false,
910
- errorMessageTransKey: "max_date_validator",
911
- errorMessageParams: { date: formatDate(maxDate2, "DD MMM YY") },
912
- errorMessage: "Maximum date is {date}"
913
- };
914
- };
1106
+ // src/helpers/typescriptHacks.ts
1107
+ var anyObject = () => ({});
1108
+ var fakePromise = () => new Promise((res) => res({}));
915
1109
 
916
- // src/validation/numberValidation.ts
917
- var isNumber = (value) => {
918
- if (value != null) {
919
- if (isNaN(Number(value)) == false) {
920
- return { isValid: true };
921
- }
1110
+ // src/helpers/urlHelper.ts
1111
+ var urlRef = (url) => {
1112
+ const { ref } = getSiteConfig()?.ref ?? anyObject();
1113
+ if (ref == null) return url;
1114
+ if (url.includes("?")) {
1115
+ return url + `&ref=${ref}`;
922
1116
  }
923
- return {
924
- isValid: false,
925
- errorMessageTransKey: "is_number_validator",
926
- errorMessage: `Must be a number`
927
- };
1117
+ return url + `?ref=${ref}`;
928
1118
  };
929
1119
 
930
1120
  // src/validation/arrayValidation.ts
@@ -990,299 +1180,136 @@ var selectedOptionIsInEnum = (enumType) => (values) => {
990
1180
  return { isValid: true };
991
1181
  };
992
1182
 
993
- // src/constants/localStorageKeys.ts
994
- var LocalStorageKeys = {
995
- nanaHubProfile: 10
1183
+ // src/validation/baseValidation.ts
1184
+ var noValidation = (_) => ({ isValid: true });
1185
+ var notNull = (customTransKey, customErrMsg) => (value) => {
1186
+ if (value != null) {
1187
+ return { isValid: true };
1188
+ }
1189
+ return {
1190
+ isValid: false,
1191
+ errorMessageTransKey: customTransKey ?? "not_null_validator",
1192
+ errorMessage: customErrMsg ?? `Field shouldn't be empty`
1193
+ };
996
1194
  };
997
-
998
- // src/constants/validation.ts
999
- var minUrlLength = 5;
1000
- var portalGlyphLength = 12;
1001
- var validUuidChars = [
1002
- "1",
1003
- "2",
1004
- "3",
1005
- "4",
1006
- "5",
1007
- "6",
1008
- "7",
1009
- "8",
1010
- "9",
1011
- "0",
1012
- "A",
1013
- "B",
1014
- "C",
1015
- "D",
1016
- "E",
1017
- "F"
1018
- ];
1019
-
1020
- // src/contracts/generated/restrictions/drivingRouteRestriction.ts
1021
- var DrivingRouteRestriction = {
1022
- notes: { maxLength: 500 }
1195
+ var multiValidation = (...validations) => (value) => {
1196
+ for (const validation of validations) {
1197
+ const result = validation(value);
1198
+ if (result.isValid === false) return result;
1199
+ }
1200
+ return { isValid: true };
1023
1201
  };
1024
-
1025
- // src/contracts/generated/restrictions/questionRestriction.ts
1026
- var QuestionRestriction = {
1027
- transKey: { minLength: 3, maxLength: 50 },
1028
- fallback: { minLength: 1, maxLength: 500 },
1029
- forTypes: { minLength: 0, maxLength: 100 },
1030
- notes: { minLength: 0, maxLength: 1e3 }
1202
+ var separateValidation = (validators) => (value) => {
1203
+ const appType = getAppType()?.toString?.();
1204
+ const validatorForAppType = validators[AppType[appType]];
1205
+ if (validatorForAppType == null) {
1206
+ getLog().getLogger("separateValidation").w(`${appType} validator not found`);
1207
+ return { isValid: true };
1208
+ }
1209
+ return validatorForAppType(value);
1031
1210
  };
1032
-
1033
- // src/contracts/generated/restrictions/uploadRestriction.ts
1034
- var UploadRestriction = {
1035
- fileName: { minLength: 3, maxLength: 150 },
1036
- blobType: { minLength: 1, maxLength: 50 }
1211
+ var validateForEach = (validation) => (values) => {
1212
+ const safeArr = makeArrayOrDefault(values);
1213
+ for (const value of safeArr) {
1214
+ const result = validation(value);
1215
+ if (result.isValid === false) return result;
1216
+ }
1217
+ return { isValid: true };
1037
1218
  };
1038
1219
 
1039
- // src/contracts/generated/restrictions/userRestriction.ts
1040
- var UserRestriction = {
1041
- firstName: { minLength: 3, maxLength: 80 },
1042
- lastName: { minLength: 3, maxLength: 80 },
1043
- email: { minLength: 5, maxLength: 150 },
1044
- password: { minLength: 5, maxLength: 50 },
1045
- hubspotId: { maxLength: 50 },
1046
- flags: { maxLength: 150 }
1220
+ // src/validation/dateValidation.ts
1221
+ var minDate = (minDate2) => (value) => {
1222
+ if (isBefore(minDate2, value)) {
1223
+ return { isValid: true };
1224
+ }
1225
+ return {
1226
+ isValid: false,
1227
+ errorMessageTransKey: "min_date_validator",
1228
+ errorMessageParams: { date: formatDate(minDate2, "DD MMM YY") },
1229
+ errorMessage: "Minimum date is {date}"
1230
+ };
1231
+ };
1232
+ var maxDate = (maxDate2) => (value) => {
1233
+ if (isBefore(value, maxDate2)) {
1234
+ return { isValid: true };
1235
+ }
1236
+ return {
1237
+ isValid: false,
1238
+ errorMessageTransKey: "max_date_validator",
1239
+ errorMessageParams: { date: formatDate(maxDate2, "DD MMM YY") },
1240
+ errorMessage: "Maximum date is {date}"
1241
+ };
1047
1242
  };
1048
1243
 
1049
- // src/contracts/generated/restrictions/activityRestriction.ts
1050
- var ActivityRestriction = {
1051
- details: { maxLength: 500 }
1052
- };
1053
-
1054
- // src/contracts/generated/restrictions/unavailabilityRestriction.ts
1055
- var UnavailabilityRestriction = {
1056
- notes: { maxLength: 500 }
1057
- };
1058
-
1059
- // src/contracts/generated/restrictions/bookingRestriction.ts
1060
- var BookingRestriction = {
1061
- notes: { maxLength: 250 }
1062
- };
1063
- var BookingAddonRestriction = {
1064
- notes: { maxLength: 250 }
1065
- };
1066
-
1067
- // src/contracts/generated/restrictions/commentRestriction.ts
1068
- var CommentRestriction = {
1069
- name: { maxLength: 80 },
1070
- comment: { maxLength: 1e3 }
1071
- };
1072
-
1073
- // src/contracts/generated/restrictions/petRestriction.ts
1074
- var PetRestriction = {
1075
- name: { minLength: 3, maxLength: 80 },
1076
- breed: { minLength: 3, maxLength: 80 },
1077
- notes: { minLength: 0, maxLength: 1e3 }
1244
+ // src/validation/numberValidation.ts
1245
+ var isNumber = (value) => {
1246
+ if (value != null) {
1247
+ if (isNaN(Number(value)) == false) {
1248
+ return { isValid: true };
1249
+ }
1250
+ }
1251
+ return {
1252
+ isValid: false,
1253
+ errorMessageTransKey: "is_number_validator",
1254
+ errorMessage: `Must be a number`
1255
+ };
1078
1256
  };
1079
1257
 
1080
- // src/contracts/generated/restrictions/answerRestriction.ts
1081
- var AnswerRestriction = {
1082
- answer: { minLength: 1, maxLength: 500 },
1083
- notes: { minLength: 0, maxLength: 1e3 }
1258
+ // src/validation/textValidation.ts
1259
+ var minLength = (minLengthVal) => (value) => {
1260
+ if ((value?.length ?? 0) >= minLengthVal) {
1261
+ return { isValid: true };
1262
+ }
1263
+ return {
1264
+ isValid: false,
1265
+ errorMessageTransKey: "min_length_validator",
1266
+ errorMessageParams: { count: minLengthVal },
1267
+ errorMessage: `Minimum length required is {count}`
1268
+ };
1084
1269
  };
1085
-
1086
- // src/contracts/generated/restrictions/permissionRestriction.ts
1087
- var PermissionRestriction = {
1088
- name: { maxLength: 50 }
1270
+ var maxLength = (maxLengthVal) => (value) => {
1271
+ if ((value?.length ?? 0) <= maxLengthVal) {
1272
+ return { isValid: true };
1273
+ }
1274
+ return {
1275
+ isValid: false,
1276
+ errorMessageTransKey: "max_length_validator",
1277
+ errorMessageParams: { count: maxLengthVal },
1278
+ errorMessage: `Text is too long! Maximum length allowed is {count}`
1279
+ };
1089
1280
  };
1090
-
1091
- // src/contracts/generated/restrictions/addressRestriction.ts
1092
- var AddressRestriction = {
1093
- name: { minLength: 3, maxLength: 50 },
1094
- street: { minLength: 3, maxLength: 150 },
1095
- city: { minLength: 3, maxLength: 80 },
1096
- postalCode: { minLength: 3, maxLength: 20 },
1097
- country: { minLength: 3, maxLength: 100 },
1098
- notes: { minLength: 0, maxLength: 1e3 }
1281
+ var shouldBeUrl = (value) => {
1282
+ const validationFailures = [];
1283
+ const safeValue = `${value}`;
1284
+ const numPeriods = safeValue.split("").filter((c) => c === ".").length;
1285
+ const isLastCharPeriod = safeValue[safeValue.length - 1] === ".";
1286
+ if (numPeriods < 1 || isLastCharPeriod) {
1287
+ validationFailures.push("Should have at least one period in a sensible location.");
1288
+ }
1289
+ if (validationFailures.length > 0) {
1290
+ return {
1291
+ isValid: false,
1292
+ errorMessageTransKey: "link_validator",
1293
+ errorMessageParams: { current: value },
1294
+ errorMessage: `Should be a valid link/url. ({current}) does not meet the requirements: ${validationFailures.join(
1295
+ ". "
1296
+ )}.`
1297
+ };
1298
+ }
1299
+ return { isValid: true };
1099
1300
  };
1100
-
1101
- // src/contracts/generated/searchColumns.ts
1102
- var searchColumns = {
1103
- upload: [{ "property": "linkUuid", "type": 2 }, { "property": "linkType", "type": 2 }, { "property": "type", "type": 2 }, { "property": "fileName", "type": 2 }, { "property": "blobType", "type": 2 }, { "property": "sizeInKb", "type": 2 }, { "property": "dateCreated", "type": 5 }],
1104
- booking: [{ "property": "startDate", "type": 5 }, { "property": "endDate", "type": 5 }, { "property": "status", "type": 2 }, { "property": "notes", "type": 2 }],
1105
- pet: [{ "property": "type", "type": 1 }, { "property": "sex", "type": 2 }, { "property": "breed", "type": 2 }, { "property": "neutered", "type": 2 }, { "property": "name", "type": 2 }, { "property": "notes", "type": 2 }, { "property": "dateOfBirth", "type": 5 }],
1106
- address: [{ "property": "name", "type": 2 }, { "property": "street", "type": 2 }, { "property": "city", "type": 2 }, { "property": "postalCode", "type": 2 }, { "property": "country", "type": 2 }],
1107
- user: [{ "property": "types", "type": 1 }, { "property": "firstName", "type": 2 }, { "property": "lastName", "type": 2 }, { "property": "email", "type": 2 }, { "property": "hubspotId", "type": 2 }, { "property": "flags", "type": 1 }, { "property": "dateCreated", "type": 5 }],
1108
- question: [{ "property": "forTypes", "type": 1 }, { "property": "transKey", "type": 2 }, { "property": "fallback", "type": 2 }, { "property": "type", "type": 0 }, { "property": "sortOrder", "type": 3 }, { "property": "visible", "type": 4 }, { "property": "notes", "type": 2 }]
1301
+ var shouldBeYoutubeUrl = (value) => {
1302
+ const safeValue = `${value}`;
1303
+ const youtubePartialUrl = "https://www.youtube.com/watch?v=";
1304
+ if (safeValue.includes(youtubePartialUrl)) {
1305
+ return { isValid: true };
1306
+ }
1307
+ return {
1308
+ isValid: false,
1309
+ errorMessageTransKey: "youtube_url_validator",
1310
+ errorMessageParams: { startUrl: youtubePartialUrl },
1311
+ errorMessage: `Youtube url should start with {startUrl}`
1312
+ };
1109
1313
  };
1110
1314
 
1111
- // src/contracts/generated/enum/petSexType.ts
1112
- var PetSexType = /* @__PURE__ */ ((PetSexType2) => {
1113
- PetSexType2[PetSexType2["Other"] = 0] = "Other";
1114
- PetSexType2[PetSexType2["Male"] = 1] = "Male";
1115
- PetSexType2[PetSexType2["Female"] = 2] = "Female";
1116
- return PetSexType2;
1117
- })(PetSexType || {});
1118
-
1119
- // src/contracts/generated/enum/petStatusType.ts
1120
- var PetStatusType = /* @__PURE__ */ ((PetStatusType2) => {
1121
- PetStatusType2[PetStatusType2["Unknown"] = 0] = "Unknown";
1122
- PetStatusType2[PetStatusType2["Active"] = 1] = "Active";
1123
- PetStatusType2[PetStatusType2["Deceased"] = 2] = "Deceased";
1124
- PetStatusType2[PetStatusType2["Blacklisted"] = 3] = "Blacklisted";
1125
- return PetStatusType2;
1126
- })(PetStatusType || {});
1127
-
1128
- // src/contracts/generated/enum/userType.ts
1129
- var UserType = /* @__PURE__ */ ((UserType2) => {
1130
- UserType2[UserType2["Unknown"] = 0] = "Unknown";
1131
- UserType2[UserType2["Owner"] = 1] = "Owner";
1132
- UserType2[UserType2["Host"] = 2] = "Host";
1133
- UserType2[UserType2["Driver"] = 3] = "Driver";
1134
- UserType2[UserType2["Admin"] = 50] = "Admin";
1135
- UserType2[UserType2["BotToken"] = 99] = "BotToken";
1136
- return UserType2;
1137
- })(UserType || {});
1138
-
1139
- // src/contracts/generated/enum/bookingAddonType.ts
1140
- var BookingAddonType = /* @__PURE__ */ ((BookingAddonType2) => {
1141
- BookingAddonType2[BookingAddonType2["None"] = 0] = "None";
1142
- BookingAddonType2[BookingAddonType2["PetTaxi"] = 1] = "PetTaxi";
1143
- return BookingAddonType2;
1144
- })(BookingAddonType || {});
1145
-
1146
- // src/contracts/generated/enum/commentLinkType.ts
1147
- var CommentLinkType = /* @__PURE__ */ ((CommentLinkType2) => {
1148
- CommentLinkType2[CommentLinkType2["Unknown"] = 0] = "Unknown";
1149
- CommentLinkType2[CommentLinkType2["User"] = 1] = "User";
1150
- CommentLinkType2[CommentLinkType2["Pet"] = 2] = "Pet";
1151
- CommentLinkType2[CommentLinkType2["Booking"] = 3] = "Booking";
1152
- return CommentLinkType2;
1153
- })(CommentLinkType || {});
1154
-
1155
- // src/contracts/generated/enum/bookingStatus.ts
1156
- var BookingStatusType = /* @__PURE__ */ ((BookingStatusType2) => {
1157
- BookingStatusType2[BookingStatusType2["Pending"] = 0] = "Pending";
1158
- BookingStatusType2[BookingStatusType2["Cancelled"] = 1] = "Cancelled";
1159
- BookingStatusType2[BookingStatusType2["FindPlacement"] = 2] = "FindPlacement";
1160
- BookingStatusType2[BookingStatusType2["Request"] = 3] = "Request";
1161
- BookingStatusType2[BookingStatusType2["PaidWithHostMatch"] = 4] = "PaidWithHostMatch";
1162
- BookingStatusType2[BookingStatusType2["Complete"] = 5] = "Complete";
1163
- BookingStatusType2[BookingStatusType2["CompleteWithHostFeedback"] = 6] = "CompleteWithHostFeedback";
1164
- return BookingStatusType2;
1165
- })(BookingStatusType || {});
1166
-
1167
- // src/contracts/generated/enum/searchableColumnInfo.ts
1168
- var SearchableColumnType = /* @__PURE__ */ ((SearchableColumnType2) => {
1169
- SearchableColumnType2[SearchableColumnType2["STRING_ENUM"] = 0] = "STRING_ENUM";
1170
- SearchableColumnType2[SearchableColumnType2["STRING_OF_ENUMS"] = 1] = "STRING_OF_ENUMS";
1171
- SearchableColumnType2[SearchableColumnType2["STRING"] = 2] = "STRING";
1172
- SearchableColumnType2[SearchableColumnType2["NUMBER"] = 3] = "NUMBER";
1173
- SearchableColumnType2[SearchableColumnType2["BOOLEAN"] = 4] = "BOOLEAN";
1174
- SearchableColumnType2[SearchableColumnType2["DATE"] = 5] = "DATE";
1175
- return SearchableColumnType2;
1176
- })(SearchableColumnType || {});
1177
-
1178
- // src/contracts/generated/enum/networkState.ts
1179
- var NetworkState = /* @__PURE__ */ ((NetworkState2) => {
1180
- NetworkState2[NetworkState2["Pending"] = 0] = "Pending";
1181
- NetworkState2[NetworkState2["Loading"] = 1] = "Loading";
1182
- NetworkState2[NetworkState2["Success"] = 2] = "Success";
1183
- NetworkState2[NetworkState2["Error"] = 3] = "Error";
1184
- return NetworkState2;
1185
- })(NetworkState || {});
1186
-
1187
- // src/contracts/generated/enum/membershipType.ts
1188
- var MembershipType = /* @__PURE__ */ ((MembershipType2) => {
1189
- MembershipType2[MembershipType2["None"] = 0] = "None";
1190
- MembershipType2[MembershipType2["Club"] = 1] = "Club";
1191
- MembershipType2[MembershipType2["ClubPlus"] = 2] = "ClubPlus";
1192
- return MembershipType2;
1193
- })(MembershipType || {});
1194
-
1195
- // src/contracts/generated/enum/activityType.ts
1196
- var ActivityType = /* @__PURE__ */ ((ActivityType2) => {
1197
- ActivityType2[ActivityType2["Unknown"] = 0] = "Unknown";
1198
- ActivityType2[ActivityType2["Create"] = 1] = "Create";
1199
- ActivityType2[ActivityType2["Read"] = 2] = "Read";
1200
- ActivityType2[ActivityType2["Update"] = 3] = "Update";
1201
- ActivityType2[ActivityType2["Delete"] = 4] = "Delete";
1202
- return ActivityType2;
1203
- })(ActivityType || {});
1204
-
1205
- // src/contracts/generated/enum/questionType.ts
1206
- var QuestionType = /* @__PURE__ */ ((QuestionType2) => {
1207
- QuestionType2[QuestionType2["Unknown"] = 0] = "Unknown";
1208
- QuestionType2[QuestionType2["ShortText"] = 1] = "ShortText";
1209
- QuestionType2[QuestionType2["LongText"] = 2] = "LongText";
1210
- QuestionType2[QuestionType2["YesNo"] = 3] = "YesNo";
1211
- QuestionType2[QuestionType2["YesNoUnknown"] = 4] = "YesNoUnknown";
1212
- QuestionType2[QuestionType2["StarRating5"] = 5] = "StarRating5";
1213
- return QuestionType2;
1214
- })(QuestionType || {});
1215
- var QuestionForType = /* @__PURE__ */ ((QuestionForType2) => {
1216
- QuestionForType2[QuestionForType2["Unknown"] = 0] = "Unknown";
1217
- QuestionForType2[QuestionForType2["Host"] = 1] = "Host";
1218
- QuestionForType2[QuestionForType2["Owner"] = 2] = "Owner";
1219
- QuestionForType2[QuestionForType2["Pet"] = 3] = "Pet";
1220
- return QuestionForType2;
1221
- })(QuestionForType || {});
1222
-
1223
- // src/contracts/generated/enum/orderDirectionType.ts
1224
- var OrderDirectionType = /* @__PURE__ */ ((OrderDirectionType2) => {
1225
- OrderDirectionType2["ASC"] = "ASC";
1226
- OrderDirectionType2["DESC"] = "DESC";
1227
- return OrderDirectionType2;
1228
- })(OrderDirectionType || {});
1229
-
1230
- // src/contracts/generated/enum/userAccountFlagType.ts
1231
- var UserAccountFlagType = /* @__PURE__ */ ((UserAccountFlagType2) => {
1232
- UserAccountFlagType2[UserAccountFlagType2["Unknown"] = 0] = "Unknown";
1233
- UserAccountFlagType2[UserAccountFlagType2["ChangePassword"] = 1] = "ChangePassword";
1234
- return UserAccountFlagType2;
1235
- })(UserAccountFlagType || {});
1236
-
1237
- // src/contracts/generated/enum/uploadLinkType.ts
1238
- var UploadLinkType = /* @__PURE__ */ ((UploadLinkType2) => {
1239
- UploadLinkType2[UploadLinkType2["Unknown"] = 0] = "Unknown";
1240
- UploadLinkType2[UploadLinkType2["User"] = 1] = "User";
1241
- UploadLinkType2[UploadLinkType2["Pet"] = 2] = "Pet";
1242
- return UploadLinkType2;
1243
- })(UploadLinkType || {});
1244
- var UploadType = /* @__PURE__ */ ((UploadType2) => {
1245
- UploadType2[UploadType2["Unknown"] = 0] = "Unknown";
1246
- UploadType2[UploadType2["UserProfilePic"] = 5] = "UserProfilePic";
1247
- UploadType2[UploadType2["PetProfilePic"] = 10] = "PetProfilePic";
1248
- UploadType2[UploadType2["PetExtraPic"] = 11] = "PetExtraPic";
1249
- UploadType2[UploadType2["HomePhoto"] = 20] = "HomePhoto";
1250
- return UploadType2;
1251
- })(UploadType || {});
1252
- var uploadsThatNeedEncryption = [];
1253
-
1254
- // src/contracts/generated/enum/answerLinkType.ts
1255
- var AnswerLinkType = /* @__PURE__ */ ((AnswerLinkType2) => {
1256
- AnswerLinkType2[AnswerLinkType2["Unknown"] = 0] = "Unknown";
1257
- AnswerLinkType2[AnswerLinkType2["User"] = 1] = "User";
1258
- AnswerLinkType2[AnswerLinkType2["Pet"] = 2] = "Pet";
1259
- return AnswerLinkType2;
1260
- })(AnswerLinkType || {});
1261
-
1262
- // src/contracts/generated/enum/membershipStatus.ts
1263
- var MembershipStatus = /* @__PURE__ */ ((MembershipStatus2) => {
1264
- MembershipStatus2[MembershipStatus2["Unknown"] = 0] = "Unknown";
1265
- MembershipStatus2[MembershipStatus2["Active"] = 1] = "Active";
1266
- MembershipStatus2[MembershipStatus2["PendingPayment"] = 2] = "PendingPayment";
1267
- MembershipStatus2[MembershipStatus2["Paused"] = 5] = "Paused";
1268
- MembershipStatus2[MembershipStatus2["Cancelled"] = 10] = "Cancelled";
1269
- MembershipStatus2[MembershipStatus2["Removed"] = 11] = "Removed";
1270
- return MembershipStatus2;
1271
- })(MembershipStatus || {});
1272
-
1273
- // src/contracts/generated/enum/petType.ts
1274
- var PetType = /* @__PURE__ */ ((PetType2) => {
1275
- PetType2[PetType2["Unknown"] = 0] = "Unknown";
1276
- PetType2[PetType2["Dog"] = 1] = "Dog";
1277
- PetType2[PetType2["Cat"] = 2] = "Cat";
1278
- return PetType2;
1279
- })(PetType || {});
1280
-
1281
- // src/contracts/generated/enum/addressLinkType.ts
1282
- var AddressLinkType = /* @__PURE__ */ ((AddressLinkType2) => {
1283
- AddressLinkType2[AddressLinkType2["Unknown"] = 0] = "Unknown";
1284
- AddressLinkType2[AddressLinkType2["User"] = 1] = "User";
1285
- return AddressLinkType2;
1286
- })(AddressLinkType || {});
1287
-
1288
- export { APP_TYPE, ActivityRestriction, ActivityType, AddressLinkType, AddressRestriction, AnswerLinkType, AnswerRestriction, AppType, BOT_PATH, BookingAddonRestriction, BookingAddonType, BookingRestriction, BookingStatusType, CommentLinkType, CommentRestriction, CommonConfigService, DrivingRouteRestriction, LocalStorageKeys, LogService, MembershipStatus, MembershipType, NetworkState, OrderDirectionType, PermissionRestriction, PermissionType, PetRestriction, PetSexType, PetStatusType, PetType, QuestionForType, QuestionRestriction, QuestionType, SITE_CONFIG, SearchableColumnType, UnavailabilityRestriction, UploadLinkType, UploadRestriction, UploadType, UserAccountFlagType, UserRestriction, UserType, addDays, addMinutes, addMonths, addSeconds, addSpacesForEnum, addToParallelTasks, anyObject, apiParams, apiRoute, arrayContains, arrayOfNLength, capitalizeFirstLetter, cyrb53, dateDiffInDays, debounceLeading, dependencyInjectionSetup, fakePromise, formatDate, formatFileSize, formatForBookingDate, formatForDateDropdown, formatForDateLocal, formatForDateLocalDetailed, formatForDateOfBirth, formatForDateWithTime, getAgeInYears, getAppType, getArrFromEnum, getBotPath, getCommonConfig, getImageParams, getLog, getMeta, getMimeTypeFromExtension, getPackagesUsed, getPayloadFromJwt, getPerformanceTimer, getPetAvatarUrl, getSiteConfig, getUserAvatarUrl, getUsersName, getWeekNumber, hasRequiredPermissions, isBefore, isNumber, isSameDay, isWebApp, lowercaseFirstLetter, makeArrayOrDefault, maxDate, maxItems, maxLength, mimeTypeLookup, minDate, minItems, minLength, minUrlLength, multiValidation, nameof, noValidation, notNull, onTargetChecked, onTargetFiles, onTargetValue, onlyUnique, portalGlyphLength, preventDefault, promiseFromValue, randomIntFromRange, randomItemFromArray, searchColumns, selectedItemsExist, selectedOptionIsInEnum, separateValidation, setContainerToken, setSiteConfig, shouldBeUrl, shouldBeYoutubeUrl, stopPropagation, timeout, uploadsThatNeedEncryption, urlRef, uuidv4, validUuidChars, validateForEach, webAppTypes };
1315
+ export { APP_TYPE, ActivityRestriction, ActivityType, AddressLinkType, AddressRestriction, AnswerLinkType, AnswerRestriction, AppType, BOT_PATH, BookingAddonRestriction, BookingAddonType, BookingRestriction, BookingStatusType, CommentLinkType, CommentRestriction, CommonConfigService, DrivingRouteRestriction, LogService, MembershipStatus, MembershipType, MouseButton, NetworkState, OrderDirectionType, PermissionRestriction, PermissionType, PetRestriction, PetSexType, PetStatusType, PetType, QuestionForType, QuestionRestriction, QuestionType, SITE_CONFIG, SearchableColumnType, UnavailabilityRestriction, UploadLinkType, UploadRestriction, UploadType, UserAccountFlagType, UserRestriction, UserType, addDays, addMinutes, addMonths, addSeconds, addSpacesForEnum, addToParallelTasks, anyObject, apiRoute, apiRouteParam, arrayContains, arrayOfNLength, capitalizeFirstLetter, cyrb53, dateDiffInDays, debounceLeading, dependencyInjectionSetup, fakePromise, formatDate, formatFileSize, formatForBookingDate, formatForDateDropdown, formatForDateLocal, formatForDateLocalDetailed, formatForDateOfBirth, formatForDateWithTime, getAgeInYears, getAllPetQuestionForType, getAppType, getArrFromEnum, getBotPath, getCommonConfig, getImageParams, getLog, getMeta, getMimeTypeFromExtension, getPackagesUsed, getPayloadFromJwt, getPerformanceTimer, getPetAvatarUrl, getSiteConfig, getUserAvatarUrl, getUsersName, getWeekNumber, hasRequiredPermissions, isBefore, isNumber, isSameDay, isWebApp, lowercaseFirstLetter, makeArrayOrDefault, maxDate, maxItems, maxLength, mimeTypeLookup, minDate, minItems, minLength, minUrlLength, multiValidation, nameof, noValidation, notNull, onlyUnique, portalGlyphLength, promiseFromValue, randomIntFromRange, randomItemFromArray, searchColumns, selectedItemsExist, selectedOptionIsInEnum, separateValidation, setContainerToken, setSiteConfig, shouldBeUrl, shouldBeYoutubeUrl, showSecondCalendar, timeout, uploadsThatNeedEncryption, urlRef, uuidv4, validUuidChars, validateForEach, webAppTypes };