zod-prime
Version:
Enhance Zod with real-world schema utilities for production-grade apps.
241 lines (228 loc) • 8.08 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
deepOmit: () => deepOmit,
deepPartial: () => deepPartial,
deepPick: () => deepPick,
deepRequired: () => deepRequired,
emailPasswordSchema: () => emailPasswordSchema,
flattenErrors: () => flattenErrors,
mergeSchemas: () => mergeSchemas,
refineObject: () => refineObject,
smartEnum: () => smartEnum,
zodDefault: () => zodDefault,
zodToJsonSchema: () => zodToJsonSchema
});
module.exports = __toCommonJS(src_exports);
// src/deepPartial.ts
var import_zod = require("zod");
function deepPartial(schema) {
if (schema instanceof import_zod.z.ZodObject) {
const shape = schema.shape;
const partialShape = {};
for (const key in shape) {
partialShape[key] = deepPartial(shape[key]);
}
return import_zod.z.object(partialShape).partial();
}
if (schema instanceof import_zod.z.ZodArray) {
return import_zod.z.array(deepPartial(schema.element));
}
if (schema instanceof import_zod.z.ZodTuple) {
return import_zod.z.tuple(schema.items.map(deepPartial));
}
if (schema instanceof import_zod.z.ZodRecord) {
return import_zod.z.record(deepPartial(schema.valueSchema));
}
if (schema instanceof import_zod.z.ZodMap) {
return import_zod.z.map(schema.keySchema, deepPartial(schema.valueSchema));
}
return schema.optional();
}
// src/deepRequired.ts
var import_zod2 = require("zod");
function deepRequired(schema) {
if (schema._def?.typeName === import_zod2.z.ZodFirstPartyTypeKind.ZodOptional || schema._def?.typeName === import_zod2.z.ZodFirstPartyTypeKind.ZodNullable) {
return deepRequired(schema._def.innerType);
}
if (schema instanceof import_zod2.z.ZodObject) {
const shape = schema.shape;
const requiredShape = {};
for (const key in shape) {
requiredShape[key] = deepRequired(shape[key]);
}
return import_zod2.z.object(requiredShape);
}
if (schema instanceof import_zod2.z.ZodArray) {
return import_zod2.z.array(deepRequired(schema.element));
}
if (schema instanceof import_zod2.z.ZodTuple) {
return import_zod2.z.tuple(schema.items.map(deepRequired));
}
if (schema instanceof import_zod2.z.ZodRecord) {
return import_zod2.z.record(deepRequired(schema.valueSchema));
}
if (schema instanceof import_zod2.z.ZodMap) {
return import_zod2.z.map(schema.keySchema, deepRequired(schema.valueSchema));
}
return schema;
}
// src/emailPasswordSchema.ts
var import_zod3 = require("zod");
function emailPasswordSchema(options) {
let password = import_zod3.z.string().min(options?.minPasswordLength || 8);
if (options?.requireSpecialChar) {
password = password.regex(/[^a-zA-Z0-9]/, "Password must contain a special character");
}
return import_zod3.z.object({
email: import_zod3.z.string().email(),
password
});
}
// src/smartEnum.ts
var import_zod4 = require("zod");
function smartEnum(values) {
return import_zod4.z.enum(values);
}
// src/flattenErrors.ts
function flattenErrors(error) {
return error.errors.map((e) => ({
path: e.path.map(String).join("."),
message: e.message
}));
}
// src/refineObject.ts
function refineObject(schema, refineFn, message) {
return schema.superRefine((data, ctx) => {
if (!refineFn(data)) {
ctx.addIssue({ code: "custom", message });
}
});
}
// src/deepOmit.ts
var import_zod5 = require("zod");
function deepOmit(schema, keys) {
if (schema instanceof import_zod5.z.ZodObject) {
const shape = schema.shape;
const newShape = {};
for (const key in shape) {
if (!keys.includes(key)) {
newShape[key] = deepOmit(shape[key], keys);
}
}
return import_zod5.z.object(newShape).strict();
}
if (schema instanceof import_zod5.z.ZodArray) {
return import_zod5.z.array(deepOmit(schema.element, keys));
}
if (schema instanceof import_zod5.z.ZodTuple) {
return import_zod5.z.tuple(schema.items.map((item) => deepOmit(item, keys)));
}
if (schema instanceof import_zod5.z.ZodRecord) {
return import_zod5.z.record(deepOmit(schema.valueSchema, keys));
}
if (schema instanceof import_zod5.z.ZodMap) {
return import_zod5.z.map(schema.keySchema, deepOmit(schema.valueSchema, keys));
}
return schema;
}
// src/deepPick.ts
var import_zod6 = require("zod");
function deepPick(schema, keys) {
if (schema instanceof import_zod6.z.ZodObject) {
const shape = schema.shape;
const newShape = {};
for (const key in shape) {
if (keys.includes(key)) {
newShape[key] = deepPick(shape[key], keys);
} else if (shape[key] instanceof import_zod6.z.ZodObject || shape[key] instanceof import_zod6.z.ZodArray) {
const nested = deepPick(shape[key], keys);
if (nested instanceof import_zod6.z.ZodObject && Object.keys(nested.shape ?? {}).length > 0 || nested instanceof import_zod6.z.ZodArray && (nested.element instanceof import_zod6.z.ZodObject && Object.keys(nested.element.shape ?? {}).length > 0 || !(nested.element instanceof import_zod6.z.ZodObject))) {
newShape[key] = nested;
}
}
}
return import_zod6.z.object(newShape).strict();
}
if (schema instanceof import_zod6.z.ZodArray) {
const pickedElement = deepPick(schema.element, keys);
if (pickedElement instanceof import_zod6.z.ZodObject && Object.keys(pickedElement.shape ?? {}).length === 0) {
return import_zod6.z.array(import_zod6.z.never());
}
return import_zod6.z.array(pickedElement);
}
if (schema instanceof import_zod6.z.ZodTuple) {
return import_zod6.z.tuple(schema.items.map((item) => deepPick(item, keys)));
}
if (schema instanceof import_zod6.z.ZodRecord) {
return import_zod6.z.record(deepPick(schema.valueSchema, keys));
}
if (schema instanceof import_zod6.z.ZodMap) {
return import_zod6.z.map(schema.keySchema, deepPick(schema.valueSchema, keys));
}
return schema;
}
// src/mergeSchemas.ts
function mergeSchemas(a, b) {
return a.merge(b);
}
// src/zodDefault.ts
function zodDefault(schema, defaultValue) {
return schema.default(defaultValue);
}
// src/zodToJsonSchema.ts
var import_zod7 = require("zod");
function zodToJsonSchema(schema) {
if (schema instanceof import_zod7.z.ZodObject) {
const shape = schema.shape;
const properties = {};
for (const key in shape) {
properties[key] = zodToJsonSchema(shape[key]);
}
return { type: "object", properties };
}
if (schema instanceof import_zod7.z.ZodString)
return { type: "string" };
if (schema instanceof import_zod7.z.ZodNumber)
return { type: "number" };
if (schema instanceof import_zod7.z.ZodBoolean)
return { type: "boolean" };
if (schema instanceof import_zod7.z.ZodArray)
return { type: "array", items: zodToJsonSchema(schema.element) };
if (schema._def?.typeName === import_zod7.z.ZodFirstPartyTypeKind.ZodOptional || schema._def?.typeName === import_zod7.z.ZodFirstPartyTypeKind.ZodNullable) {
return zodToJsonSchema(schema._def.innerType);
}
return {};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
deepOmit,
deepPartial,
deepPick,
deepRequired,
emailPasswordSchema,
flattenErrors,
mergeSchemas,
refineObject,
smartEnum,
zodDefault,
zodToJsonSchema
});