zodvex 0.6.0 → 0.6.1-beta.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.
- package/dist/builders.d.ts.map +1 -1
- package/dist/cli/index.js +44 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/client/index.js +14 -11
- package/dist/client/index.js.map +1 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codegen/discover.d.ts +4 -4
- package/dist/codegen/discover.d.ts.map +1 -1
- package/dist/codegen/extractCodec.d.ts +5 -5
- package/dist/codegen/extractCodec.d.ts.map +1 -1
- package/dist/codegen/generate.d.ts +2 -2
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/index.js +44 -39
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/zodToSource.d.ts +3 -3
- package/dist/codegen/zodToSource.d.ts.map +1 -1
- package/dist/core/index.js +91 -89
- package/dist/core/index.js.map +1 -1
- package/dist/custom.d.ts.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/index.js +157 -115
- package/dist/index.js.map +1 -1
- package/dist/mapping/core.d.ts +3 -3
- package/dist/mapping/core.d.ts.map +1 -1
- package/dist/mapping/handlers/nullable.d.ts +1 -2
- package/dist/mapping/handlers/nullable.d.ts.map +1 -1
- package/dist/mapping/handlers/record.d.ts +1 -2
- package/dist/mapping/handlers/record.d.ts.map +1 -1
- package/dist/mapping/types.d.ts +25 -25
- package/dist/mapping/types.d.ts.map +1 -1
- package/dist/mapping/utils.d.ts +2 -2
- package/dist/mapping/utils.d.ts.map +1 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/normalizeCodecPaths.d.ts +4 -3
- package/dist/normalizeCodecPaths.d.ts.map +1 -1
- package/dist/react/index.js +14 -11
- package/dist/react/index.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/schemaHelpers.d.ts.map +1 -1
- package/dist/server/index.js +128 -86
- package/dist/server/index.js.map +1 -1
- package/dist/serverUtils.d.ts.map +1 -1
- package/dist/tables.d.ts.map +1 -1
- package/dist/transform/index.js +7 -13
- package/dist/transform/index.js.map +1 -1
- package/dist/transform/traverse.d.ts.map +1 -1
- package/dist/types.d.ts +19 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/wrappers.d.ts.map +1 -1
- package/dist/zod-core.d.ts +2 -0
- package/dist/zod-core.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/builders.ts +10 -9
- package/src/codec.ts +5 -4
- package/src/codegen/discover.ts +42 -30
- package/src/codegen/extractCodec.ts +17 -10
- package/src/codegen/generate.ts +24 -23
- package/src/codegen/zodToSource.ts +48 -33
- package/src/custom.ts +6 -5
- package/src/db.ts +5 -4
- package/src/mapping/core.ts +56 -41
- package/src/mapping/handlers/nullable.ts +9 -9
- package/src/mapping/handlers/record.ts +18 -18
- package/src/mapping/types.ts +113 -91
- package/src/mapping/utils.ts +5 -4
- package/src/model.ts +9 -7
- package/src/normalizeCodecPaths.ts +32 -24
- package/src/registry.ts +2 -1
- package/src/schemaHelpers.ts +6 -5
- package/src/serverUtils.ts +3 -2
- package/src/tables.ts +11 -9
- package/src/transform/transform.ts +2 -2
- package/src/transform/traverse.ts +5 -11
- package/src/types.ts +22 -21
- package/src/utils.ts +39 -23
- package/src/wrappers.ts +32 -11
- package/src/zod-core.ts +61 -0
package/dist/builders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,UAAU,CAAA;AAE9D,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EAChB,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import fs2 from 'fs';
|
|
3
3
|
import path3 from 'path';
|
|
4
4
|
import { globSync } from 'tinyglobby';
|
|
5
|
-
import {
|
|
5
|
+
import { $ZodCodec, $ZodNumber, $ZodCustom, $ZodOptional, $ZodNullable, $ZodObject, $ZodUnion, $ZodArray, $ZodRecord, $ZodTuple, $ZodString, $ZodBoolean, $ZodNull, $ZodUndefined, $ZodAny, $ZodEnum, $ZodLiteral } from 'zod/v4/core';
|
|
6
6
|
|
|
7
7
|
var __defProp = Object.defineProperty;
|
|
8
8
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -313,16 +313,18 @@ function writeGeneratedStubs(convexDir2) {
|
|
|
313
313
|
}
|
|
314
314
|
};
|
|
315
315
|
}
|
|
316
|
+
|
|
317
|
+
// src/codegen/extractCodec.ts
|
|
316
318
|
function findCodec(schema) {
|
|
317
319
|
let current = schema;
|
|
318
320
|
for (let i = 0; i < 10; i++) {
|
|
319
|
-
if (current instanceof
|
|
321
|
+
if (current instanceof $ZodCodec) {
|
|
320
322
|
const def = current._zod?.def;
|
|
321
|
-
const isZxDate = def?.in instanceof
|
|
323
|
+
const isZxDate = def?.in instanceof $ZodNumber && def?.out instanceof $ZodCustom;
|
|
322
324
|
if (isZxDate) return void 0;
|
|
323
325
|
return current;
|
|
324
326
|
}
|
|
325
|
-
if (current instanceof
|
|
327
|
+
if (current instanceof $ZodOptional || current instanceof $ZodNullable) {
|
|
326
328
|
const def = current._zod?.def;
|
|
327
329
|
current = def.innerType;
|
|
328
330
|
continue;
|
|
@@ -347,7 +349,7 @@ function walkSchemaRecursive(schema, accessPath, visited, seenCodecs, results) {
|
|
|
347
349
|
let current = schema;
|
|
348
350
|
let currentPath = accessPath;
|
|
349
351
|
for (let i = 0; i < 10; i++) {
|
|
350
|
-
if (current instanceof
|
|
352
|
+
if (current instanceof $ZodOptional || current instanceof $ZodNullable) {
|
|
351
353
|
const def2 = current._zod?.def;
|
|
352
354
|
current = def2.innerType;
|
|
353
355
|
currentPath += "._zod.def.innerType";
|
|
@@ -356,7 +358,7 @@ function walkSchemaRecursive(schema, accessPath, visited, seenCodecs, results) {
|
|
|
356
358
|
}
|
|
357
359
|
}
|
|
358
360
|
const def = current._zod?.def;
|
|
359
|
-
if (current instanceof
|
|
361
|
+
if (current instanceof $ZodObject) {
|
|
360
362
|
const shape = def?.shape;
|
|
361
363
|
if (shape) {
|
|
362
364
|
for (const [field, fieldSchema] of Object.entries(shape)) {
|
|
@@ -369,7 +371,7 @@ function walkSchemaRecursive(schema, accessPath, visited, seenCodecs, results) {
|
|
|
369
371
|
);
|
|
370
372
|
}
|
|
371
373
|
}
|
|
372
|
-
} else if (current instanceof
|
|
374
|
+
} else if (current instanceof $ZodUnion) {
|
|
373
375
|
const options = def?.options;
|
|
374
376
|
if (options) {
|
|
375
377
|
for (let i = 0; i < options.length; i++) {
|
|
@@ -382,12 +384,12 @@ function walkSchemaRecursive(schema, accessPath, visited, seenCodecs, results) {
|
|
|
382
384
|
);
|
|
383
385
|
}
|
|
384
386
|
}
|
|
385
|
-
} else if (current instanceof
|
|
387
|
+
} else if (current instanceof $ZodArray) {
|
|
386
388
|
const element = def?.element;
|
|
387
389
|
if (element) {
|
|
388
390
|
walkSchemaRecursive(element, `${currentPath}._zod.def.element`, visited, seenCodecs, results);
|
|
389
391
|
}
|
|
390
|
-
} else if (current instanceof
|
|
392
|
+
} else if (current instanceof $ZodRecord) {
|
|
391
393
|
const valueType = def?.valueType;
|
|
392
394
|
if (valueType) {
|
|
393
395
|
walkSchemaRecursive(
|
|
@@ -398,7 +400,7 @@ function walkSchemaRecursive(schema, accessPath, visited, seenCodecs, results) {
|
|
|
398
400
|
results
|
|
399
401
|
);
|
|
400
402
|
}
|
|
401
|
-
} else if (current instanceof
|
|
403
|
+
} else if (current instanceof $ZodTuple) {
|
|
402
404
|
const items = def?.items;
|
|
403
405
|
if (items) {
|
|
404
406
|
for (let i = 0; i < items.length; i++) {
|
|
@@ -528,9 +530,9 @@ async function discoverModules(convexDir2) {
|
|
|
528
530
|
});
|
|
529
531
|
}
|
|
530
532
|
}
|
|
531
|
-
if (value instanceof
|
|
533
|
+
if (value instanceof $ZodCodec) {
|
|
532
534
|
const def = value._zod?.def;
|
|
533
|
-
const isZxDate = def?.in instanceof
|
|
535
|
+
const isZxDate = def?.in instanceof $ZodNumber && def?.out instanceof $ZodCustom;
|
|
534
536
|
if (!isZxDate) {
|
|
535
537
|
if (!codecs.some((c) => c.schema === value)) {
|
|
536
538
|
codecs.push({
|
|
@@ -554,22 +556,24 @@ async function discoverModules(convexDir2) {
|
|
|
554
556
|
cleanupStubs();
|
|
555
557
|
}
|
|
556
558
|
}
|
|
559
|
+
|
|
560
|
+
// src/codegen/zodToSource.ts
|
|
557
561
|
function zodToSource(schema, ctx) {
|
|
558
562
|
const def = schema._zod?.def;
|
|
559
|
-
if (schema instanceof
|
|
563
|
+
if (schema instanceof $ZodOptional) {
|
|
560
564
|
return `${zodToSource(def.innerType, ctx)}.optional()`;
|
|
561
565
|
}
|
|
562
|
-
if (schema instanceof
|
|
566
|
+
if (schema instanceof $ZodNullable) {
|
|
563
567
|
return `${zodToSource(def.innerType, ctx)}.nullable()`;
|
|
564
568
|
}
|
|
565
|
-
if (schema instanceof
|
|
569
|
+
if (schema instanceof $ZodString && schema.description?.startsWith("convexId:")) {
|
|
566
570
|
const tableName = schema.description.slice("convexId:".length);
|
|
567
571
|
return `zx.id("${tableName}")`;
|
|
568
572
|
}
|
|
569
|
-
if (schema instanceof
|
|
573
|
+
if (schema instanceof $ZodCodec && def.in instanceof $ZodNumber && def.out instanceof $ZodCustom) {
|
|
570
574
|
return "zx.date()";
|
|
571
575
|
}
|
|
572
|
-
if (schema instanceof
|
|
576
|
+
if (schema instanceof $ZodCodec) {
|
|
573
577
|
if (ctx?.codecMap) {
|
|
574
578
|
const ref = ctx.codecMap.get(schema);
|
|
575
579
|
if (ref) {
|
|
@@ -584,39 +588,39 @@ function zodToSource(schema, ctx) {
|
|
|
584
588
|
ctx?.undiscoverableCodecs?.push({ fieldPath: "unknown" });
|
|
585
589
|
return `${wireSource} /* codec: transforms lost */`;
|
|
586
590
|
}
|
|
587
|
-
if (schema instanceof
|
|
588
|
-
if (schema instanceof
|
|
589
|
-
if (schema instanceof
|
|
590
|
-
if (schema instanceof
|
|
591
|
-
if (schema instanceof
|
|
592
|
-
if (schema instanceof
|
|
593
|
-
if (schema instanceof
|
|
591
|
+
if (schema instanceof $ZodString) return "z.string()";
|
|
592
|
+
if (schema instanceof $ZodNumber) return "z.number()";
|
|
593
|
+
if (schema instanceof $ZodBoolean) return "z.boolean()";
|
|
594
|
+
if (schema instanceof $ZodNull) return "z.null()";
|
|
595
|
+
if (schema instanceof $ZodUndefined) return "z.undefined()";
|
|
596
|
+
if (schema instanceof $ZodAny) return "z.any()";
|
|
597
|
+
if (schema instanceof $ZodObject) {
|
|
594
598
|
const shape = def.shape;
|
|
595
599
|
const fields = Object.entries(shape).map(([key, value]) => `${key}: ${zodToSource(value, ctx)}`).join(", ");
|
|
596
600
|
return `z.object({ ${fields} })`;
|
|
597
601
|
}
|
|
598
|
-
if (schema instanceof
|
|
602
|
+
if (schema instanceof $ZodArray) {
|
|
599
603
|
return `z.array(${zodToSource(def.element, ctx)})`;
|
|
600
604
|
}
|
|
601
|
-
if (schema instanceof
|
|
605
|
+
if (schema instanceof $ZodEnum) {
|
|
602
606
|
const values = schema.options.map((v) => `"${v}"`).join(", ");
|
|
603
607
|
return `z.enum([${values}])`;
|
|
604
608
|
}
|
|
605
|
-
if (schema instanceof
|
|
609
|
+
if (schema instanceof $ZodLiteral) {
|
|
606
610
|
const values = def.values;
|
|
607
611
|
const value = values.values().next().value;
|
|
608
612
|
if (typeof value === "string") return `z.literal("${value}")`;
|
|
609
613
|
return `z.literal(${value})`;
|
|
610
614
|
}
|
|
611
|
-
if (schema instanceof
|
|
615
|
+
if (schema instanceof $ZodUnion) {
|
|
612
616
|
const members = def.options.map((s) => zodToSource(s, ctx)).join(", ");
|
|
613
617
|
return `z.union([${members}])`;
|
|
614
618
|
}
|
|
615
|
-
if (schema instanceof
|
|
619
|
+
if (schema instanceof $ZodTuple) {
|
|
616
620
|
const items = def.items.map((s) => zodToSource(s, ctx)).join(", ");
|
|
617
621
|
return `z.tuple([${items}])`;
|
|
618
622
|
}
|
|
619
|
-
if (schema instanceof
|
|
623
|
+
if (schema instanceof $ZodRecord) {
|
|
620
624
|
return `z.record(${zodToSource(def.keyType, ctx)}, ${zodToSource(def.valueType, ctx)})`;
|
|
621
625
|
}
|
|
622
626
|
const typeName = def?.type ?? "unknown";
|
|
@@ -648,10 +652,10 @@ function tryUnwrapToIdentity(schema, identityMap) {
|
|
|
648
652
|
const maxDepth = 5;
|
|
649
653
|
for (let i = 0; i < maxDepth; i++) {
|
|
650
654
|
const def = current._zod?.def;
|
|
651
|
-
if (current instanceof
|
|
655
|
+
if (current instanceof $ZodOptional) {
|
|
652
656
|
suffixes.push(".optional()");
|
|
653
657
|
current = def.innerType;
|
|
654
|
-
} else if (current instanceof
|
|
658
|
+
} else if (current instanceof $ZodNullable) {
|
|
655
659
|
suffixes.push(".nullable()");
|
|
656
660
|
current = def.innerType;
|
|
657
661
|
} else {
|
|
@@ -665,11 +669,11 @@ function tryUnwrapToIdentity(schema, identityMap) {
|
|
|
665
669
|
return null;
|
|
666
670
|
}
|
|
667
671
|
function tryMatchPartial(schema, identityMap) {
|
|
668
|
-
if (!(schema instanceof
|
|
672
|
+
if (!(schema instanceof $ZodObject)) return null;
|
|
669
673
|
const candidateShape = schema.shape;
|
|
670
674
|
const candidateKeys = Object.keys(candidateShape).sort();
|
|
671
675
|
for (const [modelSchema, ref] of identityMap) {
|
|
672
|
-
if (!(modelSchema instanceof
|
|
676
|
+
if (!(modelSchema instanceof $ZodObject)) continue;
|
|
673
677
|
const modelShape = modelSchema.shape;
|
|
674
678
|
const modelKeys = Object.keys(modelShape).sort();
|
|
675
679
|
if (candidateKeys.length !== modelKeys.length) continue;
|
|
@@ -677,7 +681,7 @@ function tryMatchPartial(schema, identityMap) {
|
|
|
677
681
|
let allMatch = true;
|
|
678
682
|
for (const key of candidateKeys) {
|
|
679
683
|
const candidateField = candidateShape[key];
|
|
680
|
-
if (!(candidateField instanceof
|
|
684
|
+
if (!(candidateField instanceof $ZodOptional)) {
|
|
681
685
|
allMatch = false;
|
|
682
686
|
break;
|
|
683
687
|
}
|
|
@@ -766,22 +770,23 @@ function generateApiFile(functions, models, codecs, modelCodecs, functionCodecs)
|
|
|
766
770
|
let needsZx = false;
|
|
767
771
|
function resolveSchema(schema) {
|
|
768
772
|
if (!schema) return "undefined";
|
|
769
|
-
const
|
|
773
|
+
const s = schema;
|
|
774
|
+
const ref = identityMap.get(s);
|
|
770
775
|
if (ref) {
|
|
771
776
|
neededModelImports.add(ref.exportName);
|
|
772
777
|
return `${ref.exportName}.schema.${ref.schemaKey}`;
|
|
773
778
|
}
|
|
774
|
-
const unwrapped = tryUnwrapToIdentity(
|
|
779
|
+
const unwrapped = tryUnwrapToIdentity(s, identityMap);
|
|
775
780
|
if (unwrapped) {
|
|
776
781
|
neededModelImports.add(unwrapped.ref.exportName);
|
|
777
782
|
return `${unwrapped.ref.exportName}.schema.${unwrapped.ref.schemaKey}${unwrapped.suffix}`;
|
|
778
783
|
}
|
|
779
|
-
const partialMatch = tryMatchPartial(
|
|
784
|
+
const partialMatch = tryMatchPartial(s, identityMap);
|
|
780
785
|
if (partialMatch) {
|
|
781
786
|
neededModelImports.add(partialMatch.ref.exportName);
|
|
782
787
|
return `${partialMatch.ref.exportName}.schema.${partialMatch.ref.schemaKey}${partialMatch.suffix}`;
|
|
783
788
|
}
|
|
784
|
-
const source = zodToSource(
|
|
789
|
+
const source = zodToSource(s, zodToSourceCtx);
|
|
785
790
|
if (source.includes("z.")) needsZod = true;
|
|
786
791
|
if (source.includes("zx.")) needsZx = true;
|
|
787
792
|
return source;
|