@outfoxx/sunday 1.0.9 → 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 -134
  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 -162
  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
@@ -0,0 +1,39 @@
1
+ import { MediaType } from './media-type.js';
2
+ import { TextMediaTypeDecoder } from './media-type-codecs/media-type-decoder.js';
3
+ import { Problem } from './problem.js';
4
+ import { ResultResponse } from './result-response.js';
5
+ import { SchemaLike } from './schema-runtime.js';
6
+ import { URLTemplate } from './url-template.js';
7
+ import { Logger } from './logger.js';
8
+ export interface RequestFactory {
9
+ readonly baseUrl: URLTemplate;
10
+ registerProblem(type: URL | string, problemType: SchemaLike<Problem>): void;
11
+ request(requestSpec: RequestSpec<unknown>): Promise<Request>;
12
+ response(request: Request, dataExpected?: boolean): Promise<Response>;
13
+ response<B>(requestSpec: RequestSpec<B>, dataExpected?: boolean): Promise<Response>;
14
+ resultResponse<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<ResultResponse<R>>;
15
+ resultResponse<B>(requestSpec: RequestSpec<B>): Promise<ResultResponse<void>>;
16
+ result<B, R>(requestSpec: RequestSpec<B>, resultType: SchemaLike<R>): Promise<R>;
17
+ result<B>(requestSpec: RequestSpec<B>): Promise<void>;
18
+ eventSource(requestSpec: RequestSpec<void>): ExtEventSource;
19
+ eventStream<E>(requestSpec: RequestSpec<void>, decoder: (decoder: TextMediaTypeDecoder, event: string | undefined, id: string | undefined, data: string, logger?: Logger) => E | undefined): AsyncIterable<E>;
20
+ }
21
+ export interface ExtEventSource extends EventSource {
22
+ connect(): void;
23
+ }
24
+ export type RequestMethod = 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
25
+ export interface RequestSpec<B> {
26
+ method: RequestMethod;
27
+ pathTemplate: string;
28
+ pathParameters?: Record<string, unknown>;
29
+ queryParameters?: Record<string, unknown>;
30
+ body?: B;
31
+ bodyType?: SchemaLike<B>;
32
+ contentTypes?: MediaType[];
33
+ acceptTypes?: MediaType[];
34
+ headers?: Record<string, unknown>;
35
+ signal?: AbortSignal;
36
+ }
37
+ export interface RequestAdapter {
38
+ adapt(requestFactory: RequestFactory, request: Request): Promise<Request>;
39
+ }
@@ -0,0 +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.
14
+ export {};
15
+ //# sourceMappingURL=request-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-factory.js","sourceRoot":"","sources":["../src/request-factory.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"}
@@ -0,0 +1,4 @@
1
+ export interface ResultResponse<R> {
2
+ readonly result: R;
3
+ readonly response: Response;
4
+ }
@@ -0,0 +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.
14
+ export {};
15
+ //# sourceMappingURL=result-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-response.js","sourceRoot":"","sources":["../src/result-response.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"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import { SchemaPolicy } from './schema-policy.js';
3
+ export type BuiltinSchemaSet = {
4
+ readonly urlSchema: z.ZodType<URL>;
5
+ readonly arrayBufferSchema: z.ZodType<ArrayBuffer>;
6
+ };
7
+ export declare const UNKNOWN_SCHEMA: z.ZodUnknown;
8
+ export declare const ANY_SCHEMA: z.ZodUnknown;
9
+ export declare const NULL_SCHEMA: z.ZodNull;
10
+ export declare const STRING_SCHEMA: z.ZodString;
11
+ export declare const NUMBER_SCHEMA: z.ZodNumber;
12
+ export declare const BOOLEAN_SCHEMA: z.ZodBoolean;
13
+ export declare const UnknownSchema: z.ZodUnknown;
14
+ export declare const AnySchema: z.ZodUnknown;
15
+ export declare const NullSchema: z.ZodNull;
16
+ export declare const StringSchema: z.ZodString;
17
+ export declare const NumberSchema: z.ZodNumber;
18
+ export declare const BooleanSchema: z.ZodBoolean;
19
+ export declare function builtinSchemasForPolicy(policy: SchemaPolicy): BuiltinSchemaSet;
20
+ export declare const URLSchema: import("./schema-runtime.js").SchemaDef<z.ZodType<URL, unknown, z.core.$ZodTypeInternals<URL, unknown>>>;
21
+ export declare const ArrayBufferSchema: import("./schema-runtime.js").SchemaDef<z.ZodType<ArrayBuffer, unknown, z.core.$ZodTypeInternals<ArrayBuffer, unknown>>>;
@@ -0,0 +1,201 @@
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 { TaggedValue } from 'cbor-redux';
15
+ import { z } from 'zod';
16
+ import { base64Tag, base64UrlTag, uriTag } from './media-type-codecs/cbor-tags.js';
17
+ import { ArrayBufferEncoding, } from './schema-policy.js';
18
+ import { defineSchema } from './schema-runtime.js';
19
+ export const UNKNOWN_SCHEMA = z.unknown();
20
+ export const ANY_SCHEMA = UNKNOWN_SCHEMA;
21
+ export const NULL_SCHEMA = z.null();
22
+ export const STRING_SCHEMA = z.string();
23
+ export const NUMBER_SCHEMA = z.number();
24
+ export const BOOLEAN_SCHEMA = z.boolean();
25
+ export const UnknownSchema = UNKNOWN_SCHEMA;
26
+ export const AnySchema = ANY_SCHEMA;
27
+ export const NullSchema = NULL_SCHEMA;
28
+ export const StringSchema = STRING_SCHEMA;
29
+ export const NumberSchema = NUMBER_SCHEMA;
30
+ export const BooleanSchema = BOOLEAN_SCHEMA;
31
+ const URL_OUTPUT_SCHEMA = z.instanceof(URL);
32
+ const ARRAY_BUFFER_OUTPUT_SCHEMA = z.instanceof(ArrayBuffer);
33
+ const ARRAY_BUFFER_RAW_INPUT_SCHEMA = z.union([
34
+ ARRAY_BUFFER_OUTPUT_SCHEMA,
35
+ z.instanceof(Uint8Array),
36
+ ]);
37
+ const policySchemas = new Map();
38
+ function decodeURL(value, ctx) {
39
+ try {
40
+ return new URL(value);
41
+ }
42
+ catch {
43
+ ctx.issues.push({
44
+ code: 'invalid_format',
45
+ format: 'url',
46
+ input: value,
47
+ message: `Invalid URL value`,
48
+ });
49
+ return z.NEVER;
50
+ }
51
+ }
52
+ const URL_JSON_CODEC = z.codec(z.string(), URL_OUTPUT_SCHEMA, {
53
+ decode: decodeURL,
54
+ encode: (value) => value.toString(),
55
+ });
56
+ const URL_CBOR_CODEC = z.codec(z.union([z.string(), z.instanceof(TaggedValue)]), URL_OUTPUT_SCHEMA, {
57
+ decode: (value, ctx) => {
58
+ // Tagged URL input is accepted for compatibility and decoded before untagged string input.
59
+ if (value instanceof TaggedValue) {
60
+ if (value.tag == uriTag) {
61
+ const string = z.string().parse(value.value);
62
+ return decodeURL(string, ctx);
63
+ }
64
+ else {
65
+ ctx.issues.push({
66
+ code: 'invalid_value',
67
+ values: [uriTag],
68
+ input: value.tag,
69
+ message: `Invalid tag for URL`,
70
+ });
71
+ return z.NEVER;
72
+ }
73
+ }
74
+ else {
75
+ return decodeURL(value, ctx);
76
+ }
77
+ },
78
+ encode: (value) => {
79
+ // CBOR tag 32 carries the same URI string Jackson expects when tags are ignored.
80
+ return new TaggedValue(value.toString(), uriTag);
81
+ },
82
+ });
83
+ function base64Decoder(encoding) {
84
+ let options;
85
+ switch (encoding) {
86
+ case ArrayBufferEncoding.BASE64:
87
+ options = { alphabet: 'base64', lastChunkHandling: 'loose' };
88
+ break;
89
+ case ArrayBufferEncoding.BASE64URL:
90
+ options = { alphabet: 'base64url', lastChunkHandling: 'loose' };
91
+ break;
92
+ default:
93
+ throw new TypeError(`Invalid ArrayBufferEncoding: ${encoding}`);
94
+ }
95
+ return (value) => {
96
+ const array = Uint8Array.fromBase64(value, options);
97
+ return array
98
+ .buffer
99
+ .slice();
100
+ };
101
+ }
102
+ function base64Encoder(encoding) {
103
+ let options;
104
+ switch (encoding) {
105
+ case ArrayBufferEncoding.BASE64:
106
+ options = { alphabet: 'base64', omitPadding: true };
107
+ break;
108
+ case ArrayBufferEncoding.BASE64URL:
109
+ options = { alphabet: 'base64url', omitPadding: true };
110
+ break;
111
+ default:
112
+ throw new TypeError(`Invalid ArrayBufferEncoding: ${encoding}`);
113
+ }
114
+ return (value) => {
115
+ return new Uint8Array(value).toBase64(options);
116
+ };
117
+ }
118
+ function createArrayBufferSchema(policy) {
119
+ switch (policy.format) {
120
+ case 'json':
121
+ return z.codec(z.string(), ARRAY_BUFFER_OUTPUT_SCHEMA, {
122
+ decode: base64Decoder(policy.arrayBufferEncoding),
123
+ encode: base64Encoder(policy.arrayBufferEncoding),
124
+ });
125
+ case 'cbor':
126
+ if (policy.arrayBufferEncoding == ArrayBufferEncoding.RAW_BYTES) {
127
+ return z.codec(ARRAY_BUFFER_RAW_INPUT_SCHEMA, ARRAY_BUFFER_OUTPUT_SCHEMA, {
128
+ decode: (v) => (ArrayBuffer.isView(v)
129
+ ? v.buffer.slice(v.byteOffset, v.byteOffset + v.byteLength)
130
+ : v),
131
+ encode: (v) => v,
132
+ });
133
+ }
134
+ else {
135
+ const b64Decode = base64Decoder(policy.arrayBufferEncoding);
136
+ const b64Encode = base64Encoder(policy.arrayBufferEncoding);
137
+ const textTag = policy.arrayBufferEncoding === ArrayBufferEncoding.BASE64 ? base64Tag : base64UrlTag;
138
+ return z.codec(z.union([z.string(), z.instanceof(TaggedValue)]), ARRAY_BUFFER_OUTPUT_SCHEMA, {
139
+ decode: (value, ctx) => {
140
+ // Tagged textual binary values are accepted for compatibility and decoded before policy-based untagged text.
141
+ if (value instanceof TaggedValue) {
142
+ const string = z.string().decode(value.value);
143
+ switch (value.tag) {
144
+ case base64Tag:
145
+ return Uint8Array
146
+ .fromBase64(string, { alphabet: 'base64', lastChunkHandling: 'loose' })
147
+ .buffer;
148
+ case base64UrlTag:
149
+ return Uint8Array
150
+ .fromBase64(string, { alphabet: 'base64url', lastChunkHandling: 'loose' })
151
+ .buffer;
152
+ default:
153
+ ctx.issues.push({
154
+ code: 'invalid_value',
155
+ values: [base64UrlTag, base64Tag],
156
+ input: value.tag
157
+ });
158
+ return z.NEVER;
159
+ }
160
+ }
161
+ return b64Decode(value);
162
+ },
163
+ encode: (value) => {
164
+ // CBOR tags 33/34 preserve Jackson-compatible textual payloads for base64 modes.
165
+ return new TaggedValue(b64Encode(value), textTag);
166
+ },
167
+ });
168
+ }
169
+ }
170
+ }
171
+ function createPolicySchemas(policy) {
172
+ return {
173
+ urlSchema: policy.format === 'cbor' ? URL_CBOR_CODEC : URL_JSON_CODEC,
174
+ arrayBufferSchema: createArrayBufferSchema(policy),
175
+ };
176
+ }
177
+ function policyKey(policy) {
178
+ return [
179
+ policy.format,
180
+ policy.arrayBufferEncoding.toString(),
181
+ ].join(':');
182
+ }
183
+ export function builtinSchemasForPolicy(policy) {
184
+ const key = policyKey(policy);
185
+ const cached = policySchemas.get(key);
186
+ if (cached) {
187
+ return cached;
188
+ }
189
+ const schemas = createPolicySchemas(policy);
190
+ policySchemas.set(key, schemas);
191
+ return schemas;
192
+ }
193
+ export const URLSchema = defineSchema((runtime) => builtinSchemasForPolicy(runtime.policy).urlSchema, {
194
+ id: Symbol.for('@outfoxx/sunday/URLSchema'),
195
+ debugName: 'URLSchema',
196
+ });
197
+ export const ArrayBufferSchema = defineSchema((runtime) => builtinSchemasForPolicy(runtime.policy).arrayBufferSchema, {
198
+ id: Symbol.for('@outfoxx/sunday/ArrayBufferSchema'),
199
+ debugName: 'ArrayBufferSchema',
200
+ });
201
+ //# sourceMappingURL=schema-builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-builtins.js","sourceRoot":"","sources":["../src/schema-builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type SchemaFormat = 'json' | 'cbor';
2
+ /**
3
+ * Write-side flag bundle that mirrors Jackson date/time serialization modes.
4
+ * - `ISO8601`: `WRITE_DATES_AS_TIMESTAMPS` disabled.
5
+ * - `DECIMAL_SECONDS_SINCE_EPOCH`: timestamps enabled with nanos precision.
6
+ * - `MILLISECONDS_SINCE_EPOCH`: timestamps enabled with millis precision.
7
+ */
8
+ export declare enum DateEncoding {
9
+ DECIMAL_SECONDS_SINCE_EPOCH = 0,
10
+ MILLISECONDS_SINCE_EPOCH = 1,
11
+ ISO8601 = 2
12
+ }
13
+ /**
14
+ * Read-side interpretation for untagged numeric date/time payloads.
15
+ * This mirrors Jackson numeric timestamp decoding expectations.
16
+ */
17
+ export declare enum NumericDateDecoding {
18
+ DECIMAL_SECONDS_SINCE_EPOCH = 0,
19
+ MILLISECONDS_SINCE_EPOCH = 1
20
+ }
21
+ export declare enum ArrayBufferEncoding {
22
+ BASE64 = 0,
23
+ BASE64URL = 1,
24
+ RAW_BYTES = 2
25
+ }
26
+ export interface SchemaPolicy {
27
+ format: SchemaFormat;
28
+ dateEncoding: DateEncoding;
29
+ numericDateDecoding: NumericDateDecoding;
30
+ arrayBufferEncoding: ArrayBufferEncoding;
31
+ }
@@ -0,0 +1,41 @@
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
+ /**
15
+ * Write-side flag bundle that mirrors Jackson date/time serialization modes.
16
+ * - `ISO8601`: `WRITE_DATES_AS_TIMESTAMPS` disabled.
17
+ * - `DECIMAL_SECONDS_SINCE_EPOCH`: timestamps enabled with nanos precision.
18
+ * - `MILLISECONDS_SINCE_EPOCH`: timestamps enabled with millis precision.
19
+ */
20
+ export var DateEncoding;
21
+ (function (DateEncoding) {
22
+ DateEncoding[DateEncoding["DECIMAL_SECONDS_SINCE_EPOCH"] = 0] = "DECIMAL_SECONDS_SINCE_EPOCH";
23
+ DateEncoding[DateEncoding["MILLISECONDS_SINCE_EPOCH"] = 1] = "MILLISECONDS_SINCE_EPOCH";
24
+ DateEncoding[DateEncoding["ISO8601"] = 2] = "ISO8601";
25
+ })(DateEncoding || (DateEncoding = {}));
26
+ /**
27
+ * Read-side interpretation for untagged numeric date/time payloads.
28
+ * This mirrors Jackson numeric timestamp decoding expectations.
29
+ */
30
+ export var NumericDateDecoding;
31
+ (function (NumericDateDecoding) {
32
+ NumericDateDecoding[NumericDateDecoding["DECIMAL_SECONDS_SINCE_EPOCH"] = 0] = "DECIMAL_SECONDS_SINCE_EPOCH";
33
+ NumericDateDecoding[NumericDateDecoding["MILLISECONDS_SINCE_EPOCH"] = 1] = "MILLISECONDS_SINCE_EPOCH";
34
+ })(NumericDateDecoding || (NumericDateDecoding = {}));
35
+ export var ArrayBufferEncoding;
36
+ (function (ArrayBufferEncoding) {
37
+ ArrayBufferEncoding[ArrayBufferEncoding["BASE64"] = 0] = "BASE64";
38
+ ArrayBufferEncoding[ArrayBufferEncoding["BASE64URL"] = 1] = "BASE64URL";
39
+ ArrayBufferEncoding[ArrayBufferEncoding["RAW_BYTES"] = 2] = "RAW_BYTES";
40
+ })(ArrayBufferEncoding || (ArrayBufferEncoding = {}));
41
+ //# sourceMappingURL=schema-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-policy.js","sourceRoot":"","sources":["../src/schema-policy.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;AAIjC;;;;;GAKG;AACH,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,6FAA2B,CAAA;IAC3B,uFAAwB,CAAA;IACxB,qDAAO,CAAA;AACT,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,2GAA2B,CAAA;IAC3B,qGAAwB,CAAA;AAC1B,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B;AAED,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,iEAAM,CAAA;IACN,uEAAS,CAAA;IACT,uEAAS,CAAA;AACX,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import { SchemaPolicy } from './schema-policy.js';
3
+ export { ArrayBufferEncoding, DateEncoding, NumericDateDecoding, } from './schema-policy.js';
4
+ export type { SchemaFormat, SchemaPolicy, } from './schema-policy.js';
5
+ export declare const SchemaDefType: unique symbol;
6
+ export type AnySchema = z.ZodType;
7
+ export type SchemaDef<S extends AnySchema = AnySchema> = {
8
+ readonly id: symbol;
9
+ readonly build: (runtime: SchemaRuntime) => S;
10
+ readonly debugName?: string;
11
+ readonly [SchemaDefType]: true;
12
+ };
13
+ export type SchemaLike<T = unknown> = z.ZodType<T> | SchemaDef<z.ZodType<T>>;
14
+ export type ResolvedSchema<S> = S extends SchemaDef<infer TSchema> ? TSchema : S;
15
+ export declare function isSchema(value: unknown): value is z.ZodType;
16
+ export declare function isSchemaDef(value: unknown): value is SchemaDef;
17
+ export declare function defineSchema<S extends AnySchema>(builder: (runtime: SchemaRuntime) => S, options?: {
18
+ id?: symbol;
19
+ debugName?: string;
20
+ }): SchemaDef<S>;
21
+ export interface SchemaRuntime {
22
+ readonly policy: SchemaPolicy;
23
+ resolveSchema<S extends SchemaLike>(ref: S): ResolvedSchema<S>;
24
+ }
25
+ export declare function createSchemaRuntime(policy: SchemaPolicy): SchemaRuntime;
@@ -0,0 +1,77 @@
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 { ArrayBufferEncoding, DateEncoding, NumericDateDecoding, } from './schema-policy.js';
15
+ export const SchemaDefType = Symbol('SchemaDefType');
16
+ export function isSchema(value) {
17
+ const rec = value;
18
+ return !!value
19
+ && typeof value === 'object'
20
+ && (typeof rec.safeParse === 'function' || typeof rec.safeDecode === 'function');
21
+ }
22
+ export function isSchemaDef(value) {
23
+ const rec = value;
24
+ return !!value
25
+ && typeof value === 'object'
26
+ && rec[SchemaDefType] === true
27
+ && typeof rec.id === 'symbol'
28
+ && typeof rec.build === 'function';
29
+ }
30
+ export function defineSchema(builder, options) {
31
+ return {
32
+ id: options?.id ?? Symbol(options?.debugName),
33
+ build: builder,
34
+ debugName: options?.debugName,
35
+ [SchemaDefType]: true,
36
+ };
37
+ }
38
+ class DefaultSchemaRuntime {
39
+ policy;
40
+ schemas = new Map();
41
+ resolving = new Set();
42
+ constructor(policy) {
43
+ this.policy = policy;
44
+ }
45
+ resolveSchema(ref) {
46
+ if (isSchema(ref)) {
47
+ return ref;
48
+ }
49
+ if (!isSchemaDef(ref)) {
50
+ throw new Error('Schema definition failed to resolve; expected a zod schema or SchemaDef');
51
+ }
52
+ const found = this.schemas.get(ref.id);
53
+ if (found) {
54
+ return found;
55
+ }
56
+ if (this.resolving.has(ref.id)) {
57
+ throw new Error('Recursive schema definition invocation detected; use z.lazy(...) for recursive models');
58
+ }
59
+ this.resolving.add(ref.id);
60
+ try {
61
+ const schema = ref.build(this);
62
+ if (!isSchema(schema)) {
63
+ const definition = ref.debugName ? ` '${ref.debugName}'` : '';
64
+ throw new Error(`Schema definition failed to resolve${definition}; builder must return a zod schema`);
65
+ }
66
+ this.schemas.set(ref.id, schema);
67
+ return schema;
68
+ }
69
+ finally {
70
+ this.resolving.delete(ref.id);
71
+ }
72
+ }
73
+ }
74
+ export function createSchemaRuntime(policy) {
75
+ return new DefaultSchemaRuntime(policy);
76
+ }
77
+ //# sourceMappingURL=schema-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-runtime.js","sourceRoot":"","sources":["../src/schema-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class SundayError extends Error {
2
+ url: string;
3
+ status: number;
4
+ statusText: string;
5
+ headers: Headers;
6
+ body: unknown;
7
+ responseExample: string;
8
+ constructor(message: string, url: string, status: number, statusText: string, headers: Headers, body: unknown, responseExample: string);
9
+ static fromResponse(message: string, response: Response): Promise<SundayError>;
10
+ }
@@ -0,0 +1,36 @@
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 { ResponseExample } from './fetch.js';
15
+ export class SundayError extends Error {
16
+ url;
17
+ status;
18
+ statusText;
19
+ headers;
20
+ body;
21
+ responseExample;
22
+ constructor(message, url, status, statusText, headers, body, responseExample) {
23
+ super(message);
24
+ this.url = url;
25
+ this.status = status;
26
+ this.statusText = statusText;
27
+ this.headers = headers;
28
+ this.body = body;
29
+ this.responseExample = responseExample;
30
+ }
31
+ static async fromResponse(message, response) {
32
+ const [bodyExcerpt, body] = await ResponseExample.bodyExcerpt(response, 256);
33
+ return new SundayError(message, response.url, response.status, response.statusText, response.headers, body, ResponseExample.build(response, bodyExcerpt));
34
+ }
35
+ }
36
+ //# sourceMappingURL=sunday-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunday-error.js","sourceRoot":"","sources":["../src/sunday-error.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IACA;IACA;IACA;IACA;IAPT,YACE,OAAe,EACR,GAAW,EACX,MAAc,EACd,UAAkB,EAClB,OAAgB,EAChB,IAAa,EACb,eAAuB;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAPR,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAS;QAChB,SAAI,GAAJ,IAAI,CAAS;QACb,oBAAe,GAAf,eAAe,CAAQ;IAGhC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAAe,EACf,QAAkB;QAElB,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,WAAW,CAC3D,QAAQ,EACR,GAAG,CACJ,CAAC;QAEF,OAAO,IAAI,WAAW,CACpB,OAAO,EACP,QAAQ,CAAC,GAAG,EACZ,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,OAAO,EAChB,IAAI,EACJ,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAC7C,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,33 @@
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 { parse } from 'uri-template';
15
+ export class URLTemplate {
16
+ template;
17
+ parameters;
18
+ constructor(template, parameters = {}) {
19
+ this.template = template;
20
+ this.parameters = parameters;
21
+ }
22
+ complete(relativeTemplate, parameters) {
23
+ const allParameters = { ...this.parameters, ...parameters };
24
+ const baseTempl = this.template.endsWith('/')
25
+ ? this.template.slice(0, -1)
26
+ : this.template;
27
+ const relTempl = relativeTemplate.startsWith('/') || !relativeTemplate.length
28
+ ? relativeTemplate
29
+ : `/${relativeTemplate}`;
30
+ return new URL(parse(baseTempl + relTempl).expand(allParameters));
31
+ }
32
+ }
33
+ //# sourceMappingURL=url-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-template.js","sourceRoot":"","sources":["../src/url-template.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,MAAM,OAAO,WAAW;IAEb;IACA;IAFT,YACS,QAAgB,EAChB,aAAsC,EAAE;QADxC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAA8B;IAC9C,CAAC;IAEJ,QAAQ,CAAC,gBAAwB,EAAE,UAAmC;QACpE,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClB,MAAM,QAAQ,GACZ,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM;YAC1D,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC7B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { SubscriptionLike } from './subscriptions.js';
2
+ export declare function firstValueFrom<T>(iterable: AsyncIterable<T>): Promise<T>;
3
+ export type EventTargetAsyncIterableOverflow = 'preserve' | 'drop' | 'error';
4
+ export interface EventTargetAsyncIterableOptions {
5
+ signal?: AbortSignal;
6
+ overflow?: EventTargetAsyncIterableOverflow;
7
+ highWaterMark?: number;
8
+ }
9
+ export declare function fromEvent<E extends Event = Event>(target: EventTarget, type: string, options?: EventTargetAsyncIterableOptions): AsyncIterable<E>;
10
+ export interface AsyncIterableObserver<E> {
11
+ next(value: E): void | Promise<void>;
12
+ error?(error: unknown): void | Promise<void>;
13
+ complete?(): void | Promise<void>;
14
+ }
15
+ export declare function subscribe<E>(stream: AsyncIterable<E>, observer: AsyncIterableObserver<E>): SubscriptionLike;