UNPKG

zod-prime

Version:

Enhance Zod with real-world schema utilities for production-grade apps.

241 lines (228 loc) 8.08 kB
"use strict"; 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 });