@gabrielbryk/json-schema-to-zod 2.7.3 → 2.8.0

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 (52) hide show
  1. package/.github/workflows/release.yml +0 -5
  2. package/CHANGELOG.md +17 -0
  3. package/dist/cjs/generators/generateBundle.js +311 -0
  4. package/dist/cjs/index.js +2 -0
  5. package/dist/cjs/jsonSchemaToZod.js +96 -2
  6. package/dist/cjs/parsers/parseArray.js +34 -15
  7. package/dist/cjs/parsers/parseIfThenElse.js +2 -1
  8. package/dist/cjs/parsers/parseNumber.js +81 -39
  9. package/dist/cjs/parsers/parseObject.js +32 -9
  10. package/dist/cjs/parsers/parseSchema.js +23 -1
  11. package/dist/cjs/parsers/parseString.js +294 -54
  12. package/dist/cjs/utils/cycles.js +113 -0
  13. package/dist/cjs/utils/withMessage.js +4 -5
  14. package/dist/esm/Types.js +2 -1
  15. package/dist/esm/cli.js +12 -10
  16. package/dist/esm/generators/generateBundle.js +311 -0
  17. package/dist/esm/index.js +46 -28
  18. package/dist/esm/jsonSchemaToZod.js +105 -7
  19. package/dist/esm/parsers/parseAllOf.js +8 -5
  20. package/dist/esm/parsers/parseAnyOf.js +10 -6
  21. package/dist/esm/parsers/parseArray.js +47 -24
  22. package/dist/esm/parsers/parseBoolean.js +5 -1
  23. package/dist/esm/parsers/parseConst.js +5 -1
  24. package/dist/esm/parsers/parseDefault.js +7 -3
  25. package/dist/esm/parsers/parseEnum.js +5 -1
  26. package/dist/esm/parsers/parseIfThenElse.js +11 -6
  27. package/dist/esm/parsers/parseMultipleType.js +7 -3
  28. package/dist/esm/parsers/parseNot.js +8 -4
  29. package/dist/esm/parsers/parseNull.js +5 -1
  30. package/dist/esm/parsers/parseNullable.js +8 -4
  31. package/dist/esm/parsers/parseNumber.js +88 -42
  32. package/dist/esm/parsers/parseObject.js +59 -33
  33. package/dist/esm/parsers/parseOneOf.js +10 -6
  34. package/dist/esm/parsers/parseSchema.js +85 -59
  35. package/dist/esm/parsers/parseSimpleDiscriminatedOneOf.js +10 -6
  36. package/dist/esm/parsers/parseString.js +303 -59
  37. package/dist/esm/utils/anyOrUnknown.js +5 -1
  38. package/dist/esm/utils/cliTools.js +13 -7
  39. package/dist/esm/utils/cycles.js +113 -0
  40. package/dist/esm/utils/half.js +5 -1
  41. package/dist/esm/utils/jsdocs.js +8 -3
  42. package/dist/esm/utils/omit.js +5 -1
  43. package/dist/esm/utils/withMessage.js +8 -6
  44. package/dist/esm/zodToJsonSchema.js +4 -1
  45. package/dist/types/Types.d.ts +8 -0
  46. package/dist/types/generators/generateBundle.d.ts +57 -0
  47. package/dist/types/index.d.ts +2 -0
  48. package/dist/types/parsers/parseString.d.ts +2 -2
  49. package/dist/types/utils/cycles.d.ts +7 -0
  50. package/dist/types/utils/jsdocs.d.ts +1 -1
  51. package/dist/types/utils/withMessage.d.ts +6 -1
  52. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { JsonSchema, Options } from "../Types.js";
2
+ export type SplitDefsOptions = {
3
+ /** Include a root schema file in addition to $defs */
4
+ includeRoot?: boolean;
5
+ /** Override file name for each schema (default: `${def}.schema.ts`) */
6
+ fileName?: (defName: string, ctx: {
7
+ isRoot: boolean;
8
+ }) => string;
9
+ /** Override exported schema const name (default: PascalCase(def) + "Schema") */
10
+ schemaName?: (defName: string, ctx: {
11
+ isRoot: boolean;
12
+ }) => string;
13
+ /** Override exported type name (default: PascalCase(def)) */
14
+ typeName?: (defName: string, ctx: {
15
+ isRoot: boolean;
16
+ }) => string | undefined;
17
+ /** Optional root schema name (defaults to provided `name` option or "RootSchema") */
18
+ rootName?: string;
19
+ /** Optional root type name (defaults to provided `type` option if string) */
20
+ rootTypeName?: string;
21
+ };
22
+ export type RefResolutionResult = string;
23
+ export type RefResolutionOptions = {
24
+ /** Called for each internal $ref that targets a known $def */
25
+ onRef?: (ctx: {
26
+ ref: string;
27
+ refName: string;
28
+ currentDef: string | null;
29
+ path: (string | number)[];
30
+ isCycle: boolean;
31
+ }) => RefResolutionResult | undefined;
32
+ /** Called for unknown $refs (outside of $defs/definitions) */
33
+ onUnknownRef?: (ctx: {
34
+ ref: string;
35
+ currentDef: string | null;
36
+ }) => RefResolutionResult | undefined;
37
+ };
38
+ export type NestedTypesOptions = {
39
+ enable?: boolean;
40
+ fileName?: string;
41
+ };
42
+ export type GenerateBundleOptions = Options & {
43
+ splitDefs?: SplitDefsOptions;
44
+ refResolution?: RefResolutionOptions;
45
+ nestedTypes?: NestedTypesOptions;
46
+ /** Force module kind for generated files (defaults to esm) */
47
+ module?: "esm" | "cjs" | "none";
48
+ };
49
+ export type GeneratedFile = {
50
+ fileName: string;
51
+ contents: string;
52
+ };
53
+ export type SchemaBundleResult = {
54
+ files: GeneratedFile[];
55
+ defNames: string[];
56
+ };
57
+ export declare const generateSchemaBundle: (schema: JsonSchema, options?: GenerateBundleOptions) => SchemaBundleResult;
@@ -1,4 +1,5 @@
1
1
  export * from "./Types.js";
2
+ export * from "./generators/generateBundle.js";
2
3
  export * from "./jsonSchemaToZod.js";
3
4
  export * from "./parsers/parseAllOf.js";
4
5
  export * from "./parsers/parseAnyOf.js";
@@ -19,6 +20,7 @@ export * from "./parsers/parseSchema.js";
19
20
  export * from "./parsers/parseSimpleDiscriminatedOneOf.js";
20
21
  export * from "./parsers/parseString.js";
21
22
  export * from "./utils/anyOrUnknown.js";
23
+ export * from "./utils/cycles.js";
22
24
  export * from "./utils/half.js";
23
25
  export * from "./utils/jsdocs.js";
24
26
  export * from "./utils/omit.js";
@@ -1,4 +1,4 @@
1
- import { JsonSchemaObject } from "../Types.js";
1
+ import { JsonSchemaObject, Refs } from "../Types.js";
2
2
  export declare const parseString: (schema: JsonSchemaObject & {
3
3
  type: "string";
4
- }) => string;
4
+ }, refs?: Refs) => string;
@@ -0,0 +1,7 @@
1
+ import { JsonSchema } from "../Types.js";
2
+ export declare const findRefDependencies: (schema: JsonSchema | undefined, validDefNames: string[]) => Set<string>;
3
+ export declare const detectCycles: (defNames: string[], deps: Map<string, Set<string>>) => Set<string>;
4
+ export declare const computeScc: (defNames: string[], deps: Map<string, Set<string>>) => {
5
+ cycleMembers: Set<string>;
6
+ componentByName: Map<string, number>;
7
+ };
@@ -1,3 +1,3 @@
1
- import { JsonSchemaObject } from "../Types";
1
+ import { JsonSchemaObject } from "../Types.js";
2
2
  export declare const expandJsdocs: (jsdocs: string) => string;
3
3
  export declare const addJsdocs: (schema: JsonSchemaObject, parsed: string) => string;
@@ -2,7 +2,12 @@ import { JsonSchemaObject } from "../Types.js";
2
2
  type Opener = string;
3
3
  type MessagePrefix = string;
4
4
  type Closer = string;
5
- type Builder = [Opener, Closer] | [Opener, MessagePrefix, Closer];
5
+ type Builder = {
6
+ opener: Opener;
7
+ closer: Closer;
8
+ messagePrefix?: MessagePrefix;
9
+ messageCloser?: Closer;
10
+ };
6
11
  export declare function withMessage(schema: JsonSchemaObject, key: string, get: (props: {
7
12
  value: unknown;
8
13
  json: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gabrielbryk/json-schema-to-zod",
3
- "version": "2.7.3",
3
+ "version": "2.8.0",
4
4
  "description": "Converts JSON schema objects or files into Zod schemas",
5
5
  "types": "./dist/types/index.d.ts",
6
6
  "bin": "./dist/cjs/cli.js",