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>

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