{"version":3,"sources":["../../src/facade/validate.ts"],"sourcesContent":["import Definitions from '../core/definitions';\r\nimport Schema from '../schema/schema';\r\nimport { loadCollection, loadObject } from '../schema/load-processor';\r\n\r\n/**\r\n * Result of a validation operation.\r\n */\r\nexport interface ValidationResult<T = any> {\r\n  /** True if validation succeeded, false otherwise. */\r\n  valid: boolean;\r\n  /** List of errors found during validation. Empty if valid is true. */\r\n  errors: Error[];\r\n  /** The validated data, converted to a plain JavaScript object/array. Undefined if valid is false. */\r\n  data?: T;\r\n}\r\n\r\nfunction resolveSchemaAndDefs(\r\n  schemaOrDefs: Schema | Definitions,\r\n  defs?: Definitions\r\n): { schema: Schema; defs?: Definitions } {\r\n  if (schemaOrDefs instanceof Definitions) {\r\n    const resolved = schemaOrDefs.defaultSchema;\r\n    if (!resolved) {\r\n      throw new Error(\"Definitions does not contain a default schema ('$schema')\");\r\n    }\r\n    return { schema: resolved, defs: schemaOrDefs };\r\n  }\r\n\r\n  return { schema: schemaOrDefs, defs };\r\n}\r\n\r\n/**\r\n * Validates a plain JavaScript object against a schema.\r\n *\r\n * @param data - The object to validate.\r\n * @param schemaOrDefs - The Schema to validate against, or Definitions containing a `$schema`.\r\n * @param defs - Optional Definitions context (if schema is passed as first arg).\r\n * @returns ValidationResult containing `valid` status, `errors`, and processed `data`.\r\n *\r\n * @example\r\n * ```typescript\r\n * const schema = io.schema`{ name: string, age: int }`;\r\n * const result = validateObject({ name: 'Alice', age: 30 }, schema);\r\n * if (result.valid) {\r\n *   console.log(result.data);\r\n * } else {\r\n *   console.error(result.errors);\r\n * }\r\n * ```\r\n */\r\nexport function validateObject(data: object, schemaOrDefs: Schema | Definitions, defs?: Definitions): ValidationResult<object> {\r\n  const errors: Error[] = [];\r\n\r\n  try {\r\n    const { schema, defs: resolvedDefs } = resolveSchemaAndDefs(schemaOrDefs, defs);\r\n    const obj = loadObject(data, schema, resolvedDefs);\r\n    return { valid: true, errors, data: obj.toJSON() };\r\n  } catch (err) {\r\n    errors.push(err instanceof Error ? err : new Error(String(err)));\r\n    return { valid: false, errors };\r\n  }\r\n}\r\n\r\n/**\r\n * Validates an array of objects against a schema.\r\n *\r\n * @param data - The array to validate.\r\n * @param schemaOrDefs - The Schema to validate against, or Definitions containing a `$schema`.\r\n * @param defs - Optional Definitions context.\r\n * @returns ValidationResult containing `valid` status, `errors`, and processed `data` array.\r\n */\r\nexport function validateCollection(data: any[], schemaOrDefs: Schema | Definitions, defs?: Definitions): ValidationResult<any[]> {\r\n  const errors: Error[] = [];\r\n\r\n  try {\r\n    const { schema, defs: resolvedDefs } = resolveSchemaAndDefs(schemaOrDefs, defs);\r\n    const col = loadCollection(data, schema, resolvedDefs, errors);\r\n\r\n    if (errors.length > 0) {\r\n      return { valid: false, errors };\r\n    }\r\n\r\n    return { valid: true, errors, data: col.toJSON() };\r\n  } catch (err) {\r\n    errors.push(err instanceof Error ? err : new Error(String(err)));\r\n    return { valid: false, errors };\r\n  }\r\n}\r\n\r\n/**\r\n * Validates data (object or array) against a schema.\r\n * Automatically delegates to `validateObject` or `validateCollection` based on input type.\r\n *\r\n * @param data - The object or array to validate.\r\n * @param schemaOrDefs - The Schema to validate against, or Definitions containing a `$schema`.\r\n * @param defs - Optional Definitions context.\r\n * @returns ValidationResult.\r\n */\r\nexport function validate(data: any, schemaOrDefs: Schema | Definitions, defs?: Definitions): ValidationResult {\r\n  if (Array.isArray(data)) {\r\n    return validateCollection(data, schemaOrDefs, defs);\r\n  }\r\n\r\n  return validateObject(data, schemaOrDefs, defs);\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAwB;AAExB,4BAA2C;AAc3C,SAAS,qBACP,cACA,MACwC;AACxC,MAAI,wBAAwB,mBAAAA,SAAa;AACvC,UAAM,WAAW,aAAa;AAC9B,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AACA,WAAO,EAAE,QAAQ,UAAU,MAAM,aAAa;AAAA,EAChD;AAEA,SAAO,EAAE,QAAQ,cAAc,KAAK;AACtC;AAqBO,SAAS,eAAe,MAAc,cAAoC,MAA8C;AAC7H,QAAM,SAAkB,CAAC;AAEzB,MAAI;AACF,UAAM,EAAE,QAAQ,MAAM,aAAa,IAAI,qBAAqB,cAAc,IAAI;AAC9E,UAAM,UAAM,kCAAW,MAAM,QAAQ,YAAY;AACjD,WAAO,EAAE,OAAO,MAAM,QAAQ,MAAM,IAAI,OAAO,EAAE;AAAA,EACnD,SAAS,KAAK;AACZ,WAAO,KAAK,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC/D,WAAO,EAAE,OAAO,OAAO,OAAO;AAAA,EAChC;AACF;AAUO,SAAS,mBAAmB,MAAa,cAAoC,MAA6C;AAC/H,QAAM,SAAkB,CAAC;AAEzB,MAAI;AACF,UAAM,EAAE,QAAQ,MAAM,aAAa,IAAI,qBAAqB,cAAc,IAAI;AAC9E,UAAM,UAAM,sCAAe,MAAM,QAAQ,cAAc,MAAM;AAE7D,QAAI,OAAO,SAAS,GAAG;AACrB,aAAO,EAAE,OAAO,OAAO,OAAO;AAAA,IAChC;AAEA,WAAO,EAAE,OAAO,MAAM,QAAQ,MAAM,IAAI,OAAO,EAAE;AAAA,EACnD,SAAS,KAAK;AACZ,WAAO,KAAK,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAC/D,WAAO,EAAE,OAAO,OAAO,OAAO;AAAA,EAChC;AACF;AAWO,SAAS,SAAS,MAAW,cAAoC,MAAsC;AAC5G,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,mBAAmB,MAAM,cAAc,IAAI;AAAA,EACpD;AAEA,SAAO,eAAe,MAAM,cAAc,IAAI;AAChD;","names":["Definitions"]}