StefanTerdell / zod-to-json-schema

Converts Zod schemas to Json schemas
ISC License
871 stars 70 forks source link

Circular dependencies? #118

Open Carlos-err406 opened 5 months ago

Carlos-err406 commented 5 months ago

i get many circular dependencies from zod-to-json-schema when building with rollup

see image: image

jporre commented 5 months ago

This happens to me as well after upgrading to version 3.23.5 of ZOD Sveltekit Project, zod version -> zod3.23.5 on build :

Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/array.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/branded.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/catch.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/default.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/effects.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/map.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/map.js -> node_modules/zod-to-json-schema/dist/esm/parsers/record.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js -> node_modules/zod-to-json-schema/dist/esm/parsers/union.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/object.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/optional.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/promise.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/set.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js Circular dependency: node_modules/zod-to-json-schema/dist/esm/parseDef.js -> node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js -> node_modules/zod-to-json-schema/dist/esm/parseDef.js

StefanTerdell commented 5 months ago

Thanks for opening an issue. Is this an actual problem?

Carlos-err406 commented 5 months ago

Thanks for opening an issue. Is this an actual problem?

more of an unconformity since it apparently does not break the app, just nasty logs at build

willgottschalk commented 5 months ago

Seems like a duplicate of https://github.com/StefanTerdell/zod-to-json-schema/issues/113

We're seeing this issue with v3.22.5. While I can't tell any noticeable issues, I'd prefer not to see these logs when building my app

willgottschalk commented 5 months ago

Also, this doesn't seem like a hard fix either.

https://github.com/StefanTerdell/zod-to-json-schema/blob/b96cd604d53ce438ae24429238f9a6cbe19d1a6b/src/parsers/optional.ts#L2

The first import is a type and the second import could be made into an argument of the function to break the cycle. That's probably the least invasive way

import { ZodDefaultDef } from "zod";
import type { JsonSchema7Type, ParseDefFunc } from "../parseDef.js";
import { Refs } from "../Refs.js";

export function parseDefaultDef(
  _def: ZodDefaultDef,
  refs: Refs,
  parseDef: ParseDefFunc,
): JsonSchema7Type & { default: any } {
  return {
    ...parseDef(_def.innerType._def, refs),
    default: _def.defaultValue(),
  };
}

There are other ways to break cycles but this seems to require the least amount of rework to the code

StefanTerdell commented 5 months ago

I'm hesitant to change the structure of the code to accommodate weird bundler behavior when there's nothing wrong with it.

I'd prefer not to see these logs when building my app

Maybe there are some log level settings you can try?

Not closing the issue, mind. It's just not super high on the list of priorities ATM. :)

pekeler commented 3 months ago

I got the exact same problem in my project. Noticed it's been reported over at https://github.com/ciscoheat/sveltekit-superforms/issues/350 as well.