@growthub/primitives
Version:
Stateless utility functions and primitives for the Growthub Marketing OS
1 lines • 3.14 kB
Source Map (JSON)
{"version":3,"sources":["../src/validation.ts"],"sourcesContent":["/**\n * Validation utilities for the Growthub Marketing OS\n */\n\nimport { z } from 'zod';\nimport type { \n BrandKitSchema, \n AgentTaskSchema, \n CompilerContextSchema \n} from '@growthub/schemas';\n\n// Generic validation result type\nexport interface ValidationResult<T> {\n success: boolean;\n data?: T;\n errors?: string[];\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Generic validation function that works with any Zod schema\n */\nexport function validateWithSchema<T extends z.ZodSchema>(\n schema: T,\n data: unknown\n): ValidationResult<z.infer<T>> {\n try {\n const result = schema.safeParse(data);\n \n if (result.success) {\n return {\n success: true,\n data: result.data\n };\n } else {\n return {\n success: false,\n errors: result.error.errors.map(err => `${err.path.join('.')}: ${err.message}`)\n };\n }\n } catch (error) {\n return {\n success: false,\n errors: [error instanceof Error ? error.message : 'Unknown validation error']\n };\n }\n}\n\n/**\n * Sanitize user input for safe processing\n */\nexport function sanitizeUserInput(input: string): string {\n return input\n .trim()\n .replace(/[<>]/g, '') // Remove basic HTML tags\n .replace(/javascript:/gi, '') // Remove javascript: protocols\n .substring(0, 5000); // Limit length\n}\n\n/**\n * Validate email format\n */\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n}\n\n/**\n * Validate URL format\n */\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validate hex color format\n */\nexport function isValidHexColor(color: string): boolean {\n const hexRegex = /^#[0-9A-F]{6}$/i;\n return hexRegex.test(color);\n}\n\n/**\n * Validate UUID format\n */\nexport function isValidUuid(uuid: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(uuid);\n} "],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBO,SAAS,mBACd,QACA,MAC8B;AAC9B,MAAI;AACF,UAAM,SAAS,OAAO,UAAU,IAAI;AAEpC,QAAI,OAAO,SAAS;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,OAAO;AAAA,MACf;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ,OAAO,MAAM,OAAO,IAAI,SAAO,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,OAAO,EAAE;AAAA,MAChF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,CAAC,iBAAiB,QAAQ,MAAM,UAAU,0BAA0B;AAAA,IAC9E;AAAA,EACF;AACF;AAKO,SAAS,kBAAkB,OAAuB;AACvD,SAAO,MACJ,KAAK,EACL,QAAQ,SAAS,EAAE,EACnB,QAAQ,iBAAiB,EAAE,EAC3B,UAAU,GAAG,GAAI;AACtB;AAKO,SAAS,aAAa,OAAwB;AACnD,QAAM,aAAa;AACnB,SAAO,WAAW,KAAK,KAAK;AAC9B;AAKO,SAAS,WAAW,KAAsB;AAC/C,MAAI;AACF,QAAI,IAAI,GAAG;AACX,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,gBAAgB,OAAwB;AACtD,QAAM,WAAW;AACjB,SAAO,SAAS,KAAK,KAAK;AAC5B;AAKO,SAAS,YAAY,MAAuB;AACjD,QAAM,YAAY;AAClB,SAAO,UAAU,KAAK,IAAI;AAC5B;","names":[]}