UNPKG

@t1mmen/srtd

Version:

Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀

92 lines • 2.69 kB
import { z } from 'zod'; /** * Format Zod validation errors into a human-readable string * @param error - Zod error object from safeParse * @returns Formatted error string with paths and messages */ export function formatZodErrors(error) { return error.issues .map(issue => { const path = issue.path.join('.'); return path ? `${path}: ${issue.message}` : issue.message; }) .join('; '); } /** * Schema for TemplateBuildState - all fields are optional strings */ export const TemplateBuildStateSchema = z.object({ lastBuildHash: z.string().optional(), lastBuildDate: z.string().optional(), lastBuildError: z.string().optional(), lastMigrationFile: z.string().optional(), lastAppliedHash: z.string().optional(), lastAppliedDate: z.string().optional(), lastAppliedError: z.string().optional(), }); /** * Schema for BuildLog - contains version, lastTimestamp, and templates record */ export const BuildLogSchema = z.object({ version: z.string(), lastTimestamp: z.string(), templates: z.record(z.string(), TemplateBuildStateSchema), }); /** * Schema for CLIConfig - matches CLIConfig interface from types.ts */ export const CLIConfigSchema = z.object({ filter: z.string(), wipIndicator: z.string(), wrapInTransaction: z.boolean(), banner: z.string(), footer: z.string(), templateDir: z.string(), migrationDir: z.string(), migrationPrefix: z.string().optional(), migrationFilename: z.string().optional(), buildLog: z.string(), localBuildLog: z.string(), pgConnection: z.string(), }); /** * Validates a JSON string as a BuildLog * @param content - JSON string to validate * @returns ValidationResult with parsed data or error message */ export function validateBuildLog(content) { // Handle empty string if (!content || content.trim() === '') { return { success: false, error: 'Empty content provided', errorType: 'parse', }; } // Try to parse JSON first let parsed; try { parsed = JSON.parse(content); } catch (e) { return { success: false, error: `Invalid JSON: ${e instanceof Error ? e.message : 'Parse error'}`, errorType: 'parse', }; } // Validate against schema const result = BuildLogSchema.safeParse(parsed); if (result.success) { return { success: true, data: result.data, }; } return { success: false, error: formatZodErrors(result.error), errorType: 'validation', }; } //# sourceMappingURL=schemas.js.map