@outfoxx/sunday 1.0.8 → 1.0.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 (234) hide show
  1. package/LICENSE.txt +203 -0
  2. package/README.md +36 -2
  3. package/build/date-time-types.d.ts +35 -0
  4. package/build/date-time-types.js +699 -0
  5. package/build/date-time-types.js.map +1 -0
  6. package/build/event-parser.d.ts +17 -0
  7. package/build/event-parser.js +151 -0
  8. package/build/event-parser.js.map +1 -0
  9. package/build/fetch-event-source.d.ts +66 -0
  10. package/build/fetch-event-source.js +365 -0
  11. package/build/fetch-event-source.js.map +1 -0
  12. package/build/fetch-request-factory.d.ts +32 -0
  13. package/build/fetch-request-factory.js +316 -0
  14. package/build/fetch-request-factory.js.map +1 -0
  15. package/build/fetch.d.ts +9 -0
  16. package/build/fetch.js +140 -0
  17. package/build/fetch.js.map +1 -0
  18. package/build/header-parameters.d.ts +3 -0
  19. package/build/header-parameters.js +82 -0
  20. package/build/header-parameters.js.map +1 -0
  21. package/build/index.d.ts +26 -0
  22. package/build/index.js +41 -0
  23. package/build/index.js.map +1 -0
  24. package/{dist → build}/logger.d.ts +9 -0
  25. package/build/logger.js +36 -0
  26. package/build/logger.js.map +1 -0
  27. package/build/media-type-codecs/any-text-decoder.d.ts +7 -0
  28. package/build/media-type-codecs/any-text-decoder.js +29 -0
  29. package/build/media-type-codecs/any-text-decoder.js.map +1 -0
  30. package/build/media-type-codecs/any-text-encoder.d.ts +6 -0
  31. package/build/media-type-codecs/any-text-encoder.js +27 -0
  32. package/build/media-type-codecs/any-text-encoder.js.map +1 -0
  33. package/build/media-type-codecs/binary-decoder.d.ts +7 -0
  34. package/build/media-type-codecs/binary-decoder.js +33 -0
  35. package/build/media-type-codecs/binary-decoder.js.map +1 -0
  36. package/build/media-type-codecs/binary-encoder.d.ts +6 -0
  37. package/build/media-type-codecs/binary-encoder.js +30 -0
  38. package/build/media-type-codecs/binary-encoder.js.map +1 -0
  39. package/build/media-type-codecs/cbor-decoder.d.ts +13 -0
  40. package/build/media-type-codecs/cbor-decoder.js +38 -0
  41. package/build/media-type-codecs/cbor-decoder.js.map +1 -0
  42. package/build/media-type-codecs/cbor-encoder.d.ts +12 -0
  43. package/build/media-type-codecs/cbor-encoder.js +36 -0
  44. package/build/media-type-codecs/cbor-encoder.js.map +1 -0
  45. package/build/media-type-codecs/cbor-tags.d.ts +6 -0
  46. package/build/media-type-codecs/cbor-tags.js +20 -0
  47. package/build/media-type-codecs/cbor-tags.js.map +1 -0
  48. package/build/media-type-codecs/default-policies.d.ts +3 -0
  49. package/build/media-type-codecs/default-policies.js +33 -0
  50. package/build/media-type-codecs/default-policies.js.map +1 -0
  51. package/build/media-type-codecs/json-decoder.d.ts +14 -0
  52. package/build/media-type-codecs/json-decoder.js +40 -0
  53. package/build/media-type-codecs/json-decoder.js.map +1 -0
  54. package/build/media-type-codecs/json-encoder.d.ts +13 -0
  55. package/build/media-type-codecs/json-encoder.js +43 -0
  56. package/build/media-type-codecs/json-encoder.js.map +1 -0
  57. package/build/media-type-codecs/media-type-decoder.d.ts +14 -0
  58. package/build/media-type-codecs/media-type-decoder.js +18 -0
  59. package/build/media-type-codecs/media-type-decoder.js.map +1 -0
  60. package/build/media-type-codecs/media-type-decoders.d.ts +16 -0
  61. package/build/media-type-codecs/media-type-decoders.js +63 -0
  62. package/build/media-type-codecs/media-type-decoders.js.map +1 -0
  63. package/build/media-type-codecs/media-type-encoder.d.ts +12 -0
  64. package/build/media-type-codecs/media-type-encoder.js +22 -0
  65. package/build/media-type-codecs/media-type-encoder.js.map +1 -0
  66. package/build/media-type-codecs/media-type-encoders.d.ts +16 -0
  67. package/build/media-type-codecs/media-type-encoders.js +65 -0
  68. package/build/media-type-codecs/media-type-encoders.js.map +1 -0
  69. package/build/media-type-codecs/www-form-url-encoder.d.ts +31 -0
  70. package/build/media-type-codecs/www-form-url-encoder.js +281 -0
  71. package/build/media-type-codecs/www-form-url-encoder.js.map +1 -0
  72. package/build/media-type.d.ts +94 -0
  73. package/build/media-type.js +305 -0
  74. package/build/media-type.js.map +1 -0
  75. package/build/problem.d.ts +35 -0
  76. package/build/problem.js +122 -0
  77. package/build/problem.js.map +1 -0
  78. package/build/request-adapters.d.ts +23 -0
  79. package/build/request-adapters.js +53 -0
  80. package/build/request-adapters.js.map +1 -0
  81. package/build/request-factory.d.ts +39 -0
  82. package/build/request-factory.js +15 -0
  83. package/build/request-factory.js.map +1 -0
  84. package/build/result-response.d.ts +4 -0
  85. package/build/result-response.js +15 -0
  86. package/build/result-response.js.map +1 -0
  87. package/build/schema-builtins.d.ts +21 -0
  88. package/build/schema-builtins.js +201 -0
  89. package/build/schema-builtins.js.map +1 -0
  90. package/build/schema-policy.d.ts +31 -0
  91. package/build/schema-policy.js +41 -0
  92. package/build/schema-policy.js.map +1 -0
  93. package/build/schema-runtime.d.ts +25 -0
  94. package/build/schema-runtime.js +77 -0
  95. package/build/schema-runtime.js.map +1 -0
  96. package/build/sunday-error.d.ts +10 -0
  97. package/build/sunday-error.js +36 -0
  98. package/build/sunday-error.js.map +1 -0
  99. package/build/url-template.js +33 -0
  100. package/build/url-template.js.map +1 -0
  101. package/build/util/async-iterables.d.ts +15 -0
  102. package/build/util/async-iterables.js +179 -0
  103. package/build/util/async-iterables.js.map +1 -0
  104. package/build/util/errors.d.ts +2 -0
  105. package/build/util/errors.js +65 -0
  106. package/build/util/errors.js.map +1 -0
  107. package/build/util/nullify.d.ts +5 -0
  108. package/build/util/nullify.js +37 -0
  109. package/build/util/nullify.js.map +1 -0
  110. package/build/util/numbers.d.ts +11 -0
  111. package/build/util/numbers.js +41 -0
  112. package/build/util/numbers.js.map +1 -0
  113. package/build/util/subscriptions.d.ts +16 -0
  114. package/build/util/subscriptions.js +78 -0
  115. package/build/util/subscriptions.js.map +1 -0
  116. package/build/util/unknowns.d.ts +2 -0
  117. package/build/util/unknowns.js +23 -0
  118. package/build/util/unknowns.js.map +1 -0
  119. package/package.json +72 -49
  120. package/dist/any-type.d.ts +0 -2
  121. package/dist/any-type.js +0 -2
  122. package/dist/any-type.js.map +0 -1
  123. package/dist/binary-decoder.d.ts +0 -6
  124. package/dist/binary-decoder.js +0 -16
  125. package/dist/binary-decoder.js.map +0 -1
  126. package/dist/binary-encoder.d.ts +0 -5
  127. package/dist/binary-encoder.js +0 -13
  128. package/dist/binary-encoder.js.map +0 -1
  129. package/dist/cbor-decoder.d.ts +0 -15
  130. package/dist/cbor-decoder.js +0 -126
  131. package/dist/cbor-decoder.js.map +0 -1
  132. package/dist/cbor-encoder.d.ts +0 -29
  133. package/dist/cbor-encoder.js +0 -81
  134. package/dist/cbor-encoder.js.map +0 -1
  135. package/dist/cbor-tags.d.ts +0 -3
  136. package/dist/cbor-tags.js +0 -4
  137. package/dist/cbor-tags.js.map +0 -1
  138. package/dist/class-type.d.ts +0 -2
  139. package/dist/class-type.js +0 -2
  140. package/dist/class-type.js.map +0 -1
  141. package/dist/date-time-types.d.ts +0 -7
  142. package/dist/date-time-types.js +0 -5
  143. package/dist/date-time-types.js.map +0 -1
  144. package/dist/fetch-event-source.d.ts +0 -52
  145. package/dist/fetch-event-source.js +0 -271
  146. package/dist/fetch-event-source.js.map +0 -1
  147. package/dist/fetch-request-factory.d.ts +0 -26
  148. package/dist/fetch-request-factory.js +0 -125
  149. package/dist/fetch-request-factory.js.map +0 -1
  150. package/dist/fetch.d.ts +0 -1
  151. package/dist/fetch.js +0 -19
  152. package/dist/fetch.js.map +0 -1
  153. package/dist/http-error.d.ts +0 -10
  154. package/dist/http-error.js +0 -45
  155. package/dist/http-error.js.map +0 -1
  156. package/dist/index.d.ts +0 -25
  157. package/dist/index.js +0 -26
  158. package/dist/index.js.map +0 -1
  159. package/dist/json-decoder.d.ts +0 -31
  160. package/dist/json-decoder.js +0 -139
  161. package/dist/json-decoder.js.map +0 -1
  162. package/dist/json-encoder.d.ts +0 -35
  163. package/dist/json-encoder.js +0 -116
  164. package/dist/json-encoder.js.map +0 -1
  165. package/dist/logger.js +0 -2
  166. package/dist/logger.js.map +0 -1
  167. package/dist/media-type-decoder.d.ts +0 -4
  168. package/dist/media-type-decoder.js +0 -2
  169. package/dist/media-type-decoder.js.map +0 -1
  170. package/dist/media-type-decoders.d.ts +0 -17
  171. package/dist/media-type-decoders.js +0 -40
  172. package/dist/media-type-decoders.js.map +0 -1
  173. package/dist/media-type-encoder.d.ts +0 -8
  174. package/dist/media-type-encoder.js +0 -6
  175. package/dist/media-type-encoder.js.map +0 -1
  176. package/dist/media-type-encoders.d.ts +0 -17
  177. package/dist/media-type-encoders.js +0 -42
  178. package/dist/media-type-encoders.js.map +0 -1
  179. package/dist/media-type.d.ts +0 -14
  180. package/dist/media-type.js +0 -18
  181. package/dist/media-type.js.map +0 -1
  182. package/dist/problem.d.ts +0 -16
  183. package/dist/problem.js +0 -11
  184. package/dist/problem.js.map +0 -1
  185. package/dist/request-factory.d.ts +0 -38
  186. package/dist/request-factory.js +0 -2
  187. package/dist/request-factory.js.map +0 -1
  188. package/dist/url-encoder.d.ts +0 -59
  189. package/dist/url-encoder.js +0 -141
  190. package/dist/url-encoder.js.map +0 -1
  191. package/dist/url-template.js +0 -18
  192. package/dist/url-template.js.map +0 -1
  193. package/dist/util/base64.d.ts +0 -5
  194. package/dist/util/base64.js +0 -64
  195. package/dist/util/base64.js.map +0 -1
  196. package/dist/util/hex.d.ts +0 -4
  197. package/dist/util/hex.js +0 -18
  198. package/dist/util/hex.js.map +0 -1
  199. package/dist/util/rxjs.d.ts +0 -2
  200. package/dist/util/rxjs.js +0 -14
  201. package/dist/util/rxjs.js.map +0 -1
  202. package/dist/util/stream-rxjs.d.ts +0 -2
  203. package/dist/util/stream-rxjs.js +0 -26
  204. package/dist/util/stream-rxjs.js.map +0 -1
  205. package/src/any-type.ts +0 -4
  206. package/src/binary-decoder.ts +0 -24
  207. package/src/binary-encoder.ts +0 -19
  208. package/src/cbor-decoder.ts +0 -148
  209. package/src/cbor-encoder.ts +0 -95
  210. package/src/cbor-tags.ts +0 -3
  211. package/src/class-type.ts +0 -3
  212. package/src/date-time-types.ts +0 -10
  213. package/src/fetch-event-source.ts +0 -387
  214. package/src/fetch-request-factory.ts +0 -225
  215. package/src/fetch.ts +0 -30
  216. package/src/http-error.ts +0 -55
  217. package/src/index.ts +0 -26
  218. package/src/json-decoder.ts +0 -164
  219. package/src/json-encoder.ts +0 -144
  220. package/src/logger.ts +0 -8
  221. package/src/media-type-decoder.ts +0 -5
  222. package/src/media-type-decoders.ts +0 -59
  223. package/src/media-type-encoder.ts +0 -16
  224. package/src/media-type-encoders.ts +0 -61
  225. package/src/media-type.ts +0 -25
  226. package/src/problem.ts +0 -25
  227. package/src/request-factory.ts +0 -76
  228. package/src/url-encoder.ts +0 -173
  229. package/src/url-template.ts +0 -21
  230. package/src/util/base64.ts +0 -77
  231. package/src/util/hex.ts +0 -15
  232. package/src/util/rxjs.ts +0 -18
  233. package/src/util/stream-rxjs.ts +0 -28
  234. /package/{dist → build}/url-template.d.ts +0 -0
@@ -1,59 +0,0 @@
1
- import { BinaryDecoder } from './binary-decoder';
2
- import { CBORDecoder } from './cbor-decoder';
3
- import { JSONDecoder } from './json-decoder';
4
- import { MediaType } from './media-type';
5
- import { MediaTypeDecoder } from './media-type-decoder';
6
-
7
- export interface MediaTypeDecodersBuilder {
8
- addDefaults(): MediaTypeDecodersBuilder;
9
-
10
- add(mediaType: string, decoder: MediaTypeDecoder): MediaTypeDecodersBuilder;
11
-
12
- build(): MediaTypeDecoders;
13
- }
14
- export interface MediaTypeDecodersBuilderConstructor {
15
- new (): MediaTypeDecodersBuilder;
16
- }
17
-
18
- export class MediaTypeDecoders {
19
- static Builder: MediaTypeDecodersBuilderConstructor = class Builder
20
- implements MediaTypeDecodersBuilder {
21
- decoders = new Map<string, MediaTypeDecoder>();
22
-
23
- add(
24
- mediaType: string,
25
- decoder: MediaTypeDecoder
26
- ): MediaTypeDecodersBuilder {
27
- this.decoders.set(mediaType, decoder);
28
- return this;
29
- }
30
-
31
- addDefaults(): MediaTypeDecodersBuilder {
32
- return this.add(MediaType.JSON, JSONDecoder.default)
33
- .add(MediaType.OCTET_STREAM, new BinaryDecoder())
34
- .add(MediaType.CBOR, CBORDecoder.default);
35
- }
36
-
37
- build(): MediaTypeDecoders {
38
- return new MediaTypeDecoders(this.decoders);
39
- }
40
- };
41
-
42
- static DEFAULT: MediaTypeDecoders = new MediaTypeDecoders.Builder()
43
- .addDefaults()
44
- .build();
45
-
46
- constructor(private decoders: Map<string, MediaTypeDecoder>) {}
47
-
48
- supports(mediaType: string): boolean {
49
- return this.decoders.has(mediaType);
50
- }
51
-
52
- find(mediaType: string): MediaTypeDecoder {
53
- const decoder = this.decoders.get(mediaType);
54
- if (!decoder) {
55
- throw Error(`Unsupported media type - ${mediaType}`);
56
- }
57
- return decoder;
58
- }
59
- }
@@ -1,16 +0,0 @@
1
- import { AnyType } from './any-type';
2
-
3
- export interface MediaTypeEncoder {
4
- encode<T = unknown>(value: T, type: AnyType | undefined): BodyInit;
5
- }
6
-
7
- export interface URLQueryParamsEncoder extends MediaTypeEncoder {
8
- encodeQueryString(value: Record<string, unknown>): string;
9
- }
10
-
11
- export function isURLQueryParamsEncoder(
12
- encoder: MediaTypeEncoder | URLQueryParamsEncoder | undefined
13
- ): encoder is URLQueryParamsEncoder {
14
- const rec = (encoder as unknown) as Record<string, unknown>;
15
- return !!rec.encodeQueryString ?? false;
16
- }
@@ -1,61 +0,0 @@
1
- import { BinaryEncoder } from './binary-encoder';
2
- import { CBOREncoder } from './cbor-encoder';
3
- import { JSONEncoder } from './json-encoder';
4
- import { MediaType } from './media-type';
5
- import { MediaTypeEncoder } from './media-type-encoder';
6
- import { URLEncoder } from './url-encoder';
7
-
8
- export interface MediaTypeEncodersBuilder {
9
- addDefaults(): MediaTypeEncodersBuilder;
10
-
11
- add(mediaType: string, encoder: MediaTypeEncoder): MediaTypeEncodersBuilder;
12
-
13
- build(): MediaTypeEncoders;
14
- }
15
- export interface MediaTypeEncodersBuilderConstructor {
16
- new (): MediaTypeEncodersBuilder;
17
- }
18
-
19
- export class MediaTypeEncoders {
20
- static Builder: MediaTypeEncodersBuilderConstructor = class Builder
21
- implements MediaTypeEncodersBuilder {
22
- encoders = new Map<string, MediaTypeEncoder>();
23
-
24
- add(
25
- mediaType: string,
26
- encoder: MediaTypeEncoder
27
- ): MediaTypeEncodersBuilder {
28
- this.encoders.set(mediaType, encoder);
29
- return this;
30
- }
31
-
32
- addDefaults(): MediaTypeEncodersBuilder {
33
- return this.add(MediaType.JSON, JSONEncoder.default)
34
- .add(MediaType.OCTET_STREAM, BinaryEncoder.default)
35
- .add(MediaType.WWW_URL_FORM_ENCODED, URLEncoder.default)
36
- .add(MediaType.CBOR, CBOREncoder.default);
37
- }
38
-
39
- build(): MediaTypeEncoders {
40
- return new MediaTypeEncoders(this.encoders);
41
- }
42
- };
43
-
44
- static DEFAULT: MediaTypeEncoders = new MediaTypeEncoders.Builder()
45
- .addDefaults()
46
- .build();
47
-
48
- constructor(private encoders: Map<string, MediaTypeEncoder>) {}
49
-
50
- supports(mediaType: string): boolean {
51
- return this.encoders.has(mediaType);
52
- }
53
-
54
- find(mediaType: string): MediaTypeEncoder {
55
- const encoder = this.encoders.get(mediaType);
56
- if (!encoder) {
57
- throw Error(`Unsupported media type - ${mediaType}`);
58
- }
59
- return encoder;
60
- }
61
- }
package/src/media-type.ts DELETED
@@ -1,25 +0,0 @@
1
- export enum MediaType {
2
- TEXT = 'text/plain',
3
- HTML = 'text/html',
4
- JSON = 'application/json',
5
- YAML = 'application/yaml',
6
- CBOR = 'application/cbor',
7
- OCTET_STREAM = 'application/octet-stream',
8
- EVENT_STREAM = 'text/event-stream',
9
- X509_CA_CERT = 'application/x-x509-ca-cert',
10
- WWW_URL_FORM_ENCODED = 'application/x-www-form-urlencoded',
11
- PROBLEM_JSON = 'application/problem+json',
12
- }
13
-
14
- export function mediaType(value: string | null | undefined): string | undefined;
15
- export function mediaType(
16
- value: string | null | undefined,
17
- def: string
18
- ): string;
19
-
20
- export function mediaType(
21
- value: string | null | undefined,
22
- def?: string
23
- ): string | undefined {
24
- return value?.split(';')[0].trim() ?? def;
25
- }
package/src/problem.ts DELETED
@@ -1,25 +0,0 @@
1
- export interface Problem {
2
- type: string;
3
- status: number;
4
- title: string;
5
- detail: string;
6
- instance: string;
7
- [key: string]: unknown;
8
- }
9
-
10
- export class Problem extends Error implements Problem {
11
- public type: string;
12
- public status: number;
13
- public title: string;
14
- public detail: string;
15
- public instance: string;
16
-
17
- constructor(json: Record<string, unknown>) {
18
- super(`${json.status} ${json.type} - ${json.title}`);
19
- this.type = json.type as string;
20
- this.status = json.status as number;
21
- this.title = json.title as string;
22
- this.detail = json.detail as string;
23
- this.instance = json.instance as string;
24
- }
25
- }
@@ -1,76 +0,0 @@
1
- import { ClassList } from '@outfoxx/jackson-js/dist/@types';
2
- import { Observable } from 'rxjs';
3
- import { AnyType } from './any-type';
4
- import { ClassType } from './class-type';
5
- import { MediaType } from './media-type';
6
- import { URLTemplate } from './url-template';
7
-
8
- export interface RequestFactory {
9
- readonly baseUrl: URLTemplate;
10
-
11
- request(requestSpec: RequestSpec<unknown>): Observable<Request>;
12
-
13
- response(request: Request, dataExpected?: boolean): Observable<Response>;
14
-
15
- response<B>(
16
- requestSpec: RequestSpec<B>,
17
- dataExpected?: boolean
18
- ): Observable<Response>;
19
-
20
- result<B, R>(
21
- requestSpec: RequestSpec<B>,
22
- resultType: [ClassType<R>]
23
- ): Observable<R>;
24
-
25
- result<B, R>(
26
- requestSpec: RequestSpec<B>,
27
- resultType: [ClassType<Array<unknown>>, ClassType<R>]
28
- ): Observable<Array<R>>;
29
-
30
- result<B, R>(
31
- requestSpec: RequestSpec<B>,
32
- resultType: [ClassType<Set<unknown>>, ClassType<R>]
33
- ): Observable<Set<R>>;
34
-
35
- result<B, R>(requestSpec: RequestSpec<B>, resultType: AnyType): Observable<R>;
36
-
37
- result<B>(requestSpec: RequestSpec<B>): Observable<void>;
38
-
39
- events(requestSpec: RequestSpec<void>): ExtEventSource;
40
-
41
- events<E>(
42
- requestSpec: RequestSpec<void>,
43
- eventTypes: EventTypes<E>
44
- ): Observable<E>;
45
- }
46
-
47
- export interface ExtEventSource extends EventSource {
48
- connect(): void;
49
- }
50
-
51
- export type RequestMethod =
52
- | 'GET'
53
- | 'PUT'
54
- | 'POST'
55
- | 'PATCH'
56
- | 'DELETE'
57
- | 'HEAD'
58
- | 'OPTIONS';
59
-
60
- export interface RequestSpec<B> {
61
- method: RequestMethod;
62
- pathTemplate: string;
63
- pathParameters?: Record<string, unknown>;
64
- queryParameters?: Record<string, unknown>;
65
- body?: B;
66
- bodyType?: AnyType;
67
- contentTypes?: (MediaType | string)[];
68
- acceptTypes?: (MediaType | string)[];
69
- headers?: HeadersInit;
70
- }
71
-
72
- export interface EventTypes<E> {
73
- [key: string]: ClassList<ClassType<E>>;
74
- }
75
-
76
- export type RequestAdapter = (request: Request) => Observable<Request>;
@@ -1,173 +0,0 @@
1
- import { URLQueryParamsEncoder } from './media-type-encoder';
2
- import { DateTime } from 'luxon';
3
- import { JsonStringifier } from '@outfoxx/jackson-js';
4
-
5
- export class URLEncoder implements URLQueryParamsEncoder {
6
- static get default(): URLEncoder {
7
- return new URLEncoder(
8
- URLEncoder.ArrayEncoding.BRACKETED,
9
- URLEncoder.BoolEncoding.NUMERIC,
10
- URLEncoder.DateEncoding.ISO8601
11
- );
12
- }
13
-
14
- constructor(
15
- private arrayEncoding: URLEncoder.ArrayEncoding,
16
- private boolEncoding: URLEncoder.BoolEncoding,
17
- private dateEncoding: URLEncoder.DateEncoding,
18
- private json = new JsonStringifier(),
19
- private encoder = new TextEncoder()
20
- ) {}
21
-
22
- encode<T = unknown>(value: T): ArrayBuffer | SharedArrayBuffer {
23
- const parameters = this.json.transform(value);
24
-
25
- return this.encoder.encode(this.encodeQueryString(parameters));
26
- }
27
-
28
- encodeQueryString(parameters: Record<string, unknown>): string {
29
- const components: [string, string][] = [];
30
-
31
- for (const key of Object.keys(parameters).sort()) {
32
- components.push(...this.encodeQueryComponent(key, parameters[key]));
33
- }
34
- return components.map((e) => `${e[0]}=${e[1]}`).join('&');
35
- }
36
-
37
- encodeQueryComponent(key: string, value: unknown): [string, string][] {
38
- const components: [string, string][] = [];
39
-
40
- if (value === undefined) {
41
- return components;
42
- }
43
-
44
- if (value instanceof Array) {
45
- // encode key according to `arrayEncoding`
46
- for (const item of value) {
47
- components.push(
48
- ...this.encodeQueryComponent(
49
- encodeArrayKey(key, this.arrayEncoding),
50
- item
51
- )
52
- );
53
- }
54
- } else if (DateTime.isDateTime(value) || value instanceof DateTime) {
55
- //
56
- components.push([
57
- encodeURIComponent(key),
58
- encodeURIComponent(encodeDate(value, this.dateEncoding)),
59
- ]);
60
- } else if (typeof value === 'boolean') {
61
- //
62
- components.push([
63
- encodeURIComponent(key),
64
- encodeURIComponent(encodeBoolean(value, this.boolEncoding)),
65
- ]);
66
- } else if (typeof value === 'object') {
67
- //
68
- const rec = (value ?? {}) as Record<string, unknown>;
69
-
70
- for (const nestedKey of Object.keys(rec)) {
71
- components.push(
72
- ...this.encodeQueryComponent(`${key}[${nestedKey}]`, rec[nestedKey])
73
- );
74
- }
75
- } else {
76
- //
77
- components.push([
78
- encodeURIComponent(key),
79
- encodeURIComponent(`${value}`),
80
- ]);
81
- }
82
-
83
- return components;
84
- }
85
- }
86
-
87
- function encodeArrayKey(
88
- key: string,
89
- encoding: URLEncoder.ArrayEncoding
90
- ): string {
91
- return encoding === URLEncoder.ArrayEncoding.BRACKETED ? `${key}[]` : key;
92
- }
93
-
94
- function encodeBoolean(
95
- value: boolean,
96
- encoding: URLEncoder.BoolEncoding
97
- ): string {
98
- switch (encoding) {
99
- case URLEncoder.BoolEncoding.NUMERIC:
100
- return value ? '1' : '0';
101
- case URLEncoder.BoolEncoding.LITERAL:
102
- return value ? 'true' : 'false';
103
- default:
104
- throw new Error('unknown boolean encoding');
105
- }
106
- }
107
-
108
- function encodeDate(
109
- value: Date | DateTime,
110
- encoding: URLEncoder.DateEncoding
111
- ): string {
112
- value = value instanceof Date ? DateTime.fromJSDate(value) : value;
113
- switch (encoding) {
114
- case URLEncoder.DateEncoding.SECONDS_SINCE_EPOCH:
115
- return `${value.toSeconds()}`;
116
- case URLEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
117
- return `${value.toMillis()}`;
118
- case URLEncoder.DateEncoding.ISO8601:
119
- return value.toISO();
120
- default:
121
- throw new Error('unknown date encoding');
122
- }
123
- }
124
-
125
- export namespace URLEncoder {
126
- /**
127
- * Configures how `Array` parameters are encoded.
128
- */
129
- export enum ArrayEncoding {
130
- /**
131
- * An empty set of square brackets is appended to the key for every value. This is the default behavior.
132
- */
133
- BRACKETED,
134
- /**
135
- * No brackets are appended. The key is encoded as is.
136
- */
137
- UNBRACKETED,
138
- }
139
-
140
- /**
141
- * Configures how `Bool` parameters are encoded.
142
- */
143
- export enum BoolEncoding {
144
- /**
145
- * Encode `true` as `1` and `false` as `0`. This is the default behavior.
146
- */
147
- NUMERIC,
148
- /**
149
- * Encode `true` and `false` as string literals.
150
- */
151
- LITERAL,
152
- }
153
-
154
- /**
155
- * Configures how `Date` parameters are encoded.
156
- */
157
- export enum DateEncoding {
158
- /**
159
- * Encode the `Date` as a UNIX timestamp (floating point seconds since epoch).
160
- */
161
- SECONDS_SINCE_EPOCH,
162
-
163
- /**
164
- * Encode the `Date` as UNIX millisecond timestamp (integer milliseconds since epoch).
165
- */
166
- MILLISECONDS_SINCE_EPOCH,
167
-
168
- /**
169
- * Encode the `Date` as an ISO-8601-formatted string (in RFC 3339 format). This is the default behavior.
170
- */
171
- ISO8601,
172
- }
173
- }
@@ -1,21 +0,0 @@
1
- import { URI } from 'uri-template-lite';
2
-
3
- export class URLTemplate {
4
- constructor(
5
- public template: string,
6
- public parameters: Record<string, unknown> = {}
7
- ) {}
8
-
9
- complete(relativeTemplate: string, parameters: Record<string, unknown>): URL {
10
- const allParameters = Object.assign({}, this.parameters, parameters);
11
- const baseTempl = this.template.endsWith('/')
12
- ? this.template.slice(0, -1)
13
- : this.template;
14
- const relTempl =
15
- relativeTemplate.startsWith('/') || !relativeTemplate.length
16
- ? relativeTemplate
17
- : `/${relativeTemplate}`;
18
-
19
- return new URL(URI.expand(baseTempl + relTempl, allParameters));
20
- }
21
- }
@@ -1,77 +0,0 @@
1
- const chars =
2
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3
-
4
- /* tslint:disable:no-bitwise */
5
-
6
- // Use a lookup table to find the index.
7
- const lookup = new Uint8Array(256);
8
- for (let i = 0; i < chars.length; i++) {
9
- lookup[chars.charCodeAt(i)] = i;
10
- }
11
-
12
- export namespace Base64 {
13
- export function encode(buffer: ArrayBufferLike): string {
14
- return encodeSlice(buffer, 0, buffer.byteLength);
15
- }
16
-
17
- export function encodeSlice(
18
- buffer: ArrayBufferLike,
19
- offset: number,
20
- length: number
21
- ): string {
22
- const bytes = new Uint8Array(buffer, offset, length);
23
- const len = bytes.length;
24
- let base64 = '';
25
-
26
- for (let i = 0; i < len; i += 3) {
27
- base64 += chars[bytes[i] >> 2];
28
- base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
29
- base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
30
- base64 += chars[bytes[i + 2] & 63];
31
- }
32
-
33
- if (len % 3 === 2) {
34
- base64 = base64.substring(0, base64.length - 1) + '=';
35
- } else if (len % 3 === 1) {
36
- base64 = base64.substring(0, base64.length - 2) + '==';
37
- }
38
-
39
- return base64;
40
- }
41
-
42
- export function decode(base64: string): ArrayBuffer {
43
- base64 = base64.replace(/[ \n]+/g, '');
44
-
45
- const length = base64.length;
46
- let bufferLength = Math.floor(length * 0.75);
47
- let i: number;
48
- let p = 0;
49
- let encoded1: number;
50
- let encoded2: number;
51
- let encoded3: number;
52
- let encoded4: number;
53
-
54
- if (base64[length - 1] === '=') {
55
- bufferLength--;
56
- if (base64[length - 2] === '=') {
57
- bufferLength--;
58
- }
59
- }
60
-
61
- const arrayBuffer = new ArrayBuffer(bufferLength);
62
- const bytes = new Uint8Array(arrayBuffer);
63
-
64
- for (i = 0; i < length; i += 4) {
65
- encoded1 = lookup[base64.charCodeAt(i)];
66
- encoded2 = lookup[base64.charCodeAt(i + 1)];
67
- encoded3 = lookup[base64.charCodeAt(i + 2)];
68
- encoded4 = lookup[base64.charCodeAt(i + 3)];
69
-
70
- bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
71
- bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
72
- bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
73
- }
74
-
75
- return arrayBuffer;
76
- }
77
- }
package/src/util/hex.ts DELETED
@@ -1,15 +0,0 @@
1
- export namespace Hex {
2
- export function decode(hex: string): ArrayBuffer {
3
- const values = hex.match(/[\da-f]{2}/gi);
4
- if (!values) {
5
- throw Error('Invalid hex string');
6
- }
7
- return new Uint8Array(values.map((b) => parseInt(b, 16))).buffer;
8
- }
9
-
10
- export function encode(buffer: ArrayBuffer, separator = ''): string {
11
- return Array.from(new Uint8Array(buffer))
12
- .map((value) => value.toString(16).padStart(2, '0'))
13
- .join(separator);
14
- }
15
- }
package/src/util/rxjs.ts DELETED
@@ -1,18 +0,0 @@
1
- import { from, Observable, throwError } from 'rxjs';
2
- import { catchError } from 'rxjs/operators';
3
- import { Problem } from '../problem';
4
-
5
- export function nullifyNotFound<T>(): (
6
- source: Observable<T>
7
- ) => Observable<T | null> {
8
- return function <T>(source: Observable<T>): Observable<T | null> {
9
- return source.pipe(
10
- catchError((error) => {
11
- if (!(error instanceof Problem) || error.status !== 404) {
12
- return throwError(error);
13
- }
14
- return from([null]);
15
- })
16
- );
17
- };
18
- }
@@ -1,28 +0,0 @@
1
- import { Observable } from 'rxjs';
2
-
3
- export function fromStream(
4
- stream: ReadableStream<Uint8Array>
5
- ): Observable<ArrayBuffer> {
6
- return new Observable((subscriber) => {
7
- let reader: ReadableStreamDefaultReader | undefined;
8
- (async function readLoop() {
9
- try {
10
- reader = stream.getReader();
11
- while (true) {
12
- const { done, value } = await reader.read();
13
- if (value !== undefined) {
14
- subscriber.next(value);
15
- }
16
-
17
- if (done) {
18
- subscriber.complete();
19
- return;
20
- }
21
- }
22
- } catch (e) {
23
- subscriber.error(e);
24
- }
25
- })();
26
- return () => reader?.cancel();
27
- });
28
- }
File without changes