"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.$ZodFunction = void 0; exports.function = _function; const api_js_1 = require("./api.cjs"); const parse_js_1 = require("./parse.cjs"); const schemas = __importStar(require("./schemas.cjs")); const schemas_js_1 = require("./schemas.cjs"); class $ZodFunction { constructor(def) { this._def = def; this.def = def; } implement(func) { if (typeof func !== "function") { throw new Error("implement() must be called with a function"); } const impl = ((...args) => { const parsedArgs = this._def.input ? (0, parse_js_1.parse)(this._def.input, args, undefined, { callee: impl }) : args; if (!Array.isArray(parsedArgs)) { throw new Error("Invalid arguments schema: not an array or tuple schema."); } const output = func(...parsedArgs); return this._def.output ? (0, parse_js_1.parse)(this._def.output, output, undefined, { callee: impl }) : output; }); return impl; } implementAsync(func) { if (typeof func !== "function") { throw new Error("implement() must be called with a function"); } const impl = (async (...args) => { const parsedArgs = this._def.input ? await (0, parse_js_1.parseAsync)(this._def.input, args, undefined, { callee: impl }) : args; if (!Array.isArray(parsedArgs)) { throw new Error("Invalid arguments schema: not an array or tuple schema."); } const output = await func(...parsedArgs); return this._def.output ? (0, parse_js_1.parseAsync)(this._def.output, output, undefined, { callee: impl }) : output; }); return impl; } input(...args) { const F = this.constructor; if (Array.isArray(args[0])) { return new F({ type: "function", input: new schemas_js_1.$ZodTuple({ type: "tuple", items: args[0], rest: args[1], }), output: this._def.output, }); } return new F({ type: "function", input: args[0], output: this._def.output, }); } output(output) { const F = this.constructor; return new F({ type: "function", input: this._def.input, output, }); } } exports.$ZodFunction = $ZodFunction; function _function(params) { return new $ZodFunction({ type: "function", input: Array.isArray(params?.input) ? (0, api_js_1._tuple)(schemas.$ZodTuple, params?.input) : (params?.input ?? (0, api_js_1._array)(schemas.$ZodArray, (0, api_js_1._unknown)(schemas.$ZodUnknown))), output: params?.output ?? (0, api_js_1._unknown)(schemas.$ZodUnknown), }); }