{"version":3,"file":"discriminated-union.cjs","names":["BaseSchema","obj"],"sources":["../../src/schemas/discriminated-union.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { BaseSchema } from \"../core/base\";\nimport type { CombinedStandardProps } from \"../core/types\";\nimport type { ObjectSchemaType } from \"./object\";\n\nexport class DiscriminatedUnionSchema<\n  D extends string,\n  T extends Record<string, unknown>,\n> extends BaseSchema<unknown, T> {\n  readonly discriminator: D;\n  readonly options: ObjectSchemaType<any>[];\n  private readonly map: Map<unknown, ObjectSchemaType<any>>;\n\n  constructor(discriminator: D, options: ObjectSchemaType<any>[]) {\n    super();\n    this.discriminator = discriminator;\n    this.options = options;\n    this.map = new Map();\n\n    for (const opt of options) {\n      const def = opt.definition[discriminator];\n      if (def && typeof def === \"object\" && \"jsonSchema\" in def) {\n        const j = (def as any).jsonSchema;\n        if (j && \"const\" in j) {\n          this.map.set(j.const, opt);\n        }\n      }\n    }\n\n    this.jsonSchema = {\n      oneOf: options.map((o) => o.jsonSchema),\n      discriminator: { propertyName: discriminator },\n    };\n  }\n\n  get [\"~standard\"](): CombinedStandardProps<unknown, T> {\n    return {\n      version: 1,\n      vendor: \"h-schema\",\n      jsonSchema: {\n        input: () => this.jsonSchema,\n        output: () => this.jsonSchema,\n      },\n      validate: (value: unknown) => {\n        if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n          return { issues: [{ message: `Expected object, received ${typeof value}` }] };\n        }\n        const obj = value as Record<string, unknown>;\n        const tag = obj[this.discriminator];\n        const opt = this.map.get(tag);\n        if (!opt) {\n          return {\n            issues: [\n              {\n                message: `Invalid discriminator value for ${this.discriminator}: ${String(tag)}`,\n                path: [this.discriminator],\n              },\n            ],\n          };\n        }\n        return opt[\"~standard\"].validate(value) as StandardSchemaV1.Result<T>;\n      },\n      types: {\n        input: {} as unknown,\n        output: {} as T,\n      },\n    };\n  }\n}\n"],"mappings":";;AAKA,IAAa,2BAAb,cAGUA,aAAAA,WAAuB;CAC/B;CACA;CACA;CAEA,YAAY,eAAkB,SAAkC;EAC9D,MAAM;EACN,KAAK,gBAAgB;EACrB,KAAK,UAAU;EACf,KAAK,sBAAM,IAAI,IAAI;EAEnB,KAAK,MAAM,OAAO,SAAS;GACzB,MAAM,MAAM,IAAI,WAAW;GAC3B,IAAI,OAAO,OAAO,QAAQ,YAAY,gBAAgB,KAAK;IACzD,MAAM,IAAK,IAAY;IACvB,IAAI,KAAK,WAAW,GAClB,KAAK,IAAI,IAAI,EAAE,OAAO,GAAG;GAE7B;EACF;EAEA,KAAK,aAAa;GAChB,OAAO,QAAQ,KAAK,MAAM,EAAE,UAAU;GACtC,eAAe,EAAE,cAAc,cAAc;EAC/C;CACF;CAEA,KAAK,eAAkD;EACrD,OAAO;GACL,SAAS;GACT,QAAQ;GACR,YAAY;IACV,aAAa,KAAK;IAClB,cAAc,KAAK;GACrB;GACA,WAAW,UAAmB;IAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,6BAA6B,OAAO,QAAQ,CAAC,EAAE;IAG9E,MAAM,MAAMC,MAAI,KAAK;IACrB,MAAM,MAAM,KAAK,IAAI,IAAI,GAAG;IAC5B,IAAI,CAAC,KACH,OAAO,EACL,QAAQ,CACN;KACE,SAAS,mCAAmC,KAAK,cAAc,IAAI,OAAO,GAAG;KAC7E,MAAM,CAAC,KAAK,aAAa;IAC3B,CACF,EACF;IAEF,OAAO,IAAI,YAAY,CAAC,SAAS,KAAK;GACxC;GACA,OAAO;IACL,OAAO,CAAC;IACR,QAAQ,CAAC;GACX;EACF;CACF;AACF"}