Skip to content

Commit eb708a5

Browse files
author
Artem Parkhomenko
committed
Merge remote-tracking branch 'origin/master' into response-type-support
# Conflicts: # src/language/typescript/common/data/serialized-type.ts
2 parents 3b3af5d + 7448720 commit eb708a5

File tree

8 files changed

+70
-81
lines changed

8 files changed

+70
-81
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const serializeItemsObject = (from: Ref, itemsObject: ItemsObject): Eithe
1818
return pipe(serializeItemsObject(from, itemsObject.items), either.map(getSerializedArrayType()));
1919
}
2020
case 'string': {
21-
return right(getSerializedStringType(itemsObject.format));
21+
return getSerializedStringType(from, itemsObject.format);
2222
}
2323
case 'number': {
2424
return right(SERIALIZED_NUMBER_TYPE);

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ export const serializeParameterObject = (
2828
case 'formData': {
2929
switch (parameterObject.type) {
3030
case 'string': {
31-
return right(toSerializedParameter(getSerializedStringType(parameterObject.format)));
31+
return pipe(
32+
getSerializedStringType(from, parameterObject.format),
33+
either.map(toSerializedParameter),
34+
);
3235
}
3336
case 'number': {
3437
return right(toSerializedParameter(SERIALIZED_NUMBER_TYPE));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ const serializePrimitive = (from: Ref, schemaObject: PrimitiveSchemaObject): Eit
139139
return right(SERIALIZED_NULL_TYPE);
140140
}
141141
case 'string': {
142-
return right(getSerializedStringType(schemaObject.format));
142+
return getSerializedStringType(from, schemaObject.format);
143143
}
144144
case 'number': {
145145
return right(SERIALIZED_NUMBER_TYPE);

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const serializeSchemaObjectWithRecursion = (from: Ref, shouldTrackRecursion: boo
8080
case 'boolean':
8181
case 'integer':
8282
case 'number': {
83-
return pipe(serializePrimitive(from, schemaObject), getSerializedNullableType(isNullable), right);
83+
return pipe(serializePrimitive(from, schemaObject), either.map(getSerializedNullableType(isNullable)));
8484
}
8585
case 'array': {
8686
const { items } = schemaObject;
@@ -182,19 +182,19 @@ const serializeChildren = (
182182
: serializeSchemaObjectWithRecursion(from, false)(item),
183183
);
184184

185-
const serializePrimitive = (from: Ref, schemaObject: PrimitiveSchemaObject): SerializedType => {
185+
const serializePrimitive = (from: Ref, schemaObject: PrimitiveSchemaObject): Either<Error, SerializedType> => {
186186
switch (schemaObject.type) {
187187
case 'string': {
188-
return getSerializedStringType(schemaObject.format);
188+
return getSerializedStringType(from, schemaObject.format);
189189
}
190190
case 'number': {
191-
return SERIALIZED_NUMBER_TYPE;
191+
return right(SERIALIZED_NUMBER_TYPE);
192192
}
193193
case 'integer': {
194-
return SERIALIZED_INTEGER_TYPE;
194+
return right(SERIALIZED_INTEGER_TYPE);
195195
}
196196
case 'boolean': {
197-
return SERIALIZED_BOOLEAN_TYPE;
197+
return right(SERIALIZED_BOOLEAN_TYPE);
198198
}
199199
}
200200
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const serializeSchemaObjectWithRecursion = (
7070
return right(SERIALIZED_NULL_TYPE);
7171
}
7272
case 'string': {
73-
return right(getSerializedStringType(schemaObject.format));
73+
return getSerializedStringType(from, schemaObject.format);
7474
}
7575
case 'number': {
7676
return right(SERIALIZED_NUMBER_TYPE);

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

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import { JSONPrimitive } from '../../../../utils/io-ts';
1919
import { pipe } from 'fp-ts/lib/pipeable';
2020
import { nonEmptyArray, option } from 'fp-ts';
2121
import { none, Option, some } from 'fp-ts/lib/Option';
22+
import { utilsRef } from '../bundled/utils';
23+
import { Either } from 'fp-ts/lib/Either';
24+
import { combineEither } from '@devexperts/utils/dist/adt/either.utils';
2225

2326
export interface SerializedType {
2427
readonly type: string;
@@ -86,25 +89,35 @@ export const SERIALIZED_DATE_TYPE = serializedType(
8689
[],
8790
);
8891
export const SERIALIZED_STRING_TYPE = serializedType('string', 'string', [serializedDependency('string', 'io-ts')], []);
89-
export const getSerializedStringType = (format: Option<string>): SerializedType => {
90-
return pipe(
91-
format,
92-
option.chain(format => {
93-
// https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14
94-
switch (format) {
95-
case 'date-time': {
96-
return some(SERIALIZED_DATETIME_TYPE);
92+
export const getSerializedStringType = (from: Ref, format: Option<string>): Either<Error, SerializedType> => {
93+
return combineEither(utilsRef, utilsRef => {
94+
return pipe(
95+
format,
96+
option.chain(format => {
97+
// https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14
98+
switch (format) {
99+
case 'date-time': {
100+
return some(SERIALIZED_DATETIME_TYPE);
101+
}
102+
case 'date': {
103+
return some(
104+
serializedType(
105+
'Date',
106+
'DateFromISODateStringIO',
107+
[serializedDependency('DateFromISODateStringIO', getRelativePath(from, utilsRef))],
108+
[],
109+
),
110+
);
111+
}
112+
case 'binary': {
113+
return some(SERIALIZED_UNKNOWN_TYPE);
114+
}
97115
}
98-
case 'date': {
99-
return some(SERIALIZED_DATE_TYPE);
100-
}
101-
case 'binary':
102-
return some(SERIALIZED_UNKNOWN_TYPE);
103-
}
104-
return none;
105-
}),
106-
option.getOrElse(() => SERIALIZED_STRING_TYPE),
107-
);
116+
return none;
117+
}),
118+
option.getOrElse(() => SERIALIZED_STRING_TYPE),
119+
);
120+
});
108121
};
109122
export const SERIALIZED_NULL_TYPE = serializedType('null', 'nullType', [serializedDependency('nullType', 'io-ts')], []);
110123
export const getSerializedNullableType = (isNullable: boolean) => (type: SerializedType): SerializedType =>

test/specs/3.0/demo.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,15 @@ components:
126126
items:
127127
type: string
128128
nullable: true
129+
TestDate:
130+
type: object
131+
properties:
132+
foo:
133+
type: string
134+
format: date
135+
bar:
136+
type: string
137+
format: date-time
129138
requestBodies:
130139
RefRequestBody:
131140
description: ref request body

yarn.lock

Lines changed: 17 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,11 +1176,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
11761176
dependencies:
11771177
delayed-stream "~1.0.0"
11781178

1179-
commander@~2.20.0:
1180-
version "2.20.0"
1181-
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
1182-
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
1183-
11841179
comment-parser@^0.7.2:
11851180
version "0.7.2"
11861181
resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.2.tgz#baf6d99b42038678b81096f15b630d18142f4b8a"
@@ -2395,25 +2390,15 @@ growly@^1.3.0:
23952390
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
23962391
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
23972392

2398-
handlebars@^4.1.0:
2399-
version "4.1.2"
2400-
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
2401-
integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
2393+
handlebars@^4.1.0, handlebars@^4.1.2:
2394+
version "4.7.6"
2395+
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e"
2396+
integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
24022397
dependencies:
2398+
minimist "^1.2.5"
24032399
neo-async "^2.6.0"
2404-
optimist "^0.6.1"
2405-
source-map "^0.6.1"
2406-
optionalDependencies:
2407-
uglify-js "^3.1.4"
2408-
2409-
handlebars@^4.1.2:
2410-
version "4.4.2"
2411-
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.2.tgz#8810a9821a9d6d52cb2f57d326d6ce7c3dfe741d"
2412-
integrity sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==
2413-
dependencies:
2414-
neo-async "^2.6.0"
2415-
optimist "^0.6.1"
24162400
source-map "^0.6.1"
2401+
wordwrap "^1.0.0"
24172402
optionalDependencies:
24182403
uglify-js "^3.1.4"
24192404

@@ -3786,15 +3771,10 @@ [email protected]:
37863771
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
37873772
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
37883773

3789-
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
3790-
version "1.2.0"
3791-
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
3792-
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
3793-
3794-
minimist@~0.0.1:
3795-
version "0.0.10"
3796-
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
3797-
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
3774+
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
3775+
version "1.2.5"
3776+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
3777+
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
37983778

37993779
minipass@^2.2.1, minipass@^2.3.4:
38003780
version "2.3.5"
@@ -3883,9 +3863,9 @@ needle@^2.2.1:
38833863
sax "^1.2.4"
38843864

38853865
neo-async@^2.6.0:
3886-
version "2.6.1"
3887-
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
3888-
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
3866+
version "2.6.2"
3867+
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
3868+
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
38893869

38903870
nice-try@^1.0.4:
38913871
version "1.0.5"
@@ -4092,14 +4072,6 @@ ono@^5.0.1:
40924072
resolved "https://registry.yarnpkg.com/ono/-/ono-5.1.0.tgz#8cafa7e56afa2211ad63dd2eb798427e64f1a070"
40934073
integrity sha512-GgqRIUWErLX4l9Up0khRtbrlH8Fyj59A0nKv8V6pWEto38aUgnOGOOF7UmgFFLzFnDSc8REzaTXOc0hqEe7yIw==
40944074

4095-
optimist@^0.6.1:
4096-
version "0.6.1"
4097-
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
4098-
integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
4099-
dependencies:
4100-
minimist "~0.0.1"
4101-
wordwrap "~0.0.2"
4102-
41034075
optionator@^0.8.1:
41044076
version "0.8.2"
41054077
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
@@ -5516,12 +5488,9 @@ typescript@^3.6.3:
55165488
integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==
55175489

55185490
uglify-js@^3.1.4:
5519-
version "3.5.12"
5520-
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.12.tgz#6b759cabc08c3e91fe82323d6387019f0c5864cd"
5521-
integrity sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==
5522-
dependencies:
5523-
commander "~2.20.0"
5524-
source-map "~0.6.1"
5491+
version "3.10.4"
5492+
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.4.tgz#dd680f5687bc0d7a93b14a3482d16db6eba2bfbb"
5493+
integrity sha512-kBFT3U4Dcj4/pJ52vfjCSfyLyvG9VYYuGYPmrPvAxRw/i7xHiT4VvCev+uiEMcEEiu6UNB6KgWmGtSUYIWScbw==
55255494

55265495
undefsafe@^2.0.2:
55275496
version "2.0.2"
@@ -5735,12 +5704,7 @@ word-wrap@~1.2.3:
57355704
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
57365705
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
57375706

5738-
wordwrap@~0.0.2:
5739-
version "0.0.3"
5740-
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
5741-
integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
5742-
5743-
wordwrap@~1.0.0:
5707+
wordwrap@^1.0.0, wordwrap@~1.0.0:
57445708
version "1.0.0"
57455709
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
57465710
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=

0 commit comments

Comments
 (0)