MCPcopy Index your code
hub / github.com/github/copilot-sdk / findDiscriminator

Function findDiscriminator

java/scripts/codegen/java.ts:273–302  ·  view source on GitHub ↗

* Find a discriminator property shared by all variants in an anyOf. * A discriminator is a property with a `const` value that uniquely identifies each variant.

(variants: JSONSchema7[])

Source from the content-addressed store, hash-verified

271 * A discriminator is a property with a `const` value that uniquely identifies each variant.
272 */
273function findDiscriminator(variants: JSONSchema7[]): DiscriminatorInfo | null {
274 if (variants.length === 0) return null;
275 const firstVariant = variants[0];
276 if (!firstVariant.properties) return null;
277
278 for (const [propName, propSchema] of Object.entries(firstVariant.properties).sort(([a], [b]) => a.localeCompare(b))) {
279 if (typeof propSchema !== "object") continue;
280 const schema = propSchema as JSONSchema7;
281 if (schema.const === undefined) continue;
282
283 const mapping = new Map<string, { value: unknown; schema: JSONSchema7 }>();
284 let isValidDiscriminator = true;
285
286 for (const variant of variants) {
287 if (!variant.properties) { isValidDiscriminator = false; break; }
288 const variantProp = variant.properties[propName];
289 if (typeof variantProp !== "object") { isValidDiscriminator = false; break; }
290 const variantSchema = variantProp as JSONSchema7;
291 if (variantSchema.const === undefined) { isValidDiscriminator = false; break; }
292 const key = String(variantSchema.const);
293 if (mapping.has(key)) { isValidDiscriminator = false; break; }
294 mapping.set(key, { value: variantSchema.const, schema: variant });
295 }
296
297 if (isValidDiscriminator && mapping.size === variants.length) {
298 return { property: propName, mapping };
299 }
300 }
301 return null;
302}
303
304/**
305 * Resolve anyOf variants, handling $ref to definitions.

Callers 4

generateRpcTypesFunction · 0.70
wrapperResultClassNameFunction · 0.70

Calls 2

StringFunction · 0.85
setMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…