UNPKG

mocktail-cli

Version:

**Craft your data cocktail — realistic mock data, shaken not stirred.**

60 lines (50 loc) 2.02 kB
import type { Field } from '../types'; function escapeSqlValue(val: any): string { if (val === null || val === undefined) return 'NULL'; if (typeof val === 'number') return String(val); if (typeof val === 'boolean') return val ? 'TRUE' : 'FALSE'; if (val instanceof Date) return `'${val.toISOString()}'`; if (typeof val === 'object') return `'${JSON.stringify(val).replace(/'/g, "''")}'`; return `'${String(val).replace(/'/g, "''")}'`; } /** * Formats records into an SQL INSERT statement. * * @param modelName - Table name * @param records - Array of record objects * @param fieldsMeta - Optional Prisma model.fields array for filtering relations */ export function formatToSQL(modelName: string, records: Record<string, any>[], fieldsMeta: Field[] = []): string { if (!Array.isArray(records) || records.length === 0) return ''; // Filter out relation fields if fieldsMeta provided let allowedColumns: string[]; if (fieldsMeta.length > 0) { allowedColumns = fieldsMeta .filter(f => !f.isRelation) .map(f => f.name); } else { allowedColumns = Object.keys(records[0] || {}); } const rows = records .map(record => `(${allowedColumns.map(col => escapeSqlValue(record[col])).join(', ')})` ) .join(',\n'); return `INSERT INTO "${modelName}" (${allowedColumns.join(', ')}) VALUES\n${rows};`; } /** * Formats many-to-many join table inserts. * * @param joinTableName - join table name * @param records - array of objects with keys 'A' and 'B' */ export function formatJoinTableSQL(joinTableName: string, records: Array<{ A: string; B: string }>): string { if (!Array.isArray(records) || records.length === 0) return ''; const columns = Object.keys(records[0] || {}); // usually ['A', 'B'] const rows = records .map(record => `(${columns.map(col => escapeSqlValue(record[col as keyof typeof record])).join(', ')})` ) .join(',\n'); return `INSERT INTO "${joinTableName}" (${columns.join(', ')}) VALUES\n${rows};`; }