fork of hey-api/openapi-ts because I need some additional things

Fix TypeScript errors in discriminator implementation

- Changed DiscriminatorInfo.values type from string[] to ReadonlyArray<string> to match discriminatorValues return type
- Added null check for array item access to prevent possibly undefined errors
- Changed required array mutation from push to spread operator to work with readonly arrays

Co-authored-by: mrlubos <12529395+mrlubos@users.noreply.github.com>

+20 -8
+10 -4
packages/openapi-ts/src/openApi/3.0.x/parser/schema.ts
··· 402 // Collect discriminator information to add after all compositions are processed 403 type DiscriminatorInfo = { 404 discriminator: NonNullable<SchemaObject['discriminator']>; 405 - values: string[]; 406 isRequired: boolean; 407 }; 408 const discriminatorsToAdd: DiscriminatorInfo[] = []; 409 const addedDiscriminators = new Set<string>(); ··· 486 487 discriminatorsToAdd.push({ 488 discriminator, 489 - values, 490 isRequired, 491 }); 492 addedDiscriminators.add(discriminator.propertyName); 493 } ··· 497 } 498 499 // Now add discriminators after all compositions have been processed 500 - for (const { discriminator, values, isRequired } of discriminatorsToAdd) { 501 // Get all discriminator values including children for union types 502 const allValues = getAllDiscriminatorValues({ 503 context, ··· 528 let inlineSchema: IR.SchemaObject | undefined; 529 for (let i = schemaItems.length - 1; i >= 0; i--) { 530 const item = schemaItems[i]; 531 // Check if this is not a $ref schema by looking for properties or checking if it came from an inline schema 532 if (item.type === 'object' || item.properties) { 533 inlineSchema = item; ··· 548 inlineSchema.required = []; 549 } 550 if (!inlineSchema.required.includes(discriminator.propertyName)) { 551 - inlineSchema.required.push(discriminator.propertyName); 552 } 553 } 554 } else {
··· 402 // Collect discriminator information to add after all compositions are processed 403 type DiscriminatorInfo = { 404 discriminator: NonNullable<SchemaObject['discriminator']>; 405 isRequired: boolean; 406 + values: ReadonlyArray<string>; 407 }; 408 const discriminatorsToAdd: DiscriminatorInfo[] = []; 409 const addedDiscriminators = new Set<string>(); ··· 486 487 discriminatorsToAdd.push({ 488 discriminator, 489 isRequired, 490 + values, 491 }); 492 addedDiscriminators.add(discriminator.propertyName); 493 } ··· 497 } 498 499 // Now add discriminators after all compositions have been processed 500 + for (const { discriminator, isRequired, values } of discriminatorsToAdd) { 501 // Get all discriminator values including children for union types 502 const allValues = getAllDiscriminatorValues({ 503 context, ··· 528 let inlineSchema: IR.SchemaObject | undefined; 529 for (let i = schemaItems.length - 1; i >= 0; i--) { 530 const item = schemaItems[i]; 531 + if (!item) { 532 + continue; 533 + } 534 // Check if this is not a $ref schema by looking for properties or checking if it came from an inline schema 535 if (item.type === 'object' || item.properties) { 536 inlineSchema = item; ··· 551 inlineSchema.required = []; 552 } 553 if (!inlineSchema.required.includes(discriminator.propertyName)) { 554 + inlineSchema.required = [ 555 + ...inlineSchema.required, 556 + discriminator.propertyName, 557 + ]; 558 } 559 } 560 } else {
+10 -4
packages/openapi-ts/src/openApi/3.1.x/parser/schema.ts
··· 484 // Collect discriminator information to add after all compositions are processed 485 type DiscriminatorInfo = { 486 discriminator: NonNullable<SchemaObject['discriminator']>; 487 - values: string[]; 488 isRequired: boolean; 489 }; 490 const discriminatorsToAdd: DiscriminatorInfo[] = []; 491 const addedDiscriminators = new Set<string>(); ··· 567 568 discriminatorsToAdd.push({ 569 discriminator, 570 - values, 571 isRequired, 572 }); 573 addedDiscriminators.add(discriminator.propertyName); 574 } ··· 578 } 579 580 // Now add discriminators after all compositions have been processed 581 - for (const { discriminator, values, isRequired } of discriminatorsToAdd) { 582 // Get all discriminator values including children for union types 583 const allValues = getAllDiscriminatorValues({ 584 context, ··· 609 let inlineSchema: IR.SchemaObject | undefined; 610 for (let i = schemaItems.length - 1; i >= 0; i--) { 611 const item = schemaItems[i]; 612 // Check if this is not a $ref schema by looking for properties or checking if it came from an inline schema 613 if (item.type === 'object' || item.properties) { 614 inlineSchema = item; ··· 629 inlineSchema.required = []; 630 } 631 if (!inlineSchema.required.includes(discriminator.propertyName)) { 632 - inlineSchema.required.push(discriminator.propertyName); 633 } 634 } 635 } else {
··· 484 // Collect discriminator information to add after all compositions are processed 485 type DiscriminatorInfo = { 486 discriminator: NonNullable<SchemaObject['discriminator']>; 487 isRequired: boolean; 488 + values: ReadonlyArray<string>; 489 }; 490 const discriminatorsToAdd: DiscriminatorInfo[] = []; 491 const addedDiscriminators = new Set<string>(); ··· 567 568 discriminatorsToAdd.push({ 569 discriminator, 570 isRequired, 571 + values, 572 }); 573 addedDiscriminators.add(discriminator.propertyName); 574 } ··· 578 } 579 580 // Now add discriminators after all compositions have been processed 581 + for (const { discriminator, isRequired, values } of discriminatorsToAdd) { 582 // Get all discriminator values including children for union types 583 const allValues = getAllDiscriminatorValues({ 584 context, ··· 609 let inlineSchema: IR.SchemaObject | undefined; 610 for (let i = schemaItems.length - 1; i >= 0; i--) { 611 const item = schemaItems[i]; 612 + if (!item) { 613 + continue; 614 + } 615 // Check if this is not a $ref schema by looking for properties or checking if it came from an inline schema 616 if (item.type === 'object' || item.properties) { 617 inlineSchema = item; ··· 632 inlineSchema.required = []; 633 } 634 if (!inlineSchema.required.includes(discriminator.propertyName)) { 635 + inlineSchema.required = [ 636 + ...inlineSchema.required, 637 + discriminator.propertyName, 638 + ]; 639 } 640 } 641 } else {