@outfoxx/sunday 1.0.9 → 1.1.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/LICENSE.txt +203 -0
  2. package/README.md +35 -2
  3. package/dist/any-type.d.ts +2 -0
  4. package/dist/any-type.js +13 -0
  5. package/dist/any-type.js.map +1 -1
  6. package/dist/class-type.d.ts +2 -2
  7. package/dist/class-type.js +13 -0
  8. package/dist/class-type.js.map +1 -1
  9. package/dist/date-time-types.d.ts +2 -7
  10. package/dist/date-time-types.js +15 -4
  11. package/dist/date-time-types.js.map +1 -1
  12. package/dist/event-parser.d.ts +17 -0
  13. package/dist/event-parser.js +153 -0
  14. package/dist/event-parser.js.map +1 -0
  15. package/dist/fetch-event-source.d.ts +12 -10
  16. package/dist/fetch-event-source.js +154 -138
  17. package/dist/fetch-event-source.js.map +1 -1
  18. package/dist/fetch-request-factory.d.ts +10 -5
  19. package/dist/fetch-request-factory.js +100 -71
  20. package/dist/fetch-request-factory.js.map +1 -1
  21. package/dist/fetch.d.ts +7 -1
  22. package/dist/fetch.js +74 -8
  23. package/dist/fetch.js.map +1 -1
  24. package/dist/header-parameters.d.ts +3 -0
  25. package/dist/header-parameters.js +53 -0
  26. package/dist/header-parameters.js.map +1 -0
  27. package/dist/index.d.ts +12 -12
  28. package/dist/index.js +25 -12
  29. package/dist/index.js.map +1 -1
  30. package/dist/logger.js +13 -0
  31. package/dist/logger.js.map +1 -1
  32. package/dist/{binary-decoder.d.ts → media-type-codecs/binary-decoder.d.ts} +2 -2
  33. package/dist/media-type-codecs/binary-decoder.js +29 -0
  34. package/dist/media-type-codecs/binary-decoder.js.map +1 -0
  35. package/dist/{binary-encoder.d.ts → media-type-codecs/binary-encoder.d.ts} +0 -0
  36. package/dist/media-type-codecs/binary-encoder.js +26 -0
  37. package/dist/media-type-codecs/binary-encoder.js.map +1 -0
  38. package/dist/media-type-codecs/cbor-decoder.d.ts +39 -0
  39. package/dist/media-type-codecs/cbor-decoder.js +426 -0
  40. package/dist/media-type-codecs/cbor-decoder.js.map +1 -0
  41. package/dist/media-type-codecs/cbor-encoder.d.ts +43 -0
  42. package/dist/media-type-codecs/cbor-encoder.js +239 -0
  43. package/dist/media-type-codecs/cbor-encoder.js.map +1 -0
  44. package/dist/media-type-codecs/cbor-tags.d.ts +4 -0
  45. package/dist/media-type-codecs/cbor-tags.js +18 -0
  46. package/dist/media-type-codecs/cbor-tags.js.map +1 -0
  47. package/dist/media-type-codecs/json-decoder.d.ts +39 -0
  48. package/dist/media-type-codecs/json-decoder.js +380 -0
  49. package/dist/media-type-codecs/json-decoder.js.map +1 -0
  50. package/dist/media-type-codecs/json-encoder.d.ts +44 -0
  51. package/dist/media-type-codecs/json-encoder.js +276 -0
  52. package/dist/media-type-codecs/json-encoder.js.map +1 -0
  53. package/dist/media-type-codecs/media-type-decoder.d.ts +11 -0
  54. package/dist/media-type-codecs/media-type-decoder.js +19 -0
  55. package/dist/media-type-codecs/media-type-decoder.js.map +1 -0
  56. package/dist/{media-type-decoders.d.ts → media-type-codecs/media-type-decoders.d.ts} +5 -4
  57. package/dist/media-type-codecs/media-type-decoders.js +53 -0
  58. package/dist/media-type-codecs/media-type-decoders.js.map +1 -0
  59. package/dist/{media-type-encoder.d.ts → media-type-codecs/media-type-encoder.d.ts} +5 -1
  60. package/dist/media-type-codecs/media-type-encoder.js +24 -0
  61. package/dist/media-type-codecs/media-type-encoder.js.map +1 -0
  62. package/dist/{media-type-encoders.d.ts → media-type-codecs/media-type-encoders.d.ts} +5 -4
  63. package/dist/media-type-codecs/media-type-encoders.js +55 -0
  64. package/dist/media-type-codecs/media-type-encoders.js.map +1 -0
  65. package/dist/{url-encoder.d.ts → media-type-codecs/www-form-url-encoder.d.ts} +8 -8
  66. package/dist/{url-encoder.js → media-type-codecs/www-form-url-encoder.js} +51 -37
  67. package/dist/media-type-codecs/www-form-url-encoder.js.map +1 -0
  68. package/dist/media-type.d.ts +91 -13
  69. package/dist/media-type.js +286 -15
  70. package/dist/media-type.js.map +1 -1
  71. package/dist/problem.d.ts +24 -9
  72. package/dist/problem.js +153 -6
  73. package/dist/problem.js.map +1 -1
  74. package/dist/request-factory.d.ts +10 -10
  75. package/dist/request-factory.js +13 -0
  76. package/dist/request-factory.js.map +1 -1
  77. package/dist/sunday-error.d.ts +11 -0
  78. package/dist/sunday-error.js +31 -0
  79. package/dist/sunday-error.js.map +1 -0
  80. package/dist/url-template.js +13 -0
  81. package/dist/url-template.js.map +1 -1
  82. package/dist/util/any.d.ts +2 -0
  83. package/dist/util/any.js +24 -0
  84. package/dist/util/any.js.map +1 -0
  85. package/dist/util/base64.js +13 -0
  86. package/dist/util/base64.js.map +1 -1
  87. package/dist/util/error.d.ts +2 -0
  88. package/dist/util/error.js +26 -0
  89. package/dist/util/error.js.map +1 -0
  90. package/dist/util/hex.js +16 -2
  91. package/dist/util/hex.js.map +1 -1
  92. package/dist/util/rxjs.d.ts +3 -0
  93. package/dist/util/rxjs.js +22 -5
  94. package/dist/util/rxjs.js.map +1 -1
  95. package/dist/util/stream-rxjs.js +13 -0
  96. package/dist/util/stream-rxjs.js.map +1 -1
  97. package/dist/util/temporal.d.ts +2 -0
  98. package/dist/util/temporal.js +31 -0
  99. package/dist/util/temporal.js.map +1 -0
  100. package/package.json +29 -22
  101. package/src/any-type.ts +18 -0
  102. package/src/class-type.ts +20 -2
  103. package/src/date-time-types.ts +35 -8
  104. package/src/event-parser.ts +204 -0
  105. package/src/fetch-event-source.ts +163 -159
  106. package/src/fetch-request-factory.ts +142 -100
  107. package/src/fetch.ts +79 -14
  108. package/src/header-parameters.ts +66 -0
  109. package/src/index.ts +26 -12
  110. package/src/logger.ts +14 -0
  111. package/src/media-type-codecs/binary-decoder.ts +38 -0
  112. package/src/media-type-codecs/binary-encoder.ts +33 -0
  113. package/src/media-type-codecs/cbor-decoder.ts +529 -0
  114. package/src/media-type-codecs/cbor-encoder.ts +321 -0
  115. package/src/media-type-codecs/cbor-tags.ts +18 -0
  116. package/src/media-type-codecs/json-decoder.ts +484 -0
  117. package/src/media-type-codecs/json-encoder.ts +342 -0
  118. package/src/media-type-codecs/media-type-decoder.ts +34 -0
  119. package/src/media-type-codecs/media-type-decoders.ts +81 -0
  120. package/src/media-type-codecs/media-type-encoder.ts +45 -0
  121. package/src/media-type-codecs/media-type-encoders.ts +83 -0
  122. package/src/media-type-codecs/www-form-url-encoder.ts +193 -0
  123. package/src/media-type.ts +340 -22
  124. package/src/problem.ts +158 -12
  125. package/src/request-factory.ts +35 -12
  126. package/src/sunday-error.ts +51 -0
  127. package/src/url-template.ts +14 -0
  128. package/src/util/any.ts +24 -0
  129. package/src/util/base64.ts +14 -0
  130. package/src/util/error.ts +28 -0
  131. package/src/util/hex.ts +17 -2
  132. package/src/util/rxjs.ts +30 -5
  133. package/src/util/stream-rxjs.ts +14 -0
  134. package/src/util/temporal.ts +32 -0
  135. package/dist/binary-decoder.js +0 -16
  136. package/dist/binary-decoder.js.map +0 -1
  137. package/dist/binary-encoder.js +0 -13
  138. package/dist/binary-encoder.js.map +0 -1
  139. package/dist/cbor-decoder.d.ts +0 -15
  140. package/dist/cbor-decoder.js +0 -126
  141. package/dist/cbor-decoder.js.map +0 -1
  142. package/dist/cbor-encoder.d.ts +0 -29
  143. package/dist/cbor-encoder.js +0 -81
  144. package/dist/cbor-encoder.js.map +0 -1
  145. package/dist/cbor-tags.d.ts +0 -3
  146. package/dist/cbor-tags.js +0 -4
  147. package/dist/cbor-tags.js.map +0 -1
  148. package/dist/http-error.d.ts +0 -10
  149. package/dist/http-error.js +0 -45
  150. package/dist/http-error.js.map +0 -1
  151. package/dist/json-decoder.d.ts +0 -31
  152. package/dist/json-decoder.js +0 -139
  153. package/dist/json-decoder.js.map +0 -1
  154. package/dist/json-encoder.d.ts +0 -35
  155. package/dist/json-encoder.js +0 -134
  156. package/dist/json-encoder.js.map +0 -1
  157. package/dist/media-type-decoder.d.ts +0 -4
  158. package/dist/media-type-decoder.js +0 -2
  159. package/dist/media-type-decoder.js.map +0 -1
  160. package/dist/media-type-decoders.js +0 -40
  161. package/dist/media-type-decoders.js.map +0 -1
  162. package/dist/media-type-encoder.js +0 -6
  163. package/dist/media-type-encoder.js.map +0 -1
  164. package/dist/media-type-encoders.js +0 -42
  165. package/dist/media-type-encoders.js.map +0 -1
  166. package/dist/url-encoder.js.map +0 -1
  167. package/src/binary-decoder.ts +0 -24
  168. package/src/binary-encoder.ts +0 -19
  169. package/src/cbor-decoder.ts +0 -148
  170. package/src/cbor-encoder.ts +0 -95
  171. package/src/cbor-tags.ts +0 -3
  172. package/src/http-error.ts +0 -55
  173. package/src/json-decoder.ts +0 -164
  174. package/src/json-encoder.ts +0 -162
  175. package/src/media-type-decoder.ts +0 -5
  176. package/src/media-type-decoders.ts +0 -59
  177. package/src/media-type-encoder.ts +0 -16
  178. package/src/media-type-encoders.ts +0 -61
  179. package/src/url-encoder.ts +0 -173
@@ -0,0 +1,276 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { ChronoField, DateTimeFormatter, DateTimeFormatterBuilder, Instant, LocalDate, LocalDateTime, LocalTime, OffsetDateTime, OffsetTime, ResolverStyle, ZonedDateTime, } from '@js-joda/core';
15
+ import { JsonIncludeType, JsonStringifier } from '@outfoxx/jackson-js';
16
+ import 'reflect-metadata';
17
+ import { Base64 } from '../util/base64';
18
+ import { encodeSeconds, secondsToNumber } from '../util/temporal';
19
+ export class JSONEncoder {
20
+ constructor(dateEncoding) {
21
+ this.dateEncoding = dateEncoding;
22
+ this.stringifier = new JsonStringifier();
23
+ this.instantSerializer = (_, value) => {
24
+ if (value == null) {
25
+ return null;
26
+ }
27
+ switch (this.dateEncoding) {
28
+ case JSONEncoder.DateEncoding.ISO8601:
29
+ return DateTimeFormatter.ISO_INSTANT.format(value);
30
+ case JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
31
+ return value.toEpochMilli();
32
+ case JSONEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
33
+ return secondsToNumber(value.epochSecond(), value.nano());
34
+ }
35
+ };
36
+ this.zonedDateTimeSerializer = (_, value) => {
37
+ if (value == null) {
38
+ return null;
39
+ }
40
+ switch (this.dateEncoding) {
41
+ case JSONEncoder.DateEncoding.ISO8601:
42
+ return DateTimeFormatter.ISO_ZONED_DATE_TIME.format(value);
43
+ case JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
44
+ return value.toInstant().toEpochMilli();
45
+ case JSONEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
46
+ const instant = value.toInstant();
47
+ return secondsToNumber(instant.epochSecond(), instant.nano());
48
+ }
49
+ };
50
+ this.offsetDateTimeSerializer = (_, value) => {
51
+ if (value == null) {
52
+ return null;
53
+ }
54
+ switch (this.dateEncoding) {
55
+ case JSONEncoder.DateEncoding.ISO8601:
56
+ return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(value);
57
+ case JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
58
+ return value.toInstant().toEpochMilli();
59
+ case JSONEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
60
+ const instant = value.toInstant();
61
+ return secondsToNumber(instant.epochSecond(), instant.nano());
62
+ }
63
+ };
64
+ this.offsetTimeFormatter = new DateTimeFormatterBuilder()
65
+ .parseCaseInsensitive()
66
+ .append(DateTimeFormatter.ISO_LOCAL_TIME)
67
+ .appendOffsetId()
68
+ .toFormatter(ResolverStyle.STRICT);
69
+ this.offsetTimeSerializer = (_, value) => {
70
+ if (value == null) {
71
+ return null;
72
+ }
73
+ switch (this.dateEncoding) {
74
+ case JSONEncoder.DateEncoding.ISO8601:
75
+ return this.offsetTimeFormatter.format(value);
76
+ default:
77
+ return [
78
+ value.hour(),
79
+ value.minute(),
80
+ ...encodeSeconds(value.second(), this.dateEncoding ==
81
+ JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH
82
+ ? value.get(ChronoField.MILLI_OF_SECOND)
83
+ : value.nano()),
84
+ value.offset().toString(),
85
+ ];
86
+ }
87
+ };
88
+ this.localDateTimeSerializer = (_, value) => {
89
+ if (value == null) {
90
+ return null;
91
+ }
92
+ switch (this.dateEncoding) {
93
+ case JSONEncoder.DateEncoding.ISO8601:
94
+ return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(value);
95
+ default:
96
+ return [
97
+ value.year(),
98
+ value.monthValue(),
99
+ value.dayOfMonth(),
100
+ value.hour(),
101
+ value.minute(),
102
+ ...encodeSeconds(value.second(), this.dateEncoding ==
103
+ JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH
104
+ ? value.get(ChronoField.MILLI_OF_SECOND)
105
+ : value.nano()),
106
+ ];
107
+ }
108
+ };
109
+ this.localDateSerializer = (_, value) => {
110
+ if (value == null) {
111
+ return null;
112
+ }
113
+ switch (this.dateEncoding) {
114
+ case JSONEncoder.DateEncoding.ISO8601:
115
+ return DateTimeFormatter.ISO_LOCAL_DATE.format(value);
116
+ default:
117
+ return [value.year(), value.monthValue(), value.dayOfMonth()];
118
+ }
119
+ };
120
+ this.localTimeSerializer = (_, value) => {
121
+ if (value == null) {
122
+ return null;
123
+ }
124
+ switch (this.dateEncoding) {
125
+ case JSONEncoder.DateEncoding.ISO8601:
126
+ return DateTimeFormatter.ISO_LOCAL_TIME.format(value);
127
+ default:
128
+ return [
129
+ value.hour(),
130
+ value.minute(),
131
+ ...encodeSeconds(value.second(), this.dateEncoding ==
132
+ JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH
133
+ ? value.get(ChronoField.MILLI_OF_SECOND)
134
+ : value.nano()),
135
+ ];
136
+ }
137
+ };
138
+ this.dateSerializer = (_, value) => {
139
+ if (value == null) {
140
+ return null;
141
+ }
142
+ switch (this.dateEncoding) {
143
+ case JSONEncoder.DateEncoding.ISO8601:
144
+ return value.toISOString();
145
+ case JSONEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
146
+ return value.getTime();
147
+ case JSONEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
148
+ return value.getTime() / 1000.0;
149
+ }
150
+ };
151
+ this.urlSerializer = (_, value) => {
152
+ if (value == null) {
153
+ return null;
154
+ }
155
+ return value.toString();
156
+ };
157
+ this.arrayBufferSerializer = (_, value) => {
158
+ if (value == null) {
159
+ return null;
160
+ }
161
+ return Base64.encode(value);
162
+ };
163
+ this.customSerializers = [
164
+ {
165
+ type: () => Date,
166
+ mapper: this.dateSerializer,
167
+ },
168
+ {
169
+ type: () => Instant,
170
+ mapper: this.instantSerializer,
171
+ },
172
+ {
173
+ type: () => ZonedDateTime,
174
+ mapper: this.zonedDateTimeSerializer,
175
+ },
176
+ {
177
+ type: () => OffsetDateTime,
178
+ mapper: this.offsetDateTimeSerializer,
179
+ },
180
+ {
181
+ type: () => OffsetTime,
182
+ mapper: this.offsetTimeSerializer,
183
+ },
184
+ {
185
+ type: () => LocalDateTime,
186
+ mapper: this.localDateTimeSerializer,
187
+ },
188
+ {
189
+ type: () => LocalDate,
190
+ mapper: this.localDateSerializer,
191
+ },
192
+ {
193
+ type: () => LocalTime,
194
+ mapper: this.localTimeSerializer,
195
+ },
196
+ {
197
+ type: () => URL,
198
+ mapper: this.urlSerializer,
199
+ },
200
+ {
201
+ type: () => ArrayBuffer,
202
+ mapper: this.arrayBufferSerializer,
203
+ },
204
+ ];
205
+ }
206
+ static get default() {
207
+ return new JSONEncoder(JSONEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH);
208
+ }
209
+ encode(value, type, includeNulls = false) {
210
+ var _a;
211
+ // Use natural type when subtypes exist
212
+ if (Reflect.hasMetadata('jackson:defaultContextGroup:JsonSubTypes',
213
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
+ (_a = value.constructor) !== null && _a !== void 0 ? _a : {})) {
215
+ type = [Object];
216
+ }
217
+ return this.stringifier.stringify(value, {
218
+ serializers: this.customSerializers,
219
+ features: {
220
+ serialization: {
221
+ DEFAULT_PROPERTY_INCLUSION: {
222
+ value: includeNulls
223
+ ? JsonIncludeType.ALWAYS
224
+ : JsonIncludeType.NON_NULL,
225
+ },
226
+ },
227
+ },
228
+ mainCreator: () => type !== null && type !== void 0 ? type : [Object],
229
+ });
230
+ }
231
+ encodeObject(value, type, includeNulls = false) {
232
+ var _a;
233
+ // Use natural type when subtypes exist
234
+ if (Reflect.hasMetadata('jackson:defaultContextGroup:JsonSubTypes',
235
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
236
+ (_a = value.constructor) !== null && _a !== void 0 ? _a : {})) {
237
+ type = [Object];
238
+ }
239
+ return this.stringifier.transform(value, {
240
+ serializers: this.customSerializers,
241
+ features: {
242
+ serialization: {
243
+ DEFAULT_PROPERTY_INCLUSION: {
244
+ value: includeNulls
245
+ ? JsonIncludeType.ALWAYS
246
+ : JsonIncludeType.NON_NULL,
247
+ },
248
+ },
249
+ },
250
+ mainCreator: () => type !== null && type !== void 0 ? type : [Object],
251
+ });
252
+ }
253
+ }
254
+ (function (JSONEncoder) {
255
+ /**
256
+ * Configures how temporal values are encoded.
257
+ */
258
+ let DateEncoding;
259
+ (function (DateEncoding) {
260
+ /**
261
+ * Encode temporal values numerically using seconds with decimal
262
+ * sub-second precision.
263
+ */
264
+ DateEncoding[DateEncoding["DECIMAL_SECONDS_SINCE_EPOCH"] = 0] = "DECIMAL_SECONDS_SINCE_EPOCH";
265
+ /**
266
+ * Encode temporal values numerically using integer milliseconds.
267
+ */
268
+ DateEncoding[DateEncoding["MILLISECONDS_SINCE_EPOCH"] = 1] = "MILLISECONDS_SINCE_EPOCH";
269
+ /**
270
+ * Encode temporal values values as an ISO-8601-formatted string (in
271
+ * RFC 3339 format). This is the default behavior.
272
+ */
273
+ DateEncoding[DateEncoding["ISO8601"] = 2] = "ISO8601";
274
+ })(DateEncoding = JSONEncoder.DateEncoding || (JSONEncoder.DateEncoding = {}));
275
+ })(JSONEncoder || (JSONEncoder = {}));
276
+ //# sourceMappingURL=json-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-encoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/json-encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AnyType } from '../any-type';
2
+ export interface MediaTypeDecoder {
3
+ decode<T>(response: Response, type: AnyType): Promise<T>;
4
+ }
5
+ export interface TextMediaTypeDecoder extends MediaTypeDecoder {
6
+ decodeText<T>(text: string, type: AnyType): T;
7
+ }
8
+ export interface StructuredMediaTypeDecoder extends MediaTypeDecoder {
9
+ decodeObject<T>(data: unknown, type: AnyType): T;
10
+ }
11
+ export declare function isStructuredMediaTypeDecoder(decoder: MediaTypeDecoder | StructuredMediaTypeDecoder | undefined): decoder is StructuredMediaTypeDecoder;
@@ -0,0 +1,19 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ export function isStructuredMediaTypeDecoder(decoder) {
15
+ var _a;
16
+ const rec = decoder;
17
+ return (_a = !!rec.decodeObject) !== null && _a !== void 0 ? _a : false;
18
+ }
19
+ //# sourceMappingURL=media-type-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-decoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/media-type-decoder.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAgBjC,MAAM,UAAU,4BAA4B,CAC1C,OAAkE;;IAElE,MAAM,GAAG,GAAG,OAA6C,CAAC;IAC1D,OAAO,MAAA,CAAC,CAAC,GAAG,CAAC,YAAY,mCAAI,KAAK,CAAC;AACrC,CAAC"}
@@ -1,7 +1,8 @@
1
+ import { MediaType } from '../media-type';
1
2
  import { MediaTypeDecoder } from './media-type-decoder';
2
3
  export interface MediaTypeDecodersBuilder {
3
4
  addDefaults(): MediaTypeDecodersBuilder;
4
- add(mediaType: string, decoder: MediaTypeDecoder): MediaTypeDecodersBuilder;
5
+ add(mediaType: MediaType, decoder: MediaTypeDecoder): MediaTypeDecodersBuilder;
5
6
  build(): MediaTypeDecoders;
6
7
  }
7
8
  export interface MediaTypeDecodersBuilderConstructor {
@@ -11,7 +12,7 @@ export declare class MediaTypeDecoders {
11
12
  private decoders;
12
13
  static Builder: MediaTypeDecodersBuilderConstructor;
13
14
  static DEFAULT: MediaTypeDecoders;
14
- constructor(decoders: Map<string, MediaTypeDecoder>);
15
- supports(mediaType: string): boolean;
16
- find(mediaType: string): MediaTypeDecoder;
15
+ constructor(decoders: Map<MediaType, MediaTypeDecoder>);
16
+ supports(mediaType: MediaType): boolean;
17
+ find(mediaType: MediaType): MediaTypeDecoder;
17
18
  }
@@ -0,0 +1,53 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { BinaryDecoder } from './binary-decoder';
15
+ import { CBORDecoder } from './cbor-decoder';
16
+ import { JSONDecoder } from './json-decoder';
17
+ import { MediaType } from '../media-type';
18
+ export class MediaTypeDecoders {
19
+ constructor(decoders) {
20
+ this.decoders = decoders;
21
+ }
22
+ supports(mediaType) {
23
+ return Array.from(this.decoders.keys()).some((key) => key.compatible(mediaType));
24
+ }
25
+ find(mediaType) {
26
+ const found = Array.from(this.decoders.entries()).find(([type]) => type.compatible(mediaType));
27
+ if (!found) {
28
+ throw Error(`Unsupported media type - ${mediaType}`);
29
+ }
30
+ return found[1];
31
+ }
32
+ }
33
+ MediaTypeDecoders.Builder = class Builder {
34
+ constructor() {
35
+ this.decoders = new Map();
36
+ }
37
+ add(mediaType, decoder) {
38
+ this.decoders.set(mediaType, decoder);
39
+ return this;
40
+ }
41
+ addDefaults() {
42
+ return this.add(MediaType.JSON, JSONDecoder.default)
43
+ .add(MediaType.OctetStream, new BinaryDecoder())
44
+ .add(MediaType.CBOR, CBORDecoder.default);
45
+ }
46
+ build() {
47
+ return new MediaTypeDecoders(this.decoders);
48
+ }
49
+ };
50
+ MediaTypeDecoders.DEFAULT = new MediaTypeDecoders.Builder()
51
+ .addDefaults()
52
+ .build();
53
+ //# sourceMappingURL=media-type-decoders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-decoders.js","sourceRoot":"","sources":["../../src/media-type-codecs/media-type-decoders.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAiB1C,MAAM,OAAO,iBAAiB;IA6B5B,YAAoB,QAA0C;QAA1C,aAAQ,GAAR,QAAQ,CAAkC;IAAG,CAAC;IAElE,QAAQ,CAAC,SAAoB;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAoB;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAChE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAC;QACF,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;;AA5CM,yBAAO,GAAwC,MAAM,OAAO;IAAb;QAGpD,aAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAmBpD,CAAC;IAjBC,GAAG,CACD,SAAoB,EACpB,OAAyB;QAEzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;aACjD,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,aAAa,EAAE,CAAC;aAC/C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEK,yBAAO,GAAsB,IAAI,iBAAiB,CAAC,OAAO,EAAE;KAChE,WAAW,EAAE;KACb,KAAK,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { AnyType } from './any-type';
1
+ import { AnyType } from '../any-type';
2
2
  export interface MediaTypeEncoder {
3
3
  encode<T = unknown>(value: T, type: AnyType | undefined): BodyInit;
4
4
  }
@@ -6,3 +6,7 @@ export interface URLQueryParamsEncoder extends MediaTypeEncoder {
6
6
  encodeQueryString(value: Record<string, unknown>): string;
7
7
  }
8
8
  export declare function isURLQueryParamsEncoder(encoder: MediaTypeEncoder | URLQueryParamsEncoder | undefined): encoder is URLQueryParamsEncoder;
9
+ export interface StructuredMediaTypeEncoder extends MediaTypeEncoder {
10
+ encodeObject<T = unknown>(value: T, type?: AnyType, includeNulls?: boolean): Record<string, unknown>;
11
+ }
12
+ export declare function isStructuredMediaTypeEncoder(encoder: MediaTypeEncoder | StructuredMediaTypeEncoder | undefined): encoder is StructuredMediaTypeEncoder;
@@ -0,0 +1,24 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ export function isURLQueryParamsEncoder(encoder) {
15
+ var _a;
16
+ const rec = encoder;
17
+ return (_a = !!rec.encodeQueryString) !== null && _a !== void 0 ? _a : false;
18
+ }
19
+ export function isStructuredMediaTypeEncoder(encoder) {
20
+ var _a;
21
+ const rec = encoder;
22
+ return (_a = !!rec.encodeObject) !== null && _a !== void 0 ? _a : false;
23
+ }
24
+ //# sourceMappingURL=media-type-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-encoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/media-type-encoder.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAYjC,MAAM,UAAU,uBAAuB,CACrC,OAA6D;;IAE7D,MAAM,GAAG,GAAG,OAA6C,CAAC;IAC1D,OAAO,MAAA,CAAC,CAAC,GAAG,CAAC,iBAAiB,mCAAI,KAAK,CAAC;AAC1C,CAAC;AAUD,MAAM,UAAU,4BAA4B,CAC1C,OAAkE;;IAElE,MAAM,GAAG,GAAG,OAA6C,CAAC;IAC1D,OAAO,MAAA,CAAC,CAAC,GAAG,CAAC,YAAY,mCAAI,KAAK,CAAC;AACrC,CAAC"}
@@ -1,7 +1,8 @@
1
+ import { MediaType } from '../media-type';
1
2
  import { MediaTypeEncoder } from './media-type-encoder';
2
3
  export interface MediaTypeEncodersBuilder {
3
4
  addDefaults(): MediaTypeEncodersBuilder;
4
- add(mediaType: string, encoder: MediaTypeEncoder): MediaTypeEncodersBuilder;
5
+ add(mediaType: MediaType, encoder: MediaTypeEncoder): MediaTypeEncodersBuilder;
5
6
  build(): MediaTypeEncoders;
6
7
  }
7
8
  export interface MediaTypeEncodersBuilderConstructor {
@@ -11,7 +12,7 @@ export declare class MediaTypeEncoders {
11
12
  private encoders;
12
13
  static Builder: MediaTypeEncodersBuilderConstructor;
13
14
  static DEFAULT: MediaTypeEncoders;
14
- constructor(encoders: Map<string, MediaTypeEncoder>);
15
- supports(mediaType: string): boolean;
16
- find(mediaType: string): MediaTypeEncoder;
15
+ constructor(encoders: Map<MediaType, MediaTypeEncoder>);
16
+ supports(mediaType: MediaType): boolean;
17
+ find(mediaType: MediaType): MediaTypeEncoder;
17
18
  }
@@ -0,0 +1,55 @@
1
+ // Copyright 2020 Outfox, Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import { MediaType } from '../media-type';
15
+ import { BinaryEncoder } from './binary-encoder';
16
+ import { CBOREncoder } from './cbor-encoder';
17
+ import { JSONEncoder } from './json-encoder';
18
+ import { WWWFormUrlEncoder } from './www-form-url-encoder';
19
+ export class MediaTypeEncoders {
20
+ constructor(encoders) {
21
+ this.encoders = encoders;
22
+ }
23
+ supports(mediaType) {
24
+ return Array.from(this.encoders.keys()).some((key) => key.compatible(mediaType));
25
+ }
26
+ find(mediaType) {
27
+ const found = Array.from(this.encoders.entries()).find(([type]) => type.compatible(mediaType));
28
+ if (!found) {
29
+ throw Error(`Unsupported media type - ${mediaType}`);
30
+ }
31
+ return found[1];
32
+ }
33
+ }
34
+ MediaTypeEncoders.Builder = class Builder {
35
+ constructor() {
36
+ this.encoders = new Map();
37
+ }
38
+ add(mediaType, encoder) {
39
+ this.encoders.set(mediaType, encoder);
40
+ return this;
41
+ }
42
+ addDefaults() {
43
+ return this.add(MediaType.JSON, JSONEncoder.default)
44
+ .add(MediaType.OctetStream, BinaryEncoder.default)
45
+ .add(MediaType.WWWFormUrlEncoded, WWWFormUrlEncoder.default)
46
+ .add(MediaType.CBOR, CBOREncoder.default);
47
+ }
48
+ build() {
49
+ return new MediaTypeEncoders(this.encoders);
50
+ }
51
+ };
52
+ MediaTypeEncoders.DEFAULT = new MediaTypeEncoders.Builder()
53
+ .addDefaults()
54
+ .build();
55
+ //# sourceMappingURL=media-type-encoders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-type-encoders.js","sourceRoot":"","sources":["../../src/media-type-codecs/media-type-encoders.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAgB3D,MAAM,OAAO,iBAAiB;IA8B5B,YAAoB,QAA0C;QAA1C,aAAQ,GAAR,QAAQ,CAAkC;IAAG,CAAC;IAElE,QAAQ,CAAC,SAAoB;QAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAoB;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAChE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAC;QACF,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;SACtD;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;;AA7CM,yBAAO,GAAwC,MAAM,OAAO;IAAb;QAGpD,aAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAoBpD,CAAC;IAlBC,GAAG,CACD,SAAoB,EACpB,OAAyB;QAEzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;aACjD,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC;aACjD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC;aAC3D,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF,CAAC;AAEK,yBAAO,GAAsB,IAAI,iBAAiB,CAAC,OAAO,EAAE;KAChE,WAAW,EAAE;KACb,KAAK,EAAE,CAAC"}
@@ -1,18 +1,18 @@
1
- import { URLQueryParamsEncoder } from './media-type-encoder';
2
1
  import { JsonStringifier } from '@outfoxx/jackson-js';
3
- export declare class URLEncoder implements URLQueryParamsEncoder {
2
+ import { URLQueryParamsEncoder } from './media-type-encoder';
3
+ export declare class WWWFormUrlEncoder implements URLQueryParamsEncoder {
4
4
  private arrayEncoding;
5
5
  private boolEncoding;
6
6
  private dateEncoding;
7
7
  private json;
8
8
  private encoder;
9
- static get default(): URLEncoder;
10
- constructor(arrayEncoding: URLEncoder.ArrayEncoding, boolEncoding: URLEncoder.BoolEncoding, dateEncoding: URLEncoder.DateEncoding, json?: JsonStringifier<unknown>, encoder?: TextEncoder);
9
+ static get default(): WWWFormUrlEncoder;
10
+ constructor(arrayEncoding: WWWFormUrlEncoder.ArrayEncoding, boolEncoding: WWWFormUrlEncoder.BoolEncoding, dateEncoding: WWWFormUrlEncoder.DateEncoding, json?: JsonStringifier<unknown>, encoder?: TextEncoder);
11
11
  encode<T = unknown>(value: T): ArrayBuffer | SharedArrayBuffer;
12
12
  encodeQueryString(parameters: Record<string, unknown>): string;
13
- encodeQueryComponent(key: string, value: unknown): [string, string][];
13
+ encodeQueryComponent(key: string, value: unknown): string[];
14
14
  }
15
- export declare namespace URLEncoder {
15
+ export declare namespace WWWFormUrlEncoder {
16
16
  /**
17
17
  * Configures how `Array` parameters are encoded.
18
18
  */
@@ -44,9 +44,9 @@ export declare namespace URLEncoder {
44
44
  */
45
45
  enum DateEncoding {
46
46
  /**
47
- * Encode the `Date` as a UNIX timestamp (floating point seconds since epoch).
47
+ * Encode the `Date` as a UNIX timestamp (decimal seconds since epoch).
48
48
  */
49
- SECONDS_SINCE_EPOCH = 0,
49
+ DECIMAL_SECONDS_SINCE_EPOCH = 0,
50
50
  /**
51
51
  * Encode the `Date` as UNIX millisecond timestamp (integer milliseconds since epoch).
52
52
  */