(schema: JSONSchema7)
| 693 | } |
| 694 | |
| 695 | function extractEventVariants(schema: JSONSchema7): EventVariant[] { |
| 696 | const definitions = schema.definitions as Record<string, JSONSchema7>; |
| 697 | const sessionEvent = definitions?.SessionEvent; |
| 698 | if (!sessionEvent?.anyOf) throw new Error("Schema must have SessionEvent definition with anyOf"); |
| 699 | |
| 700 | return (sessionEvent.anyOf as JSONSchema7[]) |
| 701 | .map((variant) => { |
| 702 | // Resolve $ref if present (1.0.35+ schema uses $ref to named definitions) |
| 703 | let resolved = variant; |
| 704 | if (variant.$ref) { |
| 705 | const refName = variant.$ref.replace(/^#\/definitions\//, ""); |
| 706 | resolved = definitions[refName]; |
| 707 | if (!resolved) throw new Error(`Unresolved $ref: ${variant.$ref}`); |
| 708 | } |
| 709 | const typeSchema = resolved.properties?.type as JSONSchema7; |
| 710 | const typeName = typeSchema?.const as string; |
| 711 | if (!typeName) throw new Error("Variant must have type.const"); |
| 712 | const baseName = toJavaClassName(typeName); |
| 713 | let dataSchema = resolved.properties?.data as JSONSchema7 | undefined; |
| 714 | // Resolve $ref on data schema if present |
| 715 | if (dataSchema?.$ref) { |
| 716 | const dataRefName = dataSchema.$ref.replace(/^#\/definitions\//, ""); |
| 717 | dataSchema = definitions[dataRefName]; |
| 718 | } |
| 719 | return { |
| 720 | typeName, |
| 721 | className: `${baseName}Event`, |
| 722 | dataSchema: dataSchema ?? null, |
| 723 | description: resolved.description, |
| 724 | stability: (variant as unknown as Record<string, unknown>).stability as string | undefined, |
| 725 | deprecated: (variant as unknown as Record<string, unknown>).deprecated === true, |
| 726 | }; |
| 727 | }) |
| 728 | .filter((v) => !EXCLUDED_EVENT_TYPES.has(v.typeName)); |
| 729 | } |
| 730 | |
| 731 | async function generateSessionEvents(schemaPath: string): Promise<void> { |
| 732 | console.log("\n📋 Generating session event classes..."); |
no test coverage detected
searching dependent graphs…