@lyxa.ai/types
Version:
Lyxa type definitions and validation schemas for both frontend and backend
156 lines • 8.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ShareableLinkResponseSchema = exports.GetOneQuerySchema = exports.GetByIdInputSchema = exports.IdSchema = exports.DeleteSchema = exports.UpdateSortingOrderSchema = exports.TokenSchema = exports.createResponseSchema = exports.createPaginatedSchema = exports.LoginSchema = exports.WorkHourSettingSchema = exports.HolidayHourSchema = exports.NormalHourSchema = exports.DurationSchema = exports.CourierAddressSchema = exports.UserAddressSchema = exports.AddressSchema = exports.StringSchema = exports.FilterSchema = void 0;
const zod_1 = require("zod");
const global_validation_1 = require("./global-validation");
const enum_1 = require("../enum");
const MongoQuerySchema = zod_1.z.lazy(() => zod_1.z.record(zod_1.z.union([zod_1.z.any(), MongoOperatorsSchema])));
const MongoOperatorsSchema = zod_1.z.object({
$eq: zod_1.z.any().optional(),
$ne: zod_1.z.any().optional(),
$gt: zod_1.z.any().optional(),
$gte: zod_1.z.any().optional(),
$lt: zod_1.z.any().optional(),
$lte: zod_1.z.any().optional(),
$in: zod_1.z.array(zod_1.z.any()).optional(),
$nin: zod_1.z.array(zod_1.z.any()).optional(),
$exists: zod_1.z.boolean().optional(),
$regex: zod_1.z.string().optional(),
$and: zod_1.z.array(MongoQuerySchema).optional(),
$or: zod_1.z.array(MongoQuerySchema).optional(),
$not: MongoQuerySchema.optional(),
$nor: zod_1.z.array(MongoQuerySchema).optional(),
});
const sortSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(-1)]));
const populateSchema = zod_1.z.lazy(() => zod_1.z.object({
path: zod_1.z.string(),
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
match: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).optional(),
options: zod_1.z
.object({
sort: sortSchema.optional(),
limit: zod_1.z.number().optional(),
skip: zod_1.z.number().optional(),
})
.optional(),
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
}));
exports.FilterSchema = zod_1.z
.object({
size: zod_1.z
.number()
.min(1, { message: 'Size must be greater than 0.' })
.max(100, { message: 'Size cannot exceed 100.' })
.optional()
.default(10),
page: zod_1.z.number().min(1, { message: 'Page number must be at least 1.' }).optional().default(1),
sort: sortSchema.optional(),
query: MongoQuerySchema.optional(),
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
search: zod_1.z.object({ searchKey: zod_1.z.string(), searchFields: zod_1.z.array(zod_1.z.string()).optional() }).optional(),
})
.optional();
exports.StringSchema = zod_1.z.string().min(1, 'String cannot be empty').max(255, 'String is too long');
exports.AddressSchema = zod_1.z.object({
address: global_validation_1.ZodValidation.string('Address'),
description: global_validation_1.ZodValidation.string('Description').optional(),
city: global_validation_1.ZodValidation.string('City'),
state: global_validation_1.ZodValidation.string('State'),
country: global_validation_1.ZodValidation.string('Country'),
location: zod_1.z.object({
type: global_validation_1.ZodValidation.enumType(enum_1.GeoLocationType, 'GeoLocationType').default(enum_1.GeoLocationType.POINT),
coordinates: zod_1.z.tuple([
global_validation_1.ZodValidation.number('Longitude', { min: -180, max: 180 }),
global_validation_1.ZodValidation.number('Latitude', { min: -90, max: 90 }),
]),
}),
latitude: global_validation_1.ZodValidation.number('Latitude', { min: -90, max: 90 }),
longitude: global_validation_1.ZodValidation.number('Longitude', { min: -180, max: 180 }),
zone: global_validation_1.ZodValidation.objectId('Zone').optional(),
});
exports.UserAddressSchema = exports.AddressSchema.extend({
addressLabel: global_validation_1.ZodValidation.string('Address Label'),
apartment: global_validation_1.ZodValidation.string('Apartment'),
buildingName: global_validation_1.ZodValidation.string('Building Name'),
deliveryOption: global_validation_1.ZodValidation.string('Delivery Option').optional(),
instructions: global_validation_1.ZodValidation.string('Instructions').optional(),
});
exports.CourierAddressSchema = exports.UserAddressSchema.extend({
name: global_validation_1.ZodValidation.string('Name'),
phoneNumber: global_validation_1.ZodValidation.string('Phone Number'),
});
exports.DurationSchema = zod_1.z.object({
start: global_validation_1.ZodValidation.date('Start'),
end: global_validation_1.ZodValidation.date('End').optional(),
});
const StartEndTimeSchema = zod_1.z.object({
start: global_validation_1.ZodValidation.string('Start'),
end: global_validation_1.ZodValidation.string('End'),
});
exports.NormalHourSchema = zod_1.z.object({
day: global_validation_1.ZodValidation.enumType(enum_1.WeekDay, 'Day'),
status: global_validation_1.ZodValidation.enumType(enum_1.WorkStatus, 'Status'),
openingHours: global_validation_1.ZodValidation.array(StartEndTimeSchema).default([]),
});
exports.HolidayHourSchema = zod_1.z.object({
date: global_validation_1.ZodValidation.date('Date'),
status: global_validation_1.ZodValidation.enumType(enum_1.HolidayWorkStatus, 'Status'),
closingHour: StartEndTimeSchema,
});
exports.WorkHourSettingSchema = zod_1.z.object({
normalHours: global_validation_1.ZodValidation.array(exports.NormalHourSchema).default([]),
holidayHours: global_validation_1.ZodValidation.array(exports.HolidayHourSchema).default([]),
});
exports.LoginSchema = zod_1.z.object({
email: global_validation_1.ZodValidation.email('Email', {
requiredMessage: 'Please enter a valid email address.',
invalidMessage: 'Please enter a valid email address.',
}),
password: global_validation_1.ZodValidation.string('Password', { requiredMessage: 'Please enter password' }),
});
const metadataSchema = zod_1.z.object({
page: global_validation_1.ZodValidation.number(),
size: global_validation_1.ZodValidation.number(),
totalElements: global_validation_1.ZodValidation.number(),
totalPages: global_validation_1.ZodValidation.number(),
});
const createPaginatedSchema = (documentSchema) => zod_1.z.object({
metadata: metadataSchema.optional(),
documents: global_validation_1.ZodValidation.array(documentSchema),
});
exports.createPaginatedSchema = createPaginatedSchema;
const createResponseSchema = (schema) => zod_1.z.object({
success: global_validation_1.ZodValidation.boolean(),
message: global_validation_1.ZodValidation.string(),
data: zod_1.z.union([(0, exports.createPaginatedSchema)(schema), schema]).optional(),
});
exports.createResponseSchema = createResponseSchema;
exports.TokenSchema = zod_1.z.object({
accessToken: global_validation_1.ZodValidation.string('AccessToken'),
refreshToken: global_validation_1.ZodValidation.string('RefreshToken'),
});
exports.UpdateSortingOrderSchema = zod_1.z.object({
_id: global_validation_1.ZodValidation.objectId('_id'),
newPosition: global_validation_1.ZodValidation.number('newPosition'),
});
exports.DeleteSchema = zod_1.z.object({
_id: global_validation_1.ZodValidation.objectId('_id'),
softDelete: global_validation_1.ZodValidation.boolean('Soft Delete').default(true),
});
exports.IdSchema = global_validation_1.ZodValidation.objectId();
exports.GetByIdInputSchema = zod_1.z.object({
_id: global_validation_1.ZodValidation.objectId('_id'),
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
});
exports.GetOneQuerySchema = zod_1.z.object({
query: MongoQuerySchema.optional(),
select: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1)])).optional(),
populate: zod_1.z.union([populateSchema, zod_1.z.array(populateSchema)]).optional(),
});
const ShareableLinkSchema = zod_1.z.object({
link: global_validation_1.ZodValidation.url(),
});
exports.ShareableLinkResponseSchema = (0, exports.createResponseSchema)(ShareableLinkSchema);
//# sourceMappingURL=common-validation.js.map