flavor-code 1.3.23 → 1.4.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/README.md +439 -434
  2. package/README.zh-CN.md +436 -431
  3. package/dist/agent/loop.d.ts +7 -2
  4. package/dist/{app-NTEUPJKJ.js → app-SMIB6P23.js} +82 -161
  5. package/dist/{chunk-Z62P4LL7.js → chunk-BYHO2CA5.js} +10412 -8712
  6. package/dist/{chunk-RPFWB45Y.js → chunk-EXOSMO57.js} +13 -8
  7. package/dist/chunk-N5MXHJKD.js +107 -0
  8. package/dist/{chunk-7OICVL2M.js → chunk-RAYH6K2H.js} +2 -44
  9. package/dist/{chunk-VEUSROUQ.js → chunk-UO4DLWU5.js} +8 -2
  10. package/dist/{chunk-SUSLIHXO.js → chunk-XMRKRPNC.js} +179 -14253
  11. package/dist/{chunk-RQTYHUMK.js → chunk-ZJCAQXA7.js} +17 -1
  12. package/dist/{claude-ink-6CEG2XZZ.js → claude-ink-6EZHF64C.js} +2 -3
  13. package/dist/cli-main.js +75 -28
  14. package/dist/cli.js +54 -10
  15. package/dist/config/load.d.ts +2 -0
  16. package/dist/config/schema.d.ts +8 -0
  17. package/dist/context/manager.d.ts +9 -0
  18. package/dist/desktop/main.js +3035 -1237
  19. package/dist/desktop-renderer/assets/index-Bk6FYhyh.css +1 -0
  20. package/dist/desktop-renderer/assets/index-RNe5Gtum.js +154 -0
  21. package/dist/desktop-renderer/assets/{interactive-terminal-CTFo4fK9.js → interactive-terminal-DestMQ2z.js} +1 -1
  22. package/dist/desktop-renderer/index.html +2 -2
  23. package/dist/doctor.d.ts +38 -0
  24. package/dist/execution/docker.d.ts +5 -1
  25. package/dist/execution/types.d.ts +11 -0
  26. package/dist/git/service.d.ts +3 -3
  27. package/dist/git/tools.d.ts +1 -1
  28. package/dist/goal/classifier.d.ts +2 -0
  29. package/dist/goal/orchestrator.d.ts +23 -2
  30. package/dist/goal/planner.d.ts +2 -0
  31. package/dist/goal/store.d.ts +2 -0
  32. package/dist/goal/types.d.ts +14 -0
  33. package/dist/harness/journal.d.ts +2 -0
  34. package/dist/harness/local.d.ts +2 -0
  35. package/dist/init/project.d.ts +0 -6
  36. package/dist/jobs/registry.d.ts +8 -1
  37. package/dist/{load-4FWNXE6F.js → load-EW56Q2MM.js} +1 -1
  38. package/dist/loop/orchestrator.d.ts +20 -0
  39. package/dist/loop/types.d.ts +7 -0
  40. package/dist/loop/verifier.d.ts +2 -0
  41. package/dist/models/openai.d.ts +1 -1
  42. package/dist/models/structured.d.ts +7 -0
  43. package/dist/models/types.d.ts +1 -1
  44. package/dist/production.d.ts +17 -0
  45. package/dist/sdk/index.js +5 -5
  46. package/dist/session/tree.d.ts +2 -0
  47. package/dist/tools/lsp.d.ts +15 -10
  48. package/dist/tools/runtime.d.ts +2 -1
  49. package/dist/tools/search.d.ts +1 -0
  50. package/dist/tools/shell.d.ts +17 -12
  51. package/dist/tools/types.d.ts +2 -1
  52. package/dist/ui/commands.d.ts +1 -1
  53. package/dist/ui/session.d.ts +12 -0
  54. package/dist/ui/transcript.d.ts +9 -0
  55. package/dist/update/check.d.ts +20 -0
  56. package/dist/utils/abort.d.ts +20 -0
  57. package/dist/utils/execFileNoThrow.d.ts +1 -0
  58. package/dist/utils/heap.d.ts +58 -0
  59. package/dist/utils/memory-restart.d.ts +42 -3
  60. package/dist/utils/process-tree.d.ts +2 -0
  61. package/dist/utils/rotation-census.d.ts +36 -0
  62. package/dist/utils/semver.d.ts +3 -0
  63. package/dist/utils/spawn-executable.d.ts +2 -0
  64. package/package.json +3 -2
  65. package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +5848 -5848
  66. package/dist/astgraph/db.mjs +0 -237
  67. package/dist/astgraph/extract.mjs +0 -239
  68. package/dist/astgraph/flavor-plugin.json +0 -25
  69. package/dist/astgraph/grammars.mjs +0 -68
  70. package/dist/astgraph/index.js +0 -301
  71. package/dist/astgraph/indexer.mjs +0 -175
  72. package/dist/astgraph/query.mjs +0 -165
  73. package/dist/astgraph/resolve.mjs +0 -93
  74. package/dist/astgraph/vendor/tree-sitter-javascript.wasm +0 -0
  75. package/dist/astgraph/vendor/tree-sitter-tsx.wasm +0 -0
  76. package/dist/astgraph/vendor/tree-sitter-typescript.wasm +0 -0
  77. package/dist/astgraph/vendor/tree-sitter.js +0 -3980
  78. package/dist/astgraph/vendor/tree-sitter.wasm +0 -0
  79. package/dist/astgraph/vendor/zod/LICENSE +0 -21
  80. package/dist/astgraph/vendor/zod/index.js +0 -4
  81. package/dist/astgraph/vendor/zod/locales/index.js +0 -1
  82. package/dist/astgraph/vendor/zod/locales/package.json +0 -7
  83. package/dist/astgraph/vendor/zod/package.json +0 -135
  84. package/dist/astgraph/vendor/zod/v4/classic/checks.js +0 -1
  85. package/dist/astgraph/vendor/zod/v4/classic/coerce.js +0 -17
  86. package/dist/astgraph/vendor/zod/v4/classic/compat.js +0 -31
  87. package/dist/astgraph/vendor/zod/v4/classic/errors.js +0 -48
  88. package/dist/astgraph/vendor/zod/v4/classic/external.js +0 -20
  89. package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +0 -599
  90. package/dist/astgraph/vendor/zod/v4/classic/index.js +0 -4
  91. package/dist/astgraph/vendor/zod/v4/classic/iso.js +0 -30
  92. package/dist/astgraph/vendor/zod/v4/classic/package.json +0 -7
  93. package/dist/astgraph/vendor/zod/v4/classic/parse.js +0 -15
  94. package/dist/astgraph/vendor/zod/v4/classic/schemas.js +0 -1395
  95. package/dist/astgraph/vendor/zod/v4/core/api.js +0 -1087
  96. package/dist/astgraph/vendor/zod/v4/core/checks.js +0 -575
  97. package/dist/astgraph/vendor/zod/v4/core/core.js +0 -78
  98. package/dist/astgraph/vendor/zod/v4/core/doc.js +0 -35
  99. package/dist/astgraph/vendor/zod/v4/core/errors.js +0 -185
  100. package/dist/astgraph/vendor/zod/v4/core/index.js +0 -16
  101. package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +0 -95
  102. package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +0 -601
  103. package/dist/astgraph/vendor/zod/v4/core/json-schema.js +0 -1
  104. package/dist/astgraph/vendor/zod/v4/core/package.json +0 -7
  105. package/dist/astgraph/vendor/zod/v4/core/parse.js +0 -93
  106. package/dist/astgraph/vendor/zod/v4/core/regexes.js +0 -139
  107. package/dist/astgraph/vendor/zod/v4/core/registries.js +0 -51
  108. package/dist/astgraph/vendor/zod/v4/core/schemas.js +0 -2239
  109. package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +0 -1
  110. package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +0 -448
  111. package/dist/astgraph/vendor/zod/v4/core/util.js +0 -674
  112. package/dist/astgraph/vendor/zod/v4/core/versions.js +0 -5
  113. package/dist/astgraph/vendor/zod/v4/index.js +0 -3
  114. package/dist/astgraph/vendor/zod/v4/locales/ar.js +0 -106
  115. package/dist/astgraph/vendor/zod/v4/locales/az.js +0 -105
  116. package/dist/astgraph/vendor/zod/v4/locales/be.js +0 -156
  117. package/dist/astgraph/vendor/zod/v4/locales/bg.js +0 -120
  118. package/dist/astgraph/vendor/zod/v4/locales/ca.js +0 -107
  119. package/dist/astgraph/vendor/zod/v4/locales/cs.js +0 -111
  120. package/dist/astgraph/vendor/zod/v4/locales/da.js +0 -115
  121. package/dist/astgraph/vendor/zod/v4/locales/de.js +0 -108
  122. package/dist/astgraph/vendor/zod/v4/locales/el.js +0 -109
  123. package/dist/astgraph/vendor/zod/v4/locales/en.js +0 -113
  124. package/dist/astgraph/vendor/zod/v4/locales/eo.js +0 -109
  125. package/dist/astgraph/vendor/zod/v4/locales/es.js +0 -132
  126. package/dist/astgraph/vendor/zod/v4/locales/fa.js +0 -114
  127. package/dist/astgraph/vendor/zod/v4/locales/fi.js +0 -112
  128. package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +0 -107
  129. package/dist/astgraph/vendor/zod/v4/locales/fr.js +0 -125
  130. package/dist/astgraph/vendor/zod/v4/locales/he.js +0 -214
  131. package/dist/astgraph/vendor/zod/v4/locales/hr.js +0 -122
  132. package/dist/astgraph/vendor/zod/v4/locales/hu.js +0 -108
  133. package/dist/astgraph/vendor/zod/v4/locales/hy.js +0 -147
  134. package/dist/astgraph/vendor/zod/v4/locales/id.js +0 -106
  135. package/dist/astgraph/vendor/zod/v4/locales/index.js +0 -52
  136. package/dist/astgraph/vendor/zod/v4/locales/is.js +0 -109
  137. package/dist/astgraph/vendor/zod/v4/locales/it.js +0 -108
  138. package/dist/astgraph/vendor/zod/v4/locales/ja.js +0 -107
  139. package/dist/astgraph/vendor/zod/v4/locales/ka.js +0 -112
  140. package/dist/astgraph/vendor/zod/v4/locales/kh.js +0 -5
  141. package/dist/astgraph/vendor/zod/v4/locales/km.js +0 -110
  142. package/dist/astgraph/vendor/zod/v4/locales/ko.js +0 -111
  143. package/dist/astgraph/vendor/zod/v4/locales/lt.js +0 -203
  144. package/dist/astgraph/vendor/zod/v4/locales/mk.js +0 -109
  145. package/dist/astgraph/vendor/zod/v4/locales/ms.js +0 -107
  146. package/dist/astgraph/vendor/zod/v4/locales/nl.js +0 -110
  147. package/dist/astgraph/vendor/zod/v4/locales/no.js +0 -108
  148. package/dist/astgraph/vendor/zod/v4/locales/ota.js +0 -109
  149. package/dist/astgraph/vendor/zod/v4/locales/package.json +0 -7
  150. package/dist/astgraph/vendor/zod/v4/locales/pl.js +0 -109
  151. package/dist/astgraph/vendor/zod/v4/locales/ps.js +0 -114
  152. package/dist/astgraph/vendor/zod/v4/locales/pt.js +0 -108
  153. package/dist/astgraph/vendor/zod/v4/locales/ro.js +0 -119
  154. package/dist/astgraph/vendor/zod/v4/locales/ru.js +0 -156
  155. package/dist/astgraph/vendor/zod/v4/locales/sl.js +0 -109
  156. package/dist/astgraph/vendor/zod/v4/locales/sv.js +0 -110
  157. package/dist/astgraph/vendor/zod/v4/locales/ta.js +0 -110
  158. package/dist/astgraph/vendor/zod/v4/locales/th.js +0 -110
  159. package/dist/astgraph/vendor/zod/v4/locales/tr.js +0 -105
  160. package/dist/astgraph/vendor/zod/v4/locales/ua.js +0 -5
  161. package/dist/astgraph/vendor/zod/v4/locales/uk.js +0 -108
  162. package/dist/astgraph/vendor/zod/v4/locales/ur.js +0 -110
  163. package/dist/astgraph/vendor/zod/v4/locales/uz.js +0 -110
  164. package/dist/astgraph/vendor/zod/v4/locales/vi.js +0 -108
  165. package/dist/astgraph/vendor/zod/v4/locales/yo.js +0 -107
  166. package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +0 -109
  167. package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +0 -107
  168. package/dist/astgraph/vendor/zod/v4/mini/checks.js +0 -1
  169. package/dist/astgraph/vendor/zod/v4/mini/coerce.js +0 -22
  170. package/dist/astgraph/vendor/zod/v4/mini/external.js +0 -14
  171. package/dist/astgraph/vendor/zod/v4/mini/index.js +0 -3
  172. package/dist/astgraph/vendor/zod/v4/mini/iso.js +0 -34
  173. package/dist/astgraph/vendor/zod/v4/mini/package.json +0 -7
  174. package/dist/astgraph/vendor/zod/v4/mini/parse.js +0 -1
  175. package/dist/astgraph/vendor/zod/v4/mini/schemas.js +0 -961
  176. package/dist/astgraph/vendor/zod/v4/package.json +0 -7
  177. package/dist/chunk-CIVPKHF4.js +0 -53
  178. package/dist/chunk-OTYFL4AG.js +0 -16
  179. package/dist/desktop-renderer/assets/index-D75ozXnZ.js +0 -154
  180. package/dist/desktop-renderer/assets/index-ZZsUx916.css +0 -1
  181. package/dist/devtools-4QTPKBKK.js +0 -2
@@ -1,599 +0,0 @@
1
- import { globalRegistry } from "../core/registries.js";
2
- import * as _checks from "./checks.js";
3
- import * as _iso from "./iso.js";
4
- import * as _schemas from "./schemas.js";
5
- // Local z object to avoid circular dependency with ../index.js
6
- const z = {
7
- ..._schemas,
8
- ..._checks,
9
- iso: _iso,
10
- };
11
- // Keys that are recognized and handled by the conversion logic
12
- const RECOGNIZED_KEYS = /*@__PURE__*/ new Set([
13
- // Schema identification
14
- "$schema",
15
- "$ref",
16
- "$defs",
17
- "definitions",
18
- // Core schema keywords
19
- "$id",
20
- "id",
21
- "$comment",
22
- "$anchor",
23
- "$vocabulary",
24
- "$dynamicRef",
25
- "$dynamicAnchor",
26
- // Type
27
- "type",
28
- "enum",
29
- "const",
30
- // Composition
31
- "anyOf",
32
- "oneOf",
33
- "allOf",
34
- "not",
35
- // Object
36
- "properties",
37
- "required",
38
- "additionalProperties",
39
- "patternProperties",
40
- "propertyNames",
41
- "minProperties",
42
- "maxProperties",
43
- // Array
44
- "items",
45
- "prefixItems",
46
- "additionalItems",
47
- "minItems",
48
- "maxItems",
49
- "uniqueItems",
50
- "contains",
51
- "minContains",
52
- "maxContains",
53
- // String
54
- "minLength",
55
- "maxLength",
56
- "pattern",
57
- "format",
58
- // Number
59
- "minimum",
60
- "maximum",
61
- "exclusiveMinimum",
62
- "exclusiveMaximum",
63
- "multipleOf",
64
- // Already handled metadata
65
- "description",
66
- "default",
67
- // Content
68
- "contentEncoding",
69
- "contentMediaType",
70
- "contentSchema",
71
- // Unsupported (error-throwing)
72
- "unevaluatedItems",
73
- "unevaluatedProperties",
74
- "if",
75
- "then",
76
- "else",
77
- "dependentSchemas",
78
- "dependentRequired",
79
- // OpenAPI
80
- "nullable",
81
- "readOnly",
82
- ]);
83
- function detectVersion(schema, defaultTarget) {
84
- const $schema = schema.$schema;
85
- if ($schema === "https://json-schema.org/draft/2020-12/schema") {
86
- return "draft-2020-12";
87
- }
88
- if ($schema === "http://json-schema.org/draft-07/schema#") {
89
- return "draft-7";
90
- }
91
- if ($schema === "http://json-schema.org/draft-04/schema#") {
92
- return "draft-4";
93
- }
94
- // Use defaultTarget if provided, otherwise default to draft-2020-12
95
- return defaultTarget ?? "draft-2020-12";
96
- }
97
- function resolveRef(ref, ctx) {
98
- if (!ref.startsWith("#")) {
99
- throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
100
- }
101
- const path = ref.slice(1).split("/").filter(Boolean);
102
- // Handle root reference "#"
103
- if (path.length === 0) {
104
- return ctx.rootSchema;
105
- }
106
- const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
107
- if (path[0] === defsKey) {
108
- const key = path[1];
109
- if (!key || !ctx.defs[key]) {
110
- throw new Error(`Reference not found: ${ref}`);
111
- }
112
- return ctx.defs[key];
113
- }
114
- throw new Error(`Reference not found: ${ref}`);
115
- }
116
- function convertBaseSchema(schema, ctx) {
117
- // Handle unsupported features
118
- if (schema.not !== undefined) {
119
- // Special case: { not: {} } represents never
120
- if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) {
121
- return z.never();
122
- }
123
- throw new Error("not is not supported in Zod (except { not: {} } for never)");
124
- }
125
- if (schema.unevaluatedItems !== undefined) {
126
- throw new Error("unevaluatedItems is not supported");
127
- }
128
- if (schema.unevaluatedProperties !== undefined) {
129
- throw new Error("unevaluatedProperties is not supported");
130
- }
131
- if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {
132
- throw new Error("Conditional schemas (if/then/else) are not supported");
133
- }
134
- if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {
135
- throw new Error("dependentSchemas and dependentRequired are not supported");
136
- }
137
- // Handle $ref
138
- if (schema.$ref) {
139
- const refPath = schema.$ref;
140
- if (ctx.refs.has(refPath)) {
141
- return ctx.refs.get(refPath);
142
- }
143
- if (ctx.processing.has(refPath)) {
144
- // Circular reference - use lazy
145
- return z.lazy(() => {
146
- if (!ctx.refs.has(refPath)) {
147
- throw new Error(`Circular reference not resolved: ${refPath}`);
148
- }
149
- return ctx.refs.get(refPath);
150
- });
151
- }
152
- ctx.processing.add(refPath);
153
- const resolved = resolveRef(refPath, ctx);
154
- const zodSchema = convertSchema(resolved, ctx);
155
- ctx.refs.set(refPath, zodSchema);
156
- ctx.processing.delete(refPath);
157
- return zodSchema;
158
- }
159
- // Handle enum
160
- if (schema.enum !== undefined) {
161
- const enumValues = schema.enum;
162
- // Special case: OpenAPI 3.0 null representation { type: "string", nullable: true, enum: [null] }
163
- if (ctx.version === "openapi-3.0" &&
164
- schema.nullable === true &&
165
- enumValues.length === 1 &&
166
- enumValues[0] === null) {
167
- return z.null();
168
- }
169
- if (enumValues.length === 0) {
170
- return z.never();
171
- }
172
- if (enumValues.length === 1) {
173
- return z.literal(enumValues[0]);
174
- }
175
- // Check if all values are strings
176
- if (enumValues.every((v) => typeof v === "string")) {
177
- return z.enum(enumValues);
178
- }
179
- // Mixed types - use union of literals
180
- const literalSchemas = enumValues.map((v) => z.literal(v));
181
- if (literalSchemas.length < 2) {
182
- return literalSchemas[0];
183
- }
184
- return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);
185
- }
186
- // Handle const
187
- if (schema.const !== undefined) {
188
- return z.literal(schema.const);
189
- }
190
- // Handle type
191
- const type = schema.type;
192
- if (Array.isArray(type)) {
193
- // Expand type array into anyOf union
194
- const typeSchemas = type.map((t) => {
195
- const typeSchema = { ...schema, type: t };
196
- return convertBaseSchema(typeSchema, ctx);
197
- });
198
- if (typeSchemas.length === 0) {
199
- return z.never();
200
- }
201
- if (typeSchemas.length === 1) {
202
- return typeSchemas[0];
203
- }
204
- return z.union(typeSchemas);
205
- }
206
- if (!type) {
207
- // No type specified - empty schema (any)
208
- return z.any();
209
- }
210
- let zodSchema;
211
- switch (type) {
212
- case "string": {
213
- let stringSchema = z.string();
214
- // Apply format using .check() with Zod format functions
215
- if (schema.format) {
216
- const format = schema.format;
217
- // Map common formats to Zod check functions
218
- if (format === "email") {
219
- stringSchema = stringSchema.check(z.email());
220
- }
221
- else if (format === "uri" || format === "uri-reference") {
222
- stringSchema = stringSchema.check(z.url());
223
- }
224
- else if (format === "uuid" || format === "guid") {
225
- stringSchema = stringSchema.check(z.uuid());
226
- }
227
- else if (format === "date-time") {
228
- stringSchema = stringSchema.check(z.iso.datetime());
229
- }
230
- else if (format === "date") {
231
- stringSchema = stringSchema.check(z.iso.date());
232
- }
233
- else if (format === "time") {
234
- stringSchema = stringSchema.check(z.iso.time());
235
- }
236
- else if (format === "duration") {
237
- stringSchema = stringSchema.check(z.iso.duration());
238
- }
239
- else if (format === "ipv4") {
240
- stringSchema = stringSchema.check(z.ipv4());
241
- }
242
- else if (format === "ipv6") {
243
- stringSchema = stringSchema.check(z.ipv6());
244
- }
245
- else if (format === "mac") {
246
- stringSchema = stringSchema.check(z.mac());
247
- }
248
- else if (format === "cidr") {
249
- stringSchema = stringSchema.check(z.cidrv4());
250
- }
251
- else if (format === "cidr-v6") {
252
- stringSchema = stringSchema.check(z.cidrv6());
253
- }
254
- else if (format === "base64") {
255
- stringSchema = stringSchema.check(z.base64());
256
- }
257
- else if (format === "base64url") {
258
- stringSchema = stringSchema.check(z.base64url());
259
- }
260
- else if (format === "e164") {
261
- stringSchema = stringSchema.check(z.e164());
262
- }
263
- else if (format === "jwt") {
264
- stringSchema = stringSchema.check(z.jwt());
265
- }
266
- else if (format === "emoji") {
267
- stringSchema = stringSchema.check(z.emoji());
268
- }
269
- else if (format === "nanoid") {
270
- stringSchema = stringSchema.check(z.nanoid());
271
- }
272
- else if (format === "cuid") {
273
- stringSchema = stringSchema.check(z.cuid());
274
- }
275
- else if (format === "cuid2") {
276
- stringSchema = stringSchema.check(z.cuid2());
277
- }
278
- else if (format === "ulid") {
279
- stringSchema = stringSchema.check(z.ulid());
280
- }
281
- else if (format === "xid") {
282
- stringSchema = stringSchema.check(z.xid());
283
- }
284
- else if (format === "ksuid") {
285
- stringSchema = stringSchema.check(z.ksuid());
286
- }
287
- // Note: json-string format is not currently supported by Zod
288
- // Custom formats are ignored - keep as plain string
289
- }
290
- // Apply constraints
291
- if (typeof schema.minLength === "number") {
292
- stringSchema = stringSchema.min(schema.minLength);
293
- }
294
- if (typeof schema.maxLength === "number") {
295
- stringSchema = stringSchema.max(schema.maxLength);
296
- }
297
- if (schema.pattern) {
298
- // JSON Schema patterns are not implicitly anchored (match anywhere in string)
299
- stringSchema = stringSchema.regex(new RegExp(schema.pattern));
300
- }
301
- zodSchema = stringSchema;
302
- break;
303
- }
304
- case "number":
305
- case "integer": {
306
- let numberSchema = type === "integer" ? z.number().int() : z.number();
307
- // Apply constraints
308
- if (typeof schema.minimum === "number") {
309
- numberSchema = numberSchema.min(schema.minimum);
310
- }
311
- if (typeof schema.maximum === "number") {
312
- numberSchema = numberSchema.max(schema.maximum);
313
- }
314
- if (typeof schema.exclusiveMinimum === "number") {
315
- numberSchema = numberSchema.gt(schema.exclusiveMinimum);
316
- }
317
- else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") {
318
- numberSchema = numberSchema.gt(schema.minimum);
319
- }
320
- if (typeof schema.exclusiveMaximum === "number") {
321
- numberSchema = numberSchema.lt(schema.exclusiveMaximum);
322
- }
323
- else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") {
324
- numberSchema = numberSchema.lt(schema.maximum);
325
- }
326
- if (typeof schema.multipleOf === "number") {
327
- numberSchema = numberSchema.multipleOf(schema.multipleOf);
328
- }
329
- zodSchema = numberSchema;
330
- break;
331
- }
332
- case "boolean": {
333
- zodSchema = z.boolean();
334
- break;
335
- }
336
- case "null": {
337
- zodSchema = z.null();
338
- break;
339
- }
340
- case "object": {
341
- const shape = {};
342
- const properties = schema.properties || {};
343
- const requiredSet = new Set(schema.required || []);
344
- // Convert properties - mark optional ones
345
- for (const [key, propSchema] of Object.entries(properties)) {
346
- const propZodSchema = convertSchema(propSchema, ctx);
347
- // If not in required array, make it optional
348
- shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();
349
- }
350
- // Handle propertyNames
351
- if (schema.propertyNames) {
352
- const keySchema = convertSchema(schema.propertyNames, ctx);
353
- const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object"
354
- ? convertSchema(schema.additionalProperties, ctx)
355
- : z.any();
356
- // Case A: No properties (pure record)
357
- if (Object.keys(shape).length === 0) {
358
- zodSchema = z.record(keySchema, valueSchema);
359
- break;
360
- }
361
- // Case B: With properties (intersection of object and looseRecord)
362
- const objectSchema = z.object(shape).passthrough();
363
- const recordSchema = z.looseRecord(keySchema, valueSchema);
364
- zodSchema = z.intersection(objectSchema, recordSchema);
365
- break;
366
- }
367
- // Handle patternProperties
368
- if (schema.patternProperties) {
369
- // patternProperties: keys matching pattern must satisfy corresponding schema
370
- // Use loose records so non-matching keys pass through
371
- const patternProps = schema.patternProperties;
372
- const patternKeys = Object.keys(patternProps);
373
- const looseRecords = [];
374
- for (const pattern of patternKeys) {
375
- const patternValue = convertSchema(patternProps[pattern], ctx);
376
- const keySchema = z.string().regex(new RegExp(pattern));
377
- looseRecords.push(z.looseRecord(keySchema, patternValue));
378
- }
379
- // Build intersection: object schema + all pattern property records
380
- const schemasToIntersect = [];
381
- if (Object.keys(shape).length > 0) {
382
- // Use passthrough so patternProperties can validate additional keys
383
- schemasToIntersect.push(z.object(shape).passthrough());
384
- }
385
- schemasToIntersect.push(...looseRecords);
386
- if (schemasToIntersect.length === 0) {
387
- zodSchema = z.object({}).passthrough();
388
- }
389
- else if (schemasToIntersect.length === 1) {
390
- zodSchema = schemasToIntersect[0];
391
- }
392
- else {
393
- // Chain intersections: (A & B) & C & D ...
394
- let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);
395
- for (let i = 2; i < schemasToIntersect.length; i++) {
396
- result = z.intersection(result, schemasToIntersect[i]);
397
- }
398
- zodSchema = result;
399
- }
400
- break;
401
- }
402
- // Handle additionalProperties
403
- // In JSON Schema, additionalProperties defaults to true (allow any extra properties)
404
- // In Zod, objects strip unknown keys by default, so we need to handle this explicitly
405
- const objectSchema = z.object(shape);
406
- if (schema.additionalProperties === false) {
407
- // Strict mode - no extra properties allowed
408
- zodSchema = objectSchema.strict();
409
- }
410
- else if (typeof schema.additionalProperties === "object") {
411
- // Extra properties must match the specified schema
412
- zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));
413
- }
414
- else {
415
- // additionalProperties is true or undefined - allow any extra properties (passthrough)
416
- zodSchema = objectSchema.passthrough();
417
- }
418
- break;
419
- }
420
- case "array": {
421
- // TODO: uniqueItems is not supported
422
- // TODO: contains/minContains/maxContains are not supported
423
- // Check if this is a tuple (prefixItems or items as array)
424
- const prefixItems = schema.prefixItems;
425
- const items = schema.items;
426
- if (prefixItems && Array.isArray(prefixItems)) {
427
- // Tuple with prefixItems (draft-2020-12)
428
- const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));
429
- const rest = items && typeof items === "object" && !Array.isArray(items)
430
- ? convertSchema(items, ctx)
431
- : undefined;
432
- if (rest) {
433
- zodSchema = z.tuple(tupleItems).rest(rest);
434
- }
435
- else {
436
- zodSchema = z.tuple(tupleItems);
437
- }
438
- // Apply minItems/maxItems constraints to tuples
439
- if (typeof schema.minItems === "number") {
440
- zodSchema = zodSchema.check(z.minLength(schema.minItems));
441
- }
442
- if (typeof schema.maxItems === "number") {
443
- zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
444
- }
445
- }
446
- else if (Array.isArray(items)) {
447
- // Tuple with items array (draft-7)
448
- const tupleItems = items.map((item) => convertSchema(item, ctx));
449
- const rest = schema.additionalItems && typeof schema.additionalItems === "object"
450
- ? convertSchema(schema.additionalItems, ctx)
451
- : undefined; // additionalItems: false means no rest, handled by default tuple behavior
452
- if (rest) {
453
- zodSchema = z.tuple(tupleItems).rest(rest);
454
- }
455
- else {
456
- zodSchema = z.tuple(tupleItems);
457
- }
458
- // Apply minItems/maxItems constraints to tuples
459
- if (typeof schema.minItems === "number") {
460
- zodSchema = zodSchema.check(z.minLength(schema.minItems));
461
- }
462
- if (typeof schema.maxItems === "number") {
463
- zodSchema = zodSchema.check(z.maxLength(schema.maxItems));
464
- }
465
- }
466
- else if (items !== undefined) {
467
- // Regular array
468
- const element = convertSchema(items, ctx);
469
- let arraySchema = z.array(element);
470
- // Apply constraints
471
- if (typeof schema.minItems === "number") {
472
- arraySchema = arraySchema.min(schema.minItems);
473
- }
474
- if (typeof schema.maxItems === "number") {
475
- arraySchema = arraySchema.max(schema.maxItems);
476
- }
477
- zodSchema = arraySchema;
478
- }
479
- else {
480
- // No items specified - array of any
481
- zodSchema = z.array(z.any());
482
- }
483
- break;
484
- }
485
- default:
486
- throw new Error(`Unsupported type: ${type}`);
487
- }
488
- return zodSchema;
489
- }
490
- function convertSchema(schema, ctx) {
491
- if (typeof schema === "boolean") {
492
- return schema ? z.any() : z.never();
493
- }
494
- // Convert base schema first (ignoring composition keywords)
495
- let baseSchema = convertBaseSchema(schema, ctx);
496
- const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;
497
- // Process composition keywords LAST (they can appear together)
498
- // Handle anyOf - wrap base schema with union
499
- if (schema.anyOf && Array.isArray(schema.anyOf)) {
500
- const options = schema.anyOf.map((s) => convertSchema(s, ctx));
501
- const anyOfUnion = z.union(options);
502
- baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;
503
- }
504
- // Handle oneOf - exclusive union (exactly one must match)
505
- if (schema.oneOf && Array.isArray(schema.oneOf)) {
506
- const options = schema.oneOf.map((s) => convertSchema(s, ctx));
507
- const oneOfUnion = z.xor(options);
508
- baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;
509
- }
510
- // Handle allOf - wrap base schema with intersection
511
- if (schema.allOf && Array.isArray(schema.allOf)) {
512
- if (schema.allOf.length === 0) {
513
- baseSchema = hasExplicitType ? baseSchema : z.any();
514
- }
515
- else {
516
- let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);
517
- const startIdx = hasExplicitType ? 0 : 1;
518
- for (let i = startIdx; i < schema.allOf.length; i++) {
519
- result = z.intersection(result, convertSchema(schema.allOf[i], ctx));
520
- }
521
- baseSchema = result;
522
- }
523
- }
524
- // Handle nullable (OpenAPI 3.0)
525
- if (schema.nullable === true && ctx.version === "openapi-3.0") {
526
- baseSchema = z.nullable(baseSchema);
527
- }
528
- // Handle readOnly
529
- if (schema.readOnly === true) {
530
- baseSchema = z.readonly(baseSchema);
531
- }
532
- // Apply `default` so it wraps the fully-composed schema. This ensures
533
- // `parse(undefined) -> default` works regardless of which branch of
534
- // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).
535
- if (schema.default !== undefined) {
536
- baseSchema = baseSchema.default(schema.default);
537
- }
538
- // Collect non-description annotation metadata into the user-supplied
539
- // registry. Description is handled separately below via `.describe()` to
540
- // preserve the contract that `schema.description` reads from globalRegistry.
541
- const extraMeta = {};
542
- const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
543
- for (const key of coreMetadataKeys) {
544
- if (key in schema) {
545
- extraMeta[key] = schema[key];
546
- }
547
- }
548
- const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
549
- for (const key of contentMetadataKeys) {
550
- if (key in schema) {
551
- extraMeta[key] = schema[key];
552
- }
553
- }
554
- for (const key of Object.keys(schema)) {
555
- if (!RECOGNIZED_KEYS.has(key)) {
556
- extraMeta[key] = schema[key];
557
- }
558
- }
559
- if (Object.keys(extraMeta).length > 0) {
560
- ctx.registry.add(baseSchema, extraMeta);
561
- }
562
- // Apply description last. `.describe()` clones the schema and sets
563
- // `_zod.parent` on the clone, so registry lookups on the returned reference
564
- // still resolve `extraMeta` via parent inheritance.
565
- if (schema.description) {
566
- baseSchema = baseSchema.describe(schema.description);
567
- }
568
- return baseSchema;
569
- }
570
- /**
571
- * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */
572
- export function fromJSONSchema(schema, params) {
573
- // Handle boolean schemas
574
- if (typeof schema === "boolean") {
575
- return schema ? z.any() : z.never();
576
- }
577
- // Normalize input via a JSON round-trip. This guarantees the converter
578
- // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,
579
- // getter/Proxy-based properties are materialized into static values, and
580
- // class instances collapse to plain objects.
581
- let normalized;
582
- try {
583
- normalized = JSON.parse(JSON.stringify(schema));
584
- }
585
- catch {
586
- throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas");
587
- }
588
- const version = detectVersion(normalized, params?.defaultTarget);
589
- const defs = (normalized.$defs || normalized.definitions || {});
590
- const ctx = {
591
- version,
592
- defs,
593
- refs: new Map(),
594
- processing: new Set(),
595
- rootSchema: normalized,
596
- registry: params?.registry ?? globalRegistry,
597
- };
598
- return convertSchema(normalized, ctx);
599
- }
@@ -1,4 +0,0 @@
1
- import * as z from "./external.js";
2
- export { z };
3
- export * from "./external.js";
4
- export default z;
@@ -1,30 +0,0 @@
1
- import * as core from "../core/index.js";
2
- import * as schemas from "./schemas.js";
3
- export const ZodISODateTime = /*@__PURE__*/ core.$constructor("ZodISODateTime", (inst, def) => {
4
- core.$ZodISODateTime.init(inst, def);
5
- schemas.ZodStringFormat.init(inst, def);
6
- });
7
- export function datetime(params) {
8
- return core._isoDateTime(ZodISODateTime, params);
9
- }
10
- export const ZodISODate = /*@__PURE__*/ core.$constructor("ZodISODate", (inst, def) => {
11
- core.$ZodISODate.init(inst, def);
12
- schemas.ZodStringFormat.init(inst, def);
13
- });
14
- export function date(params) {
15
- return core._isoDate(ZodISODate, params);
16
- }
17
- export const ZodISOTime = /*@__PURE__*/ core.$constructor("ZodISOTime", (inst, def) => {
18
- core.$ZodISOTime.init(inst, def);
19
- schemas.ZodStringFormat.init(inst, def);
20
- });
21
- export function time(params) {
22
- return core._isoTime(ZodISOTime, params);
23
- }
24
- export const ZodISODuration = /*@__PURE__*/ core.$constructor("ZodISODuration", (inst, def) => {
25
- core.$ZodISODuration.init(inst, def);
26
- schemas.ZodStringFormat.init(inst, def);
27
- });
28
- export function duration(params) {
29
- return core._isoDuration(ZodISODuration, params);
30
- }
@@ -1,7 +0,0 @@
1
- {
2
- "type": "module",
3
- "main": "./index.cjs",
4
- "module": "./index.js",
5
- "types": "./index.d.cts",
6
- "sideEffects": false
7
- }
@@ -1,15 +0,0 @@
1
- import * as core from "../core/index.js";
2
- import { ZodRealError } from "./errors.js";
3
- export const parse = /* @__PURE__ */ core._parse(ZodRealError);
4
- export const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);
5
- export const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);
6
- export const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);
7
- // Codec functions
8
- export const encode = /* @__PURE__ */ core._encode(ZodRealError);
9
- export const decode = /* @__PURE__ */ core._decode(ZodRealError);
10
- export const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);
11
- export const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);
12
- export const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);
13
- export const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);
14
- export const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);
15
- export const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);