zod-compiler 1.9.2 → 1.9.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/optional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAMpF;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAItE"}
1
+ {"version":3,"file":"optional.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/optional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAkBtD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAWpF;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAStE"}
@@ -1,5 +1,25 @@
1
1
  import { emit } from "../emit.js";
2
+ /**
3
+ * Zod's `.optional()` short-circuits `undefined → undefined`, EXCEPT when its
4
+ * inner chain applies a default to undefined: `z.string().default("d").optional()`
5
+ * yields "d", not undefined (the default fires THROUGH the optional, and through
6
+ * any nullable/optional wrappers between them — `default().nullish()`,
7
+ * `default().optional().nullable()`, ...). Only `default` consumes undefined into
8
+ * a value; `catch`, object-field defaults, and plain types do not, so the optional
9
+ * legitimately short-circuits there. Peel optional/nullable wrappers to decide.
10
+ */
11
+ function innerAppliesDefaultOnUndefined(ir) {
12
+ let cur = ir;
13
+ while (cur.type === "optional" || cur.type === "nullable")
14
+ cur = cur.inner;
15
+ return cur.type === "default";
16
+ }
2
17
  export function slowOptional(ir, g) {
18
+ // When the inner chain handles undefined (a default), undefined must flow into
19
+ // it so the default applies — the inner code already gates on undefined itself.
20
+ if (innerAppliesDefaultOnUndefined(ir.inner)) {
21
+ return `${g.visit(ir.inner)}\n`;
22
+ }
3
23
  return `${emit `
4
24
  if(${g.input}!==undefined){
5
25
  ${g.visit(ir.inner)}
@@ -10,6 +30,12 @@ export function fastOptional(ir, g) {
10
30
  const inner = g.visit(ir.inner);
11
31
  if (inner === null)
12
32
  return null;
33
+ // Same rule as the slow path: an inner default needs undefined to reach it, so
34
+ // drop the `===undefined` shortcut (which would let safeParse return the raw
35
+ // undefined before the eager slow path applies the default). The inner
36
+ // fast-default expr already returns false on undefined, routing to the slow path.
37
+ if (innerAppliesDefaultOnUndefined(ir.inner))
38
+ return inner;
13
39
  return `(${g.input}===undefined||(${inner}))`;
14
40
  }
15
41
  //# sourceMappingURL=optional.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/optional.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,YAAY,CAAC,EAAmC,EAAE,CAAU;IAC1E,OAAO,GAAG,IAAI,CAAA;SACP,CAAC,CAAC,KAAK;QACR,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;;GAEtB,IAAI,CAAC;AACR,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAc,EAAE,CAAU;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,IAAI,CAAC,CAAC,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/optional.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;;;;;;GAQG;AACH,SAAS,8BAA8B,CAAC,EAAY;IAClD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;IAC3E,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAmC,EAAE,CAAU;IAC1E,+EAA+E;IAC/E,gFAAgF;IAChF,IAAI,8BAA8B,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,IAAI,CAAA;SACP,CAAC,CAAC,KAAK;QACR,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;;GAEtB,IAAI,CAAC;AACR,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAc,EAAE,CAAU;IACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,+EAA+E;IAC/E,6EAA6E;IAC7E,uEAAuE;IACvE,kFAAkF;IAClF,IAAI,8BAA8B,CAAC,EAAE,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,IAAI,CAAC,CAAC,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAChD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../../../src/core/extract/extractors/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAa,MAAM,aAAa,CAAC;AAEvE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,QAAQ,CAwDzE"}
1
+ {"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../../../src/core/extract/extractors/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAa,MAAM,aAAa,CAAC;AAEvE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,QAAQ,CAoEzE"}
@@ -6,6 +6,19 @@ export function extractUnion(def, ctx) {
6
6
  if (def.inclusive === false && !def.discriminator) {
7
7
  return ctx.fallback("unsupported");
8
8
  }
9
+ // A plain union of exactly one option IS that option: zod surfaces the single
10
+ // option's issues directly (no invalid_union wrapper) and ignores a union-level
11
+ // `{ error }`. Collapsing union([X]) → X matches that exactly — and avoids the
12
+ // wrapper the slow path would otherwise emit when the sole option aborts
13
+ // (invalid_type), which diverged from zod's inner message. When the union
14
+ // carries its own `error`, delegate to zod instead: dispatch() would re-apply
15
+ // it as the collapsed node's typeMessage, but zod drops it for a single-option
16
+ // union — fallback reproduces zod's exact (inner) message.
17
+ if (!def.discriminator && def.options.length === 1) {
18
+ if (def.error !== undefined)
19
+ return ctx.fallback("unsupported");
20
+ return ctx.visit(def.options[0], "._zod.def.options[0]");
21
+ }
9
22
  if (def.discriminator) {
10
23
  // zod's `_zod.propValues[discriminator]` is the authoritative dispatch
11
24
  // table — it covers literal AND enum discriminators with typed values.
@@ -1 +1 @@
1
- {"version":3,"file":"union.js","sourceRoot":"","sources":["../../../../src/core/extract/extractors/union.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAqB;IAC7D,0EAA0E;IAC1E,4EAA4E;IAC5E,sEAAsE;IACtE,gDAAgD;IAChD,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAClD,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,uEAAuE;QACvE,uEAAuE;QACvE,kEAAkE;QAClE,+DAA+D;QAC/D,MAAM,KAAK,GAGL,EAAE,CAAC;QACT,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;QACxE,kDAAkD;QAClD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyD,CAAC;QACpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAc,CAAC;YACxC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,IAAI;oBACV,CAAC,KAAK,SAAS;oBACf,OAAO,CAAC,KAAK,QAAQ;oBACrB,OAAO,CAAC,KAAK,QAAQ;oBACrB,OAAO,CAAC,KAAK,SAAS;oBACtB,OAAO,CAAC,KAAK,QAAQ,EACrB,CAAC;oBACD,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtB,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACrC,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,CAA0D;oBACjE,MAAM,EAAE,CAAC;iBACV,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1F,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;KAChF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"union.js","sourceRoot":"","sources":["../../../../src/core/extract/extractors/union.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zod-compiler",
3
- "version": "1.9.2",
3
+ "version": "1.9.3",
4
4
  "description": "Compile Zod schemas into zero-overhead validation functions",
5
5
  "keywords": [
6
6
  "aot",