{"version":3,"file":"instanceof-validator.mjs","names":[],"sources":["../../../../../../../@warlock.js/seal/src/validators/instanceof-validator.ts"],"sourcesContent":["import { instanceofRule } from \"../rules/common/instanceof\";\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\nimport { BaseValidator } from \"./base-validator\";\n\n/**\n * InstanceOf validator class\n *\n * Validates that the value is an instance of the given constructor (`value instanceof Ctor`).\n * Useful for File uploads, Buffer/Uint8Array payloads, and custom domain classes —\n * anywhere a runtime class identity is the right contract.\n *\n * Note: `Date` is already covered by `v.date()` with richer date-specific rules;\n * reach for `v.instanceof(Date)` only when you specifically want raw `instanceof`\n * semantics with no normalization.\n *\n * @example\n * v.instanceof(File)        // type: File\n * v.instanceof(Buffer)      // type: Buffer\n * v.instanceof(MyClass)     // type: MyClass\n */\nexport class InstanceOfValidator<T = unknown> extends BaseValidator {\n  public ctor: new (...args: any[]) => T;\n\n  public constructor(ctor: new (...args: any[]) => T, errorMessage?: string) {\n    super();\n    this.ctor = ctor;\n    this.addMutableRule(instanceofRule, errorMessage, { ctor, name: ctor.name || \"instance\" });\n  }\n\n  /**\n   * Check if value is an instance of the configured constructor\n   */\n  public matchesType(value: any): boolean {\n    return value instanceof this.ctor;\n  }\n\n  /**\n   * Clone the validator, preserving the target constructor.\n   *\n   * The base `clone()` only copies `BaseValidator` fields, so without this\n   * override a cloned `instanceof` validator loses its `ctor` reference and\n   * `matchesType()` would throw on the next call.\n   */\n  public override clone(): this {\n    const cloned = super.clone();\n    cloned.ctor = this.ctor;\n    return cloned;\n  }\n\n  /**\n   * @inheritdoc\n   *\n   * Class instances are not representable in JSON Schema — returns an empty\n   * schema (permissive). Consumers serializing to OpenAPI should attach an\n   * appropriate format manually if needed (e.g. `{ type: \"string\", format: \"binary\" }`\n   * for `File`).\n   */\n  public override toJsonSchema(_target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\n    return {};\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,IAAa,sBAAb,cAAsD,cAAc;CAGlE,AAAO,YAAY,MAAiC,cAAuB;EACzE,MAAM;EACN,KAAK,OAAO;EACZ,KAAK,eAAe,gBAAgB,cAAc;GAAE;GAAM,MAAM,KAAK,QAAQ;EAAW,CAAC;CAC3F;;;;CAKA,AAAO,YAAY,OAAqB;EACtC,OAAO,iBAAiB,KAAK;CAC/B;;;;;;;;CASA,AAAgB,QAAc;EAC5B,MAAM,SAAS,MAAM,MAAM;EAC3B,OAAO,OAAO,KAAK;EACnB,OAAO;CACT;;;;;;;;;CAUA,AAAgB,aAAa,UAA4B,iBAAmC;EAC1F,OAAO,CAAC;CACV;AACF"}