canonize 0.1.0 → 0.1.2
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.
- package/README.md +59 -0
- package/dist/coercers/array.d.ts +1 -1
- package/dist/coercers/array.d.ts.map +1 -1
- package/dist/coercers/record.d.ts +1 -1
- package/dist/coercers/record.d.ts.map +1 -1
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +252 -61
- package/dist/index.js.map +5 -5
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**Aggressive type coercion for Zod schemas.**
|
|
4
4
|
|
|
5
|
+
Canonize exists for the messy middle ground between "invalid" and "usable." When working with LLM tool calls, you might get a parameters object that does not match your schema exactly, but it is close enough to work. Canonize takes any Zod schema and returns a version that tries its hardest to coerce incoming input into the shape you expect.
|
|
6
|
+
|
|
5
7
|
## The Problem
|
|
6
8
|
|
|
7
9
|
You've defined a beautiful Zod schema:
|
|
@@ -92,6 +94,28 @@ schema.parse({ name: 123, age: '30', active: 'yes', tags: 'a,b,c' });
|
|
|
92
94
|
// { name: '123', age: 30, active: true, tags: ['a', 'b', 'c'] }
|
|
93
95
|
```
|
|
94
96
|
|
|
97
|
+
## Armorer Integration
|
|
98
|
+
|
|
99
|
+
Canonize works cleanly with Armorer tool schemas. Wrap the schema (or raw shape) with `canonize` so LLM arguments are coerced before execution.
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { createTool } from 'armorer';
|
|
103
|
+
import { canonize } from 'canonize';
|
|
104
|
+
import { z } from 'zod';
|
|
105
|
+
|
|
106
|
+
const addNumbers = createTool({
|
|
107
|
+
name: 'add-numbers',
|
|
108
|
+
description: 'Add two numbers together',
|
|
109
|
+
schema: canonize({
|
|
110
|
+
a: z.number(),
|
|
111
|
+
b: z.number(),
|
|
112
|
+
}),
|
|
113
|
+
async execute({ a, b }) {
|
|
114
|
+
return a + b;
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
95
119
|
---
|
|
96
120
|
|
|
97
121
|
## API Reference
|
|
@@ -132,6 +156,41 @@ arraySchema.parse(42); // [42]
|
|
|
132
156
|
|
|
133
157
|
---
|
|
134
158
|
|
|
159
|
+
### Diagnostics
|
|
160
|
+
|
|
161
|
+
#### `safeParseWithReport(schema, input)`
|
|
162
|
+
|
|
163
|
+
Coerces inputs and returns a report of what changed alongside the parse result.
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { safeParseWithReport } from 'canonize';
|
|
167
|
+
import { z } from 'zod';
|
|
168
|
+
|
|
169
|
+
const schema = z.object({ count: z.number(), enabled: z.boolean() });
|
|
170
|
+
const result = safeParseWithReport(schema, { count: '42', enabled: 'yes' });
|
|
171
|
+
|
|
172
|
+
if (result.success) {
|
|
173
|
+
console.log(result.data);
|
|
174
|
+
}
|
|
175
|
+
console.log(result.report.warnings);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
#### `coerceWithReport(schema, input)`
|
|
179
|
+
|
|
180
|
+
Returns the coerced value plus warnings without running validation.
|
|
181
|
+
|
|
182
|
+
#### `createRepairHints(error, options?)`
|
|
183
|
+
|
|
184
|
+
Generates compact, LLM-friendly suggestions from a `ZodError`.
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
import { createRepairHints } from 'canonize';
|
|
188
|
+
|
|
189
|
+
const hints = createRepairHints(result.error);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
135
194
|
### Type Detection Utilities
|
|
136
195
|
|
|
137
196
|
#### `getZodTypeName(schema: ZodTypeAny): string`
|
package/dist/coercers/array.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ import { CircularTracker } from '../utilities/circular.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Coerce value to array with element type coercion
|
|
5
5
|
*/
|
|
6
|
-
export declare function coerceToArray(value: unknown, _elementSchema: z.ZodTypeAny, coerceElement: (v: unknown, tracker: CircularTracker) => unknown, tracker?: CircularTracker): unknown[];
|
|
6
|
+
export declare function coerceToArray(value: unknown, _elementSchema: z.ZodTypeAny, coerceElement: (index: number, v: unknown, tracker: CircularTracker) => unknown, tracker?: CircularTracker): unknown[];
|
|
7
7
|
//# sourceMappingURL=array.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/coercers/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAiB,eAAe,EAAiB,MAAM,0BAA0B,CAAC;AAIzF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,CAAC,CAAC,UAAU,EAC5B,aAAa,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/coercers/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAiB,eAAe,EAAiB,MAAM,0BAA0B,CAAC;AAIzF;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,CAAC,CAAC,UAAU,EAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,EAC/E,OAAO,kBAAwB,GAC9B,OAAO,EAAE,CA4FX"}
|
|
@@ -3,5 +3,5 @@ import { CircularTracker } from '../utilities/circular.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Coerce value to record (Record<K, V>) with value type coercion
|
|
5
5
|
*/
|
|
6
|
-
export declare function coerceToRecord(value: unknown, valueSchema: z.ZodTypeAny, coerceValue: (v: unknown, tracker: CircularTracker) => unknown, tracker?: CircularTracker): Record<string, unknown>;
|
|
6
|
+
export declare function coerceToRecord(value: unknown, valueSchema: z.ZodTypeAny, coerceValue: (key: string, v: unknown, tracker: CircularTracker) => unknown, tracker?: CircularTracker): Record<string, unknown>;
|
|
7
7
|
//# sourceMappingURL=record.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/coercers/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAiB,eAAe,EAAiB,MAAM,0BAA0B,CAAC;AAIzF;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,CAAC,CAAC,UAAU,EACzB,WAAW,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/coercers/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAiB,eAAe,EAAiB,MAAM,0BAA0B,CAAC;AAIzF;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,CAAC,CAAC,UAAU,EACzB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,KAAK,OAAO,EAC3E,OAAO,kBAAwB,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoHzB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,35 @@ export { ZodType } from './constants.js';
|
|
|
3
3
|
export { type CanonizePrimitive, createCanonizePrimitive, createCanonizeSchema, } from './create-schema.js';
|
|
4
4
|
export { CircularTracker } from './utilities/circular.js';
|
|
5
5
|
export { getZodTypeName, unwrapSchema } from './utilities/type-detection.js';
|
|
6
|
+
export type CanonizePath = Array<string | number>;
|
|
7
|
+
export type CanonizeWarningCode = 'coerced' | 'defaulted' | 'parsed';
|
|
8
|
+
export type CanonizeWarning = {
|
|
9
|
+
path: CanonizePath;
|
|
10
|
+
code: CanonizeWarningCode;
|
|
11
|
+
from: unknown;
|
|
12
|
+
to: unknown;
|
|
13
|
+
via: string;
|
|
14
|
+
};
|
|
15
|
+
export type CanonizeReport = {
|
|
16
|
+
warnings: CanonizeWarning[];
|
|
17
|
+
cost: number;
|
|
18
|
+
};
|
|
19
|
+
export type CanonizeSafeParseResult<T> = {
|
|
20
|
+
success: true;
|
|
21
|
+
data: T;
|
|
22
|
+
report: CanonizeReport;
|
|
23
|
+
} | {
|
|
24
|
+
success: false;
|
|
25
|
+
error: z.ZodError;
|
|
26
|
+
report: CanonizeReport;
|
|
27
|
+
};
|
|
28
|
+
export type CanonizeRepairHint = {
|
|
29
|
+
path: string;
|
|
30
|
+
message: string;
|
|
31
|
+
suggestion: string;
|
|
32
|
+
};
|
|
6
33
|
export type CanonizeSchema<T extends z.ZodTypeAny> = T & {};
|
|
34
|
+
type CanonizeNormalizedSchema<T extends z.ZodTypeAny | z.ZodRawShape> = T extends z.ZodTypeAny ? T : T extends z.ZodRawShape ? z.ZodObject<T> : z.ZodTypeAny;
|
|
7
35
|
/**
|
|
8
36
|
* Wrap a Zod schema with aggressive type coercion.
|
|
9
37
|
*
|
|
@@ -31,6 +59,7 @@ export type CanonizeSchema<T extends z.ZodTypeAny> = T & {};
|
|
|
31
59
|
* Overloads preserve specific Zod types (e.g., ZodObject) so callers
|
|
32
60
|
* retain exact schema types without needing casts.
|
|
33
61
|
*/
|
|
62
|
+
export declare function canonize<T extends z.ZodRawShape>(schema: T): z.ZodObject<T>;
|
|
34
63
|
export declare function canonize<T extends z.ZodObject<any>>(schema: T): T;
|
|
35
64
|
export declare function canonize<T extends z.ZodArray<any>>(schema: T): T;
|
|
36
65
|
export declare function canonize<T extends z.ZodRecord<any, any>>(schema: T): T;
|
|
@@ -48,4 +77,12 @@ export declare function canonize<T extends z.ZodDate>(schema: T): T;
|
|
|
48
77
|
export declare function canonize<T extends z.ZodNull>(schema: T): T;
|
|
49
78
|
export declare function canonize<T extends z.ZodNaN>(schema: T): T;
|
|
50
79
|
export declare function canonize<T extends z.ZodTypeAny>(schema: T): CanonizeSchema<T>;
|
|
80
|
+
export declare function coerceWithReport<T extends z.ZodTypeAny | z.ZodRawShape>(schema: T, value: unknown): {
|
|
81
|
+
value: unknown;
|
|
82
|
+
report: CanonizeReport;
|
|
83
|
+
};
|
|
84
|
+
export declare function safeParseWithReport<T extends z.ZodTypeAny | z.ZodRawShape>(schema: T, value: unknown): CanonizeSafeParseResult<z.infer<CanonizeNormalizedSchema<T>>>;
|
|
85
|
+
export declare function createRepairHints(error: z.ZodError, options?: {
|
|
86
|
+
rootLabel?: string;
|
|
87
|
+
}): CanonizeRepairHint[];
|
|
51
88
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AA4BzB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -211,7 +211,7 @@ function coerceToArray(value, _elementSchema, coerceElement, tracker = new Circu
|
|
|
211
211
|
if (canBeCircular(value[i]) && tracker.has(value[i])) {
|
|
212
212
|
throwCircular();
|
|
213
213
|
}
|
|
214
|
-
result[i] = coerceElement(value[i], tracker);
|
|
214
|
+
result[i] = coerceElement(i, value[i], tracker);
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
return result;
|
|
@@ -225,22 +225,22 @@ function coerceToArray(value, _elementSchema, coerceElement, tracker = new Circu
|
|
|
225
225
|
return [];
|
|
226
226
|
const json = tryParseJSON(trimmed);
|
|
227
227
|
if (Array.isArray(json)) {
|
|
228
|
-
return json.map((v) => coerceElement(v, tracker));
|
|
228
|
+
return json.map((v, index) => coerceElement(index, v, tracker));
|
|
229
229
|
}
|
|
230
230
|
const csv = tryParseCSV(trimmed);
|
|
231
231
|
if (csv) {
|
|
232
|
-
return csv.map((v) => coerceElement(v, tracker));
|
|
232
|
+
return csv.map((v, index) => coerceElement(index, v, tracker));
|
|
233
233
|
}
|
|
234
|
-
return [coerceElement(trimmed, tracker)];
|
|
234
|
+
return [coerceElement(0, trimmed, tracker)];
|
|
235
235
|
}
|
|
236
236
|
if (value instanceof Set) {
|
|
237
|
-
return Array.from(value).map((v) => coerceElement(v, tracker));
|
|
237
|
+
return Array.from(value).map((v, index) => coerceElement(index, v, tracker));
|
|
238
238
|
}
|
|
239
239
|
if (value instanceof Map) {
|
|
240
|
-
return Array.from(value.values()).map((v) => coerceElement(v, tracker));
|
|
240
|
+
return Array.from(value.values()).map((v, index) => coerceElement(index, v, tracker));
|
|
241
241
|
}
|
|
242
242
|
if (ArrayBuffer.isView(value)) {
|
|
243
|
-
return Array.from(value).map((v) => coerceElement(v, tracker));
|
|
243
|
+
return Array.from(value).map((v, index) => coerceElement(index, v, tracker));
|
|
244
244
|
}
|
|
245
245
|
if (isArrayLike(value)) {
|
|
246
246
|
const obj = value;
|
|
@@ -248,16 +248,16 @@ function coerceToArray(value, _elementSchema, coerceElement, tracker = new Circu
|
|
|
248
248
|
const result = [];
|
|
249
249
|
for (let i = 0;i < length; i++) {
|
|
250
250
|
if (i in obj) {
|
|
251
|
-
result[i] = coerceElement(obj[i], tracker);
|
|
251
|
+
result[i] = coerceElement(i, obj[i], tracker);
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
return result;
|
|
255
255
|
}
|
|
256
256
|
if (isPlainObject(value)) {
|
|
257
257
|
const values = Object.values(value);
|
|
258
|
-
return values.map((v) => coerceElement(v, tracker));
|
|
258
|
+
return values.map((v, index) => coerceElement(index, v, tracker));
|
|
259
259
|
}
|
|
260
|
-
return [coerceElement(value, tracker)];
|
|
260
|
+
return [coerceElement(0, value, tracker)];
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
// src/utilities/special-methods.ts
|
|
@@ -1115,7 +1115,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1115
1115
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1116
1116
|
throwCircular();
|
|
1117
1117
|
}
|
|
1118
|
-
result[key] = coerceValue(val, tracker);
|
|
1118
|
+
result[key] = coerceValue(key, val, tracker);
|
|
1119
1119
|
}
|
|
1120
1120
|
return result;
|
|
1121
1121
|
}
|
|
@@ -1138,7 +1138,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1138
1138
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1139
1139
|
throwCircular();
|
|
1140
1140
|
}
|
|
1141
|
-
result2[String(key)] = coerceValue(val, tracker);
|
|
1141
|
+
result2[String(key)] = coerceValue(String(key), val, tracker);
|
|
1142
1142
|
}
|
|
1143
1143
|
return result2;
|
|
1144
1144
|
}
|
|
@@ -1147,7 +1147,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1147
1147
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1148
1148
|
throwCircular();
|
|
1149
1149
|
}
|
|
1150
|
-
result[String(index)] = coerceValue(val, tracker);
|
|
1150
|
+
result[String(index)] = coerceValue(String(index), val, tracker);
|
|
1151
1151
|
});
|
|
1152
1152
|
return result;
|
|
1153
1153
|
}
|
|
@@ -1157,7 +1157,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1157
1157
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1158
1158
|
throwCircular();
|
|
1159
1159
|
}
|
|
1160
|
-
result[String(key)] = coerceValue(val, tracker);
|
|
1160
|
+
result[String(key)] = coerceValue(String(key), val, tracker);
|
|
1161
1161
|
}
|
|
1162
1162
|
return result;
|
|
1163
1163
|
}
|
|
@@ -1168,7 +1168,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1168
1168
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1169
1169
|
throwCircular();
|
|
1170
1170
|
}
|
|
1171
|
-
result[String(index)] = coerceValue(val, tracker);
|
|
1171
|
+
result[String(index)] = coerceValue(String(index), val, tracker);
|
|
1172
1172
|
index++;
|
|
1173
1173
|
}
|
|
1174
1174
|
return result;
|
|
@@ -1182,7 +1182,7 @@ function coerceToRecord(value, valueSchema, coerceValue, tracker = new CircularT
|
|
|
1182
1182
|
if (canBeCircular(val) && tracker.has(val)) {
|
|
1183
1183
|
throwCircular();
|
|
1184
1184
|
}
|
|
1185
|
-
result[key] = coerceValue(val, tracker);
|
|
1185
|
+
result[key] = coerceValue(key, val, tracker);
|
|
1186
1186
|
}
|
|
1187
1187
|
return result;
|
|
1188
1188
|
}
|
|
@@ -1432,31 +1432,80 @@ function getNullCoercion() {
|
|
|
1432
1432
|
}
|
|
1433
1433
|
|
|
1434
1434
|
// src/index.ts
|
|
1435
|
-
function
|
|
1435
|
+
function getKind(value) {
|
|
1436
|
+
if (value === null)
|
|
1437
|
+
return "null";
|
|
1438
|
+
if (value === undefined)
|
|
1439
|
+
return "undefined";
|
|
1440
|
+
if (Array.isArray(value))
|
|
1441
|
+
return "array";
|
|
1442
|
+
if (value instanceof Map)
|
|
1443
|
+
return "map";
|
|
1444
|
+
if (value instanceof Set)
|
|
1445
|
+
return "set";
|
|
1446
|
+
if (value instanceof Date)
|
|
1447
|
+
return "date";
|
|
1448
|
+
return typeof value;
|
|
1449
|
+
}
|
|
1450
|
+
function recordChange(report, path, from, to, via, code = "coerced") {
|
|
1451
|
+
if (!report)
|
|
1452
|
+
return;
|
|
1453
|
+
if (Object.is(from, to))
|
|
1454
|
+
return;
|
|
1455
|
+
report.warnings.push({ path: [...path], code, from, to, via });
|
|
1456
|
+
}
|
|
1457
|
+
function recordContainerChange(report, path, from, to) {
|
|
1458
|
+
if (!report)
|
|
1459
|
+
return;
|
|
1460
|
+
const fromKind = getKind(from);
|
|
1461
|
+
const toKind = getKind(to);
|
|
1462
|
+
if (fromKind === toKind)
|
|
1463
|
+
return;
|
|
1464
|
+
const code = fromKind === "string" && ["array", "object", "map", "set"].includes(toKind) ? "parsed" : "coerced";
|
|
1465
|
+
report.warnings.push({
|
|
1466
|
+
path: [...path],
|
|
1467
|
+
code,
|
|
1468
|
+
from,
|
|
1469
|
+
to,
|
|
1470
|
+
via: `${fromKind}->${toKind}`
|
|
1471
|
+
});
|
|
1472
|
+
}
|
|
1473
|
+
function coerceValue(schema, value, tracker = new CircularTracker, report, path = []) {
|
|
1436
1474
|
const typeName = getZodTypeName(schema);
|
|
1475
|
+
if (typeName === "pipe") {
|
|
1476
|
+
const outSchema = schema._def?.out ?? schema._def?.schema;
|
|
1477
|
+
if (outSchema) {
|
|
1478
|
+
return coerceValue(outSchema, value, tracker, report, path);
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1437
1481
|
if (typeName === ZodType.OPTIONAL) {
|
|
1438
1482
|
if (value === undefined)
|
|
1439
1483
|
return;
|
|
1440
|
-
return coerceValue(schema._def.innerType, value, tracker);
|
|
1484
|
+
return coerceValue(schema._def.innerType, value, tracker, report, path);
|
|
1441
1485
|
}
|
|
1442
1486
|
if (typeName === ZodType.NULLABLE) {
|
|
1443
1487
|
if (value === null)
|
|
1444
1488
|
return null;
|
|
1445
1489
|
if (value === "") {
|
|
1446
|
-
|
|
1490
|
+
const coerced = null;
|
|
1491
|
+
recordChange(report, path, value, coerced, "empty-string->null");
|
|
1492
|
+
return coerced;
|
|
1447
1493
|
}
|
|
1448
|
-
return coerceValue(schema._def.innerType, value, tracker);
|
|
1494
|
+
return coerceValue(schema._def.innerType, value, tracker, report, path);
|
|
1449
1495
|
}
|
|
1450
1496
|
if (typeName === ZodType.DEFAULT) {
|
|
1451
|
-
if (value === undefined)
|
|
1452
|
-
|
|
1453
|
-
|
|
1497
|
+
if (value === undefined) {
|
|
1498
|
+
const defaultValue = schema._def.defaultValue();
|
|
1499
|
+
recordChange(report, path, value, defaultValue, "default", "defaulted");
|
|
1500
|
+
return defaultValue;
|
|
1501
|
+
}
|
|
1502
|
+
return coerceValue(schema._def.innerType, value, tracker, report, path);
|
|
1454
1503
|
}
|
|
1455
1504
|
if (typeName === ZodType.CATCH) {
|
|
1456
|
-
return coerceValue(schema._def.innerType, value, tracker);
|
|
1505
|
+
return coerceValue(schema._def.innerType, value, tracker, report, path);
|
|
1457
1506
|
}
|
|
1458
1507
|
if (typeName === ZodType.READONLY) {
|
|
1459
|
-
const result = coerceValue(schema._def.innerType, value, tracker);
|
|
1508
|
+
const result = coerceValue(schema._def.innerType, value, tracker, report, path);
|
|
1460
1509
|
if (typeof result === "object" && result !== null) {
|
|
1461
1510
|
return Object.freeze(result);
|
|
1462
1511
|
}
|
|
@@ -1464,66 +1513,92 @@ function coerceValue(schema, value, tracker = new CircularTracker) {
|
|
|
1464
1513
|
}
|
|
1465
1514
|
if (typeName === ZodType.LAZY) {
|
|
1466
1515
|
const lazySchema = schema._def.getter();
|
|
1467
|
-
return coerceValue(lazySchema, value, tracker);
|
|
1516
|
+
return coerceValue(lazySchema, value, tracker, report, path);
|
|
1468
1517
|
}
|
|
1469
1518
|
if (typeName === ZodType.STRING) {
|
|
1470
|
-
|
|
1519
|
+
const coerced = coerceToString(value, tracker);
|
|
1520
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->string`);
|
|
1521
|
+
return coerced;
|
|
1471
1522
|
}
|
|
1472
1523
|
if (typeName === ZodType.NUMBER) {
|
|
1473
1524
|
const num = coerceToNumber(value);
|
|
1525
|
+
let result = num;
|
|
1474
1526
|
const defData = schema._def;
|
|
1475
1527
|
if (defData.check === "number_format" && defData.format === "safeint") {
|
|
1476
|
-
|
|
1528
|
+
result = coerceToInteger(num);
|
|
1529
|
+
recordChange(report, path, value, result, `${getKind(value)}->number`);
|
|
1530
|
+
return result;
|
|
1477
1531
|
}
|
|
1478
1532
|
if (defData.check === "number_format" && defData.format === "int32") {
|
|
1479
|
-
|
|
1533
|
+
result = coerceToInt32(num);
|
|
1534
|
+
recordChange(report, path, value, result, `${getKind(value)}->number`);
|
|
1535
|
+
return result;
|
|
1480
1536
|
}
|
|
1481
|
-
|
|
1537
|
+
recordChange(report, path, value, result, `${getKind(value)}->number`);
|
|
1538
|
+
return result;
|
|
1482
1539
|
}
|
|
1483
1540
|
if (typeName === ZodType.BOOLEAN) {
|
|
1484
|
-
|
|
1541
|
+
const coerced = coerceToBoolean(value);
|
|
1542
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->boolean`);
|
|
1543
|
+
return coerced;
|
|
1485
1544
|
}
|
|
1486
1545
|
if (typeName === ZodType.DATE) {
|
|
1487
|
-
|
|
1546
|
+
const coerced = coerceToDate(value);
|
|
1547
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->date`);
|
|
1548
|
+
return coerced;
|
|
1488
1549
|
}
|
|
1489
1550
|
if (typeName === ZodType.BIGINT) {
|
|
1490
|
-
|
|
1551
|
+
const coerced = coerceToBigInt(value);
|
|
1552
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->bigint`);
|
|
1553
|
+
return coerced;
|
|
1491
1554
|
}
|
|
1492
1555
|
if (typeName === ZodType.NULL) {
|
|
1493
|
-
|
|
1556
|
+
const coerced = coerceToNull(value);
|
|
1557
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->null`);
|
|
1558
|
+
return coerced;
|
|
1494
1559
|
}
|
|
1495
1560
|
if (typeName === ZodType.NAN) {
|
|
1496
|
-
|
|
1561
|
+
const coerced = coerceToNaN(value);
|
|
1562
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->nan`);
|
|
1563
|
+
return coerced;
|
|
1497
1564
|
}
|
|
1498
1565
|
if (typeName === ZodType.ANY || typeName === ZodType.UNKNOWN) {
|
|
1499
1566
|
return value;
|
|
1500
1567
|
}
|
|
1501
1568
|
if (typeName === ZodType.CUSTOM) {
|
|
1502
|
-
return coerceCustomSchema(schema, value, tracker);
|
|
1569
|
+
return coerceCustomSchema(schema, value, tracker, report, path);
|
|
1503
1570
|
}
|
|
1504
1571
|
if (typeName === ZodType.NEVER) {
|
|
1505
1572
|
throw new Error("Cannot coerce to never type");
|
|
1506
1573
|
}
|
|
1507
1574
|
if (typeName === ZodType.ARRAY) {
|
|
1508
1575
|
const elementSchema = schema._def.element;
|
|
1509
|
-
|
|
1576
|
+
const coerced = coerceToArray(value, elementSchema, (index, v, t) => coerceValue(elementSchema, v, t, report, [...path, index]), tracker);
|
|
1577
|
+
recordContainerChange(report, path, value, coerced);
|
|
1578
|
+
return coerced;
|
|
1510
1579
|
}
|
|
1511
1580
|
if (typeName === ZodType.OBJECT) {
|
|
1512
1581
|
const shape = schema._def.shape;
|
|
1513
|
-
|
|
1582
|
+
const coerced = coerceToObject(value, shape, (key, v, t) => {
|
|
1514
1583
|
if (key in shape) {
|
|
1515
|
-
return coerceValue(shape[key], v, t);
|
|
1584
|
+
return coerceValue(shape[key], v, t, report, [...path, key]);
|
|
1516
1585
|
}
|
|
1517
1586
|
return v;
|
|
1518
1587
|
}, tracker);
|
|
1588
|
+
recordContainerChange(report, path, value, coerced);
|
|
1589
|
+
return coerced;
|
|
1519
1590
|
}
|
|
1520
1591
|
if (typeName === ZodType.TUPLE) {
|
|
1521
1592
|
const items = schema._def.items;
|
|
1522
|
-
|
|
1593
|
+
const coerced = coerceToTuple(value, items, (index, v, t) => coerceValue(items[index], v, t, report, [...path, index]), tracker);
|
|
1594
|
+
recordContainerChange(report, path, value, coerced);
|
|
1595
|
+
return coerced;
|
|
1523
1596
|
}
|
|
1524
1597
|
if (typeName === ZodType.RECORD) {
|
|
1525
1598
|
const valueType = schema._def.valueType;
|
|
1526
|
-
|
|
1599
|
+
const coerced = coerceToRecord(value, valueType, (key, v, t) => coerceValue(valueType, v, t, report, [...path, key]), tracker);
|
|
1600
|
+
recordContainerChange(report, path, value, coerced);
|
|
1601
|
+
return coerced;
|
|
1527
1602
|
}
|
|
1528
1603
|
if (typeName === ZodType.ENUM) {
|
|
1529
1604
|
const defData = schema._def;
|
|
@@ -1531,56 +1606,64 @@ function coerceValue(schema, value, tracker = new CircularTracker) {
|
|
|
1531
1606
|
const allValues = Object.values(entries);
|
|
1532
1607
|
const hasNumbers = allValues.some((v) => typeof v === "number");
|
|
1533
1608
|
const validValues = hasNumbers ? allValues.filter((v) => typeof v === "number") : Array.from(new Set(allValues));
|
|
1534
|
-
|
|
1609
|
+
const coerced = coerceToEnum(value, validValues, entries);
|
|
1610
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->enum`);
|
|
1611
|
+
return coerced;
|
|
1535
1612
|
}
|
|
1536
1613
|
if (typeName === ZodType.LITERAL) {
|
|
1537
1614
|
const defData = schema._def;
|
|
1538
1615
|
const literalValue = defData.values[0];
|
|
1539
|
-
|
|
1616
|
+
const coerced = coerceToLiteral(value, literalValue);
|
|
1617
|
+
recordChange(report, path, value, coerced, `${getKind(value)}->literal`);
|
|
1618
|
+
return coerced;
|
|
1540
1619
|
}
|
|
1541
1620
|
if (typeName === ZodType.UNION && schema._def.discriminator) {
|
|
1542
1621
|
const discriminator = schema._def.discriminator;
|
|
1543
1622
|
const options = schema._def.options;
|
|
1544
|
-
return coerceToDiscriminatedUnion(value, discriminator, options, (index, v, t) => coerceValue(options[index], v, t), tracker);
|
|
1623
|
+
return coerceToDiscriminatedUnion(value, discriminator, options, (index, v, t) => coerceValue(options[index], v, t, report, path), tracker);
|
|
1545
1624
|
}
|
|
1546
1625
|
if (typeName === ZodType.UNION) {
|
|
1547
1626
|
const options = schema._def.options;
|
|
1548
|
-
return coerceToUnion(value, options, (index, v, t) => coerceValue(options[index], v, t), tracker);
|
|
1627
|
+
return coerceToUnion(value, options, (index, v, t) => coerceValue(options[index], v, t, report, path), tracker);
|
|
1549
1628
|
}
|
|
1550
1629
|
if (typeName === ZodType.INTERSECTION) {
|
|
1551
1630
|
const left = schema._def.left;
|
|
1552
1631
|
const right = schema._def.right;
|
|
1553
|
-
return coerceToIntersection(value, left, right, (v, t) => coerceValue(left, v, t), (v, t) => coerceValue(right, v, t), tracker);
|
|
1632
|
+
return coerceToIntersection(value, left, right, (v, t) => coerceValue(left, v, t, report, path), (v, t) => coerceValue(right, v, t, report, path), tracker);
|
|
1554
1633
|
}
|
|
1555
1634
|
if (typeName === ZodType.MAP) {
|
|
1556
1635
|
const keyType = schema._def.keyType;
|
|
1557
1636
|
const valueType = schema._def.valueType;
|
|
1558
|
-
|
|
1637
|
+
const coerced = coerceToMap(value, keyType, valueType, (v, t) => coerceValue(keyType, v, t), (v, t) => coerceValue(valueType, v, t), tracker);
|
|
1638
|
+
recordContainerChange(report, path, value, coerced);
|
|
1639
|
+
return coerced;
|
|
1559
1640
|
}
|
|
1560
1641
|
if (typeName === ZodType.SET) {
|
|
1561
|
-
|
|
1642
|
+
const coerced = coerceSetSchema(value, schema, tracker, report, path);
|
|
1643
|
+
recordContainerChange(report, path, value, coerced);
|
|
1644
|
+
return coerced;
|
|
1562
1645
|
}
|
|
1563
1646
|
return value;
|
|
1564
1647
|
}
|
|
1565
|
-
function coerceSetSchema(value, schema, tracker) {
|
|
1648
|
+
function coerceSetSchema(value, schema, tracker, report, path = []) {
|
|
1566
1649
|
const valueType = schema._def.valueType;
|
|
1567
|
-
return coerceToSet(value, valueType, (v, t) => coerceValue(valueType, v, t), tracker);
|
|
1650
|
+
return coerceToSet(value, valueType, (v, t) => coerceValue(valueType, v, t, report, path), tracker);
|
|
1568
1651
|
}
|
|
1569
|
-
function coerceCustomSchema(schema, value, tracker) {
|
|
1652
|
+
function coerceCustomSchema(schema, value, tracker, report, path = []) {
|
|
1570
1653
|
const defData = schema._def;
|
|
1571
1654
|
const predicate = typeof defData?.fn === "function" ? defData.fn : null;
|
|
1572
1655
|
if (!predicate) {
|
|
1573
1656
|
return value;
|
|
1574
1657
|
}
|
|
1575
1658
|
const attempts = [
|
|
1576
|
-
() => value,
|
|
1577
|
-
() => coerceToDate(value),
|
|
1578
|
-
() => coerceToNumber(value),
|
|
1579
|
-
() => coerceToBigInt(value),
|
|
1580
|
-
() => coerceToBoolean(value),
|
|
1581
|
-
() => coerceToString(value, tracker)
|
|
1659
|
+
{ via: "custom", attempt: () => value },
|
|
1660
|
+
{ via: "date", attempt: () => coerceToDate(value) },
|
|
1661
|
+
{ via: "number", attempt: () => coerceToNumber(value) },
|
|
1662
|
+
{ via: "bigint", attempt: () => coerceToBigInt(value) },
|
|
1663
|
+
{ via: "boolean", attempt: () => coerceToBoolean(value) },
|
|
1664
|
+
{ via: "string", attempt: () => coerceToString(value, tracker) }
|
|
1582
1665
|
];
|
|
1583
|
-
for (const attempt of attempts) {
|
|
1666
|
+
for (const { attempt, via } of attempts) {
|
|
1584
1667
|
let coerced;
|
|
1585
1668
|
try {
|
|
1586
1669
|
coerced = attempt();
|
|
@@ -1589,6 +1672,7 @@ function coerceCustomSchema(schema, value, tracker) {
|
|
|
1589
1672
|
}
|
|
1590
1673
|
try {
|
|
1591
1674
|
if (predicate(coerced)) {
|
|
1675
|
+
recordChange(report, path, value, coerced, `custom:${via}`);
|
|
1592
1676
|
return coerced;
|
|
1593
1677
|
}
|
|
1594
1678
|
} catch {
|
|
@@ -1597,27 +1681,134 @@ function coerceCustomSchema(schema, value, tracker) {
|
|
|
1597
1681
|
}
|
|
1598
1682
|
return value;
|
|
1599
1683
|
}
|
|
1684
|
+
function isZodSchema(value) {
|
|
1685
|
+
return typeof value === "object" && value !== null && typeof value.safeParse === "function";
|
|
1686
|
+
}
|
|
1687
|
+
function normalizeSchema(schema) {
|
|
1688
|
+
return isZodSchema(schema) ? schema : z2.object(schema);
|
|
1689
|
+
}
|
|
1600
1690
|
function canonize(schema) {
|
|
1691
|
+
const normalizedSchema = normalizeSchema(schema);
|
|
1601
1692
|
const preprocessed = z2.preprocess((value) => {
|
|
1602
1693
|
try {
|
|
1603
|
-
return coerceValue(
|
|
1694
|
+
return coerceValue(normalizedSchema, value);
|
|
1604
1695
|
} catch (error) {
|
|
1605
1696
|
if (error instanceof Error && error.message.includes("Circular reference")) {
|
|
1606
1697
|
throw error;
|
|
1607
1698
|
}
|
|
1608
1699
|
return value;
|
|
1609
1700
|
}
|
|
1610
|
-
},
|
|
1701
|
+
}, normalizedSchema);
|
|
1611
1702
|
return preprocessed;
|
|
1612
1703
|
}
|
|
1704
|
+
function coerceWithReport(schema, value) {
|
|
1705
|
+
const normalizedSchema = normalizeSchema(schema);
|
|
1706
|
+
const report = { warnings: [], cost: 0 };
|
|
1707
|
+
let coerced;
|
|
1708
|
+
try {
|
|
1709
|
+
coerced = coerceValue(normalizedSchema, value, new CircularTracker, report);
|
|
1710
|
+
} catch (error) {
|
|
1711
|
+
if (error instanceof Error && error.message.includes("Circular reference")) {
|
|
1712
|
+
throw error;
|
|
1713
|
+
}
|
|
1714
|
+
coerced = value;
|
|
1715
|
+
}
|
|
1716
|
+
report.cost = report.warnings.length;
|
|
1717
|
+
return { value: coerced, report };
|
|
1718
|
+
}
|
|
1719
|
+
function safeParseWithReport(schema, value) {
|
|
1720
|
+
const normalizedSchema = normalizeSchema(schema);
|
|
1721
|
+
const { value: coerced, report } = coerceWithReport(normalizedSchema, value);
|
|
1722
|
+
const parsed = normalizedSchema.safeParse(coerced);
|
|
1723
|
+
if (parsed.success) {
|
|
1724
|
+
return {
|
|
1725
|
+
success: true,
|
|
1726
|
+
data: parsed.data,
|
|
1727
|
+
report
|
|
1728
|
+
};
|
|
1729
|
+
}
|
|
1730
|
+
return { success: false, error: parsed.error, report };
|
|
1731
|
+
}
|
|
1732
|
+
function createRepairHints(error, options = {}) {
|
|
1733
|
+
const rootLabel = options.rootLabel ?? "input";
|
|
1734
|
+
return error.issues.map((issue) => {
|
|
1735
|
+
const safePath = issue.path.filter((segment) => typeof segment === "string" || typeof segment === "number");
|
|
1736
|
+
const path = formatPath(safePath, rootLabel);
|
|
1737
|
+
return {
|
|
1738
|
+
path,
|
|
1739
|
+
message: issue.message,
|
|
1740
|
+
suggestion: buildSuggestion(issue, path)
|
|
1741
|
+
};
|
|
1742
|
+
});
|
|
1743
|
+
}
|
|
1744
|
+
function formatPath(path, rootLabel) {
|
|
1745
|
+
if (!path.length)
|
|
1746
|
+
return rootLabel;
|
|
1747
|
+
let result = "";
|
|
1748
|
+
for (const segment of path) {
|
|
1749
|
+
if (typeof segment === "number") {
|
|
1750
|
+
result += `[${segment}]`;
|
|
1751
|
+
continue;
|
|
1752
|
+
}
|
|
1753
|
+
result = result ? `${result}.${segment}` : segment;
|
|
1754
|
+
}
|
|
1755
|
+
return result;
|
|
1756
|
+
}
|
|
1757
|
+
function buildSuggestion(issue, pathLabel) {
|
|
1758
|
+
const issueData = issue;
|
|
1759
|
+
const expected = issueData?.expected;
|
|
1760
|
+
if (issue.code === "invalid_type") {
|
|
1761
|
+
if (/received undefined/i.test(issue.message)) {
|
|
1762
|
+
return `Add required field ${pathLabel}.`;
|
|
1763
|
+
}
|
|
1764
|
+
if (expected) {
|
|
1765
|
+
return `Provide a ${expected} for ${pathLabel}.`;
|
|
1766
|
+
}
|
|
1767
|
+
return `Provide a valid value for ${pathLabel}.`;
|
|
1768
|
+
}
|
|
1769
|
+
if (issue.code === "invalid_value" && Array.isArray(issueData?.values)) {
|
|
1770
|
+
return `Use one of ${issueData.values.join(", ")} for ${pathLabel}.`;
|
|
1771
|
+
}
|
|
1772
|
+
if (issue.code === "too_small") {
|
|
1773
|
+
const minimum = issueData?.minimum;
|
|
1774
|
+
if (issueData?.origin === "string") {
|
|
1775
|
+
return `Provide a longer string for ${pathLabel} (min ${minimum}).`;
|
|
1776
|
+
}
|
|
1777
|
+
if (issueData?.origin === "array") {
|
|
1778
|
+
return `Provide at least ${minimum} item(s) for ${pathLabel}.`;
|
|
1779
|
+
}
|
|
1780
|
+
if (issueData?.origin === "number") {
|
|
1781
|
+
return `Provide a number >= ${minimum} for ${pathLabel}.`;
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
if (issue.code === "too_big") {
|
|
1785
|
+
const maximum = issueData?.maximum;
|
|
1786
|
+
if (issueData?.origin === "string") {
|
|
1787
|
+
return `Provide a shorter string for ${pathLabel} (max ${maximum}).`;
|
|
1788
|
+
}
|
|
1789
|
+
if (issueData?.origin === "array") {
|
|
1790
|
+
return `Provide no more than ${maximum} item(s) for ${pathLabel}.`;
|
|
1791
|
+
}
|
|
1792
|
+
if (issueData?.origin === "number") {
|
|
1793
|
+
return `Provide a number <= ${maximum} for ${pathLabel}.`;
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
if (issue.code === "invalid_union") {
|
|
1797
|
+
return `Provide a value that matches one of the supported shapes for ${pathLabel}.`;
|
|
1798
|
+
}
|
|
1799
|
+
return issue.message;
|
|
1800
|
+
}
|
|
1613
1801
|
export {
|
|
1614
1802
|
unwrapSchema,
|
|
1803
|
+
safeParseWithReport,
|
|
1615
1804
|
getZodTypeName,
|
|
1805
|
+
createRepairHints,
|
|
1616
1806
|
createCanonizeSchema,
|
|
1617
1807
|
createCanonizePrimitive,
|
|
1808
|
+
coerceWithReport,
|
|
1618
1809
|
canonize,
|
|
1619
1810
|
ZodType,
|
|
1620
1811
|
CircularTracker
|
|
1621
1812
|
};
|
|
1622
1813
|
|
|
1623
|
-
//# debugId=
|
|
1814
|
+
//# debugId=C838E26F3AF618BD64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/utilities/circular.ts", "../src/utilities/parsers.ts", "../src/constants.ts", "../src/utilities/type-detection.ts", "../src/coercers/array.ts", "../src/utilities/special-methods.ts", "../src/coercers/bigint.ts", "../src/coercers/boolean.ts", "../src/coercers/number.ts", "../src/coercers/date.ts", "../src/coercers/discriminated-union.ts", "../src/coercers/enum.ts", "../src/coercers/intersection.ts", "../src/coercers/string.ts", "../src/coercers/literal.ts", "../src/coercers/map-set.ts", "../src/coercers/nan.ts", "../src/coercers/null.ts", "../src/coercers/object.ts", "../src/coercers/record.ts", "../src/coercers/tuple.ts", "../src/coercers/union.ts", "../src/create-schema.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import * as z from 'zod';\n\n// Collection coercers\nimport { coerceToArray } from './coercers/array.js';\nimport { coerceToBigInt } from './coercers/bigint.js';\nimport { coerceToBoolean } from './coercers/boolean.js';\nimport { coerceToDate } from './coercers/date.js';\nimport { coerceToDiscriminatedUnion } from './coercers/discriminated-union.js';\n// Special type coercers\nimport { coerceToEnum } from './coercers/enum.js';\nimport { coerceToIntersection } from './coercers/intersection.js';\nimport { coerceToLiteral } from './coercers/literal.js';\n// Map & Set coercers\nimport { coerceToMap, coerceToSet } from './coercers/map-set.js';\nimport { coerceToNaN } from './coercers/nan.js';\nimport { coerceToNull } from './coercers/null.js';\nimport { coerceToInt32, coerceToInteger, coerceToNumber } from './coercers/number.js';\nimport { coerceToObject } from './coercers/object.js';\nimport { coerceToRecord } from './coercers/record.js';\n// Primitive coercers\nimport { coerceToString } from './coercers/string.js';\nimport { coerceToTuple } from './coercers/tuple.js';\nimport { coerceToUnion } from './coercers/union.js';\nimport { ZodType } from './constants.js';\nimport { CircularTracker } from './utilities/circular.js';\nimport { getZodTypeName } from './utilities/type-detection.js';\n\n// Re-export utilities for advanced use cases\nexport { ZodType } from './constants.js';\nexport {\n type CanonizePrimitive,\n createCanonizePrimitive,\n createCanonizeSchema,\n} from './create-schema.js';\nexport { CircularTracker } from './utilities/circular.js';\nexport { getZodTypeName, unwrapSchema } from './utilities/type-detection.js';\n\n/**\n * Main coercion dispatcher\n */\nfunction coerceValue(\n schema: z.ZodTypeAny,\n value: unknown,\n tracker = new CircularTracker(),\n): unknown {\n const typeName = getZodTypeName(schema);\n\n // Handle wrappers first\n if (typeName === ZodType.OPTIONAL) {\n if (value === undefined) return undefined;\n return coerceValue((schema._def as any).innerType, value, tracker);\n }\n\n if (typeName === ZodType.NULLABLE) {\n if (value === null) return null;\n // Aggressive coercion: coerce empty string to null (prevents '' → {} for objects)\n if (value === '') {\n return null;\n }\n return coerceValue((schema._def as any).innerType, value, tracker);\n }\n\n if (typeName === ZodType.DEFAULT) {\n if (value === undefined) return (schema._def as any).defaultValue();\n return coerceValue((schema._def as any).innerType, value, tracker);\n }\n\n if (typeName === ZodType.CATCH) {\n // Just coerce the inner type and let Zod's native .catch() handle validation errors\n return coerceValue((schema._def as any).innerType, value, tracker);\n }\n\n if (typeName === ZodType.READONLY) {\n const result = coerceValue((schema._def as any).innerType, value, tracker);\n // Freeze the result\n if (typeof result === 'object' && result !== null) {\n return Object.freeze(result);\n }\n return result;\n }\n\n if (typeName === ZodType.LAZY) {\n const lazySchema = (schema._def as any).getter();\n return coerceValue(lazySchema, value, tracker);\n }\n\n // Primitive types\n if (typeName === ZodType.STRING) {\n return coerceToString(value, tracker);\n }\n\n if (typeName === ZodType.NUMBER) {\n const num = coerceToNumber(value);\n\n // Check for Zod v4 number format\n const defData = schema._def as any;\n if (defData.check === 'number_format' && defData.format === 'safeint') {\n // z.int() - safe integer\n return coerceToInteger(num);\n }\n if (defData.check === 'number_format' && defData.format === 'int32') {\n // z.int32() - 32-bit integer\n return coerceToInt32(num);\n }\n\n return num;\n }\n\n if (typeName === ZodType.BOOLEAN) {\n return coerceToBoolean(value);\n }\n\n if (typeName === ZodType.DATE) {\n return coerceToDate(value);\n }\n\n if (typeName === ZodType.BIGINT) {\n return coerceToBigInt(value);\n }\n\n if (typeName === ZodType.NULL) {\n return coerceToNull(value);\n }\n\n if (typeName === ZodType.NAN) {\n return coerceToNaN(value);\n }\n\n if (typeName === ZodType.ANY || typeName === ZodType.UNKNOWN) {\n // Pass through as-is\n return value;\n }\n\n if (typeName === ZodType.CUSTOM) {\n return coerceCustomSchema(schema, value, tracker);\n }\n\n if (typeName === ZodType.NEVER) {\n throw new Error('Cannot coerce to never type');\n }\n\n // Array\n if (typeName === ZodType.ARRAY) {\n const elementSchema = (schema._def as any).element;\n return coerceToArray(\n value,\n elementSchema,\n (v, t) => coerceValue(elementSchema, v, t),\n tracker,\n );\n }\n\n // Object\n if (typeName === ZodType.OBJECT) {\n const shape = (schema._def as any).shape;\n return coerceToObject(\n value,\n shape,\n (key, v, t) => {\n if (key in shape) {\n return coerceValue(shape[key], v, t);\n }\n return v;\n },\n tracker,\n );\n }\n\n // Tuple\n if (typeName === ZodType.TUPLE) {\n const items = (schema._def as any).items;\n return coerceToTuple(\n value,\n items,\n (index, v, t) => coerceValue(items[index], v, t),\n tracker,\n );\n }\n\n // Record\n if (typeName === ZodType.RECORD) {\n const valueType = (schema._def as any).valueType;\n return coerceToRecord(\n value,\n valueType,\n (v, t) => coerceValue(valueType, v, t),\n tracker,\n );\n }\n\n // Enum\n if (typeName === ZodType.ENUM) {\n const defData = schema._def as any;\n const entries = defData.entries;\n\n // Determine if this is a numeric enum by checking if any value is a number\n const allValues = Object.values(entries);\n const hasNumbers = allValues.some((v) => typeof v === 'number');\n\n // For numeric enums, Zod only validates against the numeric values\n // Filter to only numeric values if it's a numeric enum\n const validValues = hasNumbers\n ? allValues.filter((v) => typeof v === 'number')\n : Array.from(new Set(allValues));\n\n return coerceToEnum(value, validValues, entries);\n }\n\n // Literal\n if (typeName === ZodType.LITERAL) {\n const defData = schema._def as any;\n const literalValue = defData.values[0];\n return coerceToLiteral(value, literalValue);\n }\n\n // Discriminated Union (check before regular union, as discriminated unions have type === \"union\" in Zod v4)\n if (typeName === ZodType.UNION && (schema._def as any).discriminator) {\n const discriminator = (schema._def as any).discriminator;\n const options = (schema._def as any).options;\n return coerceToDiscriminatedUnion(\n value,\n discriminator,\n options,\n (index, v, t) => coerceValue(options[index], v, t),\n tracker,\n );\n }\n\n // Union\n if (typeName === ZodType.UNION) {\n const options = (schema._def as any).options;\n return coerceToUnion(\n value,\n options,\n (index, v, t) => coerceValue(options[index], v, t),\n tracker,\n );\n }\n\n // Intersection\n if (typeName === ZodType.INTERSECTION) {\n const left = (schema._def as any).left;\n const right = (schema._def as any).right;\n return coerceToIntersection(\n value,\n left,\n right,\n (v, t) => coerceValue(left, v, t),\n (v, t) => coerceValue(right, v, t),\n tracker,\n );\n }\n\n // Map\n if (typeName === ZodType.MAP) {\n const keyType = (schema._def as any).keyType;\n const valueType = (schema._def as any).valueType;\n return coerceToMap(\n value,\n keyType,\n valueType,\n (v, t) => coerceValue(keyType, v, t),\n (v, t) => coerceValue(valueType, v, t),\n tracker,\n );\n }\n\n // Set\n if (typeName === ZodType.SET) {\n return coerceSetSchema(value, schema, tracker);\n }\n\n // Fallback: return as-is\n return value;\n}\n\nfunction coerceSetSchema(value: unknown, schema: z.ZodTypeAny, tracker: CircularTracker) {\n const valueType = (schema._def as any).valueType;\n return coerceToSet(value, valueType, (v, t) => coerceValue(valueType, v, t), tracker);\n}\n\nfunction coerceCustomSchema(\n schema: z.ZodTypeAny,\n value: unknown,\n tracker: CircularTracker,\n) {\n const defData = schema._def as any;\n const predicate = typeof defData?.fn === 'function' ? defData.fn : null;\n\n if (!predicate) {\n return value;\n }\n\n const attempts: Array<() => unknown> = [\n () => value,\n () => coerceToDate(value),\n () => coerceToNumber(value),\n () => coerceToBigInt(value),\n () => coerceToBoolean(value),\n () => coerceToString(value, tracker),\n ];\n\n for (const attempt of attempts) {\n let coerced: unknown;\n\n try {\n coerced = attempt();\n } catch {\n continue;\n }\n\n try {\n if (predicate(coerced)) {\n return coerced;\n }\n } catch {\n continue;\n }\n }\n\n return value;\n}\n\nexport type CanonizeSchema<T extends z.ZodTypeAny> = T & {};\n\n/**\n * Wrap a Zod schema with aggressive type coercion.\n *\n * This is the main export of the canonize library. It takes any Zod schema\n * and returns a new schema that will automatically coerce inputs to the\n * expected types before validation.\n *\n * @example\n * ```typescript\n * import { canonize } from 'canonize';\n * import { z } from 'zod';\n *\n * const schema = canonize(z.object({\n * name: z.string(),\n * age: z.number(),\n * active: z.boolean()\n * }));\n *\n * // All of these will succeed:\n * schema.parse({ name: 'Alice', age: '30', active: 'yes' });\n * schema.parse({ name: 123, age: 30, active: 1 });\n * schema.parse({ name: ['Alice'], age: '30.5', active: 'true' });\n * ```\n *\n * Overloads preserve specific Zod types (e.g., ZodObject) so callers\n * retain exact schema types without needing casts.\n */\n// Object\nexport function canonize<T extends z.ZodObject<any>>(schema: T): T;\n// Array\nexport function canonize<T extends z.ZodArray<any>>(schema: T): T;\n// Record\nexport function canonize<T extends z.ZodRecord<any, any>>(schema: T): T;\n// Tuple\nexport function canonize<T extends z.ZodTuple<any, any>>(schema: T): T;\n// Map\nexport function canonize<T extends z.ZodMap<any, any>>(schema: T): T;\n// Set\nexport function canonize<T extends z.ZodSet<any>>(schema: T): T;\n// Union\nexport function canonize<T extends z.ZodUnion<any>>(schema: T): T;\n// Discriminated Union\nexport function canonize<T extends z.ZodDiscriminatedUnion<any, any>>(schema: T): T;\n// Intersection\nexport function canonize<T extends z.ZodIntersection<any, any>>(schema: T): T;\n// Primitives\nexport function canonize<T extends z.ZodString>(schema: T): T;\nexport function canonize<T extends z.ZodNumber>(schema: T): T;\nexport function canonize<T extends z.ZodBoolean>(schema: T): T;\nexport function canonize<T extends z.ZodBigInt>(schema: T): T;\nexport function canonize<T extends z.ZodDate>(schema: T): T;\nexport function canonize<T extends z.ZodNull>(schema: T): T;\nexport function canonize<T extends z.ZodNaN>(schema: T): T;\nexport function canonize<T extends z.ZodTypeAny>(schema: T): CanonizeSchema<T>;\nexport function canonize<T extends z.ZodTypeAny>(schema: T): CanonizeSchema<T> {\n // Use preprocess to coerce BEFORE validation\n const preprocessed = z.preprocess((value) => {\n try {\n return coerceValue(schema, value);\n } catch (error) {\n // Re-throw circular reference errors\n if (error instanceof Error && error.message.includes('Circular reference')) {\n throw error;\n }\n // For other coercion failures, return the original value\n // and let Zod validation handle it\n return value;\n }\n }, schema);\n\n return preprocessed as any as CanonizeSchema<T>;\n}\n",
|
|
5
|
+
"import * as z from 'zod';\n\n// Collection coercers\nimport { coerceToArray } from './coercers/array.js';\nimport { coerceToBigInt } from './coercers/bigint.js';\nimport { coerceToBoolean } from './coercers/boolean.js';\nimport { coerceToDate } from './coercers/date.js';\nimport { coerceToDiscriminatedUnion } from './coercers/discriminated-union.js';\n// Special type coercers\nimport { coerceToEnum } from './coercers/enum.js';\nimport { coerceToIntersection } from './coercers/intersection.js';\nimport { coerceToLiteral } from './coercers/literal.js';\n// Map & Set coercers\nimport { coerceToMap, coerceToSet } from './coercers/map-set.js';\nimport { coerceToNaN } from './coercers/nan.js';\nimport { coerceToNull } from './coercers/null.js';\nimport { coerceToInt32, coerceToInteger, coerceToNumber } from './coercers/number.js';\nimport { coerceToObject } from './coercers/object.js';\nimport { coerceToRecord } from './coercers/record.js';\n// Primitive coercers\nimport { coerceToString } from './coercers/string.js';\nimport { coerceToTuple } from './coercers/tuple.js';\nimport { coerceToUnion } from './coercers/union.js';\nimport { ZodType } from './constants.js';\nimport { CircularTracker } from './utilities/circular.js';\nimport { getZodTypeName } from './utilities/type-detection.js';\n\n// Re-export utilities for advanced use cases\nexport { ZodType } from './constants.js';\nexport {\n type CanonizePrimitive,\n createCanonizePrimitive,\n createCanonizeSchema,\n} from './create-schema.js';\nexport { CircularTracker } from './utilities/circular.js';\nexport { getZodTypeName, unwrapSchema } from './utilities/type-detection.js';\n\nexport type CanonizePath = Array<string | number>;\n\nexport type CanonizeWarningCode = 'coerced' | 'defaulted' | 'parsed';\n\nexport type CanonizeWarning = {\n path: CanonizePath;\n code: CanonizeWarningCode;\n from: unknown;\n to: unknown;\n via: string;\n};\n\nexport type CanonizeReport = {\n warnings: CanonizeWarning[];\n cost: number;\n};\n\nexport type CanonizeSafeParseResult<T> =\n | { success: true; data: T; report: CanonizeReport }\n | { success: false; error: z.ZodError; report: CanonizeReport };\n\nexport type CanonizeRepairHint = {\n path: string;\n message: string;\n suggestion: string;\n};\n\nfunction getKind(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Map) return 'map';\n if (value instanceof Set) return 'set';\n if (value instanceof Date) return 'date';\n return typeof value;\n}\n\nfunction recordChange(\n report: CanonizeReport | undefined,\n path: CanonizePath,\n from: unknown,\n to: unknown,\n via: string,\n code: CanonizeWarningCode = 'coerced',\n) {\n if (!report) return;\n if (Object.is(from, to)) return;\n report.warnings.push({ path: [...path], code, from, to, via });\n}\n\nfunction recordContainerChange(\n report: CanonizeReport | undefined,\n path: CanonizePath,\n from: unknown,\n to: unknown,\n) {\n if (!report) return;\n const fromKind = getKind(from);\n const toKind = getKind(to);\n if (fromKind === toKind) return;\n const code: CanonizeWarningCode =\n fromKind === 'string' && ['array', 'object', 'map', 'set'].includes(toKind)\n ? 'parsed'\n : 'coerced';\n report.warnings.push({\n path: [...path],\n code,\n from,\n to,\n via: `${fromKind}->${toKind}`,\n });\n}\n\n/**\n * Main coercion dispatcher\n */\nfunction coerceValue(\n schema: z.ZodTypeAny,\n value: unknown,\n tracker = new CircularTracker(),\n report?: CanonizeReport,\n path: CanonizePath = [],\n): unknown {\n const typeName = getZodTypeName(schema);\n\n if (typeName === 'pipe') {\n const outSchema = (schema._def as any)?.out ?? (schema._def as any)?.schema;\n if (outSchema) {\n return coerceValue(outSchema, value, tracker, report, path);\n }\n }\n\n // Handle wrappers first\n if (typeName === ZodType.OPTIONAL) {\n if (value === undefined) return undefined;\n return coerceValue((schema._def as any).innerType, value, tracker, report, path);\n }\n\n if (typeName === ZodType.NULLABLE) {\n if (value === null) return null;\n // Aggressive coercion: coerce empty string to null (prevents '' → {} for objects)\n if (value === '') {\n const coerced = null;\n recordChange(report, path, value, coerced, 'empty-string->null');\n return coerced;\n }\n return coerceValue((schema._def as any).innerType, value, tracker, report, path);\n }\n\n if (typeName === ZodType.DEFAULT) {\n if (value === undefined) {\n const defaultValue = (schema._def as any).defaultValue();\n recordChange(report, path, value, defaultValue, 'default', 'defaulted');\n return defaultValue;\n }\n return coerceValue((schema._def as any).innerType, value, tracker, report, path);\n }\n\n if (typeName === ZodType.CATCH) {\n // Just coerce the inner type and let Zod's native .catch() handle validation errors\n return coerceValue((schema._def as any).innerType, value, tracker, report, path);\n }\n\n if (typeName === ZodType.READONLY) {\n const result = coerceValue(\n (schema._def as any).innerType,\n value,\n tracker,\n report,\n path,\n );\n // Freeze the result\n if (typeof result === 'object' && result !== null) {\n return Object.freeze(result);\n }\n return result;\n }\n\n if (typeName === ZodType.LAZY) {\n const lazySchema = (schema._def as any).getter();\n return coerceValue(lazySchema, value, tracker, report, path);\n }\n\n // Primitive types\n if (typeName === ZodType.STRING) {\n const coerced = coerceToString(value, tracker);\n recordChange(report, path, value, coerced, `${getKind(value)}->string`);\n return coerced;\n }\n\n if (typeName === ZodType.NUMBER) {\n const num = coerceToNumber(value);\n let result = num;\n\n // Check for Zod v4 number format\n const defData = schema._def as any;\n if (defData.check === 'number_format' && defData.format === 'safeint') {\n // z.int() - safe integer\n result = coerceToInteger(num);\n recordChange(report, path, value, result, `${getKind(value)}->number`);\n return result;\n }\n if (defData.check === 'number_format' && defData.format === 'int32') {\n // z.int32() - 32-bit integer\n result = coerceToInt32(num);\n recordChange(report, path, value, result, `${getKind(value)}->number`);\n return result;\n }\n\n recordChange(report, path, value, result, `${getKind(value)}->number`);\n return result;\n }\n\n if (typeName === ZodType.BOOLEAN) {\n const coerced = coerceToBoolean(value);\n recordChange(report, path, value, coerced, `${getKind(value)}->boolean`);\n return coerced;\n }\n\n if (typeName === ZodType.DATE) {\n const coerced = coerceToDate(value);\n recordChange(report, path, value, coerced, `${getKind(value)}->date`);\n return coerced;\n }\n\n if (typeName === ZodType.BIGINT) {\n const coerced = coerceToBigInt(value);\n recordChange(report, path, value, coerced, `${getKind(value)}->bigint`);\n return coerced;\n }\n\n if (typeName === ZodType.NULL) {\n const coerced = coerceToNull(value);\n recordChange(report, path, value, coerced, `${getKind(value)}->null`);\n return coerced;\n }\n\n if (typeName === ZodType.NAN) {\n const coerced = coerceToNaN(value);\n recordChange(report, path, value, coerced, `${getKind(value)}->nan`);\n return coerced;\n }\n\n if (typeName === ZodType.ANY || typeName === ZodType.UNKNOWN) {\n // Pass through as-is\n return value;\n }\n\n if (typeName === ZodType.CUSTOM) {\n return coerceCustomSchema(schema, value, tracker, report, path);\n }\n\n if (typeName === ZodType.NEVER) {\n throw new Error('Cannot coerce to never type');\n }\n\n // Array\n if (typeName === ZodType.ARRAY) {\n const elementSchema = (schema._def as any).element;\n const coerced = coerceToArray(\n value,\n elementSchema,\n (index, v, t) => coerceValue(elementSchema, v, t, report, [...path, index]),\n tracker,\n );\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Object\n if (typeName === ZodType.OBJECT) {\n const shape = (schema._def as any).shape;\n const coerced = coerceToObject(\n value,\n shape,\n (key, v, t) => {\n if (key in shape) {\n return coerceValue(shape[key], v, t, report, [...path, key]);\n }\n return v;\n },\n tracker,\n );\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Tuple\n if (typeName === ZodType.TUPLE) {\n const items = (schema._def as any).items;\n const coerced = coerceToTuple(\n value,\n items,\n (index, v, t) => coerceValue(items[index], v, t, report, [...path, index]),\n tracker,\n );\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Record\n if (typeName === ZodType.RECORD) {\n const valueType = (schema._def as any).valueType;\n const coerced = coerceToRecord(\n value,\n valueType,\n (key, v, t) => coerceValue(valueType, v, t, report, [...path, key]),\n tracker,\n );\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Enum\n if (typeName === ZodType.ENUM) {\n const defData = schema._def as any;\n const entries = defData.entries;\n\n // Determine if this is a numeric enum by checking if any value is a number\n const allValues = Object.values(entries);\n const hasNumbers = allValues.some((v) => typeof v === 'number');\n\n // For numeric enums, Zod only validates against the numeric values\n // Filter to only numeric values if it's a numeric enum\n const validValues = hasNumbers\n ? allValues.filter((v) => typeof v === 'number')\n : Array.from(new Set(allValues));\n\n const coerced = coerceToEnum(value, validValues, entries);\n recordChange(report, path, value, coerced, `${getKind(value)}->enum`);\n return coerced;\n }\n\n // Literal\n if (typeName === ZodType.LITERAL) {\n const defData = schema._def as any;\n const literalValue = defData.values[0];\n const coerced = coerceToLiteral(value, literalValue);\n recordChange(report, path, value, coerced, `${getKind(value)}->literal`);\n return coerced;\n }\n\n // Discriminated Union (check before regular union, as discriminated unions have type === \"union\" in Zod v4)\n if (typeName === ZodType.UNION && (schema._def as any).discriminator) {\n const discriminator = (schema._def as any).discriminator;\n const options = (schema._def as any).options;\n return coerceToDiscriminatedUnion(\n value,\n discriminator,\n options,\n (index, v, t) => coerceValue(options[index], v, t, report, path),\n tracker,\n );\n }\n\n // Union\n if (typeName === ZodType.UNION) {\n const options = (schema._def as any).options;\n return coerceToUnion(\n value,\n options,\n (index, v, t) => coerceValue(options[index], v, t, report, path),\n tracker,\n );\n }\n\n // Intersection\n if (typeName === ZodType.INTERSECTION) {\n const left = (schema._def as any).left;\n const right = (schema._def as any).right;\n return coerceToIntersection(\n value,\n left,\n right,\n (v, t) => coerceValue(left, v, t, report, path),\n (v, t) => coerceValue(right, v, t, report, path),\n tracker,\n );\n }\n\n // Map\n if (typeName === ZodType.MAP) {\n const keyType = (schema._def as any).keyType;\n const valueType = (schema._def as any).valueType;\n const coerced = coerceToMap(\n value,\n keyType,\n valueType,\n (v, t) => coerceValue(keyType, v, t),\n (v, t) => coerceValue(valueType, v, t),\n tracker,\n );\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Set\n if (typeName === ZodType.SET) {\n const coerced = coerceSetSchema(value, schema, tracker, report, path);\n recordContainerChange(report, path, value, coerced);\n return coerced;\n }\n\n // Fallback: return as-is\n return value;\n}\n\nfunction coerceSetSchema(\n value: unknown,\n schema: z.ZodTypeAny,\n tracker: CircularTracker,\n report?: CanonizeReport,\n path: CanonizePath = [],\n) {\n const valueType = (schema._def as any).valueType;\n return coerceToSet(\n value,\n valueType,\n (v, t) => coerceValue(valueType, v, t, report, path),\n tracker,\n );\n}\n\nfunction coerceCustomSchema(\n schema: z.ZodTypeAny,\n value: unknown,\n tracker: CircularTracker,\n report?: CanonizeReport,\n path: CanonizePath = [],\n) {\n const defData = schema._def as any;\n const predicate = typeof defData?.fn === 'function' ? defData.fn : null;\n\n if (!predicate) {\n return value;\n }\n\n const attempts: Array<{ via: string; attempt: () => unknown }> = [\n { via: 'custom', attempt: () => value },\n { via: 'date', attempt: () => coerceToDate(value) },\n { via: 'number', attempt: () => coerceToNumber(value) },\n { via: 'bigint', attempt: () => coerceToBigInt(value) },\n { via: 'boolean', attempt: () => coerceToBoolean(value) },\n { via: 'string', attempt: () => coerceToString(value, tracker) },\n ];\n\n for (const { attempt, via } of attempts) {\n let coerced: unknown;\n\n try {\n coerced = attempt();\n } catch {\n continue;\n }\n\n try {\n if (predicate(coerced)) {\n recordChange(report, path, value, coerced, `custom:${via}`);\n return coerced;\n }\n } catch {\n continue;\n }\n }\n\n return value;\n}\n\nexport type CanonizeSchema<T extends z.ZodTypeAny> = T & {};\n\nfunction isZodSchema(value: unknown): value is z.ZodTypeAny {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as any).safeParse === 'function'\n );\n}\n\ntype CanonizeNormalizedSchema<T extends z.ZodTypeAny | z.ZodRawShape> =\n T extends z.ZodTypeAny ? T : T extends z.ZodRawShape ? z.ZodObject<T> : z.ZodTypeAny;\n\nfunction normalizeSchema<T extends z.ZodTypeAny | z.ZodRawShape>(\n schema: T,\n): CanonizeNormalizedSchema<T> {\n return (isZodSchema(schema) ? schema : z.object(schema)) as CanonizeNormalizedSchema<T>;\n}\n\n/**\n * Wrap a Zod schema with aggressive type coercion.\n *\n * This is the main export of the canonize library. It takes any Zod schema\n * and returns a new schema that will automatically coerce inputs to the\n * expected types before validation.\n *\n * @example\n * ```typescript\n * import { canonize } from 'canonize';\n * import { z } from 'zod';\n *\n * const schema = canonize(z.object({\n * name: z.string(),\n * age: z.number(),\n * active: z.boolean()\n * }));\n *\n * // All of these will succeed:\n * schema.parse({ name: 'Alice', age: '30', active: 'yes' });\n * schema.parse({ name: 123, age: 30, active: 1 });\n * schema.parse({ name: ['Alice'], age: '30.5', active: 'true' });\n * ```\n *\n * Overloads preserve specific Zod types (e.g., ZodObject) so callers\n * retain exact schema types without needing casts.\n */\n// Raw shape\nexport function canonize<T extends z.ZodRawShape>(schema: T): z.ZodObject<T>;\n// Object\nexport function canonize<T extends z.ZodObject<any>>(schema: T): T;\n// Array\nexport function canonize<T extends z.ZodArray<any>>(schema: T): T;\n// Record\nexport function canonize<T extends z.ZodRecord<any, any>>(schema: T): T;\n// Tuple\nexport function canonize<T extends z.ZodTuple<any, any>>(schema: T): T;\n// Map\nexport function canonize<T extends z.ZodMap<any, any>>(schema: T): T;\n// Set\nexport function canonize<T extends z.ZodSet<any>>(schema: T): T;\n// Union\nexport function canonize<T extends z.ZodUnion<any>>(schema: T): T;\n// Discriminated Union\nexport function canonize<T extends z.ZodDiscriminatedUnion<any, any>>(schema: T): T;\n// Intersection\nexport function canonize<T extends z.ZodIntersection<any, any>>(schema: T): T;\n// Primitives\nexport function canonize<T extends z.ZodString>(schema: T): T;\nexport function canonize<T extends z.ZodNumber>(schema: T): T;\nexport function canonize<T extends z.ZodBoolean>(schema: T): T;\nexport function canonize<T extends z.ZodBigInt>(schema: T): T;\nexport function canonize<T extends z.ZodDate>(schema: T): T;\nexport function canonize<T extends z.ZodNull>(schema: T): T;\nexport function canonize<T extends z.ZodNaN>(schema: T): T;\nexport function canonize<T extends z.ZodTypeAny>(schema: T): CanonizeSchema<T>;\nexport function canonize<T extends z.ZodTypeAny | z.ZodRawShape>(schema: T): any {\n const normalizedSchema = normalizeSchema(schema);\n\n // Use preprocess to coerce BEFORE validation\n const preprocessed = z.preprocess((value) => {\n try {\n return coerceValue(normalizedSchema, value);\n } catch (error) {\n // Re-throw circular reference errors\n if (error instanceof Error && error.message.includes('Circular reference')) {\n throw error;\n }\n // For other coercion failures, return the original value\n // and let Zod validation handle it\n return value;\n }\n }, normalizedSchema);\n\n return preprocessed as any;\n}\n\nexport function coerceWithReport<T extends z.ZodTypeAny | z.ZodRawShape>(\n schema: T,\n value: unknown,\n): { value: unknown; report: CanonizeReport } {\n const normalizedSchema = normalizeSchema(schema);\n const report: CanonizeReport = { warnings: [], cost: 0 };\n let coerced: unknown;\n\n try {\n coerced = coerceValue(normalizedSchema, value, new CircularTracker(), report);\n } catch (error) {\n if (error instanceof Error && error.message.includes('Circular reference')) {\n throw error;\n }\n coerced = value;\n }\n\n report.cost = report.warnings.length;\n return { value: coerced, report };\n}\n\nexport function safeParseWithReport<T extends z.ZodTypeAny | z.ZodRawShape>(\n schema: T,\n value: unknown,\n): CanonizeSafeParseResult<z.infer<CanonizeNormalizedSchema<T>>> {\n const normalizedSchema = normalizeSchema(schema);\n const { value: coerced, report } = coerceWithReport(normalizedSchema, value);\n const parsed = (normalizedSchema as z.ZodTypeAny).safeParse(coerced);\n\n if (parsed.success) {\n return {\n success: true,\n data: parsed.data as z.infer<CanonizeNormalizedSchema<T>>,\n report,\n };\n }\n return { success: false, error: parsed.error, report };\n}\n\nexport function createRepairHints(\n error: z.ZodError,\n options: { rootLabel?: string } = {},\n): CanonizeRepairHint[] {\n const rootLabel = options.rootLabel ?? 'input';\n return error.issues.map((issue) => {\n const safePath = issue.path.filter(\n (segment): segment is string | number =>\n typeof segment === 'string' || typeof segment === 'number',\n );\n const path = formatPath(safePath, rootLabel);\n return {\n path,\n message: issue.message,\n suggestion: buildSuggestion(issue, path),\n };\n });\n}\n\nfunction formatPath(path: CanonizePath, rootLabel: string): string {\n if (!path.length) return rootLabel;\n let result = '';\n for (const segment of path) {\n if (typeof segment === 'number') {\n result += `[${segment}]`;\n continue;\n }\n result = result ? `${result}.${segment}` : segment;\n }\n return result;\n}\n\nfunction buildSuggestion(issue: z.ZodIssue, pathLabel: string): string {\n const issueData = issue as any;\n const expected = issueData?.expected;\n\n if (issue.code === 'invalid_type') {\n if (/received undefined/i.test(issue.message)) {\n return `Add required field ${pathLabel}.`;\n }\n if (expected) {\n return `Provide a ${expected} for ${pathLabel}.`;\n }\n return `Provide a valid value for ${pathLabel}.`;\n }\n\n if (issue.code === 'invalid_value' && Array.isArray(issueData?.values)) {\n return `Use one of ${issueData.values.join(', ')} for ${pathLabel}.`;\n }\n\n if (issue.code === 'too_small') {\n const minimum = issueData?.minimum;\n if (issueData?.origin === 'string') {\n return `Provide a longer string for ${pathLabel} (min ${minimum}).`;\n }\n if (issueData?.origin === 'array') {\n return `Provide at least ${minimum} item(s) for ${pathLabel}.`;\n }\n if (issueData?.origin === 'number') {\n return `Provide a number >= ${minimum} for ${pathLabel}.`;\n }\n }\n\n if (issue.code === 'too_big') {\n const maximum = issueData?.maximum;\n if (issueData?.origin === 'string') {\n return `Provide a shorter string for ${pathLabel} (max ${maximum}).`;\n }\n if (issueData?.origin === 'array') {\n return `Provide no more than ${maximum} item(s) for ${pathLabel}.`;\n }\n if (issueData?.origin === 'number') {\n return `Provide a number <= ${maximum} for ${pathLabel}.`;\n }\n }\n\n if (issue.code === 'invalid_union') {\n return `Provide a value that matches one of the supported shapes for ${pathLabel}.`;\n }\n\n return issue.message;\n}\n",
|
|
6
6
|
"/**\n * Circular reference tracker using WeakSet\n */\nexport class CircularTracker {\n private seen = new WeakSet<object>();\n\n /**\n * Check if object has been seen before\n */\n has(obj: object): boolean {\n return this.seen.has(obj);\n }\n\n /**\n * Mark object as seen\n */\n add(obj: object): void {\n this.seen.add(obj);\n }\n\n /**\n * Create a child tracker (for nested coercion)\n */\n child(): CircularTracker {\n const child = new CircularTracker();\n // Copy parent's seen objects to child\n return child;\n }\n}\n\n/**\n * Check if a value can have circular references\n */\nexport function canBeCircular(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Throw error for circular reference\n */\nexport function throwCircular(): never {\n throw new Error('Circular reference detected');\n}\n",
|
|
7
7
|
"/**\n * Try to parse a JSON string\n */\nexport function tryParseJSON(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\n/**\n * Try to parse a delimited string to array (CSV, semicolon, pipe)\n */\nexport function tryParseCSV(value: string): string[] | null {\n // Try comma first\n if (value.includes(',')) {\n return value.split(',').map((s) => s.trim());\n }\n // Try semicolon\n if (value.includes(';')) {\n return value.split(';').map((s) => s.trim());\n }\n // Try pipe\n if (value.includes('|')) {\n return value.split('|').map((s) => s.trim());\n }\n return null;\n}\n\n/**\n * Try to parse a hex/octal/binary number string\n */\nexport function tryParseSpecialNumber(value: string): number | null {\n const trimmed = value.trim();\n\n // Hex: 0x or 0X\n if (/^0x[0-9a-f]+$/i.test(trimmed)) {\n return parseInt(trimmed, 16);\n }\n\n // Octal: 0o or 0O\n if (/^0o[0-7]+$/i.test(trimmed)) {\n return parseInt(trimmed.slice(2), 8);\n }\n\n // Binary: 0b or 0B\n if (/^0b[01]+$/i.test(trimmed)) {\n return parseInt(trimmed.slice(2), 2);\n }\n\n return null;\n}\n\n/**\n * Try to parse a string to number\n */\nexport function tryParseNumber(value: string): number | null {\n // Try special formats first\n const special = tryParseSpecialNumber(value);\n if (special !== null) return special;\n\n // Try regular number parsing\n const trimmed = value.trim();\n if (trimmed === '') return null;\n\n const num = Number(trimmed);\n if (isNaN(num)) return null;\n\n return num;\n}\n\n/**\n * Check if a string looks like a boolean\n */\nexport function isBooleanLikeString(value: string): boolean {\n const lower = value.trim().toLowerCase();\n return (\n lower === 'true' ||\n lower === 'false' ||\n lower === 'yes' ||\n lower === 'no' ||\n lower === 'on' ||\n lower === 'off' ||\n lower === 'y' ||\n lower === 'n' ||\n lower === 't' ||\n lower === 'f' ||\n lower === 'enabled' ||\n lower === 'disabled' ||\n lower === '1' ||\n lower === '0'\n );\n}\n\n/**\n * Normalize a string for case-insensitive comparison\n */\nexport function normalizeString(value: string): string {\n return value.trim().toLowerCase();\n}\n\n/**\n * Check if value is falsy for null coercion\n */\nexport function isFalsyForNull(value: unknown): boolean {\n if (value === null) return true;\n if (value === undefined) return true;\n if (value === false) return true;\n if (value === 0) return true;\n if (Object.is(value, -0)) return true;\n if (value === '') return true;\n if (typeof value === 'bigint' && value === 0n) return true;\n\n // String variations of null/undefined (case-insensitive)\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === 'null' || normalized === 'undefined') return true;\n }\n\n // Empty array\n if (Array.isArray(value) && value.length === 0) return true;\n\n // Empty object\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const keys = Object.keys(value);\n if (keys.length === 0) return true;\n }\n\n return false;\n}\n",
|
|
8
8
|
"// Boolean string values for stringbool logic\nexport const TRUTHY_STRINGS = ['true', 'yes', 'on', 'y', 't', 'enabled', '1'];\n\nexport const FALSY_STRINGS = ['false', 'no', 'off', 'n', 'f', 'disabled', '0'];\n\n// Zod type names for schema detection (Zod v4 uses lowercase types)\nexport const ZodType = {\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'boolean',\n DATE: 'date',\n BIGINT: 'bigint',\n NULL: 'null',\n UNDEFINED: 'undefined',\n NAN: 'nan',\n ARRAY: 'array',\n OBJECT: 'object',\n TUPLE: 'tuple',\n RECORD: 'record',\n ENUM: 'enum',\n NATIVE_ENUM: 'nativeEnum',\n LITERAL: 'literal',\n UNION: 'union',\n DISCRIMINATED_UNION: 'discriminatedUnion',\n INTERSECTION: 'intersection',\n MAP: 'map',\n SET: 'set',\n OPTIONAL: 'optional',\n NULLABLE: 'nullable',\n DEFAULT: 'default',\n CATCH: 'catch',\n LAZY: 'lazy',\n READONLY: 'readonly',\n BRANDED: 'branded',\n ANY: 'any',\n UNKNOWN: 'unknown',\n NEVER: 'never',\n CUSTOM: 'custom',\n} as const;\n",
|
|
9
9
|
"import * as z from 'zod';\n\nimport { ZodType } from '../constants.js';\n\n/**\n * Get the Zod type name from a schema (Zod v4 uses _def.type)\n */\nexport function getZodTypeName(schema: z.ZodTypeAny): string {\n const candidates = [\n (schema._def as any).type,\n (schema._def as any).typeName,\n (schema as any).type,\n ];\n const rawType = candidates.find((candidate) => typeof candidate === 'string') ?? '';\n\n const withoutPrefix = rawType.replace(/^Zod/i, '');\n const lower = withoutPrefix.toLowerCase();\n const mapped: Record<string, string> = {\n nativeenum: ZodType.NATIVE_ENUM,\n discriminatedunion: ZodType.DISCRIMINATED_UNION,\n };\n\n return mapped[lower] ?? lower;\n}\n\n/**\n * Check if a schema is a specific Zod type\n */\nexport function isZodType(schema: z.ZodTypeAny, typeName: string): boolean {\n return getZodTypeName(schema) === typeName;\n}\n\n/**\n * Unwrap a schema from optional/nullable/default/catch wrappers\n */\nexport function unwrapSchema(schema: z.ZodTypeAny): z.ZodTypeAny {\n const typeName = getZodTypeName(schema);\n\n if (typeName === ZodType.OPTIONAL || typeName === ZodType.NULLABLE) {\n return unwrapSchema((schema._def as any).innerType);\n }\n\n if (typeName === ZodType.DEFAULT) {\n return unwrapSchema((schema._def as any).innerType);\n }\n\n if (typeName === ZodType.CATCH) {\n return unwrapSchema((schema._def as any).innerType);\n }\n\n if (typeName === ZodType.READONLY) {\n return unwrapSchema((schema._def as any).innerType);\n }\n\n return schema;\n}\n\n/**\n * Check if value is a plain object (not Date, Array, Map, Set, etc.)\n */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n if (Array.isArray(value)) return false;\n if (value instanceof Date) return false;\n if (value instanceof Map) return false;\n if (value instanceof Set) return false;\n if (value instanceof RegExp) return false;\n if (value instanceof Error) return false;\n if (ArrayBuffer.isView(value)) return false; // TypedArrays\n\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Check if value is an array-like object\n */\nexport function isArrayLike(value: unknown): boolean {\n if (!isPlainObject(value)) return false;\n const obj = value;\n return typeof obj['length'] === 'number' && obj['length'] >= 0;\n}\n\n/**\n * Check if value is iterable\n */\nexport function isIterable(value: unknown): value is Iterable<unknown> {\n if (value == null) return false;\n return typeof (value as any)[Symbol.iterator] === 'function';\n}\n",
|
|
10
|
-
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseCSV, tryParseJSON } from '../utilities/parsers.js';\nimport { isArrayLike, isPlainObject } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to array with element type coercion\n */\nexport function coerceToArray(\n value: unknown,\n _elementSchema: z.ZodTypeAny,\n coerceElement: (v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): unknown[] {\n // null → empty array\n if (value === null) return [];\n\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Already an array\n if (Array.isArray(value)) {\n tracker.add(value);\n // Use for loop to preserve sparse arrays (holes)\n const result: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (i in value) {\n // Check for circular reference before coercing element\n if (canBeCircular(value[i]) && tracker.has(value[i])) {\n throwCircular();\n }\n result[i] = coerceElement(value[i], tracker);\n }\n // Leave holes as undefined (sparse)\n }\n return result;\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // String: try JSON, CSV, or single value\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → empty array\n if (trimmed === '') return [];\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (Array.isArray(json)) {\n return json.map((v) => coerceElement(v, tracker));\n }\n\n // Try CSV\n const csv = tryParseCSV(trimmed);\n if (csv) {\n return csv.map((v) => coerceElement(v, tracker));\n }\n\n // Single value\n return [coerceElement(trimmed, tracker)];\n }\n\n // Set → array\n if (value instanceof Set) {\n return Array.from(value).map((v) => coerceElement(v, tracker));\n }\n\n // Map → array of values\n if (value instanceof Map) {\n return Array.from(value.values()).map((v) => coerceElement(v, tracker));\n }\n\n // TypedArray → array\n if (ArrayBuffer.isView(value)) {\n return Array.from(value as any).map((v) => coerceElement(v, tracker));\n }\n\n // Array-like object → array\n if (isArrayLike(value)) {\n const obj = value as any;\n const length = obj.length;\n const result: unknown[] = [];\n for (let i = 0; i < length; i++) {\n if (i in obj) {\n result[i] = coerceElement(obj[i], tracker);\n }\n // Leave holes as undefined (sparse)\n }\n return result;\n }\n\n // Plain object → array of values\n if (isPlainObject(value)) {\n const values = Object.values(value);\n return values.map((v) => coerceElement(v, tracker));\n }\n\n // Single value → array with one element\n return [coerceElement(value, tracker)];\n}\n",
|
|
10
|
+
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseCSV, tryParseJSON } from '../utilities/parsers.js';\nimport { isArrayLike, isPlainObject } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to array with element type coercion\n */\nexport function coerceToArray(\n value: unknown,\n _elementSchema: z.ZodTypeAny,\n coerceElement: (index: number, v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): unknown[] {\n // null → empty array\n if (value === null) return [];\n\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Already an array\n if (Array.isArray(value)) {\n tracker.add(value);\n // Use for loop to preserve sparse arrays (holes)\n const result: unknown[] = [];\n for (let i = 0; i < value.length; i++) {\n if (i in value) {\n // Check for circular reference before coercing element\n if (canBeCircular(value[i]) && tracker.has(value[i])) {\n throwCircular();\n }\n result[i] = coerceElement(i, value[i], tracker);\n }\n // Leave holes as undefined (sparse)\n }\n return result;\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // String: try JSON, CSV, or single value\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → empty array\n if (trimmed === '') return [];\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (Array.isArray(json)) {\n return json.map((v, index) => coerceElement(index, v, tracker));\n }\n\n // Try CSV\n const csv = tryParseCSV(trimmed);\n if (csv) {\n return csv.map((v, index) => coerceElement(index, v, tracker));\n }\n\n // Single value\n return [coerceElement(0, trimmed, tracker)];\n }\n\n // Set → array\n if (value instanceof Set) {\n return Array.from(value).map((v, index) => coerceElement(index, v, tracker));\n }\n\n // Map → array of values\n if (value instanceof Map) {\n return Array.from(value.values()).map((v, index) => coerceElement(index, v, tracker));\n }\n\n // TypedArray → array\n if (ArrayBuffer.isView(value)) {\n return Array.from(value as any).map((v, index) => coerceElement(index, v, tracker));\n }\n\n // Array-like object → array\n if (isArrayLike(value)) {\n const obj = value as any;\n const length = obj.length;\n const result: unknown[] = [];\n for (let i = 0; i < length; i++) {\n if (i in obj) {\n result[i] = coerceElement(i, obj[i], tracker);\n }\n // Leave holes as undefined (sparse)\n }\n return result;\n }\n\n // Plain object → array of values\n if (isPlainObject(value)) {\n const values = Object.values(value);\n return values.map((v, index) => coerceElement(index, v, tracker));\n }\n\n // Single value → array with one element\n return [coerceElement(0, value, tracker)];\n}\n",
|
|
11
11
|
"/**\n * Try to extract a primitive value from an object using special methods\n * Priority: Symbol.toPrimitive > toJSON > toString > valueOf\n */\nexport function extractPrimitiveValue(\n value: unknown,\n hint: 'string' | 'number' | 'default' = 'default',\n): unknown {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n\n const obj = value as any;\n\n // Special case: Date objects should use toJSON (ISO string) for consistency\n if (value instanceof Date && typeof obj.toJSON === 'function') {\n try {\n return obj.toJSON();\n } catch {\n // Continue to next method\n }\n }\n\n // 1. Symbol.toPrimitive (highest priority for non-Date objects)\n if (Symbol.toPrimitive in obj) {\n try {\n return obj[Symbol.toPrimitive](hint);\n } catch {\n // Continue to next method\n }\n }\n\n // 2. toJSON\n if (typeof obj.toJSON === 'function') {\n try {\n return obj.toJSON();\n } catch {\n // Continue to next method\n }\n }\n\n // 3. toString (prefer for string hint)\n if (hint === 'string' && typeof obj.toString === 'function') {\n try {\n const result = obj.toString();\n if (result !== '[object Object]') {\n return result;\n }\n } catch {\n // Continue to next method\n }\n }\n\n // 4. valueOf\n if (typeof obj.valueOf === 'function') {\n try {\n const result = obj.valueOf();\n if (result !== obj) {\n // valueOf returned a primitive\n return result;\n }\n } catch {\n // Continue to next method\n }\n }\n\n // 5. toString as fallback\n if (hint !== 'string' && typeof obj.toString === 'function') {\n try {\n const result = obj.toString();\n if (result !== '[object Object]') {\n return result;\n }\n } catch {\n // Continue\n }\n }\n\n return value;\n}\n\n/**\n * Check if object has a specific special method\n */\nexport function hasSpecialMethod(value: unknown, method: string): boolean {\n if (typeof value !== 'object' || value === null) return false;\n return typeof (value as any)[method] === 'function';\n}\n\n/**\n * Try to get a Date value from an object using getTime() or toISOString()\n */\nexport function extractDateValue(value: unknown): Date | null {\n if (value instanceof Date) return value;\n if (typeof value !== 'object' || value === null) return null;\n\n const obj = value as any;\n\n // Try getTime() method\n if (typeof obj.getTime === 'function') {\n try {\n const time = obj.getTime();\n if (typeof time === 'number' && !isNaN(time)) {\n return new Date(time);\n }\n } catch {\n // Continue\n }\n }\n\n // Try toISOString() method\n if (typeof obj.toISOString === 'function') {\n try {\n const iso = obj.toISOString();\n const date = new Date(iso);\n if (!isNaN(date.getTime())) {\n return date;\n }\n } catch {\n // Continue\n }\n }\n\n return null;\n}\n",
|
|
12
12
|
"import { tryParseJSON } from '../utilities/parsers.js';\nimport { extractPrimitiveValue } from '../utilities/special-methods.js';\n\n/**\n * Coerce any value to BigInt\n */\nexport function coerceToBigInt(value: unknown): bigint {\n // Already a BigInt\n if (typeof value === 'bigint') return value;\n\n // Function/Symbol cannot be coerced to BigInt\n if (typeof value === 'function') {\n throw new Error('Cannot convert function to BigInt');\n }\n if (typeof value === 'symbol') {\n throw new Error('Cannot convert symbol to BigInt');\n }\n\n // Number\n if (typeof value === 'number') {\n // NaN, Infinity not allowed\n if (!isFinite(value)) {\n throw new Error('Cannot convert NaN or Infinity to BigInt');\n }\n\n // Truncate to integer\n return BigInt(Math.trunc(value));\n }\n\n // Boolean\n if (typeof value === 'boolean') return value ? 1n : 0n;\n\n // String\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → 0n\n if (trimmed === '') return 0n;\n\n // Try parsing as BigInt\n try {\n return BigInt(trimmed);\n } catch {\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (json !== null) {\n return coerceToBigInt(json);\n }\n\n throw new Error(`Cannot convert \"${trimmed}\" to BigInt`);\n }\n }\n\n // Array\n if (Array.isArray(value)) {\n // Empty array → 0n\n if (value.length === 0) return 0n;\n\n // Single or multiple elements → coerce first element\n return coerceToBigInt(value[0]);\n }\n\n // null/undefined\n if (value === null) return 0n;\n if (value === undefined) {\n throw new Error('Cannot convert undefined to BigInt');\n }\n\n // Try special methods\n const extracted = extractPrimitiveValue(value, 'number');\n if (typeof extracted === 'bigint') return extracted;\n if (typeof extracted !== 'object' || extracted === null) {\n return coerceToBigInt(extracted);\n }\n\n throw new Error('Cannot convert object to BigInt');\n}\n",
|
|
13
13
|
"import { FALSY_STRINGS, TRUTHY_STRINGS } from '../constants.js';\nimport { normalizeString } from '../utilities/parsers.js';\nimport { extractPrimitiveValue } from '../utilities/special-methods.js';\n\n/**\n * Coerce any value to boolean\n */\nexport function coerceToBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'function' || typeof value === 'symbol') {\n return true;\n }\n\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value === 'number') {\n if (value === 0 || Object.is(value, -0) || isNaN(value)) {\n return false;\n }\n return true;\n }\n\n if (typeof value === 'bigint') {\n return value !== 0n;\n }\n\n if (typeof value === 'string') {\n const normalized = normalizeString(value);\n if (normalized === '') {\n return false;\n }\n if (TRUTHY_STRINGS.includes(normalized)) {\n return true;\n }\n if (FALSY_STRINGS.includes(normalized)) {\n return false;\n }\n throw new Error(`Cannot coerce string \"${value}\" to boolean`);\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return false;\n }\n if (value.length === 1) {\n return coerceToBoolean(value[0]);\n }\n return true;\n }\n\n const extracted = extractPrimitiveValue(value, 'default');\n if (typeof extracted === 'boolean') {\n return extracted;\n }\n if (typeof extracted !== 'object' || extracted === null) {\n return coerceToBoolean(extracted);\n }\n return Object.keys(value as Record<string, unknown>).length > 0;\n}\n",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"/**\n * Coerce value to NaN (only accepts values that should be NaN)\n */\nexport function coerceToNaN(value: unknown): number {\n // Already NaN\n if (typeof value === 'number' && isNaN(value)) return NaN;\n\n // undefined → NaN\n if (value === undefined) return NaN;\n\n // Functions and Symbols → NaN (align with Number(fn) => NaN; Number(symbol) throws, treat as NaN)\n if (typeof value === 'function') return NaN;\n if (typeof value === 'symbol') return NaN;\n\n // String \"NaN\" or \"nan\"\n if (typeof value === 'string') {\n const trimmed = value.trim().toLowerCase();\n if (trimmed === 'nan') return NaN;\n\n // Try parsing as number, if it results in NaN, return NaN\n const num = Number(trimmed);\n if (isNaN(num)) return NaN;\n\n // Valid number → throw\n throw new Error('Cannot coerce valid number to NaN');\n }\n\n // Array/object → try converting to number, if NaN return NaN\n if (Array.isArray(value) || typeof value === 'object') {\n const num = Number(value as any);\n if (isNaN(num)) return NaN;\n\n throw new Error('Cannot coerce valid value to NaN');\n }\n\n // Actual number (not NaN) → throw\n throw new Error('Cannot coerce valid value to NaN');\n}\n",
|
|
23
23
|
"import { isFalsyForNull } from '../utilities/parsers.js';\n\n/**\n * Coerce falsy values to null\n */\nexport function coerceToNull(value: unknown): null {\n // Already null\n if (value === null) return null;\n\n // Check if value is falsy for null coercion\n if (isFalsyForNull(value)) return null;\n\n // Non-falsy value → throw\n throw new Error('Cannot coerce non-falsy value to null');\n}\n",
|
|
24
24
|
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseJSON } from '../utilities/parsers.js';\nimport { extractPrimitiveValue } from '../utilities/special-methods.js';\nimport { isPlainObject } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to object with property type coercion\n */\nexport function coerceToObject(\n value: unknown,\n shape: z.ZodRawShape,\n coerceProperty: (key: string, v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): Record<string, unknown> {\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // Already a plain object\n if (isPlainObject(value)) {\n // Try special methods (toJSON, etc.) for plain objects\n const extracted = extractPrimitiveValue(value, 'default');\n if (extracted !== value) {\n // Special method returned something different, try coercing that\n return coerceToObject(extracted, shape, coerceProperty, tracker);\n }\n\n // Process as normal object\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = coerceProperty(key, val, tracker);\n }\n return result;\n }\n\n // String: try JSON parsing\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → empty object\n if (trimmed === '') return {};\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (isPlainObject(json)) {\n return coerceToObject(json, shape, coerceProperty, tracker);\n }\n\n // Can't convert string to object\n throw new Error('Cannot convert string to object');\n }\n\n // Array → object (check before other object types to avoid toString coercion)\n if (Array.isArray(value)) {\n // Empty array → empty object\n if (value.length === 0) return {};\n\n // Array of [key, value] pairs → object\n if (value.every((item) => Array.isArray(item) && item.length === 2)) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value) {\n const keyStr = String(key);\n result[keyStr] = coerceProperty(keyStr, val, tracker);\n }\n return result;\n }\n\n // Convert to object with numeric keys\n const result: Record<string, unknown> = {};\n value.forEach((val, i) => {\n const key = String(i);\n result[key] = coerceProperty(key, val, tracker);\n });\n return result;\n }\n\n // Map → object\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value.entries()) {\n const keyStr = String(key);\n result[keyStr] = coerceProperty(keyStr, val, tracker);\n }\n return result;\n }\n\n // Set → object with numeric indices\n if (value instanceof Set) {\n const result: Record<string, unknown> = {};\n let index = 0;\n for (const val of value) {\n const key = String(index);\n result[key] = coerceProperty(key, val, tracker);\n index++;\n }\n return result;\n }\n\n // null/undefined → empty object\n if (value === null || value === undefined) return {};\n\n // Other object types (Date, RegExp, etc.) → can't convert\n if (typeof value === 'object') {\n // Try to convert to plain object by enumerating properties\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = coerceProperty(key, (value as any)[key], tracker);\n }\n return result;\n }\n\n throw new Error('Cannot convert primitive to object');\n}\n",
|
|
25
|
-
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseJSON } from '../utilities/parsers.js';\nimport { isPlainObject } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to record (Record<K, V>) with value type coercion\n */\nexport function coerceToRecord(\n value: unknown,\n valueSchema: z.ZodTypeAny,\n coerceValue: (v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): Record<string, unknown> {\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // Already a plain object\n if (isPlainObject(value)) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[key] = coerceValue(val, tracker);\n }\n return result;\n }\n\n // String: try JSON parsing\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → empty object\n if (trimmed === '') return {};\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (isPlainObject(json)) {\n return coerceToRecord(json, valueSchema, coerceValue, tracker);\n }\n\n throw new Error('Cannot convert string to record');\n }\n\n // Array → record\n if (Array.isArray(value)) {\n // Empty array → empty record\n if (value.length === 0) return {};\n\n // Check if all elements are [key, value] pairs\n if (value.every((item) => Array.isArray(item) && item.length === 2)) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(key)] = coerceValue(val, tracker);\n }\n return result;\n }\n\n // Convert array to record with numeric keys\n const result: Record<string, unknown> = {};\n value.forEach((val, index) => {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(index)] = coerceValue(val, tracker);\n });\n return result;\n }\n\n // Map → record\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value.entries()) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(key)] = coerceValue(val, tracker);\n }\n return result;\n }\n\n // Set → record with numeric indices\n if (value instanceof Set) {\n const result: Record<string, unknown> = {};\n let index = 0;\n for (const val of value) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(index)] = coerceValue(val, tracker);\n index++;\n }\n return result;\n }\n\n // null/undefined → empty record\n if (value === null || value === undefined) return {};\n\n // Other object types → try to enumerate\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n const val = (value as any)[key];\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[key] = coerceValue(val, tracker);\n }\n return result;\n }\n\n throw new Error('Cannot convert primitive to record');\n}\n",
|
|
25
|
+
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseJSON } from '../utilities/parsers.js';\nimport { isPlainObject } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to record (Record<K, V>) with value type coercion\n */\nexport function coerceToRecord(\n value: unknown,\n valueSchema: z.ZodTypeAny,\n coerceValue: (key: string, v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): Record<string, unknown> {\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // Already a plain object\n if (isPlainObject(value)) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[key] = coerceValue(key, val, tracker);\n }\n return result;\n }\n\n // String: try JSON parsing\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string → empty object\n if (trimmed === '') return {};\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (isPlainObject(json)) {\n return coerceToRecord(json, valueSchema, coerceValue, tracker);\n }\n\n throw new Error('Cannot convert string to record');\n }\n\n // Array → record\n if (Array.isArray(value)) {\n // Empty array → empty record\n if (value.length === 0) return {};\n\n // Check if all elements are [key, value] pairs\n if (value.every((item) => Array.isArray(item) && item.length === 2)) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(key)] = coerceValue(String(key), val, tracker);\n }\n return result;\n }\n\n // Convert array to record with numeric keys\n const result: Record<string, unknown> = {};\n value.forEach((val, index) => {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(index)] = coerceValue(String(index), val, tracker);\n });\n return result;\n }\n\n // Map → record\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, val] of value.entries()) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(key)] = coerceValue(String(key), val, tracker);\n }\n return result;\n }\n\n // Set → record with numeric indices\n if (value instanceof Set) {\n const result: Record<string, unknown> = {};\n let index = 0;\n for (const val of value) {\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[String(index)] = coerceValue(String(index), val, tracker);\n index++;\n }\n return result;\n }\n\n // null/undefined → empty record\n if (value === null || value === undefined) return {};\n\n // Other object types → try to enumerate\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n const val = (value as any)[key];\n // Check for circular reference before coercing value\n if (canBeCircular(val) && tracker.has(val)) {\n throwCircular();\n }\n result[key] = coerceValue(key, val, tracker);\n }\n return result;\n }\n\n throw new Error('Cannot convert primitive to record');\n}\n",
|
|
26
26
|
"import * as z from 'zod';\n\nimport { canBeCircular, CircularTracker, throwCircular } from '../utilities/circular.js';\nimport { tryParseCSV, tryParseJSON } from '../utilities/parsers.js';\nimport { isArrayLike } from '../utilities/type-detection.js';\n\n/**\n * Coerce value to tuple with element-specific type coercion\n */\nexport function coerceToTuple(\n value: unknown,\n items: z.ZodTypeAny[],\n coerceElement: (index: number, v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): unknown[] {\n // Check circular reference\n if (canBeCircular(value) && tracker.has(value)) {\n throwCircular();\n }\n\n // Already an array\n if (Array.isArray(value)) {\n tracker.add(value);\n const result: unknown[] = [];\n for (let i = 0; i < items.length; i++) {\n if (i < value.length) {\n result.push(coerceElement(i, value[i], tracker));\n } else {\n // Missing element, will be caught by Zod validation\n result.push(undefined);\n }\n }\n return result;\n }\n\n // Mark as seen\n if (canBeCircular(value)) {\n tracker.add(value);\n }\n\n // String: try JSON or CSV\n if (typeof value === 'string') {\n const trimmed = value.trim();\n\n // Empty string or 'null' -> empty tuple\n if (trimmed === '' || trimmed === 'null') {\n const result: unknown[] = [];\n for (let i = 0; i < items.length; i++) {\n result.push(undefined);\n }\n return result;\n }\n\n // Try JSON parsing\n const json = tryParseJSON(trimmed);\n if (Array.isArray(json)) {\n return coerceToTuple(json, items, coerceElement, tracker);\n }\n\n // Try CSV\n const csv = tryParseCSV(trimmed);\n if (csv) {\n return coerceToTuple(csv, items, coerceElement, tracker);\n }\n\n throw new Error('Cannot convert non-array string to tuple');\n }\n\n // null -> empty tuple\n if (value === null) {\n const result: unknown[] = [];\n for (let i = 0; i < items.length; i++) {\n result.push(undefined);\n }\n return result;\n }\n\n // Plain object (with or without length property)\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const obj = value as any;\n\n // Check if it's array-like (has length property)\n if (isArrayLike(value)) {\n const result: unknown[] = [];\n for (let i = 0; i < items.length; i++) {\n if (i in obj) {\n result.push(coerceElement(i, obj[i], tracker));\n } else {\n result.push(undefined);\n }\n }\n return result;\n }\n\n // Check if it has numeric keys matching tuple indices\n let hasNumericKeys = false;\n for (let i = 0; i < items.length; i++) {\n if (i in obj) {\n hasNumericKeys = true;\n break;\n }\n }\n\n if (hasNumericKeys)\n return items.map((_, i) =>\n i in obj ? coerceElement(i, obj[i], tracker) : undefined,\n );\n }\n\n throw new Error('Cannot convert non-array to tuple');\n}\n",
|
|
27
27
|
"import * as z from 'zod';\n\nimport { CircularTracker } from '../utilities/circular.js';\n\n/**\n * Coerce value to union (tries coercion in order, with validation after each attempt)\n */\nexport function coerceToUnion(\n value: unknown,\n options: z.ZodTypeAny[],\n coerceOption: (index: number, v: unknown, tracker: CircularTracker) => unknown,\n tracker = new CircularTracker(),\n): unknown {\n // Strategy: prefer exact matches for primitives, then structural matches, then coerce by order\n // This balances exact match preservation, structural matching, and type order preference\n // 1. Check if primitive value matches any type exactly (preserve existing primitives)\n // 2. Check if value structurally matches any type (e.g., object matches object schema better than array)\n // 3. Try coercing to first type - if successful, use it\n // 4. Try coercing to remaining types in order\n\n const errors: Error[] = [];\n\n // Step 0a: For primitive values (except strings) and Date objects, check if they match any type exactly first\n // This prevents over-coercion (e.g., number 42 in string|number union should stay as number,\n // Date object in string|date union should stay as Date)\n // Strings are excluded because they're highly coercible and union order should take precedence\n const isPrimitive = typeof value !== 'object' || value === null;\n const isString = typeof value === 'string';\n const isDate = value instanceof Date;\n if ((isPrimitive && !isString) || isDate) {\n for (let i = 0; i < options.length; i++) {\n const directResult = options[i]!.safeParse(value);\n if (directResult.success) {\n return value;\n }\n }\n }\n\n // Step 0b: If value is a plain object (not Date, not other special objects) and one of the options is an object/record schema,\n // try the object/record schema first (before trying string coercion which would convert object to string)\n const objectCandidate = tryObjectFirstCoercion(value, options, tracker, coerceOption);\n if (objectCandidate !== undefined) {\n return objectCandidate;\n }\n\n // Step 0c: If value is an array and union contains array, try array first\n // This prevents arrays from being converted to strings prematurely\n if (Array.isArray(value)) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i]!;\n const type = (option._def as any)?.type || (option._def as any).typeName;\n if (type === 'array' || type === 'ZodArray') {\n try {\n const coerced = coerceOption(i, value, tracker);\n const coercedResult = options[i]!.safeParse(coerced);\n if (coercedResult.success) {\n return coerced;\n }\n } catch {\n // Continue to regular flow\n }\n }\n }\n }\n\n // Step 0d: If value is a string that looks like CSV/array and union contains array, try array first\n // This prevents '1,2,3' from being kept as string when it could be array\n if (typeof value === 'string' && value.trim() !== '') {\n const trimmed = value.trim();\n // Check if it looks like a CSV (has commas) or JSON array\n if (trimmed.includes(',') || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i]!;\n const type = (option._def as any)?.type || (option._def as any).typeName;\n if (type === 'array' || type === 'ZodArray') {\n try {\n const coerced = coerceOption(i, value, tracker);\n const coercedResult = options[i]!.safeParse(coerced);\n if (coercedResult.success) {\n return coerced;\n }\n } catch {\n // Continue to regular flow\n }\n }\n }\n }\n }\n\n // Step 0e: If value is a boolean-like string and union contains boolean, try boolean first\n // This prevents 'yes'/'true' from being kept as string when it could be boolean\n // But only for non-numeric boolean strings (avoid '1'/'0' which could be numbers or strings)\n if (typeof value === 'string' && value.trim() !== '') {\n const trimmed = value.trim().toLowerCase();\n // Non-numeric boolean strings only\n const nonNumericBooleanStrings = [\n 'true',\n 'false',\n 'yes',\n 'no',\n 'on',\n 'off',\n 'y',\n 'n',\n 't',\n 'f',\n 'enabled',\n 'disabled',\n ];\n if (nonNumericBooleanStrings.includes(trimmed)) {\n for (let i = 0; i < options.length; i++) {\n const option = options[i]!;\n const type = (option._def as any)?.type || (option._def as any).typeName;\n if (type === 'boolean') {\n try {\n const coerced = coerceOption(i, value, tracker);\n const coercedResult = options[i]!.safeParse(coerced);\n if (coercedResult.success) {\n return coerced;\n }\n } catch {\n // Continue to regular flow\n }\n }\n }\n }\n }\n\n // Step 1: Try coercing to first type (aggressive coercion to preferred type)\n if (options.length > 0) {\n const attempt = executeUnionAttempt(0, value, options, tracker, coerceOption);\n if (attempt.status === 'success') {\n return attempt.value;\n }\n if (attempt.status === 'validation') {\n errors.push(new Error(`Coercion to first type failed validation`));\n } else if (attempt.error) {\n errors.push(attempt.error);\n }\n }\n\n // Step 2: Try coercing to remaining types in order\n for (let i = 1; i < options.length; i++) {\n const attempt = executeUnionAttempt(i, value, options, tracker, coerceOption);\n if (attempt.status === 'success') {\n return attempt.value;\n }\n if (attempt.status === 'validation') {\n errors.push(new Error(`Coerced value does not match schema`));\n } else if (attempt.error) {\n errors.push(attempt.error);\n }\n }\n\n // All options failed\n throw new Error(\n `Cannot coerce value to any union type: ${errors.map((e) => e.message).join(', ')}`,\n );\n}\n\nfunction tryObjectFirstCoercion(\n value: unknown,\n options: z.ZodTypeAny[],\n _tracker: CircularTracker,\n coerceOption: (index: number, v: unknown, tracker: CircularTracker) => unknown,\n): unknown | undefined {\n if (\n typeof value !== 'object' ||\n value === null ||\n Array.isArray(value) ||\n value instanceof Date\n ) {\n return undefined;\n }\n\n for (let i = 0; i < options.length; i++) {\n const option = options[i]!;\n const type = (option._def as any)?.type || (option._def as any).typeName;\n if (type === 'object' || type === 'ZodObject' || type === 'record') {\n try {\n const attemptTracker = new CircularTracker();\n const coerced = coerceOption(i, value, attemptTracker);\n const coercedResult = options[i]!.safeParse(coerced);\n if (coercedResult.success) {\n return coerced;\n }\n } catch {\n // Continue to regular flow\n }\n }\n }\n\n return undefined;\n}\n\ntype UnionAttemptResult =\n | { status: 'success'; value: unknown }\n | { status: 'validation'; error?: undefined }\n | { status: 'error'; error: Error };\n\nfunction executeUnionAttempt(\n index: number,\n value: unknown,\n options: z.ZodTypeAny[],\n tracker: CircularTracker,\n coerceOption: (idx: number, v: unknown, tracker: CircularTracker) => unknown,\n): UnionAttemptResult {\n try {\n const coerced = coerceOption(index, value, tracker);\n const coercedResult = options[index]!.safeParse(coerced);\n if (coercedResult.success) {\n return { status: 'success', value: coerced };\n }\n return { status: 'validation' };\n } catch (error) {\n if (error instanceof Error && error.message.includes('Circular reference')) {\n throw error;\n }\n return { status: 'error', error: error as Error };\n }\n}\n",
|
|
28
28
|
"import * as z from 'zod';\n\nimport { coerceToBoolean } from './coercers/boolean.js';\nimport { coerceToNull } from './coercers/null.js';\n\nexport type CanonizePrimitive = 'string' | 'number' | 'boolean' | 'null';\n\nconst primitiveFactories: Record<CanonizePrimitive, () => z.ZodTypeAny> = {\n string: () => z.coerce.string(),\n number: () => z.coerce.number(),\n boolean: () => getStringBool(),\n null: () => getNullCoercion(),\n};\n\nexport function createCanonizePrimitive(primitive: CanonizePrimitive) {\n return primitiveFactories[primitive]();\n}\n\nexport function createCanonizeSchema<T extends Record<string, CanonizePrimitive>>(\n schema: T,\n) {\n const shape = Object.fromEntries(\n Object.entries(schema).map(([key, primitive]) => [\n key,\n createCanonizePrimitive(primitive),\n ]),\n ) as { [K in keyof T]: ReturnType<typeof createCanonizePrimitive> };\n\n return z.object(shape);\n}\n\ntype ExtendedCoerce = typeof z.coerce & {\n stringbool?: () => z.ZodType<boolean>;\n null?: () => z.ZodType<null>;\n};\n\nconst coerceHelpers = z.coerce as ExtendedCoerce;\n\nconst stringBoolFactory: () => z.ZodType<boolean> =\n typeof coerceHelpers.stringbool === 'function'\n ? () => coerceHelpers.stringbool!()\n : () => z.preprocess((value) => coerceToBoolean(value), z.boolean());\n\nconst nullFactory: () => z.ZodType<null> =\n typeof coerceHelpers.null === 'function'\n ? () => coerceHelpers.null!()\n : () => z.preprocess((value) => coerceToNull(value), z.null());\n\nfunction getStringBool() {\n return stringBoolFactory();\n}\n\nfunction getNullCoercion() {\n return nullFactory();\n}\n"
|
|
29
29
|
],
|
|
30
|
-
"mappings": "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",
|
|
31
|
-
"debugId": "
|
|
30
|
+
"mappings": "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",
|
|
31
|
+
"debugId": "C838E26F3AF618BD64756E2164756E21",
|
|
32
32
|
"names": []
|
|
33
33
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canonize",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Aggressive type coercion for Zod schemas. Wrap any Zod schema with intelligent coercion that handles edge cases, maintains type safety, and lets validation focus on business logic.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zod",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"zod": "^4.2.1"
|
|
116
116
|
},
|
|
117
117
|
"peerDependencies": {
|
|
118
|
-
"zod": ">=
|
|
118
|
+
"zod": ">=4.0.0"
|
|
119
119
|
},
|
|
120
120
|
"engines": {
|
|
121
121
|
"node": ">=18.0.0"
|