opencode-irf 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/irf.js +632 -0
  2. package/package.json +6 -6
  3. package/dist/index.d.ts +0 -4
  4. package/dist/index.d.ts.map +0 -1
  5. package/dist/index.js +0 -131
  6. package/dist/index.js.map +0 -1
  7. package/dist/src/discover.d.ts +0 -11
  8. package/dist/src/discover.d.ts.map +0 -1
  9. package/dist/src/discover.js +0 -92
  10. package/dist/src/discover.js.map +0 -1
  11. package/dist/src/process.d.ts +0 -26
  12. package/dist/src/process.d.ts.map +0 -1
  13. package/dist/src/process.js +0 -56
  14. package/dist/src/process.js.map +0 -1
  15. package/dist/src/prompt.d.ts +0 -7
  16. package/dist/src/prompt.d.ts.map +0 -1
  17. package/dist/src/prompt.js +0 -84
  18. package/dist/src/prompt.js.map +0 -1
  19. package/dist/src/schema.d.ts +0 -69
  20. package/dist/src/schema.d.ts.map +0 -1
  21. package/dist/src/schema.js +0 -48
  22. package/dist/src/schema.js.map +0 -1
  23. package/dist/src/session.d.ts +0 -23
  24. package/dist/src/session.d.ts.map +0 -1
  25. package/dist/src/session.js +0 -112
  26. package/dist/src/session.js.map +0 -1
  27. package/dist/src/utils/compare.d.ts +0 -18
  28. package/dist/src/utils/compare.d.ts.map +0 -1
  29. package/dist/src/utils/compare.js +0 -74
  30. package/dist/src/utils/compare.js.map +0 -1
  31. package/dist/src/utils/extractLlmError.d.ts +0 -13
  32. package/dist/src/utils/extractLlmError.d.ts.map +0 -1
  33. package/dist/src/utils/extractLlmError.js +0 -12
  34. package/dist/src/utils/extractLlmError.js.map +0 -1
  35. package/dist/src/utils/safe.d.ts +0 -12
  36. package/dist/src/utils/safe.d.ts.map +0 -1
  37. package/dist/src/utils/safe.js +0 -31
  38. package/dist/src/utils/safe.js.map +0 -1
  39. package/dist/src/utils/stripCodeFences.d.ts +0 -2
  40. package/dist/src/utils/stripCodeFences.d.ts.map +0 -1
  41. package/dist/src/utils/stripCodeFences.js +0 -9
  42. package/dist/src/utils/stripCodeFences.js.map +0 -1
  43. package/dist/src/utils/validate.d.ts +0 -19
  44. package/dist/src/utils/validate.d.ts.map +0 -1
  45. package/dist/src/utils/validate.js +0 -30
  46. package/dist/src/utils/validate.js.map +0 -1
@@ -1,112 +0,0 @@
1
- import { buildRetryPrompt } from './prompt';
2
- import { extractLlmError } from './utils/extractLlmError';
3
- import { stripCodeFences } from './utils/stripCodeFences';
4
- import { formatValidationError, validateJson } from './utils/validate';
5
- const MAX_RETRIES = 3;
6
- // runtime type guards for untyped SDK responses
7
- const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
8
- const isPart = (v) => isRecord(v) && typeof v.type === 'string';
9
- const isPartArray = (v) => Array.isArray(v) && v.every(isPart);
10
- const isMessageInfo = (v) => isRecord(v) && typeof v.role === 'string';
11
- const isMessageEntry = (v) => isRecord(v) && isMessageInfo(v.info) && isPartArray(v.parts);
12
- const isMessageEntryArray = (v) => Array.isArray(v) && v.every(isMessageEntry);
13
- // extract text content from response parts
14
- export const extractText = (parts) => {
15
- return parts
16
- .filter((p) => p.type === 'text' && p.text)
17
- // fallback needed because TS cannot narrow through .filter()
18
- .map((p) => p.text || '')
19
- .join('');
20
- };
21
- // detect model from the calling session's most recent assistant message
22
- export const detectModel = async (client, sessionId) => {
23
- const messagesResult = await client.session.messages({
24
- path: { id: sessionId },
25
- });
26
- if (!messagesResult.data) {
27
- return null;
28
- }
29
- const messages = messagesResult.data;
30
- if (!isMessageEntryArray(messages)) {
31
- return null;
32
- }
33
- for (let i = messages.length - 1; i >= 0; i--) {
34
- const info = messages[i].info;
35
- if (info.role === 'assistant' && info.providerID && info.modelID) {
36
- return {
37
- providerID: info.providerID,
38
- modelID: info.modelID,
39
- };
40
- }
41
- }
42
- return null;
43
- };
44
- // prompt the LLM and validate the response, retrying on failure
45
- export const promptWithRetry = async (options) => {
46
- const { client, sessionId, initialPrompt, schema, model } = options;
47
- let prompt = initialPrompt;
48
- let lastError = '';
49
- for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
50
- const response = await client.session.prompt({
51
- path: { id: sessionId },
52
- body: {
53
- parts: [{ type: 'text', text: prompt }],
54
- tools: {},
55
- model,
56
- },
57
- });
58
- // no response data means a transport/API failure — not retryable
59
- if (!response.data) {
60
- return {
61
- data: null,
62
- error: 'No response from LLM (attempt ' + (attempt + 1) + ')',
63
- };
64
- }
65
- const info = response.data.info;
66
- if (!isMessageInfo(info)) {
67
- return {
68
- data: null,
69
- error: 'Unexpected response shape: missing info (attempt ' + (attempt + 1) + ')',
70
- };
71
- }
72
- const llmError = extractLlmError(info);
73
- if (llmError) {
74
- return {
75
- data: null,
76
- error: llmError,
77
- };
78
- }
79
- const parts = response.data.parts;
80
- if (!isPartArray(parts)) {
81
- return {
82
- data: null,
83
- error: 'Unexpected response shape: missing parts (attempt ' + (attempt + 1) + ')',
84
- };
85
- }
86
- // empty text is a model issue — retryable
87
- const text = extractText(parts);
88
- if (!text) {
89
- lastError = 'Empty response';
90
- prompt = buildRetryPrompt('Empty response. Return valid JSON.');
91
- continue;
92
- }
93
- // validate against schema
94
- const cleaned = stripCodeFences(text);
95
- const validation = validateJson(cleaned, schema);
96
- if (validation.error) {
97
- const errorMsg = formatValidationError(validation);
98
- lastError = errorMsg + ' | raw: ' + cleaned.slice(0, 200);
99
- prompt = buildRetryPrompt(errorMsg);
100
- continue;
101
- }
102
- return {
103
- data: validation.data,
104
- error: null,
105
- };
106
- }
107
- return {
108
- data: null,
109
- error: 'Failed after ' + MAX_RETRIES + ' attempts. Last error: ' + lastError,
110
- };
111
- };
112
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- export type ComparisonResult = {
2
- file: string;
3
- originalBytes: number;
4
- generatedBytes: number;
5
- difference: number;
6
- percentChange: number;
7
- };
8
- export declare const compareBytes: (file: string, original: string, generated: string) => ComparisonResult;
9
- export declare const formatRow: (result: ComparisonResult) => string;
10
- export type ComparisonSummary = {
11
- totalOriginal: number;
12
- totalGenerated: number;
13
- totalDifference: number;
14
- totalPercentChange: number;
15
- };
16
- export declare const summarize: (results: ComparisonResult[]) => ComparisonSummary;
17
- export declare const buildTable: (results: ComparisonResult[]) => string;
18
- //# sourceMappingURL=compare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../../src/utils/compare.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,gBAahF,CAAA;AAYD,eAAO,MAAM,SAAS,GAAI,QAAQ,gBAAgB,KAAG,MAUpD,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAGD,eAAO,MAAM,SAAS,GAAI,SAAS,gBAAgB,EAAE,KAAG,iBAYvD,CAAA;AAGD,eAAO,MAAM,UAAU,GAAI,SAAS,gBAAgB,EAAE,KAAG,MAqCxD,CAAA"}
@@ -1,74 +0,0 @@
1
- // compare byte sizes of two strings and return diff stats
2
- export const compareBytes = (file, original, generated) => {
3
- const originalBytes = new TextEncoder().encode(original).length;
4
- const generatedBytes = new TextEncoder().encode(generated).length;
5
- const difference = originalBytes - generatedBytes;
6
- const percentChange = originalBytes === 0 ? 0 : (difference / originalBytes) * 100;
7
- return {
8
- file,
9
- originalBytes,
10
- generatedBytes,
11
- difference,
12
- percentChange,
13
- };
14
- };
15
- // format a percent change string with direction indicator
16
- const formatChange = (difference, percentChange) => {
17
- if (difference > 0) {
18
- return '\u2212' + percentChange.toFixed(1) + '%';
19
- }
20
- return '+' + Math.abs(percentChange).toFixed(1) + '%';
21
- };
22
- // format a single comparison result as a table row
23
- // uses ASCII indicators (+/-) for consistent monospace alignment
24
- export const formatRow = (result) => {
25
- const changeStr = formatChange(result.difference, result.percentChange);
26
- return (result.file.padEnd(25)
27
- + result.originalBytes.toString().padStart(10)
28
- + result.generatedBytes.toString().padStart(12)
29
- + result.difference.toString().padStart(8)
30
- + changeStr.padStart(10));
31
- };
32
- // summarize an array of comparison results into totals
33
- export const summarize = (results) => {
34
- const totalOriginal = results.reduce((sum, r) => sum + r.originalBytes, 0);
35
- const totalGenerated = results.reduce((sum, r) => sum + r.generatedBytes, 0);
36
- const totalDifference = totalOriginal - totalGenerated;
37
- const totalPercentChange = totalOriginal === 0 ? 0 : (totalDifference / totalOriginal) * 100;
38
- return {
39
- totalOriginal,
40
- totalGenerated,
41
- totalDifference,
42
- totalPercentChange,
43
- };
44
- };
45
- // build a full comparison table as a string
46
- export const buildTable = (results) => {
47
- if (results.length === 0) {
48
- return '';
49
- }
50
- const lines = [];
51
- const header = 'File'.padEnd(25) + 'Original'.padStart(10)
52
- + 'Generated'.padStart(12) + 'Diff'.padStart(8) + 'Change'.padStart(10);
53
- const separator = '\u2500'.repeat(65);
54
- lines.push(header);
55
- lines.push(separator);
56
- const sorted = [...results].sort((a, b) => Math.abs(b.difference) - Math.abs(a.difference));
57
- for (const result of sorted) {
58
- lines.push(formatRow(result));
59
- }
60
- const totals = summarize(results);
61
- lines.push(separator);
62
- const totalChangeStr = formatChange(totals.totalDifference, totals.totalPercentChange);
63
- lines.push('TOTAL'.padEnd(25)
64
- + totals.totalOriginal.toString().padStart(10)
65
- + totals.totalGenerated.toString().padStart(12)
66
- + totals.totalDifference.toString().padStart(8)
67
- + totalChangeStr.padStart(10));
68
- lines.push('');
69
- lines.push((totals.totalDifference > 0 ? 'SAVED ' : 'INCREASED ')
70
- + Math.abs(totals.totalDifference) + ' bytes ('
71
- + Math.abs(totals.totalPercentChange).toFixed(1) + '%)');
72
- return lines.join('\n');
73
- };
74
- //# sourceMappingURL=compare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../../src/utils/compare.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export type MessageInfo = {
2
- role: string;
3
- providerID?: string;
4
- modelID?: string;
5
- error?: {
6
- name?: string;
7
- data?: {
8
- message?: string;
9
- };
10
- };
11
- };
12
- export declare const extractLlmError: (info: MessageInfo) => string | null;
13
- //# sourceMappingURL=extractLlmError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractLlmError.d.ts","sourceRoot":"","sources":["../../../src/utils/extractLlmError.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE;YACL,OAAO,CAAC,EAAE,MAAM,CAAA;SACjB,CAAA;KACF,CAAA;CACF,CAAA;AAGD,eAAO,MAAM,eAAe,GAAI,MAAM,WAAW,KAAG,MAAM,GAAG,IAW5D,CAAA"}
@@ -1,12 +0,0 @@
1
- // extract error message from LLM response info
2
- export const extractLlmError = (info) => {
3
- if (!info.error) {
4
- return null;
5
- }
6
- const err = info.error;
7
- if (err.data && err.data.message) {
8
- return err.data.message;
9
- }
10
- return err.name || 'Unknown LLM error';
11
- };
12
- //# sourceMappingURL=extractLlmError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractLlmError.js","sourceRoot":"","sources":["../../../src/utils/extractLlmError.ts"],"names":[],"mappings":"AAYA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAiB,EAAiB,EAAE;IAClE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;IACtB,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAA;IACzB,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,IAAI,mBAAmB,CAAA;AACxC,CAAC,CAAA"}
@@ -1,12 +0,0 @@
1
- export type Result<T, E = string> = {
2
- data: T;
3
- error: null;
4
- } | {
5
- data: null;
6
- error: E;
7
- };
8
- type SafeResult<T> = Result<T, Error>;
9
- export declare const safe: <T>(fn: () => T) => SafeResult<T>;
10
- export declare const safeAsync: <T>(fn: () => Promise<T>) => Promise<SafeResult<T>>;
11
- export {};
12
- //# sourceMappingURL=safe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../src/utils/safe.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,IAC5B;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAA;AAE5B,KAAK,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAErC,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,IAAI,MAAM,CAAC,KAAG,UAAU,CAAC,CAAC,CAajD,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAa9E,CAAA"}
@@ -1,31 +0,0 @@
1
- export const safe = (fn) => {
2
- try {
3
- const data = fn();
4
- return {
5
- data,
6
- error: null,
7
- };
8
- }
9
- catch (error) {
10
- return {
11
- data: null,
12
- error: error instanceof Error ? error : new Error(String(error)),
13
- };
14
- }
15
- };
16
- export const safeAsync = async (fn) => {
17
- try {
18
- const data = await fn();
19
- return {
20
- data,
21
- error: null,
22
- };
23
- }
24
- catch (error) {
25
- return {
26
- data: null,
27
- error: error instanceof Error ? error : new Error(String(error)),
28
- };
29
- }
30
- };
31
- //# sourceMappingURL=safe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/utils/safe.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,EAAW,EAAiB,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,EAAE,CAAA;QACjB,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,IAAI;SACZ,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAK,EAAoB,EAA0B,EAAE;IACjF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,EAAE,CAAA;QACvB,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,IAAI;SACZ,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACjE,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const stripCodeFences: (text: string) => string;
2
- //# sourceMappingURL=stripCodeFences.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stripCodeFences.d.ts","sourceRoot":"","sources":["../../../src/utils/stripCodeFences.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAK9C,CAAA"}
@@ -1,9 +0,0 @@
1
- // strip markdown code fences from LLM response text
2
- // handles fences at line start or preceded by text on the same line
3
- export const stripCodeFences = (text) => {
4
- return text
5
- .replace(/^.*```(?:json)?\s*\n?/m, '')
6
- .replace(/\n?```\s*$/m, '')
7
- .trim();
8
- };
9
- //# sourceMappingURL=stripCodeFences.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stripCodeFences.js","sourceRoot":"","sources":["../../../src/utils/stripCodeFences.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE;IACtD,OAAO,IAAI;SACR,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,IAAI,EAAE,CAAA;AACX,CAAC,CAAA"}
@@ -1,19 +0,0 @@
1
- import type { z } from 'zod';
2
- type ValidateJsonSuccess<T> = {
3
- data: T;
4
- error: null;
5
- };
6
- type ValidateJsonParseError = {
7
- data: null;
8
- error: 'parse';
9
- };
10
- type ValidateJsonSchemaError = {
11
- data: null;
12
- error: 'schema';
13
- issues: z.core.$ZodIssue[];
14
- };
15
- type ValidateJsonResult<T> = ValidateJsonSuccess<T> | ValidateJsonParseError | ValidateJsonSchemaError;
16
- export declare const validateJson: <T>(json: string, schema: z.ZodType<T>) => ValidateJsonResult<T>;
17
- export declare const formatValidationError: (result: ValidateJsonParseError | ValidateJsonSchemaError) => string;
18
- export {};
19
- //# sourceMappingURL=validate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/utils/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAG5B,KAAK,mBAAmB,CAAC,CAAC,IAAI;IAC5B,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;CAC3B,CAAA;AAED,KAAK,kBAAkB,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,sBAAsB,GAAG,uBAAuB,CAAA;AAEtG,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAG,kBAAkB,CAAC,CAAC,CAsBxF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,QAAQ,sBAAsB,GAAG,uBAAuB,KAAG,MAQhG,CAAA"}
@@ -1,30 +0,0 @@
1
- import { safe } from './safe';
2
- export const validateJson = (json, schema) => {
3
- const { data: parsed, error } = safe(() => JSON.parse(json));
4
- if (error) {
5
- return {
6
- data: null,
7
- error: 'parse',
8
- };
9
- }
10
- const result = schema.safeParse(parsed);
11
- if (!result.success) {
12
- return {
13
- data: null,
14
- error: 'schema',
15
- issues: result.error.issues,
16
- };
17
- }
18
- return {
19
- data: result.data,
20
- error: null,
21
- };
22
- };
23
- export const formatValidationError = (result) => {
24
- if (result.error === 'parse') {
25
- return 'Invalid JSON. Return valid JSON.';
26
- }
27
- const issues = result.issues.map((i) => ' - ' + i.path.join('.') + ': ' + i.message).join('\n');
28
- return 'Schema validation failed:\n' + issues + '\n\nFix the issues and try again.';
29
- };
30
- //# sourceMappingURL=validate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/utils/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAoB7B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,IAAY,EAAE,MAAoB,EAAyB,EAAE;IAC3F,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,OAAO;SACf,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;SAC5B,CAAA;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,IAAI;KACZ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAwD,EAAU,EAAE;IACxG,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO,kCAAkC,CAAA;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEhG,OAAO,6BAA6B,GAAG,MAAM,GAAG,mCAAmC,CAAA;AACrF,CAAC,CAAA"}