Skip to content

Commit

Permalink
fixup!
Browse files Browse the repository at this point in the history
* Simplify minItems / maxItems tuple generation

Closes #2048
  • Loading branch information
duncanbeevers committed Feb 10, 2025
1 parent bf14226 commit 3285052
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 8 deletions.
10 changes: 10 additions & 0 deletions .changeset/clean-phones-deliver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"openapi-typescript": minor
---

Extract types generation for Array-type schemas to `transformArraySchemaObject` method.
Generate correct number of union members for `minItems` * `maxItems` unions.
Generate readonly tuple members for `minItems` & `maxItems` unions.
Generate readonly spread member for `prefixItems` tuple.
Preserve `prefixItems` type members in `minItems` & `maxItems` tuples.
Generate spread member for `prefixItems` tuple with no `minItems` / `maxItems` constraints.
2 changes: 1 addition & 1 deletion packages/openapi-typescript/src/lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ export function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions)
return;
}

const oneOf: (SchemaObject | ReferenceObject)[] = obj.oneOf;
const oneOf = obj.oneOf as readonly (SchemaObject | ReferenceObject)[];
const mapping: InternalDiscriminatorMapping = {};

// the mapping can be inferred from the oneOf refs next to the discriminator object
Expand Down
4 changes: 1 addition & 3 deletions packages/openapi-typescript/src/transform/schema-object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,7 @@ function isArraySchemaObject(schemaObject: SchemaObject | ArraySchemaObject): sc
* @param itemType The type to pad out the end of the array with
*/
function padTupleMembers(prefixTypes: readonly ts.TypeNode[], length: number, itemType: ts.TypeNode) {
return Array.from({ length }).map((_, index) =>
index < prefixTypes.length ? prefixTypes[index] : itemType
);
return Array.from({ length }).map((_, index) => (index < prefixTypes.length ? prefixTypes[index] : itemType));
}

function toOptionsReadonly<TMembers extends ts.ArrayTypeNode | ts.TupleTypeNode>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ describe("transformSchemaObject > array", () => {
given: {
type: "array",
items: { type: "number" },
prefixItems: [{ type: "number" }, { type: "number" }, { type: "number" }],
prefixItems: [{ type: "string" }, { type: "boolean" }, { type: "string" }],
},
want: `[
number,
number,
number,
string,
boolean,
string,
...number[]
]`,
},
Expand Down

0 comments on commit 3285052

Please sign in to comment.