husteno-o feat: code review system, type safety, error handling, AI provider fallback · 9/9/2026
5ccaeae
99 lines · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { ValidationError } from "@devpulse/core";
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";

export function formatJson(input: string, indent = 2): string {
  try {
    const parsed = JSON.parse(input);
    return JSON.stringify(parsed, null, indent);
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : String(err);
    throw new ValidationError(`Invalid JSON: ${msg}`);
  }
}

export function minifyJson(input: string): string {
  try {
    const parsed = JSON.parse(input);
    return JSON.stringify(parsed);
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : String(err);
    throw new ValidationError(`Invalid JSON: ${msg}`);
  }
}

export function validateJson(input: string): { valid: boolean; error?: string; type?: string } {
  try {
    const parsed = JSON.parse(input);
    const type = Array.isArray(parsed) ? "array" : typeof parsed;
    return { valid: true, type };
  } catch (err: unknown) {
    return { valid: false, error: err instanceof Error ? err.message : String(err) };
  }
}

export function formatYaml(input: string): string {
  try {
    const parsed = parseYaml(input);
    return stringifyYaml(parsed);
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : String(err);
    throw new ValidationError(`Invalid YAML: ${msg}`);
  }
}

export function yamlToJson(yamlInput: string): string {
  try {
    const parsed = parseYaml(yamlInput);
    return JSON.stringify(parsed, null, 2);
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : String(err);
    throw new ValidationError(`Failed to convert YAML to JSON: ${msg}`);
  }
}

export function jsonToYaml(jsonInput: string): string {
  try {
    const parsed = JSON.parse(jsonInput);
    return stringifyYaml(parsed);
  } catch (err: unknown) {
    const msg = err instanceof Error ? err.message : String(err);
    throw new ValidationError(`Failed to convert JSON to YAML: ${msg}`);
  }
}

export function formatSql(sql: string): string {
  if (!sql.trim()) return "";
  const keywords = [
    "SELECT",
    "FROM",
    "WHERE",
    "AND",
    "OR",
    "ORDER BY",
    "GROUP BY",
    "HAVING",
    "LIMIT",
    "OFFSET",
    "JOIN",
    "LEFT JOIN",
    "RIGHT JOIN",
    "INNER JOIN",
    "OUTER JOIN",
    "INSERT INTO",
    "VALUES",
    "UPDATE",
    "SET",
    "DELETE FROM",
    "CREATE TABLE",
    "ALTER TABLE",
    "DROP TABLE",
  ];

  let formatted = sql.trim().replace(/\s+/g, " ");
  for (const kw of keywords) {
    const regex = new RegExp(`\\b${kw}\\b`, "gi");
    formatted = formatted.replace(regex, (match) => `\n${match.toUpperCase()}`);
  }
  return formatted.trim();
}