{"version":3,"file":"union-validator.mjs","names":[],"sources":["../../../../../../../@warlock.js/seal/src/validators/union-validator.ts"],"sourcesContent":["import { unionRule } from \"../rules\";\r\nimport { BaseValidator } from \"./base-validator\";\r\nimport { getRuleOptions } from \"../standard-schema/json-schema\";\r\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\r\n\r\n/**\r\n * Union validator class - validates value against multiple validator types\r\n *\r\n * Tries each validator in order until one passes. If a validator's matchesType()\r\n * returns false, it's skipped for optimization. First validator that both matches\r\n * the type and passes validation wins.\r\n *\r\n * @example\r\n * ```ts\r\n * // Accept email or username\r\n * const identifier = v.union([\r\n *   v.string().email(),\r\n *   v.string().alphanumeric().min(3).max(20)\r\n * ]);\r\n *\r\n * // Accept different types\r\n * const customValue = v.union([\r\n *   v.string().required(),\r\n *   v.number().required(),\r\n *   v.boolean().required(),\r\n *   v.file().required()\r\n * ]);\r\n * ```\r\n */\r\nexport class UnionValidator extends BaseValidator {\r\n  /**\r\n   * Set the validators to try for union validation\r\n   *\r\n   * @param validators - Array of validators to try\r\n   * @param errorMessage - Optional custom error message if all validators fail\r\n   * @returns This validator for chaining\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * new UnionValidator()\r\n   *   .union([v.string(), v.number()], 'Must be string or number');\r\n   * ```\r\n   */\r\n  public union(validators: BaseValidator[], errorMessage?: string) {\r\n    return this.addRule(unionRule, errorMessage, { validators });\r\n  }\r\n\r\n  /**\r\n   * @inheritdoc\r\n   *\r\n   * Generates `{ oneOf: [...] }` by mapping each sub-validator to its JSON Schema.\r\n   *\r\n   * @example\r\n   * ```ts\r\n   * v.union([v.string(), v.number()]).toJsonSchema(\"draft-2020-12\")\r\n   * // → { oneOf: [{ type: \"string\" }, { type: \"number\" }] }\r\n   * ```\r\n   */\r\n  public override toJsonSchema(target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\r\n    const opts = getRuleOptions(this.rules, \"union\");\r\n    const validators = (opts?.validators ?? []) as BaseValidator[];\r\n\r\n    return {\r\n      oneOf: validators.map(v => v.toJsonSchema(target)),\r\n    };\r\n  }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,IAAa,iBAAb,cAAoC,cAAc;;;;;;;;;;;;;;CAchD,AAAO,MAAM,YAA6B,cAAuB;EAC/D,OAAO,KAAK,QAAQ,WAAW,cAAc,EAAE,WAAW,CAAC;CAC7D;;;;;;;;;;;;CAaA,AAAgB,aAAa,SAA2B,iBAAmC;EAIzF,OAAO,EACL,QAJW,eAAe,KAAK,OAAO,OACjB,CAAC,EAAE,cAAc,CAAC,EAGtB,CAAC,KAAI,MAAK,EAAE,aAAa,MAAM,CAAC,EACnD;CACF;AACF"}