From 9162bd01a218d5e4eb568aeccf59ec95ee44431d Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Thu, 25 Dec 2025 19:35:28 +0000 Subject: [PATCH] code: nextjs,frontends,validate (14 files) --- .../validate-component-hierarchy-update.ts | 37 +++++++++++++++++++ .../validation/validate-credential-create.ts | 26 +++++++++++++ .../nextjs/src/components/ui/alert-dialog.ts | 13 +++++++ frontends/nextjs/src/components/ui/avatar.ts | 3 ++ .../nextjs/src/components/ui/checkbox.ts | 3 ++ .../nextjs/src/components/ui/dropdown-menu.ts | 19 ++++++++++ .../nextjs/src/components/ui/progress.ts | 3 ++ .../nextjs/src/components/ui/radio-group.ts | 3 ++ frontends/nextjs/src/components/ui/sheet.ts | 12 ++++++ .../nextjs/src/components/ui/skeleton.ts | 3 ++ frontends/nextjs/src/components/ui/slider.ts | 3 ++ frontends/nextjs/src/components/ui/switch.ts | 3 ++ frontends/nextjs/src/components/ui/table.ts | 3 ++ .../nextjs/src/components/ui/textarea.ts | 3 ++ 14 files changed, 134 insertions(+) create mode 100644 dbal/ts/src/core/validation/validate-component-hierarchy-update.ts create mode 100644 dbal/ts/src/core/validation/validate-credential-create.ts create mode 100644 frontends/nextjs/src/components/ui/alert-dialog.ts create mode 100644 frontends/nextjs/src/components/ui/avatar.ts create mode 100644 frontends/nextjs/src/components/ui/checkbox.ts create mode 100644 frontends/nextjs/src/components/ui/dropdown-menu.ts create mode 100644 frontends/nextjs/src/components/ui/progress.ts create mode 100644 frontends/nextjs/src/components/ui/radio-group.ts create mode 100644 frontends/nextjs/src/components/ui/sheet.ts create mode 100644 frontends/nextjs/src/components/ui/skeleton.ts create mode 100644 frontends/nextjs/src/components/ui/slider.ts create mode 100644 frontends/nextjs/src/components/ui/switch.ts create mode 100644 frontends/nextjs/src/components/ui/table.ts create mode 100644 frontends/nextjs/src/components/ui/textarea.ts diff --git a/dbal/ts/src/core/validation/validate-component-hierarchy-update.ts b/dbal/ts/src/core/validation/validate-component-hierarchy-update.ts new file mode 100644 index 000000000..c69a5b139 --- /dev/null +++ b/dbal/ts/src/core/validation/validate-component-hierarchy-update.ts @@ -0,0 +1,37 @@ +import type { ComponentHierarchy } from '../types' +import { isPlainObject } from './is-plain-object' +import { isValidUuid } from './is-valid-uuid' + +export function validateComponentHierarchyUpdate(data: Partial): string[] { + const errors: string[] = [] + + if (data.pageId !== undefined) { + if (typeof data.pageId !== 'string' || !isValidUuid(data.pageId)) { + errors.push('pageId must be a valid UUID') + } + } + + if (data.parentId !== undefined) { + if (typeof data.parentId !== 'string' || !isValidUuid(data.parentId)) { + errors.push('parentId must be a valid UUID') + } + } + + if (data.componentType !== undefined) { + if (typeof data.componentType !== 'string' || data.componentType.length === 0 || data.componentType.length > 100) { + errors.push('componentType must be 1-100 characters') + } + } + + if (data.order !== undefined) { + if (!Number.isInteger(data.order) || data.order < 0) { + errors.push('order must be a non-negative integer') + } + } + + if (data.props !== undefined && !isPlainObject(data.props)) { + errors.push('props must be an object') + } + + return errors +} diff --git a/dbal/ts/src/core/validation/validate-credential-create.ts b/dbal/ts/src/core/validation/validate-credential-create.ts new file mode 100644 index 000000000..13f3ff502 --- /dev/null +++ b/dbal/ts/src/core/validation/validate-credential-create.ts @@ -0,0 +1,26 @@ +import type { Credential } from '../types' +import { isValidUsername } from './is-valid-username' + +export function validateCredentialCreate(data: Partial): string[] { + const errors: string[] = [] + + if (!data.username) { + errors.push('username is required') + } else if (!isValidUsername(data.username)) { + errors.push('username must be 3-50 characters (alphanumeric, underscore, hyphen)') + } + + if (!data.passwordHash) { + errors.push('passwordHash is required') + } else if (typeof data.passwordHash !== 'string' || data.passwordHash.trim().length === 0) { + errors.push('passwordHash must be a non-empty string') + } + + if (data.firstLogin === undefined) { + errors.push('firstLogin is required') + } else if (typeof data.firstLogin !== 'boolean') { + errors.push('firstLogin must be a boolean') + } + + return errors +} diff --git a/frontends/nextjs/src/components/ui/alert-dialog.ts b/frontends/nextjs/src/components/ui/alert-dialog.ts new file mode 100644 index 000000000..b207d437a --- /dev/null +++ b/frontends/nextjs/src/components/ui/alert-dialog.ts @@ -0,0 +1,13 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { + AlertDialog, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogCancel, + AlertDialogAction, +} from './organisms/AlertDialog' diff --git a/frontends/nextjs/src/components/ui/avatar.ts b/frontends/nextjs/src/components/ui/avatar.ts new file mode 100644 index 000000000..1decb73a4 --- /dev/null +++ b/frontends/nextjs/src/components/ui/avatar.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Avatar, AvatarImage, AvatarFallback, type AvatarProps } from './atoms/Avatar' diff --git a/frontends/nextjs/src/components/ui/checkbox.ts b/frontends/nextjs/src/components/ui/checkbox.ts new file mode 100644 index 000000000..074417571 --- /dev/null +++ b/frontends/nextjs/src/components/ui/checkbox.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Checkbox, type CheckboxProps } from './atoms/Checkbox' diff --git a/frontends/nextjs/src/components/ui/dropdown-menu.ts b/frontends/nextjs/src/components/ui/dropdown-menu.ts new file mode 100644 index 000000000..fd0d4b50f --- /dev/null +++ b/frontends/nextjs/src/components/ui/dropdown-menu.ts @@ -0,0 +1,19 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuCheckboxItem, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, +} from './molecules/DropdownMenu' diff --git a/frontends/nextjs/src/components/ui/progress.ts b/frontends/nextjs/src/components/ui/progress.ts new file mode 100644 index 000000000..c70075226 --- /dev/null +++ b/frontends/nextjs/src/components/ui/progress.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Progress, type ProgressProps } from './atoms/Progress' diff --git a/frontends/nextjs/src/components/ui/radio-group.ts b/frontends/nextjs/src/components/ui/radio-group.ts new file mode 100644 index 000000000..940ad3347 --- /dev/null +++ b/frontends/nextjs/src/components/ui/radio-group.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { RadioGroup, RadioGroupItem } from './molecules/RadioGroup' diff --git a/frontends/nextjs/src/components/ui/sheet.ts b/frontends/nextjs/src/components/ui/sheet.ts new file mode 100644 index 000000000..79688c2a2 --- /dev/null +++ b/frontends/nextjs/src/components/ui/sheet.ts @@ -0,0 +1,12 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { + Sheet, + SheetTrigger, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, + SheetClose, +} from './organisms/Sheet' diff --git a/frontends/nextjs/src/components/ui/skeleton.ts b/frontends/nextjs/src/components/ui/skeleton.ts new file mode 100644 index 000000000..402c737ad --- /dev/null +++ b/frontends/nextjs/src/components/ui/skeleton.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Skeleton, type SkeletonProps } from './atoms/Skeleton' diff --git a/frontends/nextjs/src/components/ui/slider.ts b/frontends/nextjs/src/components/ui/slider.ts new file mode 100644 index 000000000..24657a30d --- /dev/null +++ b/frontends/nextjs/src/components/ui/slider.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Slider, type SliderProps } from './atoms/Slider' diff --git a/frontends/nextjs/src/components/ui/switch.ts b/frontends/nextjs/src/components/ui/switch.ts new file mode 100644 index 000000000..5c2f14929 --- /dev/null +++ b/frontends/nextjs/src/components/ui/switch.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Switch, type SwitchProps } from './atoms/Switch' diff --git a/frontends/nextjs/src/components/ui/table.ts b/frontends/nextjs/src/components/ui/table.ts new file mode 100644 index 000000000..8f6ece4c9 --- /dev/null +++ b/frontends/nextjs/src/components/ui/table.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Table, TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell, TableCaption } from './organisms/Table' diff --git a/frontends/nextjs/src/components/ui/textarea.ts b/frontends/nextjs/src/components/ui/textarea.ts new file mode 100644 index 000000000..0eb9168a1 --- /dev/null +++ b/frontends/nextjs/src/components/ui/textarea.ts @@ -0,0 +1,3 @@ +// Re-export for backward compatibility +// TODO: Update imports to use @/components/ui directly +export { Textarea, type TextareaProps } from './atoms/Textarea'