@outfoxx/sunday 1.0.8 → 1.1.0-alpha.10

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 (151) hide show
  1. package/README.md +35 -2
  2. package/dist/any-type.d.ts +2 -0
  3. package/dist/class-type.d.ts +2 -2
  4. package/dist/date-time-types.d.ts +2 -7
  5. package/dist/date-time-types.js +2 -4
  6. package/dist/date-time-types.js.map +1 -1
  7. package/dist/event-parser.d.ts +17 -0
  8. package/dist/event-parser.js +140 -0
  9. package/dist/event-parser.js.map +1 -0
  10. package/dist/fetch-event-source.d.ts +12 -10
  11. package/dist/fetch-event-source.js +141 -138
  12. package/dist/fetch-event-source.js.map +1 -1
  13. package/dist/fetch-request-factory.d.ts +10 -5
  14. package/dist/fetch-request-factory.js +87 -71
  15. package/dist/fetch-request-factory.js.map +1 -1
  16. package/dist/fetch.d.ts +7 -1
  17. package/dist/fetch.js +61 -8
  18. package/dist/fetch.js.map +1 -1
  19. package/dist/header-parameters.d.ts +3 -0
  20. package/dist/header-parameters.js +40 -0
  21. package/dist/header-parameters.js.map +1 -0
  22. package/dist/index.d.ts +12 -12
  23. package/dist/index.js +12 -12
  24. package/dist/index.js.map +1 -1
  25. package/dist/{binary-decoder.d.ts → media-type-codecs/binary-decoder.d.ts} +2 -2
  26. package/dist/{binary-decoder.js → media-type-codecs/binary-decoder.js} +0 -0
  27. package/dist/media-type-codecs/binary-decoder.js.map +1 -0
  28. package/dist/{binary-encoder.d.ts → media-type-codecs/binary-encoder.d.ts} +0 -0
  29. package/dist/{binary-encoder.js → media-type-codecs/binary-encoder.js} +0 -0
  30. package/dist/media-type-codecs/binary-encoder.js.map +1 -0
  31. package/dist/media-type-codecs/cbor-decoder.d.ts +39 -0
  32. package/dist/media-type-codecs/cbor-decoder.js +413 -0
  33. package/dist/media-type-codecs/cbor-decoder.js.map +1 -0
  34. package/dist/media-type-codecs/cbor-encoder.d.ts +43 -0
  35. package/dist/media-type-codecs/cbor-encoder.js +226 -0
  36. package/dist/media-type-codecs/cbor-encoder.js.map +1 -0
  37. package/dist/media-type-codecs/cbor-tags.d.ts +4 -0
  38. package/dist/media-type-codecs/cbor-tags.js +5 -0
  39. package/dist/media-type-codecs/cbor-tags.js.map +1 -0
  40. package/dist/media-type-codecs/json-decoder.d.ts +39 -0
  41. package/dist/media-type-codecs/json-decoder.js +367 -0
  42. package/dist/media-type-codecs/json-decoder.js.map +1 -0
  43. package/dist/media-type-codecs/json-encoder.d.ts +44 -0
  44. package/dist/media-type-codecs/json-encoder.js +263 -0
  45. package/dist/media-type-codecs/json-encoder.js.map +1 -0
  46. package/dist/media-type-codecs/media-type-decoder.d.ts +11 -0
  47. package/dist/media-type-codecs/media-type-decoder.js +6 -0
  48. package/dist/media-type-codecs/media-type-decoder.js.map +1 -0
  49. package/dist/{media-type-decoders.d.ts → media-type-codecs/media-type-decoders.d.ts} +5 -4
  50. package/dist/{media-type-decoders.js → media-type-codecs/media-type-decoders.js} +6 -6
  51. package/dist/media-type-codecs/media-type-decoders.js.map +1 -0
  52. package/dist/{media-type-encoder.d.ts → media-type-codecs/media-type-encoder.d.ts} +5 -1
  53. package/dist/media-type-codecs/media-type-encoder.js +11 -0
  54. package/dist/media-type-codecs/media-type-encoder.js.map +1 -0
  55. package/dist/{media-type-encoders.d.ts → media-type-codecs/media-type-encoders.d.ts} +5 -4
  56. package/dist/{media-type-encoders.js → media-type-codecs/media-type-encoders.js} +8 -8
  57. package/dist/media-type-codecs/media-type-encoders.js.map +1 -0
  58. package/dist/{url-encoder.d.ts → media-type-codecs/www-form-url-encoder.d.ts} +8 -8
  59. package/dist/{url-encoder.js → media-type-codecs/www-form-url-encoder.js} +38 -37
  60. package/dist/media-type-codecs/www-form-url-encoder.js.map +1 -0
  61. package/dist/media-type.d.ts +91 -13
  62. package/dist/media-type.js +273 -15
  63. package/dist/media-type.js.map +1 -1
  64. package/dist/problem.d.ts +24 -9
  65. package/dist/problem.js +140 -6
  66. package/dist/problem.js.map +1 -1
  67. package/dist/request-factory.d.ts +10 -10
  68. package/dist/sunday-error.d.ts +11 -0
  69. package/dist/sunday-error.js +18 -0
  70. package/dist/sunday-error.js.map +1 -0
  71. package/dist/util/any.d.ts +2 -0
  72. package/dist/util/any.js +11 -0
  73. package/dist/util/any.js.map +1 -0
  74. package/dist/util/error.d.ts +2 -0
  75. package/dist/util/error.js +13 -0
  76. package/dist/util/error.js.map +1 -0
  77. package/dist/util/hex.js +3 -2
  78. package/dist/util/hex.js.map +1 -1
  79. package/dist/util/rxjs.d.ts +3 -0
  80. package/dist/util/rxjs.js +9 -5
  81. package/dist/util/rxjs.js.map +1 -1
  82. package/dist/util/temporal.d.ts +2 -0
  83. package/dist/util/temporal.js +18 -0
  84. package/dist/util/temporal.js.map +1 -0
  85. package/package.json +27 -21
  86. package/src/any-type.ts +4 -0
  87. package/src/class-type.ts +6 -2
  88. package/src/date-time-types.ts +22 -9
  89. package/src/event-parser.ts +190 -0
  90. package/src/fetch-event-source.ts +149 -159
  91. package/src/fetch-request-factory.ts +129 -101
  92. package/src/fetch.ts +65 -14
  93. package/src/header-parameters.ts +52 -0
  94. package/src/index.ts +12 -12
  95. package/src/{binary-decoder.ts → media-type-codecs/binary-decoder.ts} +3 -3
  96. package/src/{binary-encoder.ts → media-type-codecs/binary-encoder.ts} +0 -0
  97. package/src/media-type-codecs/cbor-decoder.ts +515 -0
  98. package/src/media-type-codecs/cbor-encoder.ts +307 -0
  99. package/src/media-type-codecs/cbor-tags.ts +4 -0
  100. package/src/media-type-codecs/json-decoder.ts +470 -0
  101. package/src/media-type-codecs/json-encoder.ts +328 -0
  102. package/src/media-type-codecs/media-type-decoder.ts +20 -0
  103. package/src/{media-type-decoders.ts → media-type-codecs/media-type-decoders.ts} +21 -13
  104. package/src/media-type-codecs/media-type-encoder.ts +31 -0
  105. package/src/{media-type-encoders.ts → media-type-codecs/media-type-encoders.ts} +23 -15
  106. package/src/{url-encoder.ts → media-type-codecs/www-form-url-encoder.ts} +53 -47
  107. package/src/media-type.ts +326 -22
  108. package/src/problem.ts +144 -12
  109. package/src/request-factory.ts +21 -12
  110. package/src/sunday-error.ts +37 -0
  111. package/src/util/any.ts +10 -0
  112. package/src/util/error.ts +14 -0
  113. package/src/util/hex.ts +3 -2
  114. package/src/util/rxjs.ts +16 -5
  115. package/src/util/temporal.ts +18 -0
  116. package/dist/binary-decoder.js.map +0 -1
  117. package/dist/binary-encoder.js.map +0 -1
  118. package/dist/cbor-decoder.d.ts +0 -15
  119. package/dist/cbor-decoder.js +0 -126
  120. package/dist/cbor-decoder.js.map +0 -1
  121. package/dist/cbor-encoder.d.ts +0 -29
  122. package/dist/cbor-encoder.js +0 -81
  123. package/dist/cbor-encoder.js.map +0 -1
  124. package/dist/cbor-tags.d.ts +0 -3
  125. package/dist/cbor-tags.js +0 -4
  126. package/dist/cbor-tags.js.map +0 -1
  127. package/dist/http-error.d.ts +0 -10
  128. package/dist/http-error.js +0 -45
  129. package/dist/http-error.js.map +0 -1
  130. package/dist/json-decoder.d.ts +0 -31
  131. package/dist/json-decoder.js +0 -139
  132. package/dist/json-decoder.js.map +0 -1
  133. package/dist/json-encoder.d.ts +0 -35
  134. package/dist/json-encoder.js +0 -116
  135. package/dist/json-encoder.js.map +0 -1
  136. package/dist/media-type-decoder.d.ts +0 -4
  137. package/dist/media-type-decoder.js +0 -2
  138. package/dist/media-type-decoder.js.map +0 -1
  139. package/dist/media-type-decoders.js.map +0 -1
  140. package/dist/media-type-encoder.js +0 -6
  141. package/dist/media-type-encoder.js.map +0 -1
  142. package/dist/media-type-encoders.js.map +0 -1
  143. package/dist/url-encoder.js.map +0 -1
  144. package/src/cbor-decoder.ts +0 -148
  145. package/src/cbor-encoder.ts +0 -95
  146. package/src/cbor-tags.ts +0 -3
  147. package/src/http-error.ts +0 -55
  148. package/src/json-decoder.ts +0 -164
  149. package/src/json-encoder.ts +0 -144
  150. package/src/media-type-decoder.ts +0 -5
  151. package/src/media-type-encoder.ts +0 -16
@@ -1,89 +1,101 @@
1
- import { Observable, of } from 'rxjs';
2
- import { mapTo, switchMap } from 'rxjs/operators';
1
+ import { defer, map, Observable, of, switchMap } from 'rxjs';
3
2
  import { validate } from './fetch';
4
3
  import { FetchEventSource } from './fetch-event-source';
5
- import { HttpError } from './http-error';
6
- import { mediaType, MediaType } from './media-type';
7
- import { MediaTypeDecoders } from './media-type-decoders';
8
- import { isURLQueryParamsEncoder } from './media-type-encoder';
9
- import { MediaTypeEncoders } from './media-type-encoders';
4
+ import { HeaderParameters } from './header-parameters';
5
+ import { MediaType } from './media-type';
6
+ import { MediaTypeDecoders } from './media-type-codecs/media-type-decoders';
7
+ import { isURLQueryParamsEncoder } from './media-type-codecs/media-type-encoder';
8
+ import { MediaTypeEncoders } from './media-type-codecs/media-type-encoders';
9
+ import { SundayError } from './sunday-error';
10
10
  import { URLTemplate } from './url-template';
11
+ import { errorToMessage } from './util/error';
11
12
  export class FetchRequestFactory {
12
13
  constructor(baseUrl, options) {
13
14
  var _a, _b, _c;
15
+ this.problemTypes = new Map();
14
16
  this.baseUrl =
15
17
  typeof baseUrl === 'string' ? new URLTemplate(baseUrl) : baseUrl;
16
18
  this.adapter = options === null || options === void 0 ? void 0 : options.adapter;
17
- this.mediaTypeEncoders = (_a = options === null || options === void 0 ? void 0 : options.mediaTypeEncoders) !== null && _a !== void 0 ? _a : MediaTypeEncoders.DEFAULT;
18
- this.mediaTypeDecoders = (_b = options === null || options === void 0 ? void 0 : options.mediaTypeDecoders) !== null && _b !== void 0 ? _b : MediaTypeDecoders.DEFAULT;
19
+ this.mediaTypeEncoders =
20
+ (_a = options === null || options === void 0 ? void 0 : options.mediaTypeEncoders) !== null && _a !== void 0 ? _a : MediaTypeEncoders.DEFAULT;
21
+ this.mediaTypeDecoders =
22
+ (_b = options === null || options === void 0 ? void 0 : options.mediaTypeDecoders) !== null && _b !== void 0 ? _b : MediaTypeDecoders.DEFAULT;
19
23
  this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : console;
20
24
  }
25
+ registerProblem(type, problemType) {
26
+ const typeStr = type instanceof URL ? type.toString() : type;
27
+ this.problemTypes.set(typeStr, problemType);
28
+ }
21
29
  request(requestSpec, requestInit) {
22
- var _a, _b, _c, _d, _e;
23
30
  //
24
- const url = this.baseUrl.complete(requestSpec.pathTemplate, (_a = requestSpec.pathParameters) !== null && _a !== void 0 ? _a : {});
25
- if (requestSpec.queryParameters) {
26
- const encoder = this.mediaTypeEncoders.find(MediaType.WWW_URL_FORM_ENCODED);
27
- if (!isURLQueryParamsEncoder(encoder)) {
28
- throw Error(`MediaTypeEncoder for ${MediaType.WWW_URL_FORM_ENCODED} must be an instance of URLEncoder`);
31
+ return defer(() => {
32
+ var _a, _b, _c, _d;
33
+ const url = this.baseUrl.complete(requestSpec.pathTemplate, (_a = requestSpec.pathParameters) !== null && _a !== void 0 ? _a : {});
34
+ if (requestSpec.queryParameters) {
35
+ const encoder = this.mediaTypeEncoders.find(MediaType.WWWFormUrlEncoded);
36
+ if (!isURLQueryParamsEncoder(encoder)) {
37
+ throw Error(`MediaTypeEncoder for ${MediaType.WWWFormUrlEncoded} must be an instance of URLQueryParamsEncoder`);
38
+ }
39
+ url.search = `?${encoder.encodeQueryString(requestSpec.queryParameters)}`;
29
40
  }
30
- url.search = `?${encoder.encodeQueryString(requestSpec.queryParameters)}`;
31
- }
32
- const headers = new Headers(requestSpec.headers);
33
- // Determine & add accept header
34
- const supportedAcceptTypes = (_b = requestSpec.acceptTypes) === null || _b === void 0 ? void 0 : _b.filter((type) => this.mediaTypeDecoders.supports(type));
35
- if (supportedAcceptTypes === null || supportedAcceptTypes === void 0 ? void 0 : supportedAcceptTypes.length) {
36
- const accept = supportedAcceptTypes.join(' , ');
37
- headers.set('accept', accept);
38
- }
39
- // Determine content type
40
- const contentType = (_c = requestSpec.contentTypes) === null || _c === void 0 ? void 0 : _c.find((type) => this.mediaTypeEncoders.supports(type));
41
- // If matched, add content type (even if body is nil, to match any expected server requirements)
42
- if (contentType) {
43
- headers.set('content-type', contentType);
44
- }
45
- // Encode & add body data
46
- let body;
47
- if (requestSpec.body) {
48
- if (!contentType) {
49
- throw Error('Unsupported content-type for request body');
41
+ const headers = new Headers(HeaderParameters.encode(requestSpec.headers));
42
+ // Determine & add accept header
43
+ if (requestSpec.acceptTypes) {
44
+ const supportedAcceptTypes = requestSpec.acceptTypes.filter((type) => this.mediaTypeDecoders.supports(type));
45
+ if (!supportedAcceptTypes.length) {
46
+ throw Error('None of the provided accept types has a reqistered decoder');
47
+ }
48
+ const accept = supportedAcceptTypes.join(' , ');
49
+ headers.set('accept', accept);
50
50
  }
51
- body = this.mediaTypeEncoders
52
- .find(contentType)
53
- .encode(requestSpec.body, requestSpec.bodyType);
54
- }
55
- const init = Object.assign({}, requestInit, {
56
- headers,
57
- body,
58
- method: requestSpec.method,
51
+ // Determine content type
52
+ const contentType = (_b = requestSpec.contentTypes) === null || _b === void 0 ? void 0 : _b.find((type) => this.mediaTypeEncoders.supports(type));
53
+ // If matched, add content type (even if body is nil, to match any expected server requirements)
54
+ if (contentType) {
55
+ headers.set('content-type', contentType.toString());
56
+ }
57
+ // Encode & add body data
58
+ let body;
59
+ if (requestSpec.body) {
60
+ if (!contentType) {
61
+ throw Error('None of the provided content types has a registered encoder');
62
+ }
63
+ body = this.mediaTypeEncoders
64
+ .find(contentType)
65
+ .encode(requestSpec.body, requestSpec.bodyType);
66
+ }
67
+ const init = Object.assign({}, requestInit, {
68
+ headers,
69
+ body,
70
+ method: requestSpec.method,
71
+ });
72
+ const request = new Request(url.toString(), init);
73
+ return (_d = (_c = this.adapter) === null || _c === void 0 ? void 0 : _c.call(this, request)) !== null && _d !== void 0 ? _d : of(request);
59
74
  });
60
- const request = new Request(url.toString(), init);
61
- return (_e = (_d = this.adapter) === null || _d === void 0 ? void 0 : _d.call(this, request)) !== null && _e !== void 0 ? _e : of(request);
62
75
  }
63
76
  response(request, dataExpected) {
64
77
  const request$ = request instanceof Request ? of(request) : this.request(request);
65
- return request$.pipe(switchMap((req) => fetch(req)), switchMap((response) => validate(response, dataExpected !== null && dataExpected !== void 0 ? dataExpected : false)));
78
+ return request$.pipe(switchMap((req) => fetch(req)), switchMap((response) => validate(response, dataExpected !== null && dataExpected !== void 0 ? dataExpected : false, this.problemTypes)));
66
79
  }
67
80
  result(request, responseType) {
68
81
  const response$ = this.response(request, !!responseType);
69
82
  if (!responseType) {
70
- return response$.pipe(mapTo(undefined));
83
+ return response$.pipe(map(() => undefined));
71
84
  }
72
85
  else {
73
86
  return response$.pipe(switchMap(async (response) => {
74
- var _a;
75
87
  try {
76
- const contentType = mediaType(response.headers.get('content-type'), MediaType.OCTET_STREAM);
88
+ const contentType = MediaType.from(response.headers.get('content-type'), MediaType.OctetStream);
77
89
  const decoder = this.mediaTypeDecoders.find(contentType);
78
90
  return await decoder.decode(response, responseType);
79
91
  }
80
92
  catch (error) {
81
- throw await HttpError.fromResponse((_a = error.message) !== null && _a !== void 0 ? _a : 'Unknown Error', response);
93
+ throw await SundayError.fromResponse(errorToMessage(error, 'Response Decoding Failed'), response);
82
94
  }
83
95
  }));
84
96
  }
85
97
  }
86
- events(requestSpec, eventTypes) {
98
+ eventSource(requestSpec) {
87
99
  //
88
100
  const adapter = (url, requestInit) => {
89
101
  const eventSourceSpec = Object.assign({}, requestSpec, {
@@ -91,30 +103,34 @@ export class FetchRequestFactory {
91
103
  });
92
104
  return this.request(eventSourceSpec, requestInit);
93
105
  };
94
- const eventSource = new FetchEventSource(requestSpec.pathTemplate, {
106
+ return new FetchEventSource(requestSpec.pathTemplate, {
95
107
  logger: this.logger,
96
108
  adapter,
97
109
  });
98
- if (!eventTypes) {
99
- return eventSource;
100
- }
101
- const generateEventHandler = (eventType, subscriber) => {
102
- return async (event) => {
103
- const decoder = this.mediaTypeDecoders.find('application/json');
104
- const msgEvent = event;
105
- const deserializedEvent = await decoder.decodeText(msgEvent.data, eventType);
106
- subscriber.next(deserializedEvent);
107
- };
108
- };
110
+ }
111
+ eventStream(requestSpec, decoder) {
112
+ const eventSource = this.eventSource(requestSpec);
113
+ const jsonDecoder = this.mediaTypeDecoders.find(MediaType.JSON);
109
114
  return new Observable((subscriber) => {
110
- for (const eventTypeName of Object.keys(eventTypes)) {
111
- const eventType = eventTypes[eventTypeName];
112
- eventSource.addEventListener(eventTypeName, generateEventHandler(eventType, subscriber));
113
- eventSource.onerror = (event) => {
114
- var _a, _b;
115
- (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, { event }, 'event source error');
116
- };
117
- }
115
+ eventSource.onmessage = (event) => {
116
+ if (!event.data) {
117
+ return;
118
+ }
119
+ try {
120
+ const decodedEvent = decoder(jsonDecoder, event.type, event.lastEventId, event.data, this.logger);
121
+ if (!decodedEvent) {
122
+ return;
123
+ }
124
+ subscriber.next(decodedEvent);
125
+ }
126
+ catch (error) {
127
+ subscriber.error(error);
128
+ }
129
+ };
130
+ eventSource.onerror = (event) => {
131
+ var _a, _b;
132
+ (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, { event }, 'event source error');
133
+ };
118
134
  eventSource.connect();
119
135
  return () => {
120
136
  eventSource.close();
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-request-factory.js","sourceRoot":"","sources":["../src/fetch-request-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-request-factory.js","sourceRoot":"","sources":["../src/fetch-request-factory.ts"],"names":[],"mappings":"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"}
package/dist/fetch.d.ts CHANGED
@@ -1 +1,7 @@
1
- export declare function validate(response: Response, dataExpected: boolean): Promise<Response>;
1
+ import { ConstructableClassType } from './class-type';
2
+ import { Problem } from './problem';
3
+ export declare function validate(response: Response, dataExpected: boolean, problemTypes?: Map<string, ConstructableClassType<Problem>>): Promise<Response>;
4
+ export declare namespace ResponseExample {
5
+ function build(response: Response, bodyExample?: string): string;
6
+ function bodyExcerpt(response: Response, maxLength: number): Promise<[string, unknown]>;
7
+ }
package/dist/fetch.js CHANGED
@@ -1,19 +1,72 @@
1
- import { mediaType, MediaType } from './media-type';
2
- import { HttpError } from './http-error';
1
+ import { MediaType } from './media-type';
3
2
  import { Problem } from './problem';
4
- export async function validate(response, dataExpected) {
3
+ import { SundayError } from './sunday-error';
4
+ import { Base64 } from './util/base64';
5
+ import { errorToMessage } from './util/error';
6
+ export async function validate(response, dataExpected, problemTypes) {
5
7
  var _a, _b;
6
8
  if (response.status < 200 || response.status >= 300) {
7
- if (mediaType(response.headers.get('content-type')) !== MediaType.PROBLEM_JSON) {
8
- await ((_b = (_a = response.body) === null || _a === void 0 ? void 0 : _a.cancel) === null || _b === void 0 ? void 0 : _b.call(_a));
9
- throw await HttpError.fromResponse('Unacceptable response status code', response);
9
+ const mediaType = MediaType.from(response.headers.get('content-type'), MediaType.OctetStream);
10
+ const isProblemJSON = (_a = mediaType === null || mediaType === void 0 ? void 0 : mediaType.compatible(MediaType.ProblemJSON)) !== null && _a !== void 0 ? _a : false;
11
+ if (!isProblemJSON) {
12
+ throw await Problem.fromResponse(response);
10
13
  }
11
14
  const problemData = await response.json();
12
- throw new Problem(problemData);
15
+ const problemType = (_b = problemTypes === null || problemTypes === void 0 ? void 0 : problemTypes.get(problemData.type)) !== null && _b !== void 0 ? _b : Problem;
16
+ throw new problemType(problemData);
13
17
  }
14
18
  if (dataExpected && (response.status === 204 || response.status === 205)) {
15
- throw await HttpError.fromResponse('Unexpected empty response', response);
19
+ throw await SundayError.fromResponse('Unexpected Empty Response', response);
16
20
  }
17
21
  return response;
18
22
  }
23
+ export var ResponseExample;
24
+ (function (ResponseExample) {
25
+ function build(response, bodyExample) {
26
+ return (`HTTP/?.? ${response.status} ${response.statusText}\n` +
27
+ Array.from(response.headers.entries())
28
+ .map(([name, value]) => `${name}: ${value}\n`)
29
+ .join('') +
30
+ '\n' +
31
+ (bodyExample !== null && bodyExample !== void 0 ? bodyExample : '<none>'));
32
+ }
33
+ ResponseExample.build = build;
34
+ async function bodyExcerpt(response, maxLength) {
35
+ var _a;
36
+ let body;
37
+ let bodyExcerpt;
38
+ try {
39
+ if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.startsWith('text/')) {
40
+ const text = await response.text();
41
+ body = text;
42
+ if (text.length > maxLength) {
43
+ const exampleText = text.slice(0, maxLength);
44
+ const remainingTextLength = text.length - maxLength;
45
+ bodyExcerpt = `${exampleText}<<... ${remainingTextLength} characters>>`;
46
+ }
47
+ else {
48
+ bodyExcerpt = text;
49
+ }
50
+ }
51
+ else {
52
+ const blob = await response.blob();
53
+ body = blob;
54
+ if (blob.size > maxLength) {
55
+ bodyExcerpt = `<<binary data: ${blob.size} bytes>>`;
56
+ }
57
+ else {
58
+ const dataSlice = await blob.slice(0, maxLength).arrayBuffer();
59
+ bodyExcerpt = Base64.encode(dataSlice);
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ // ignore errors
65
+ const message = errorToMessage(error);
66
+ body = bodyExcerpt = `<<error displaying response data: ${message}>>`;
67
+ }
68
+ return [bodyExcerpt, body];
69
+ }
70
+ ResponseExample.bodyExcerpt = bodyExcerpt;
71
+ })(ResponseExample || (ResponseExample = {}));
19
72
  //# sourceMappingURL=fetch.js.map
package/dist/fetch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAkB,EAClB,YAAqB;;IAErB,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;QACnD,IACE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,SAAS,CAAC,YAAY,EAC1E;YACA,mBAAM,QAAQ,CAAC,IAAI,0CAAE,MAAM,mDAAI,CAAC;YAChC,MAAM,MAAM,SAAS,CAAC,YAAY,CAChC,mCAAmC,EACnC,QAAQ,CACT,CAAC;SACH;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,IAAI,OAAO,CAAC,WAAsB,CAAC,CAAC;KAC3C;IAED,IAAI,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE;QACxE,MAAM,MAAM,SAAS,CAAC,YAAY,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;KAC3E;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare namespace HeaderParameters {
2
+ function encode(parameters?: Record<string, unknown>): [string, string][];
3
+ }
@@ -0,0 +1,40 @@
1
+ export var HeaderParameters;
2
+ (function (HeaderParameters) {
3
+ function encode(parameters) {
4
+ if (parameters == null) {
5
+ return [];
6
+ }
7
+ const headers = [];
8
+ Object.entries(parameters).forEach(([name, parameter]) => {
9
+ for (const value of encodeParam(name, parameter)) {
10
+ headers.push([name, value]);
11
+ }
12
+ });
13
+ return headers;
14
+ }
15
+ HeaderParameters.encode = encode;
16
+ function encodeParam(name, value) {
17
+ if (value == null) {
18
+ return [];
19
+ }
20
+ if (value instanceof Array) {
21
+ const result = [];
22
+ for (const item of value) {
23
+ if (item == null) {
24
+ continue;
25
+ }
26
+ result.push(validate(name, `${item}`));
27
+ }
28
+ return result;
29
+ }
30
+ return [validate(name, `${value}`)];
31
+ }
32
+ const asciiRegex = /^[\x20-\x7F]*$/;
33
+ function validate(name, value) {
34
+ if (!asciiRegex.test(value)) {
35
+ throw new Error(`The encoded header value contains one or more invalid characters: header=${name}, value=${value}`);
36
+ }
37
+ return value;
38
+ }
39
+ })(HeaderParameters || (HeaderParameters = {}));
40
+ //# sourceMappingURL=header-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-parameters.js","sourceRoot":"","sources":["../src/header-parameters.ts"],"names":[],"mappings":"AAAA,MAAM,KAAW,gBAAgB,CAmDhC;AAnDD,WAAiB,gBAAgB;IAC/B,SAAgB,MAAM,CACpB,UAAoC;QAEpC,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,OAAO,EAAE,CAAC;SACX;QAED,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;YACvD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAhBe,uBAAM,SAgBrB,CAAA;IAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAc;QAC/C,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,EAAE,CAAC;SACX;QAED,IAAI,KAAK,YAAY,KAAK,EAAE;YAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,SAAS;iBACV;gBAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;aACxC;YAED,OAAO,MAAM,CAAC;SACf;QAED,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC;IAEpC,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CACb,4EAA4E,IAAI,WAAW,KAAK,EAAE,CACnG,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,EAnDgB,gBAAgB,KAAhB,gBAAgB,QAmDhC"}
package/dist/index.d.ts CHANGED
@@ -5,19 +5,19 @@ export * from './fetch-request-factory';
5
5
  export * from './fetch-event-source';
6
6
  export * from './url-template';
7
7
  export * from './media-type';
8
- export * from './media-type-decoder';
9
- export * from './media-type-decoders';
10
- export * from './media-type-encoder';
11
- export * from './media-type-encoders';
12
- export * from './json-decoder';
13
- export * from './json-encoder';
14
- export * from './cbor-decoder';
15
- export * from './cbor-encoder';
16
- export * from './binary-decoder';
17
- export * from './binary-encoder';
18
- export * from './url-encoder';
8
+ export * from './media-type-codecs/media-type-decoder';
9
+ export * from './media-type-codecs/media-type-decoders';
10
+ export * from './media-type-codecs/media-type-encoder';
11
+ export * from './media-type-codecs/media-type-encoders';
12
+ export * from './media-type-codecs/json-decoder';
13
+ export * from './media-type-codecs/json-encoder';
14
+ export * from './media-type-codecs/cbor-decoder';
15
+ export * from './media-type-codecs/cbor-encoder';
16
+ export * from './media-type-codecs/binary-decoder';
17
+ export * from './media-type-codecs/binary-encoder';
18
+ export * from './media-type-codecs/www-form-url-encoder';
19
19
  export * from './logger';
20
- export * from './http-error';
20
+ export * from './sunday-error';
21
21
  export * from './problem';
22
22
  export * from './date-time-types';
23
23
  export * from './util/base64';
package/dist/index.js CHANGED
@@ -5,19 +5,19 @@ export * from './fetch-request-factory';
5
5
  export * from './fetch-event-source';
6
6
  export * from './url-template';
7
7
  export * from './media-type';
8
- export * from './media-type-decoder';
9
- export * from './media-type-decoders';
10
- export * from './media-type-encoder';
11
- export * from './media-type-encoders';
12
- export * from './json-decoder';
13
- export * from './json-encoder';
14
- export * from './cbor-decoder';
15
- export * from './cbor-encoder';
16
- export * from './binary-decoder';
17
- export * from './binary-encoder';
18
- export * from './url-encoder';
8
+ export * from './media-type-codecs/media-type-decoder';
9
+ export * from './media-type-codecs/media-type-decoders';
10
+ export * from './media-type-codecs/media-type-encoder';
11
+ export * from './media-type-codecs/media-type-encoders';
12
+ export * from './media-type-codecs/json-decoder';
13
+ export * from './media-type-codecs/json-encoder';
14
+ export * from './media-type-codecs/cbor-decoder';
15
+ export * from './media-type-codecs/cbor-encoder';
16
+ export * from './media-type-codecs/binary-decoder';
17
+ export * from './media-type-codecs/binary-encoder';
18
+ export * from './media-type-codecs/www-form-url-encoder';
19
19
  export * from './logger';
20
- export * from './http-error';
20
+ export * from './sunday-error';
21
21
  export * from './problem';
22
22
  export * from './date-time-types';
23
23
  export * from './util/base64';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAElC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAElC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { MediaTypeDecoder } from './media-type-decoder';
2
- import { AnyType } from './any-type';
2
+ import { AnyConstructableType } from '../any-type';
3
3
  export declare class BinaryDecoder implements MediaTypeDecoder {
4
4
  static default: BinaryDecoder;
5
- decode<T>(response: Response, type: AnyType): Promise<T>;
5
+ decode<T>(response: Response, type: AnyConstructableType): Promise<T>;
6
6
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-decoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/binary-decoder.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IAGxB,KAAK,CAAC,MAAM,CAAI,QAAkB,EAAE,IAA0B;QAC5D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAEjD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;YAC3B,OAAO,WAA2B,CAAC;SACpC;aAAM,IACL,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;YACtB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YACrB,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EACpB;YACA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAM,CAAC;SACtC;QAED,MAAM,KAAK,CACT,kEAAkE,CACnE,CAAC;IACJ,CAAC;;AAlBM,qBAAO,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-encoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/binary-encoder.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAGxB,MAAM,CAAC,KAAc;QACnB,IACE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAC/B,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;YACxB,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,EAClC;YACA,MAAM,KAAK,CACT,8DAA8D,CAC/D,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;;AAdM,qBAAO,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { AnyType } from '../any-type';
2
+ import { MediaTypeDecoder } from './media-type-decoder';
3
+ export declare class CBORDecoder implements MediaTypeDecoder {
4
+ readonly numericDateDecoding: CBORDecoder.NumericDateDecoding;
5
+ static get default(): CBORDecoder;
6
+ private readonly customDeserializers;
7
+ private readonly parser;
8
+ constructor(numericDateDecoding: CBORDecoder.NumericDateDecoding);
9
+ decode<T>(response: Response, type: AnyType): Promise<T>;
10
+ decodeData<T>(buffer: ArrayBuffer, type: AnyType): T;
11
+ private untag;
12
+ private instantDeserializer;
13
+ private zonedDateTimeDeserializer;
14
+ private offsetDateTimeDeserializer;
15
+ private offsetTimeFormatter;
16
+ private offsetTimeDeserializer;
17
+ private localDateTimeDeserializer;
18
+ private localDateDeserializer;
19
+ private localTimeDeserializer;
20
+ private dateDeserializer;
21
+ private urlDeserializer;
22
+ private arrayBufferDeserializer;
23
+ }
24
+ export declare namespace CBORDecoder {
25
+ /**
26
+ * Configures how numeric temporal values are decoded.
27
+ */
28
+ enum NumericDateDecoding {
29
+ /**
30
+ * Decode numeric temporal values assuming they are seconds with decimal
31
+ * sub-second precision.
32
+ */
33
+ DECIMAL_SECONDS_SINCE_EPOCH = 0,
34
+ /**
35
+ * Decode numeric temporal values assuming they are integer milliseconds.
36
+ */
37
+ MILLISECONDS_SINCE_EPOCH = 1
38
+ }
39
+ }