Files
adam-acs/app/validators/configuration.ts
T
Kevin L'Hereec f9e56c78b1 refactor: migrate all internal imports to package.json subpath aliases
- Add #domain, #protocol, #utils aliases to package.json imports map
- Replace all relative imports (./, ../, ../..) in app/ and
  database/mongo_migrations/ with the corresponding #alias imports,
  eliminating relative path traversal across the codebase
- Remove dead code: ConfigurationVersionModel.findByConfigurationIdentifier
  (unused, superseded by paginateVersions) and unused exception classes
  (NotFoundException, UnprocessableEntityException, DatabaseException)
  from app/exceptions/index.ts, keeping only BadRequestException
- Fix pre-existing syntax error in configuration_version.ts (mismatched
  parenthesis) that broke tsc
- Fix eqeqeq violation in configuration_service.ts and isNaN ->
  Number.isNaN in configuration_engine.ts / cwmp-1-0.ts / exchange_controller.ts
- Fix no-shadow violation in cwmp-1-0.ts EventStruct constructor
- Prettier formatting pass on touched files

Validated: tsc --noEmit clean, eslint app/ clean, full test suite green.
2026-07-22 11:45:14 +02:00

80 lines
2.5 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(),
})
)