* The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor. * However, it only allows a union of objects, all of which need to share a discriminator property. This property must * have a different value for each object in the
(
discriminator: Discriminator,
options: Types,
params?: RawCreateParams
)
| 3180 | * @param params |
| 3181 | */ |
| 3182 | static create< |
| 3183 | Discriminator extends string, |
| 3184 | Types extends readonly [ |
| 3185 | ZodDiscriminatedUnionOption<Discriminator>, |
| 3186 | ...ZodDiscriminatedUnionOption<Discriminator>[], |
| 3187 | ], |
| 3188 | >( |
| 3189 | discriminator: Discriminator, |
| 3190 | options: Types, |
| 3191 | params?: RawCreateParams |
| 3192 | ): ZodDiscriminatedUnion<Discriminator, Types> { |
| 3193 | // Get all the valid discriminator values |
| 3194 | const optionsMap: Map<Primitive, Types[number]> = new Map(); |
| 3195 | |
| 3196 | // try { |
| 3197 | for (const type of options) { |
| 3198 | const discriminatorValues = getDiscriminator(type.shape[discriminator]); |
| 3199 | if (!discriminatorValues.length) { |
| 3200 | throw new Error( |
| 3201 | `A discriminator value for key \`${discriminator}\` could not be extracted from all schema options` |
| 3202 | ); |
| 3203 | } |
| 3204 | for (const value of discriminatorValues) { |
| 3205 | if (optionsMap.has(value)) { |
| 3206 | throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`); |
| 3207 | } |
| 3208 | |
| 3209 | optionsMap.set(value, type); |
| 3210 | } |
| 3211 | } |
| 3212 | |
| 3213 | return new ZodDiscriminatedUnion< |
| 3214 | Discriminator, |
| 3215 | // DiscriminatorValue, |
| 3216 | Types |
| 3217 | >({ |
| 3218 | typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion, |
| 3219 | discriminator, |
| 3220 | options, |
| 3221 | optionsMap, |
| 3222 | ...processCreateParams(params), |
| 3223 | }); |
| 3224 | } |
| 3225 | } |
| 3226 | |
| 3227 | /////////////////////////////////////////////// |
nothing calls this directly
no test coverage detected