@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.
- package/LICENSE.txt +203 -0
- package/README.md +35 -2
- package/dist/any-type.d.ts +2 -0
- package/dist/any-type.js +13 -0
- package/dist/any-type.js.map +1 -1
- package/dist/class-type.d.ts +2 -2
- package/dist/class-type.js +13 -0
- package/dist/class-type.js.map +1 -1
- package/dist/date-time-types.d.ts +2 -7
- package/dist/date-time-types.js +15 -4
- package/dist/date-time-types.js.map +1 -1
- package/dist/event-parser.d.ts +17 -0
- package/dist/event-parser.js +153 -0
- package/dist/event-parser.js.map +1 -0
- package/dist/fetch-event-source.d.ts +12 -10
- package/dist/fetch-event-source.js +154 -138
- package/dist/fetch-event-source.js.map +1 -1
- package/dist/fetch-request-factory.d.ts +10 -5
- package/dist/fetch-request-factory.js +100 -71
- package/dist/fetch-request-factory.js.map +1 -1
- package/dist/fetch.d.ts +7 -1
- package/dist/fetch.js +74 -8
- package/dist/fetch.js.map +1 -1
- package/dist/header-parameters.d.ts +3 -0
- package/dist/header-parameters.js +53 -0
- package/dist/header-parameters.js.map +1 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.js +25 -12
- package/dist/index.js.map +1 -1
- package/dist/logger.js +13 -0
- package/dist/logger.js.map +1 -1
- package/dist/{binary-decoder.d.ts → media-type-codecs/binary-decoder.d.ts} +2 -2
- package/dist/media-type-codecs/binary-decoder.js +29 -0
- package/dist/media-type-codecs/binary-decoder.js.map +1 -0
- package/dist/{binary-encoder.d.ts → media-type-codecs/binary-encoder.d.ts} +0 -0
- package/dist/media-type-codecs/binary-encoder.js +26 -0
- package/dist/media-type-codecs/binary-encoder.js.map +1 -0
- package/dist/media-type-codecs/cbor-decoder.d.ts +39 -0
- package/dist/media-type-codecs/cbor-decoder.js +426 -0
- package/dist/media-type-codecs/cbor-decoder.js.map +1 -0
- package/dist/media-type-codecs/cbor-encoder.d.ts +43 -0
- package/dist/media-type-codecs/cbor-encoder.js +239 -0
- package/dist/media-type-codecs/cbor-encoder.js.map +1 -0
- package/dist/media-type-codecs/cbor-tags.d.ts +4 -0
- package/dist/media-type-codecs/cbor-tags.js +18 -0
- package/dist/media-type-codecs/cbor-tags.js.map +1 -0
- package/dist/media-type-codecs/json-decoder.d.ts +39 -0
- package/dist/media-type-codecs/json-decoder.js +380 -0
- package/dist/media-type-codecs/json-decoder.js.map +1 -0
- package/dist/media-type-codecs/json-encoder.d.ts +44 -0
- package/dist/media-type-codecs/json-encoder.js +276 -0
- package/dist/media-type-codecs/json-encoder.js.map +1 -0
- package/dist/media-type-codecs/media-type-decoder.d.ts +11 -0
- package/dist/media-type-codecs/media-type-decoder.js +19 -0
- package/dist/media-type-codecs/media-type-decoder.js.map +1 -0
- package/dist/{media-type-decoders.d.ts → media-type-codecs/media-type-decoders.d.ts} +5 -4
- package/dist/media-type-codecs/media-type-decoders.js +53 -0
- package/dist/media-type-codecs/media-type-decoders.js.map +1 -0
- package/dist/{media-type-encoder.d.ts → media-type-codecs/media-type-encoder.d.ts} +5 -1
- package/dist/media-type-codecs/media-type-encoder.js +24 -0
- package/dist/media-type-codecs/media-type-encoder.js.map +1 -0
- package/dist/{media-type-encoders.d.ts → media-type-codecs/media-type-encoders.d.ts} +5 -4
- package/dist/media-type-codecs/media-type-encoders.js +55 -0
- package/dist/media-type-codecs/media-type-encoders.js.map +1 -0
- package/dist/{url-encoder.d.ts → media-type-codecs/www-form-url-encoder.d.ts} +8 -8
- package/dist/{url-encoder.js → media-type-codecs/www-form-url-encoder.js} +51 -37
- package/dist/media-type-codecs/www-form-url-encoder.js.map +1 -0
- package/dist/media-type.d.ts +91 -13
- package/dist/media-type.js +286 -15
- package/dist/media-type.js.map +1 -1
- package/dist/problem.d.ts +24 -9
- package/dist/problem.js +153 -6
- package/dist/problem.js.map +1 -1
- package/dist/request-factory.d.ts +10 -10
- package/dist/request-factory.js +13 -0
- package/dist/request-factory.js.map +1 -1
- package/dist/sunday-error.d.ts +11 -0
- package/dist/sunday-error.js +31 -0
- package/dist/sunday-error.js.map +1 -0
- package/dist/url-template.js +13 -0
- package/dist/url-template.js.map +1 -1
- package/dist/util/any.d.ts +2 -0
- package/dist/util/any.js +24 -0
- package/dist/util/any.js.map +1 -0
- package/dist/util/base64.js +13 -0
- package/dist/util/base64.js.map +1 -1
- package/dist/util/error.d.ts +2 -0
- package/dist/util/error.js +26 -0
- package/dist/util/error.js.map +1 -0
- package/dist/util/hex.js +16 -2
- package/dist/util/hex.js.map +1 -1
- package/dist/util/rxjs.d.ts +3 -0
- package/dist/util/rxjs.js +22 -5
- package/dist/util/rxjs.js.map +1 -1
- package/dist/util/stream-rxjs.js +13 -0
- package/dist/util/stream-rxjs.js.map +1 -1
- package/dist/util/temporal.d.ts +2 -0
- package/dist/util/temporal.js +31 -0
- package/dist/util/temporal.js.map +1 -0
- package/package.json +29 -22
- package/src/any-type.ts +18 -0
- package/src/class-type.ts +20 -2
- package/src/date-time-types.ts +35 -8
- package/src/event-parser.ts +204 -0
- package/src/fetch-event-source.ts +163 -159
- package/src/fetch-request-factory.ts +142 -100
- package/src/fetch.ts +79 -14
- package/src/header-parameters.ts +66 -0
- package/src/index.ts +26 -12
- package/src/logger.ts +14 -0
- package/src/media-type-codecs/binary-decoder.ts +38 -0
- package/src/media-type-codecs/binary-encoder.ts +33 -0
- package/src/media-type-codecs/cbor-decoder.ts +529 -0
- package/src/media-type-codecs/cbor-encoder.ts +321 -0
- package/src/media-type-codecs/cbor-tags.ts +18 -0
- package/src/media-type-codecs/json-decoder.ts +484 -0
- package/src/media-type-codecs/json-encoder.ts +342 -0
- package/src/media-type-codecs/media-type-decoder.ts +34 -0
- package/src/media-type-codecs/media-type-decoders.ts +81 -0
- package/src/media-type-codecs/media-type-encoder.ts +45 -0
- package/src/media-type-codecs/media-type-encoders.ts +83 -0
- package/src/media-type-codecs/www-form-url-encoder.ts +193 -0
- package/src/media-type.ts +340 -22
- package/src/problem.ts +158 -12
- package/src/request-factory.ts +35 -12
- package/src/sunday-error.ts +51 -0
- package/src/url-template.ts +14 -0
- package/src/util/any.ts +24 -0
- package/src/util/base64.ts +14 -0
- package/src/util/error.ts +28 -0
- package/src/util/hex.ts +17 -2
- package/src/util/rxjs.ts +30 -5
- package/src/util/stream-rxjs.ts +14 -0
- package/src/util/temporal.ts +32 -0
- package/dist/binary-decoder.js +0 -16
- package/dist/binary-decoder.js.map +0 -1
- package/dist/binary-encoder.js +0 -13
- package/dist/binary-encoder.js.map +0 -1
- package/dist/cbor-decoder.d.ts +0 -15
- package/dist/cbor-decoder.js +0 -126
- package/dist/cbor-decoder.js.map +0 -1
- package/dist/cbor-encoder.d.ts +0 -29
- package/dist/cbor-encoder.js +0 -81
- package/dist/cbor-encoder.js.map +0 -1
- package/dist/cbor-tags.d.ts +0 -3
- package/dist/cbor-tags.js +0 -4
- package/dist/cbor-tags.js.map +0 -1
- package/dist/http-error.d.ts +0 -10
- package/dist/http-error.js +0 -45
- package/dist/http-error.js.map +0 -1
- package/dist/json-decoder.d.ts +0 -31
- package/dist/json-decoder.js +0 -139
- package/dist/json-decoder.js.map +0 -1
- package/dist/json-encoder.d.ts +0 -35
- package/dist/json-encoder.js +0 -134
- package/dist/json-encoder.js.map +0 -1
- package/dist/media-type-decoder.d.ts +0 -4
- package/dist/media-type-decoder.js +0 -2
- package/dist/media-type-decoder.js.map +0 -1
- package/dist/media-type-decoders.js +0 -40
- package/dist/media-type-decoders.js.map +0 -1
- package/dist/media-type-encoder.js +0 -6
- package/dist/media-type-encoder.js.map +0 -1
- package/dist/media-type-encoders.js +0 -42
- package/dist/media-type-encoders.js.map +0 -1
- package/dist/url-encoder.js.map +0 -1
- package/src/binary-decoder.ts +0 -24
- package/src/binary-encoder.ts +0 -19
- package/src/cbor-decoder.ts +0 -148
- package/src/cbor-encoder.ts +0 -95
- package/src/cbor-tags.ts +0 -3
- package/src/http-error.ts +0 -55
- package/src/json-decoder.ts +0 -164
- package/src/json-encoder.ts +0 -162
- package/src/media-type-decoder.ts +0 -5
- package/src/media-type-decoders.ts +0 -59
- package/src/media-type-encoder.ts +0 -16
- package/src/media-type-encoders.ts +0 -61
- package/src/url-encoder.ts +0 -173
|
@@ -1,89 +1,114 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 { defer, map, Observable, of, switchMap } from 'rxjs';
|
|
3
15
|
import { validate } from './fetch';
|
|
4
16
|
import { FetchEventSource } from './fetch-event-source';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { MediaTypeDecoders } from './media-type-decoders';
|
|
8
|
-
import { isURLQueryParamsEncoder } from './media-type-encoder';
|
|
9
|
-
import { MediaTypeEncoders } from './media-type-encoders';
|
|
17
|
+
import { HeaderParameters } from './header-parameters';
|
|
18
|
+
import { MediaType } from './media-type';
|
|
19
|
+
import { MediaTypeDecoders } from './media-type-codecs/media-type-decoders';
|
|
20
|
+
import { isURLQueryParamsEncoder } from './media-type-codecs/media-type-encoder';
|
|
21
|
+
import { MediaTypeEncoders } from './media-type-codecs/media-type-encoders';
|
|
22
|
+
import { SundayError } from './sunday-error';
|
|
10
23
|
import { URLTemplate } from './url-template';
|
|
24
|
+
import { errorToMessage } from './util/error';
|
|
11
25
|
export class FetchRequestFactory {
|
|
12
26
|
constructor(baseUrl, options) {
|
|
13
27
|
var _a, _b, _c;
|
|
28
|
+
this.problemTypes = new Map();
|
|
14
29
|
this.baseUrl =
|
|
15
30
|
typeof baseUrl === 'string' ? new URLTemplate(baseUrl) : baseUrl;
|
|
16
31
|
this.adapter = options === null || options === void 0 ? void 0 : options.adapter;
|
|
17
|
-
this.mediaTypeEncoders =
|
|
18
|
-
|
|
32
|
+
this.mediaTypeEncoders =
|
|
33
|
+
(_a = options === null || options === void 0 ? void 0 : options.mediaTypeEncoders) !== null && _a !== void 0 ? _a : MediaTypeEncoders.DEFAULT;
|
|
34
|
+
this.mediaTypeDecoders =
|
|
35
|
+
(_b = options === null || options === void 0 ? void 0 : options.mediaTypeDecoders) !== null && _b !== void 0 ? _b : MediaTypeDecoders.DEFAULT;
|
|
19
36
|
this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : console;
|
|
20
37
|
}
|
|
38
|
+
registerProblem(type, problemType) {
|
|
39
|
+
const typeStr = type instanceof URL ? type.toString() : type;
|
|
40
|
+
this.problemTypes.set(typeStr, problemType);
|
|
41
|
+
}
|
|
21
42
|
request(requestSpec, requestInit) {
|
|
22
|
-
var _a, _b, _c, _d, _e;
|
|
23
43
|
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
if (
|
|
28
|
-
|
|
44
|
+
return defer(() => {
|
|
45
|
+
var _a, _b, _c, _d;
|
|
46
|
+
const url = this.baseUrl.complete(requestSpec.pathTemplate, (_a = requestSpec.pathParameters) !== null && _a !== void 0 ? _a : {});
|
|
47
|
+
if (requestSpec.queryParameters) {
|
|
48
|
+
const encoder = this.mediaTypeEncoders.find(MediaType.WWWFormUrlEncoded);
|
|
49
|
+
if (!isURLQueryParamsEncoder(encoder)) {
|
|
50
|
+
throw Error(`MediaTypeEncoder for ${MediaType.WWWFormUrlEncoded} must be an instance of URLQueryParamsEncoder`);
|
|
51
|
+
}
|
|
52
|
+
url.search = `?${encoder.encodeQueryString(requestSpec.queryParameters)}`;
|
|
29
53
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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');
|
|
54
|
+
const headers = new Headers(HeaderParameters.encode(requestSpec.headers));
|
|
55
|
+
// Determine & add accept header
|
|
56
|
+
if (requestSpec.acceptTypes) {
|
|
57
|
+
const supportedAcceptTypes = requestSpec.acceptTypes.filter((type) => this.mediaTypeDecoders.supports(type));
|
|
58
|
+
if (!supportedAcceptTypes.length) {
|
|
59
|
+
throw Error('None of the provided accept types has a reqistered decoder');
|
|
60
|
+
}
|
|
61
|
+
const accept = supportedAcceptTypes.join(' , ');
|
|
62
|
+
headers.set('accept', accept);
|
|
50
63
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
body
|
|
58
|
-
|
|
64
|
+
// Determine content type
|
|
65
|
+
const contentType = (_b = requestSpec.contentTypes) === null || _b === void 0 ? void 0 : _b.find((type) => this.mediaTypeEncoders.supports(type));
|
|
66
|
+
// If matched, add content type (even if body is nil, to match any expected server requirements)
|
|
67
|
+
if (contentType) {
|
|
68
|
+
headers.set('content-type', contentType.toString());
|
|
69
|
+
}
|
|
70
|
+
// Encode & add body data
|
|
71
|
+
let body;
|
|
72
|
+
if (requestSpec.body) {
|
|
73
|
+
if (!contentType) {
|
|
74
|
+
throw Error('None of the provided content types has a registered encoder');
|
|
75
|
+
}
|
|
76
|
+
body = this.mediaTypeEncoders
|
|
77
|
+
.find(contentType)
|
|
78
|
+
.encode(requestSpec.body, requestSpec.bodyType);
|
|
79
|
+
}
|
|
80
|
+
const init = Object.assign({}, requestInit, {
|
|
81
|
+
headers,
|
|
82
|
+
body,
|
|
83
|
+
method: requestSpec.method,
|
|
84
|
+
});
|
|
85
|
+
const request = new Request(url.toString(), init);
|
|
86
|
+
return (_d = (_c = this.adapter) === null || _c === void 0 ? void 0 : _c.call(this, request)) !== null && _d !== void 0 ? _d : of(request);
|
|
59
87
|
});
|
|
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
88
|
}
|
|
63
89
|
response(request, dataExpected) {
|
|
64
90
|
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)));
|
|
91
|
+
return request$.pipe(switchMap((req) => fetch(req)), switchMap((response) => validate(response, dataExpected !== null && dataExpected !== void 0 ? dataExpected : false, this.problemTypes)));
|
|
66
92
|
}
|
|
67
93
|
result(request, responseType) {
|
|
68
94
|
const response$ = this.response(request, !!responseType);
|
|
69
95
|
if (!responseType) {
|
|
70
|
-
return response$.pipe(
|
|
96
|
+
return response$.pipe(map(() => undefined));
|
|
71
97
|
}
|
|
72
98
|
else {
|
|
73
99
|
return response$.pipe(switchMap(async (response) => {
|
|
74
|
-
var _a;
|
|
75
100
|
try {
|
|
76
|
-
const contentType =
|
|
101
|
+
const contentType = MediaType.from(response.headers.get('content-type'), MediaType.OctetStream);
|
|
77
102
|
const decoder = this.mediaTypeDecoders.find(contentType);
|
|
78
103
|
return await decoder.decode(response, responseType);
|
|
79
104
|
}
|
|
80
105
|
catch (error) {
|
|
81
|
-
throw await
|
|
106
|
+
throw await SundayError.fromResponse(errorToMessage(error, 'Response Decoding Failed'), response);
|
|
82
107
|
}
|
|
83
108
|
}));
|
|
84
109
|
}
|
|
85
110
|
}
|
|
86
|
-
|
|
111
|
+
eventSource(requestSpec) {
|
|
87
112
|
//
|
|
88
113
|
const adapter = (url, requestInit) => {
|
|
89
114
|
const eventSourceSpec = Object.assign({}, requestSpec, {
|
|
@@ -91,30 +116,34 @@ export class FetchRequestFactory {
|
|
|
91
116
|
});
|
|
92
117
|
return this.request(eventSourceSpec, requestInit);
|
|
93
118
|
};
|
|
94
|
-
|
|
119
|
+
return new FetchEventSource(requestSpec.pathTemplate, {
|
|
95
120
|
logger: this.logger,
|
|
96
121
|
adapter,
|
|
97
122
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const
|
|
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
|
-
};
|
|
123
|
+
}
|
|
124
|
+
eventStream(requestSpec, decoder) {
|
|
125
|
+
const eventSource = this.eventSource(requestSpec);
|
|
126
|
+
const jsonDecoder = this.mediaTypeDecoders.find(MediaType.JSON);
|
|
109
127
|
return new Observable((subscriber) => {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
128
|
+
eventSource.onmessage = (event) => {
|
|
129
|
+
if (!event.data) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const decodedEvent = decoder(jsonDecoder, event.type, event.lastEventId, event.data, this.logger);
|
|
134
|
+
if (!decodedEvent) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
subscriber.next(decodedEvent);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
subscriber.error(error);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
eventSource.onerror = (event) => {
|
|
144
|
+
var _a, _b;
|
|
145
|
+
(_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');
|
|
146
|
+
};
|
|
118
147
|
eventSource.connect();
|
|
119
148
|
return () => {
|
|
120
149
|
eventSource.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-request-factory.js","sourceRoot":"","sources":["../src/fetch-request-factory.ts"],"names":[],"mappings":"AAAA,
|
|
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
|
-
|
|
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,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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';
|
|
3
15
|
import { Problem } from './problem';
|
|
4
|
-
|
|
16
|
+
import { SundayError } from './sunday-error';
|
|
17
|
+
import { Base64 } from './util/base64';
|
|
18
|
+
import { errorToMessage } from './util/error';
|
|
19
|
+
export async function validate(response, dataExpected, problemTypes) {
|
|
5
20
|
var _a, _b;
|
|
6
21
|
if (response.status < 200 || response.status >= 300) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
22
|
+
const mediaType = MediaType.from(response.headers.get('content-type'), MediaType.OctetStream);
|
|
23
|
+
const isProblemJSON = (_a = mediaType === null || mediaType === void 0 ? void 0 : mediaType.compatible(MediaType.ProblemJSON)) !== null && _a !== void 0 ? _a : false;
|
|
24
|
+
if (!isProblemJSON) {
|
|
25
|
+
throw await Problem.fromResponse(response);
|
|
10
26
|
}
|
|
11
27
|
const problemData = await response.json();
|
|
12
|
-
|
|
28
|
+
const problemType = (_b = problemTypes === null || problemTypes === void 0 ? void 0 : problemTypes.get(problemData.type)) !== null && _b !== void 0 ? _b : Problem;
|
|
29
|
+
throw new problemType(problemData);
|
|
13
30
|
}
|
|
14
31
|
if (dataExpected && (response.status === 204 || response.status === 205)) {
|
|
15
|
-
throw await
|
|
32
|
+
throw await SundayError.fromResponse('Unexpected Empty Response', response);
|
|
16
33
|
}
|
|
17
34
|
return response;
|
|
18
35
|
}
|
|
36
|
+
export var ResponseExample;
|
|
37
|
+
(function (ResponseExample) {
|
|
38
|
+
function build(response, bodyExample) {
|
|
39
|
+
return (`HTTP/?.? ${response.status} ${response.statusText}\n` +
|
|
40
|
+
Array.from(response.headers.entries())
|
|
41
|
+
.map(([name, value]) => `${name}: ${value}\n`)
|
|
42
|
+
.join('') +
|
|
43
|
+
'\n' +
|
|
44
|
+
(bodyExample !== null && bodyExample !== void 0 ? bodyExample : '<none>'));
|
|
45
|
+
}
|
|
46
|
+
ResponseExample.build = build;
|
|
47
|
+
async function bodyExcerpt(response, maxLength) {
|
|
48
|
+
var _a;
|
|
49
|
+
let body;
|
|
50
|
+
let bodyExcerpt;
|
|
51
|
+
try {
|
|
52
|
+
if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.startsWith('text/')) {
|
|
53
|
+
const text = await response.text();
|
|
54
|
+
body = text;
|
|
55
|
+
if (text.length > maxLength) {
|
|
56
|
+
const exampleText = text.slice(0, maxLength);
|
|
57
|
+
const remainingTextLength = text.length - maxLength;
|
|
58
|
+
bodyExcerpt = `${exampleText}<<... ${remainingTextLength} characters>>`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
bodyExcerpt = text;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const blob = await response.blob();
|
|
66
|
+
body = blob;
|
|
67
|
+
if (blob.size > maxLength) {
|
|
68
|
+
bodyExcerpt = `<<binary data: ${blob.size} bytes>>`;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const dataSlice = await blob.slice(0, maxLength).arrayBuffer();
|
|
72
|
+
bodyExcerpt = Base64.encode(dataSlice);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// ignore errors
|
|
78
|
+
const message = errorToMessage(error);
|
|
79
|
+
body = bodyExcerpt = `<<error displaying response data: ${message}>>`;
|
|
80
|
+
}
|
|
81
|
+
return [bodyExcerpt, body];
|
|
82
|
+
}
|
|
83
|
+
ResponseExample.bodyExcerpt = bodyExcerpt;
|
|
84
|
+
})(ResponseExample || (ResponseExample = {}));
|
|
19
85
|
//# 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,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
export var HeaderParameters;
|
|
15
|
+
(function (HeaderParameters) {
|
|
16
|
+
function encode(parameters) {
|
|
17
|
+
if (parameters == null) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const headers = [];
|
|
21
|
+
Object.entries(parameters).forEach(([name, parameter]) => {
|
|
22
|
+
for (const value of encodeParam(name, parameter)) {
|
|
23
|
+
headers.push([name, value]);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return headers;
|
|
27
|
+
}
|
|
28
|
+
HeaderParameters.encode = encode;
|
|
29
|
+
function encodeParam(name, value) {
|
|
30
|
+
if (value == null) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
if (value instanceof Array) {
|
|
34
|
+
const result = [];
|
|
35
|
+
for (const item of value) {
|
|
36
|
+
if (item == null) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
result.push(validate(name, `${item}`));
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
return [validate(name, `${value}`)];
|
|
44
|
+
}
|
|
45
|
+
const asciiRegex = /^[\x20-\x7F]*$/;
|
|
46
|
+
function validate(name, value) {
|
|
47
|
+
if (!asciiRegex.test(value)) {
|
|
48
|
+
throw new Error(`The encoded header value contains one or more invalid characters: header=${name}, value=${value}`);
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
})(HeaderParameters || (HeaderParameters = {}));
|
|
53
|
+
//# sourceMappingURL=header-parameters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-parameters.js","sourceRoot":"","sources":["../src/header-parameters.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,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 './
|
|
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
|
@@ -1,3 +1,16 @@
|
|
|
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.
|
|
1
14
|
export * from './any-type';
|
|
2
15
|
export * from './class-type';
|
|
3
16
|
export * from './request-factory';
|
|
@@ -5,19 +18,19 @@ export * from './fetch-request-factory';
|
|
|
5
18
|
export * from './fetch-event-source';
|
|
6
19
|
export * from './url-template';
|
|
7
20
|
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';
|
|
21
|
+
export * from './media-type-codecs/media-type-decoder';
|
|
22
|
+
export * from './media-type-codecs/media-type-decoders';
|
|
23
|
+
export * from './media-type-codecs/media-type-encoder';
|
|
24
|
+
export * from './media-type-codecs/media-type-encoders';
|
|
25
|
+
export * from './media-type-codecs/json-decoder';
|
|
26
|
+
export * from './media-type-codecs/json-encoder';
|
|
27
|
+
export * from './media-type-codecs/cbor-decoder';
|
|
28
|
+
export * from './media-type-codecs/cbor-encoder';
|
|
29
|
+
export * from './media-type-codecs/binary-decoder';
|
|
30
|
+
export * from './media-type-codecs/binary-encoder';
|
|
31
|
+
export * from './media-type-codecs/www-form-url-encoder';
|
|
19
32
|
export * from './logger';
|
|
20
|
-
export * from './
|
|
33
|
+
export * from './sunday-error';
|
|
21
34
|
export * from './problem';
|
|
22
35
|
export * from './date-time-types';
|
|
23
36
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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,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"}
|
package/dist/logger.js
CHANGED
|
@@ -1,2 +1,15 @@
|
|
|
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.
|
|
1
14
|
export {};
|
|
2
15
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MediaTypeDecoder } from './media-type-decoder';
|
|
2
|
-
import {
|
|
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:
|
|
5
|
+
decode<T>(response: Response, type: AnyConstructableType): Promise<T>;
|
|
6
6
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 class BinaryDecoder {
|
|
15
|
+
async decode(response, type) {
|
|
16
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
17
|
+
if (type[0] === ArrayBuffer) {
|
|
18
|
+
return arrayBuffer;
|
|
19
|
+
}
|
|
20
|
+
else if (type[0] === Uint8Array ||
|
|
21
|
+
type[0] === Int8Array ||
|
|
22
|
+
type[0] === DataView) {
|
|
23
|
+
return new type[0](arrayBuffer);
|
|
24
|
+
}
|
|
25
|
+
throw Error('Invalid value, expected ArrayBuffer, (Int|Uint)Array or DataView');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
BinaryDecoder.default = new BinaryDecoder();
|
|
29
|
+
//# sourceMappingURL=binary-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-decoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/binary-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;AAKjC,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"}
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
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 class BinaryEncoder {
|
|
15
|
+
encode(value) {
|
|
16
|
+
if (!ArrayBuffer.isView(value) &&
|
|
17
|
+
!(value instanceof ArrayBuffer) &&
|
|
18
|
+
!(value instanceof Blob) &&
|
|
19
|
+
!(value instanceof ReadableStream)) {
|
|
20
|
+
throw Error('Invalid value, expected BufferSource, Blob or ReadableStream');
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
BinaryEncoder.default = new BinaryEncoder();
|
|
26
|
+
//# sourceMappingURL=binary-encoder.js.map
|