Previously /^[a-z0-9]+(-[a-z0-9]+)*$/ rejected identifiers like 'BM632w-standard'. Updated to /^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/ to allow mixed case. Generated with [Continue](https://continue.dev) Co-Authored-By: Continue <noreply@continue.dev>
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import vine from '@vinejs/vine'
|
|
|
|
const parameterCriteriaItemSchema = vine.object({
|
|
name: vine.string().trim().minLength(1),
|
|
value: vine.any(),
|
|
})
|
|
|
|
const criteriaSchema = vine.object({
|
|
manufacturer: vine.string().optional(),
|
|
oui: vine.string().optional(),
|
|
productClass: vine.string().optional(),
|
|
serialNumber: vine.string().optional(),
|
|
parameterCriteria: vine.array(parameterCriteriaItemSchema).optional(),
|
|
})
|
|
|
|
const inventoryPathSchema = vine.object({
|
|
path: vine.string().trim().minLength(1),
|
|
})
|
|
|
|
const desiredParameterSchema = vine.object({
|
|
name: vine.string().trim().minLength(1),
|
|
value: vine.any(),
|
|
type: vine.enum(['string', 'int', 'unsignedInt', 'boolean', 'dateTime']),
|
|
})
|
|
|
|
const firmwareTargetSchema = vine.object({
|
|
productClass: vine.string().trim().minLength(1),
|
|
targetVersion: vine.string().trim().minLength(1),
|
|
})
|
|
|
|
const scheduleWindowSchema = vine.object({
|
|
daysOfWeek: vine.array(vine.number().min(0).max(6)).minLength(1),
|
|
startHour: vine.number().min(0).max(23),
|
|
endHour: vine.number().min(0).max(23),
|
|
timezone: vine.string().trim().minLength(1),
|
|
})
|
|
|
|
export const createConfigurationValidator = vine.compile(
|
|
vine.object({
|
|
identifier: vine.string().trim().regex(/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/),
|
|
name: vine.string().trim().minLength(1),
|
|
version: vine.string().trim().regex(/^\d+\.\d+\.\d+$/),
|
|
priority: vine.number().positive(),
|
|
policy: vine.enum(['once', 'maintain']),
|
|
enabled: vine.boolean().optional(),
|
|
tags: vine.array(vine.string().trim()).optional(),
|
|
criteria: criteriaSchema.optional(),
|
|
inventory: vine.array(inventoryPathSchema).optional(),
|
|
desiredParameters: vine.array(desiredParameterSchema).optional(),
|
|
firmwareTarget: firmwareTargetSchema.optional(),
|
|
schedule: scheduleWindowSchema.optional(),
|
|
})
|
|
)
|
|
|
|
export const updateConfigurationValidator = vine.compile(
|
|
vine.object({
|
|
name: vine.string().trim().minLength(1).optional(),
|
|
version: vine.string().trim().regex(/^\d+\.\d+\.\d+$/).optional(),
|
|
priority: vine.number().positive().optional(),
|
|
policy: vine.enum(['once', 'maintain']).optional(),
|
|
enabled: vine.boolean().optional(),
|
|
tags: vine.array(vine.string().trim()).optional(),
|
|
criteria: criteriaSchema.optional(),
|
|
inventory: vine.array(inventoryPathSchema).optional(),
|
|
desiredParameters: vine.array(desiredParameterSchema).optional(),
|
|
firmwareTarget: firmwareTargetSchema.optional(),
|
|
schedule: scheduleWindowSchema.optional(),
|
|
})
|
|
)
|