Skip to content

Commit 3285052

Browse files
committed
fixup!
* Simplify minItems / maxItems tuple generation Closes #2048
1 parent bf14226 commit 3285052

File tree

4 files changed

+16
-8
lines changed

4 files changed

+16
-8
lines changed

.changeset/clean-phones-deliver.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
"openapi-typescript": minor
3+
---
4+
5+
Extract types generation for Array-type schemas to `transformArraySchemaObject` method.
6+
Generate correct number of union members for `minItems` * `maxItems` unions.
7+
Generate readonly tuple members for `minItems` & `maxItems` unions.
8+
Generate readonly spread member for `prefixItems` tuple.
9+
Preserve `prefixItems` type members in `minItems` & `maxItems` tuples.
10+
Generate spread member for `prefixItems` tuple with no `minItems` / `maxItems` constraints.

packages/openapi-typescript/src/lib/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ export function scanDiscriminators(schema: OpenAPI3, options: OpenAPITSOptions)
250250
return;
251251
}
252252

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

256256
// the mapping can be inferred from the oneOf refs next to the discriminator object

packages/openapi-typescript/src/transform/schema-object.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,7 @@ function isArraySchemaObject(schemaObject: SchemaObject | ArraySchemaObject): sc
286286
* @param itemType The type to pad out the end of the array with
287287
*/
288288
function padTupleMembers(prefixTypes: readonly ts.TypeNode[], length: number, itemType: ts.TypeNode) {
289-
return Array.from({ length }).map((_, index) =>
290-
index < prefixTypes.length ? prefixTypes[index] : itemType
291-
);
289+
return Array.from({ length }).map((_, index) => (index < prefixTypes.length ? prefixTypes[index] : itemType));
292290
}
293291

294292
function toOptionsReadonly<TMembers extends ts.ArrayTypeNode | ts.TupleTypeNode>(

packages/openapi-typescript/test/transform/schema-object/array.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ describe("transformSchemaObject > array", () => {
4646
given: {
4747
type: "array",
4848
items: { type: "number" },
49-
prefixItems: [{ type: "number" }, { type: "number" }, { type: "number" }],
49+
prefixItems: [{ type: "string" }, { type: "boolean" }, { type: "string" }],
5050
},
5151
want: `[
52-
number,
53-
number,
54-
number,
52+
string,
53+
boolean,
54+
string,
5555
...number[]
5656
]`,
5757
},

0 commit comments

Comments
 (0)