Skip to content

Commit 19eed5b

Browse files
authored
Merge branch 'master' into feature/arbitrary-file-downloads-for-oas-3
2 parents 4529b1c + 8fa2b05 commit 19eed5b

File tree

12 files changed

+144
-57
lines changed

12 files changed

+144
-57
lines changed

CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
1-
# [2.0.0-alpha.25](https://github.com/devexperts/swagger-codegen-ts/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-05-25)
1+
# [2.0.0-alpha.26](https://github.com/devexperts/swagger-codegen-ts/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2021-07-14)
2+
3+
4+
### Features
5+
6+
* **oas3:** Support nonEmptyArray for arrays with minItems > 0 ([5038b65](https://github.com/devexperts/swagger-codegen-ts/commit/5038b65))
7+
8+
9+
### BREAKING CHANGES
10+
11+
* **oas3:** getSerializedArrayType now takes minItems as first argument
12+
13+
14+
15+
# [2.0.0-alpha.25](https://github.com/devexperts/swagger-codegen-ts/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2021-05-27)
216

317

418
### Bug Fixes
519

20+
* **deps:** fixing some dependabot alerts ([790d5ff](https://github.com/devexperts/swagger-codegen-ts/commit/790d5ff))
21+
* **deps:** fixing vulnerable minimist version ([9d27320](https://github.com/devexperts/swagger-codegen-ts/commit/9d27320))
622
* fix path to utils file when using date types ([#131](https://github.com/devexperts/swagger-codegen-ts/issues/131)) ([7448720](https://github.com/devexperts/swagger-codegen-ts/commit/7448720)), closes [#117](https://github.com/devexperts/swagger-codegen-ts/issues/117)
723

824

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@devexperts/swagger-codegen-ts",
3-
"version": "2.0.0-alpha.25",
3+
"version": "2.0.0-alpha.26",
44
"description": "TS generator for swagger spec",
55
"main": "dist/index.js",
66
"scripts": {

src/language/typescript/2.0/serializers/items-object.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import { Ref } from '../../../../utils/ref';
1111
import { pipe } from 'fp-ts/lib/pipeable';
1212
import { either } from 'fp-ts';
1313
import { Either, right } from 'fp-ts/lib/Either';
14+
import { none } from 'fp-ts/lib/Option';
1415

1516
export const serializeItemsObject = (from: Ref, itemsObject: ItemsObject): Either<Error, SerializedType> => {
1617
switch (itemsObject.type) {
1718
case 'array': {
18-
return pipe(serializeItemsObject(from, itemsObject.items), either.map(getSerializedArrayType()));
19+
return pipe(serializeItemsObject(from, itemsObject.items), either.map(getSerializedArrayType(none)));
1920
}
2021
case 'string': {
2122
return getSerializedStringType(from, itemsObject.format);

src/language/typescript/2.0/serializers/parameter-object.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { fromSerializedType, SerializedParameter } from '../../common/data/seria
1515
import { pipe } from 'fp-ts/lib/pipeable';
1616
import { either, option } from 'fp-ts';
1717
import { constFalse } from 'fp-ts/lib/function';
18+
import { none } from 'fp-ts/lib/Option';
1819

1920
export const serializeParameterObject = (
2021
from: Ref,
@@ -45,7 +46,7 @@ export const serializeParameterObject = (
4546
case 'array': {
4647
return pipe(
4748
serializeItemsObject(from, parameterObject.items),
48-
either.map(getSerializedArrayType()),
49+
either.map(getSerializedArrayType(none)),
4950
either.map(toSerializedParameter),
5051
);
5152
}

src/language/typescript/3.0/serializers/__tests__/schema-object.spec.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,21 @@ describe('SchemaObject', () => {
7272
format: constant(none),
7373
deprecated: constant(none),
7474
nullable: constant(none),
75+
minItems: constant(none),
76+
maxItems: constant(none),
7577
}),
7678
format: constant(none),
7779
deprecated: constant(none),
7880
nullable: constant(none),
81+
minItems: constant(none),
82+
maxItems: constant(none),
7983
});
8084
assert(
8185
property($refArbitrary, schema, string(), (from, schema, name) => {
8286
const expected = pipe(
8387
schema.items,
8488
serializeSchemaObject(from, name),
85-
either.map(getSerializedArrayType(name)),
89+
either.map(getSerializedArrayType(none, name)),
8690
);
8791
const serialized = pipe(schema, serializeSchemaObject(from, name));
8892
expect(serialized).toEqual(expected);
@@ -98,7 +102,11 @@ describe('SchemaObject', () => {
98102
$ref: $refArbitrary.$ref,
99103
},
100104
});
101-
const expected = pipe($refArbitrary, getSerializedRefType(from), getSerializedArrayType(name));
105+
const expected = pipe(
106+
$refArbitrary,
107+
getSerializedRefType(from),
108+
getSerializedArrayType(none, name),
109+
);
102110
expect(pipe(schema, reportIfFailed, either.chain(serializeSchemaObject(from, name)))).toEqual(
103111
right(expected),
104112
);
@@ -125,7 +133,7 @@ describe('SchemaObject', () => {
125133
const expected = pipe(
126134
ref,
127135
getSerializedRefType(ref),
128-
getSerializedArrayType(undefined),
136+
getSerializedArrayType(none, undefined),
129137
getSerializedOptionPropertyType('children', true),
130138
getSerializedObjectType(undefined),
131139
getSerializedRecursiveType(ref, true),

src/language/typescript/3.0/serializers/schema-object.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,14 @@ const serializeSchemaObjectWithRecursion = (from: Ref, shouldTrackRecursion: boo
8787
const serialized = ReferenceObjectCodec.is(items)
8888
? pipe(
8989
fromString(items.$ref),
90-
mapLeft(() => new Error(`Unable to serialize SchemaObjeft array items ref "${items.$ref}"`)),
90+
mapLeft(() => new Error(`Unable to serialize SchemaObject array items ref "${items.$ref}"`)),
9191
either.map(getSerializedRefType(from)),
9292
)
9393
: pipe(items, serializeSchemaObjectWithRecursion(from, false, undefined));
94+
9495
return pipe(
9596
serialized,
96-
either.map(getSerializedArrayType(name)),
97+
either.map(getSerializedArrayType(schemaObject.minItems, name)),
9798
either.map(getSerializedNullableType(isNullable)),
9899
);
99100
}
@@ -109,7 +110,7 @@ const serializeSchemaObjectWithRecursion = (from: Ref, shouldTrackRecursion: boo
109110
mapLeft(
110111
() =>
111112
new Error(
112-
`Unablew to serialize SchemaObject additionalProperties ref "${additionalProperties.$ref}"`,
113+
`Unable to serialize SchemaObject additionalProperties ref "${additionalProperties.$ref}"`,
113114
),
114115
),
115116
either.map(getSerializedRefType(from)),

src/language/typescript/asyncapi-2.0.0/serializers/schema-object.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { ReferenceObject, ReferenceObjectCodec } from '../../../../schema/asynca
3636
import { traverseNEAEither } from '../../../../utils/either';
3737
import { constFalse } from 'fp-ts/lib/function';
3838
import { sequenceEither } from '@devexperts/utils/dist/adt/either.utils';
39-
import { Option } from 'fp-ts/lib/Option';
39+
import { none, Option } from 'fp-ts/lib/Option';
4040

4141
export const serializeSchemaObject = (
4242
from: Ref,
@@ -192,5 +192,5 @@ const serializeArray = (
192192
const serialized = ReferenceObjectCodec.is(items)
193193
? pipe(fromString(items.$ref), either.map(getSerializedRefType(from)))
194194
: serializeSchemaObjectWithRecursion(from, items, false);
195-
return pipe(serialized, either.map(getSerializedArrayType(name)));
195+
return pipe(serialized, either.map(getSerializedArrayType(none, name)));
196196
};

src/language/typescript/common/data/__tests__/serialized-type.spec.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ describe('SerializedType', () => {
3535
it('getSerializedArrayType', () => {
3636
assert(
3737
property(serializedTypeArbitrary, name, (s, name) => {
38-
expect(pipe(s, getSerializedArrayType(name))).toEqual(
38+
expect(pipe(s, getSerializedArrayType(none, name))).toEqual(
3939
serializedType(
4040
`Array<${s.type}>`,
4141
`array(${s.io}${when(name !== undefined, `, '${name}'`)})`,
@@ -46,6 +46,24 @@ describe('SerializedType', () => {
4646
}),
4747
);
4848
});
49+
it('getSerializedArrayType with minItems not 0', () => {
50+
assert(
51+
property(serializedTypeArbitrary, name, (s, name) => {
52+
expect(pipe(s, getSerializedArrayType(some(1), name))).toEqual(
53+
serializedType(
54+
`NonEmptyArray<${s.type}>`,
55+
`nonEmptyArray(${s.io}${when(name !== undefined, `, '${name}'`)})`,
56+
[
57+
...s.dependencies,
58+
serializedDependency('nonEmptyArray', 'io-ts-types/lib/nonEmptyArray'),
59+
serializedDependency('NonEmptyArray', 'fp-ts/lib/NonEmptyArray'),
60+
],
61+
s.refs,
62+
),
63+
);
64+
}),
65+
);
66+
});
4967
it('getSerializedPropertyType', () => {
5068
assert(
5169
property(string(), serializedTypeArbitrary, boolean(), (name, s, isRequired) => {

src/language/typescript/common/data/serialized-type.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { head, NonEmptyArray } from 'fp-ts/lib/NonEmptyArray';
1818
import { JSONPrimitive } from '../../../../utils/io-ts';
1919
import { pipe } from 'fp-ts/lib/pipeable';
2020
import { nonEmptyArray, option } from 'fp-ts';
21-
import { none, Option, some } from 'fp-ts/lib/Option';
21+
import { none, Option, some, exists } from 'fp-ts/lib/Option';
2222
import { utilsRef } from '../bundled/utils';
2323
import { Either } from 'fp-ts/lib/Either';
2424
import { combineEither } from '@devexperts/utils/dist/adt/either.utils';
@@ -157,12 +157,30 @@ export const SERIALIZED_NULL_TYPE = serializedType('null', 'nullType', [serializ
157157
export const getSerializedNullableType = (isNullable: boolean) => (type: SerializedType): SerializedType =>
158158
isNullable ? getSerializedUnionType([type, SERIALIZED_NULL_TYPE]) : type;
159159

160-
export const getSerializedArrayType = (name?: string) => (serialized: SerializedType): SerializedType =>
161-
serializedType(
162-
`Array<${serialized.type}>`,
163-
`array(${serialized.io}${when(name !== undefined, `, '${name}'`)})`,
164-
[...serialized.dependencies, serializedDependency('array', 'io-ts')],
165-
serialized.refs,
160+
export const getSerializedArrayType = (minItems: Option<number>, name?: string) => (
161+
serialized: SerializedType,
162+
): SerializedType =>
163+
pipe(
164+
minItems,
165+
exists(minItems => minItems > 0),
166+
isNonEmpty =>
167+
isNonEmpty
168+
? serializedType(
169+
`NonEmptyArray<${serialized.type}>`,
170+
`nonEmptyArray(${serialized.io}${when(name !== undefined, `, '${name}'`)})`,
171+
[
172+
...serialized.dependencies,
173+
serializedDependency('nonEmptyArray', 'io-ts-types/lib/nonEmptyArray'),
174+
serializedDependency('NonEmptyArray', 'fp-ts/lib/NonEmptyArray'),
175+
],
176+
serialized.refs,
177+
)
178+
: serializedType(
179+
`Array<${serialized.type}>`,
180+
`array(${serialized.io}${when(name !== undefined, `, '${name}'`)})`,
181+
[...serialized.dependencies, serializedDependency('array', 'io-ts')],
182+
serialized.refs,
183+
),
166184
);
167185

168186
export const getSerializedRefType = (from: Ref) => (to: Ref): SerializedType => {

src/schema/3.0/schema-object.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@ import { array, boolean, intersection, literal, record, recursion, string, type,
22
import { ReferenceObject, ReferenceObjectCodec } from './reference-object';
33
import { Option } from 'fp-ts/lib/Option';
44
import { optionFromNullable } from 'io-ts-types/lib/optionFromNullable';
5-
import { Codec, JSONPrimitive, JSONPrimitiveCodec } from '../../utils/io-ts';
5+
import { Codec, JSONPrimitive, JSONPrimitiveCodec, numberOption } from '../../utils/io-ts';
66
import { NonEmptyArray } from 'fp-ts/lib/NonEmptyArray';
77
import { nonEmptyArray } from 'io-ts-types/lib/nonEmptyArray';
88

99
export interface BaseSchemaObject {
1010
readonly format: Option<string>;
1111
readonly deprecated: Option<boolean>;
1212
readonly nullable: Option<boolean>;
13+
readonly maxItems: Option<number>;
14+
readonly minItems: Option<number>;
1315
}
1416

1517
const BaseSchemaObjectCodec: Codec<BaseSchemaObject> = type({
1618
format: optionFromNullable(string),
1719
deprecated: optionFromNullable(boolean),
1820
nullable: optionFromNullable(boolean),
21+
maxItems: numberOption,
22+
minItems: numberOption,
1923
});
2024

2125
export interface EnumSchemaObject extends BaseSchemaObject {

0 commit comments

Comments
 (0)