@utiliread/http 1.17.2 → 1.17.5

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 (143) hide show
  1. package/dist/cjs/event-aggregator.js +30 -0
  2. package/dist/cjs/event-aggregator.js.map +1 -0
  3. package/dist/cjs/events.js +19 -0
  4. package/dist/cjs/events.js.map +1 -0
  5. package/dist/cjs/helpers.js +16 -0
  6. package/dist/cjs/helpers.js.map +1 -0
  7. package/dist/cjs/http-builder.js +192 -0
  8. package/dist/cjs/http-builder.js.map +1 -0
  9. package/dist/cjs/http-error.js +30 -0
  10. package/dist/cjs/http-error.js.map +1 -0
  11. package/dist/cjs/http-response.js +51 -0
  12. package/dist/cjs/http-response.js.map +1 -0
  13. package/dist/cjs/http.js +96 -0
  14. package/dist/cjs/http.js.map +1 -0
  15. package/dist/cjs/http.spec.js +69 -0
  16. package/dist/cjs/http.spec.js.map +1 -0
  17. package/dist/cjs/index.js +38 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/json/index.js +74 -0
  20. package/dist/cjs/json/index.js.map +1 -0
  21. package/dist/cjs/jsonpatch/index.js +15 -0
  22. package/dist/cjs/jsonpatch/index.js.map +1 -0
  23. package/dist/cjs/mapping.js +37 -0
  24. package/dist/cjs/mapping.js.map +1 -0
  25. package/dist/cjs/msgpack/index.js +35 -0
  26. package/dist/cjs/msgpack/index.js.map +1 -0
  27. package/dist/cjs/pagination.js +3 -0
  28. package/dist/cjs/pagination.js.map +1 -0
  29. package/dist/cjs/problem-details.js +3 -0
  30. package/dist/cjs/problem-details.js.map +1 -0
  31. package/dist/cjs/query-string.js +66 -0
  32. package/dist/cjs/query-string.js.map +1 -0
  33. package/dist/cjs/query-string.spec.js +52 -0
  34. package/dist/cjs/query-string.spec.js.map +1 -0
  35. package/dist/cjs/status-codes.js +71 -0
  36. package/dist/cjs/status-codes.js.map +1 -0
  37. package/dist/cjs/timeout-error.js +14 -0
  38. package/dist/cjs/timeout-error.js.map +1 -0
  39. package/dist/esm/event-aggregator.d.ts +11 -0
  40. package/dist/esm/event-aggregator.js +26 -0
  41. package/dist/esm/event-aggregator.js.map +1 -0
  42. package/dist/esm/events.d.ts +11 -0
  43. package/dist/esm/events.js +15 -0
  44. package/dist/esm/events.js.map +1 -0
  45. package/dist/esm/helpers.d.ts +5 -0
  46. package/dist/esm/helpers.js +10 -0
  47. package/dist/esm/helpers.js.map +1 -0
  48. package/dist/esm/http-builder.d.ts +60 -0
  49. package/dist/esm/http-builder.js +187 -0
  50. package/dist/esm/http-builder.js.map +1 -0
  51. package/dist/esm/http-error.d.ts +10 -0
  52. package/dist/esm/http-error.js +26 -0
  53. package/dist/esm/http-error.js.map +1 -0
  54. package/dist/esm/http-response.d.ts +18 -0
  55. package/dist/esm/http-response.js +46 -0
  56. package/dist/esm/http-response.js.map +1 -0
  57. package/dist/esm/http.d.ts +33 -0
  58. package/dist/esm/http.js +92 -0
  59. package/dist/esm/http.js.map +1 -0
  60. package/dist/esm/http.spec.d.ts +1 -0
  61. package/dist/esm/http.spec.js +67 -0
  62. package/dist/esm/http.spec.js.map +1 -0
  63. package/dist/esm/index.d.ts +15 -0
  64. package/dist/esm/index.js +11 -0
  65. package/dist/esm/index.js.map +1 -0
  66. package/dist/esm/json/index.d.ts +15 -0
  67. package/dist/esm/json/index.js +72 -0
  68. package/dist/esm/json/index.js.map +1 -0
  69. package/dist/{jsonpatch.d.ts → esm/jsonpatch/index.d.ts} +9 -10
  70. package/dist/esm/jsonpatch/index.js +13 -0
  71. package/dist/esm/jsonpatch/index.js.map +1 -0
  72. package/dist/esm/mapping.d.ts +9 -0
  73. package/dist/esm/mapping.js +32 -0
  74. package/dist/esm/mapping.js.map +1 -0
  75. package/dist/esm/msgpack/index.d.ts +8 -0
  76. package/dist/esm/msgpack/index.js +33 -0
  77. package/dist/esm/msgpack/index.js.map +1 -0
  78. package/dist/esm/pagination.d.ts +23 -0
  79. package/dist/esm/pagination.js +2 -0
  80. package/dist/esm/pagination.js.map +1 -0
  81. package/dist/esm/problem-details.d.ts +7 -0
  82. package/dist/esm/problem-details.js +2 -0
  83. package/dist/esm/problem-details.js.map +1 -0
  84. package/dist/esm/query-string.d.ts +6 -0
  85. package/dist/esm/query-string.js +62 -0
  86. package/dist/esm/query-string.js.map +1 -0
  87. package/dist/esm/query-string.spec.d.ts +1 -0
  88. package/dist/esm/query-string.spec.js +50 -0
  89. package/dist/esm/query-string.spec.js.map +1 -0
  90. package/dist/esm/status-codes.d.ts +67 -0
  91. package/dist/esm/status-codes.js +68 -0
  92. package/dist/esm/status-codes.js.map +1 -0
  93. package/dist/esm/timeout-error.d.ts +3 -0
  94. package/dist/esm/timeout-error.js +10 -0
  95. package/dist/esm/timeout-error.js.map +1 -0
  96. package/json.d.ts +1 -1
  97. package/jsonpatch.d.ts +1 -1
  98. package/msgpack.d.ts +1 -1
  99. package/package.json +18 -25
  100. package/plugins/json/src/index.ts +17 -19
  101. package/plugins/json/tsconfig.cjs.json +8 -0
  102. package/plugins/json/tsconfig.json +6 -1
  103. package/plugins/jsonpatch/tsconfig.cjs.json +8 -0
  104. package/plugins/jsonpatch/tsconfig.json +6 -1
  105. package/plugins/msgpack/src/index.ts +12 -13
  106. package/plugins/msgpack/tsconfig.cjs.json +8 -0
  107. package/plugins/msgpack/tsconfig.json +6 -1
  108. package/src/index.ts +1 -1
  109. package/src/mapping.d.ts +9 -0
  110. package/src/mapping.js +32 -0
  111. package/src/mapping.js.map +1 -0
  112. package/tsconfig.cjs.json +8 -0
  113. package/tsconfig.json +14 -2
  114. package/dist/index.d.ts +0 -227
  115. package/dist/index.d.ts.map +0 -1
  116. package/dist/index.js +0 -534
  117. package/dist/index.js.map +0 -1
  118. package/dist/index.mjs +0 -507
  119. package/dist/index.mjs.map +0 -1
  120. package/dist/json.d.ts +0 -15
  121. package/dist/json.d.ts.map +0 -1
  122. package/dist/json.js +0 -100
  123. package/dist/json.js.map +0 -1
  124. package/dist/json.mjs +0 -100
  125. package/dist/json.mjs.map +0 -1
  126. package/dist/jsonpatch.d.ts.map +0 -1
  127. package/dist/jsonpatch.js +0 -18
  128. package/dist/jsonpatch.js.map +0 -1
  129. package/dist/jsonpatch.mjs +0 -18
  130. package/dist/jsonpatch.mjs.map +0 -1
  131. package/dist/msgpack.d.ts +0 -9
  132. package/dist/msgpack.d.ts.map +0 -1
  133. package/dist/msgpack.js +0 -62
  134. package/dist/msgpack.js.map +0 -1
  135. package/dist/msgpack.mjs +0 -62
  136. package/dist/msgpack.mjs.map +0 -1
  137. package/plugins/json/package-lock.json +0 -145
  138. package/plugins/json/package.json +0 -11
  139. package/plugins/jsonpatch/package-lock.json +0 -124
  140. package/plugins/jsonpatch/package.json +0 -13
  141. package/plugins/msgpack/package-lock.json +0 -134
  142. package/plugins/msgpack/package.json +0 -12
  143. package/tsconfig.test.json +0 -9
@@ -0,0 +1,187 @@
1
+ import { HttpResponse, HttpResponseOfT } from './http-response';
2
+ import { TimeoutError } from './timeout-error';
3
+ import { EventAggregator } from './event-aggregator';
4
+ export class HttpBuilder {
5
+ constructor(message, options, /** @internal */ http) {
6
+ this.message = message;
7
+ this.options = options;
8
+ this.http = http;
9
+ this._ensureSuccessStatusCode = true;
10
+ this._onSend = new EventAggregator();
11
+ this._onSent = new EventAggregator();
12
+ }
13
+ onSend(callback) {
14
+ this._onSend.subscribe(callback);
15
+ return this;
16
+ }
17
+ onSent(callback) {
18
+ this._onSent.subscribe(callback);
19
+ return this;
20
+ }
21
+ useHandler(handler) {
22
+ return new HttpBuilderOfT(this, handler);
23
+ }
24
+ async send(abortSignal) {
25
+ if (this.message.contentType) {
26
+ this.message.headers.set('Content-Type', this.message.contentType);
27
+ }
28
+ // Resolve the final url and assign it to the message
29
+ // This makes the final url apper in onSend, onSent, and on Received handlers
30
+ this.message.url = this.getUrl();
31
+ await this._onSend.publish(this.message);
32
+ await this.http._onSend.publish(this.message);
33
+ const init = {
34
+ method: this.message.method,
35
+ body: this.message.content,
36
+ headers: this.message.headers,
37
+ mode: this.message.mode
38
+ };
39
+ if (abortSignal || this.options.timeout) {
40
+ var outerController = new AbortController();
41
+ if (abortSignal) {
42
+ abortSignal.addEventListener("abort", () => {
43
+ outerController.abort();
44
+ });
45
+ }
46
+ init.signal = outerController.signal;
47
+ }
48
+ const fetchResponsePromise = this.options.fetch(this.message.url, init);
49
+ let fetchResponse;
50
+ if (this.options.timeout) {
51
+ fetchResponse = await Promise.race([
52
+ fetchResponsePromise,
53
+ new Promise((_, reject) => setTimeout(() => {
54
+ outerController.abort();
55
+ reject(new TimeoutError());
56
+ }, this.options.timeout))
57
+ ]);
58
+ }
59
+ else {
60
+ fetchResponse = await fetchResponsePromise;
61
+ }
62
+ const httpResponse = new HttpResponse(fetchResponse);
63
+ if (this._ensureSuccessStatusCode) {
64
+ httpResponse.ensureSuccessfulStatusCode();
65
+ }
66
+ await this._onSent.publish(httpResponse, this.message);
67
+ await this.http._onSent.publish(httpResponse, this.message);
68
+ return httpResponse;
69
+ }
70
+ getUrl() {
71
+ let baseUrl = this.options.baseUrl;
72
+ if (!baseUrl) {
73
+ return this.message.url;
74
+ }
75
+ if (baseUrl.endsWith('/')) {
76
+ baseUrl = baseUrl.substr(0, baseUrl.length - 1);
77
+ }
78
+ if (this.message.url.startsWith('/')) {
79
+ return baseUrl + this.message.url;
80
+ }
81
+ else {
82
+ return baseUrl + '/' + this.message.url;
83
+ }
84
+ }
85
+ ensureSuccessStatusCode(ensureSuccessStatusCode) {
86
+ this._ensureSuccessStatusCode = ensureSuccessStatusCode === false ? false : true;
87
+ return this;
88
+ }
89
+ useCors(mode) {
90
+ this.message.mode = mode;
91
+ return this;
92
+ }
93
+ useTimeout(timeout) {
94
+ this.options.timeout = timeout || undefined;
95
+ return this;
96
+ }
97
+ // Content Extensions
98
+ with(content, contentType) {
99
+ this.message.content = content;
100
+ this.message.contentType = contentType;
101
+ return this;
102
+ }
103
+ withForm(content) {
104
+ this.message.content = content;
105
+ this.message.contentType = undefined;
106
+ return this;
107
+ }
108
+ // Modifier Extensions
109
+ addHeader(name, value) {
110
+ this.message.headers.append(name, value);
111
+ return this;
112
+ }
113
+ // Expect Extensions
114
+ expectString() {
115
+ return this.useHandler(response => {
116
+ return response.rawResponse.text();
117
+ });
118
+ }
119
+ expectBinary() {
120
+ return this.useHandler(response => {
121
+ return response.rawResponse.arrayBuffer();
122
+ });
123
+ }
124
+ }
125
+ export class HttpBuilderOfT extends HttpBuilder {
126
+ constructor(inner, handler) {
127
+ super(inner.message, inner.options, inner.http);
128
+ this.inner = inner;
129
+ this.handler = handler;
130
+ this._onReceived = new EventAggregator();
131
+ }
132
+ onSend(callback) {
133
+ this.inner.onSend(callback);
134
+ return this;
135
+ }
136
+ onSent(callback) {
137
+ this.inner.onSent(callback);
138
+ return this;
139
+ }
140
+ ensureSuccessStatusCode(ensureSuccessStatusCode) {
141
+ this.inner.ensureSuccessStatusCode(ensureSuccessStatusCode);
142
+ return this;
143
+ }
144
+ useCors(mode) {
145
+ this.inner.useCors(mode);
146
+ return this;
147
+ }
148
+ useTimeout(timeout) {
149
+ this.inner.useTimeout(timeout);
150
+ return this;
151
+ }
152
+ allowEmptyResponse() {
153
+ if (this._onReceived.any) {
154
+ throw new Error("onReceived() must be called after allowEmptyResponse() because the callback type changes");
155
+ }
156
+ return new HttpBuilderOfT(this.inner, response => {
157
+ if (response.statusCode === 204) {
158
+ return Promise.resolve(null);
159
+ }
160
+ return this.handler(response);
161
+ });
162
+ }
163
+ onReceived(callback) {
164
+ this._onReceived.subscribe(callback);
165
+ return this;
166
+ }
167
+ send(abortSignal) {
168
+ const responsePromise = this.inner.send(abortSignal).then(x => new HttpResponseOfT(x.rawResponse, this.handler));
169
+ return asSendPromise(responsePromise, () => responsePromise.then(response => this.handleReceive(response)));
170
+ }
171
+ transfer(abortSignal) {
172
+ return this.send(abortSignal).then(response => this.handleReceive(response));
173
+ }
174
+ async handleReceive(response) {
175
+ const request = this.message;
176
+ const value = await response.receive();
177
+ await this._onReceived.publish(response, request, value);
178
+ await this.http._onReceived.publish(response, request, value);
179
+ return value;
180
+ }
181
+ }
182
+ function asSendPromise(responsePromise, thenReceive) {
183
+ const sendPromise = responsePromise;
184
+ sendPromise.thenReceive = thenReceive;
185
+ return sendPromise;
186
+ }
187
+ //# sourceMappingURL=http-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-builder.js","sourceRoot":"","sources":["../../src/http-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { HttpResponse } from './http-response';
2
+ import { ProblemDetails } from './problem-details';
3
+ export declare class HttpError extends Error {
4
+ statusCode: number;
5
+ private response;
6
+ private detailsPromise?;
7
+ get hasDetails(): boolean | undefined;
8
+ constructor(statusCode: number, response?: HttpResponse | undefined);
9
+ details<TDetails = ProblemDetails>(): Promise<TDetails>;
10
+ }
@@ -0,0 +1,26 @@
1
+ export class HttpError extends Error {
2
+ constructor(statusCode, response = undefined) {
3
+ super(`The response was not successful: ${statusCode}`);
4
+ this.statusCode = statusCode;
5
+ this.response = response;
6
+ this.name = 'HttpError';
7
+ // Set the prototype explicitly to allow for "... instanceof HttpError",
8
+ // see https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
9
+ Object.setPrototypeOf(this, HttpError.prototype);
10
+ }
11
+ get hasDetails() {
12
+ var _a, _b;
13
+ const contentType = (_b = (_a = this.response) === null || _a === void 0 ? void 0 : _a.rawResponse) === null || _b === void 0 ? void 0 : _b.headers.get("Content-Type");
14
+ return contentType === null || contentType === void 0 ? void 0 : contentType.includes("application/problem+json");
15
+ }
16
+ details() {
17
+ var _a, _b;
18
+ const rawResponse = (_a = this.response) === null || _a === void 0 ? void 0 : _a.rawResponse;
19
+ if (rawResponse && this.hasDetails) {
20
+ (_b = this.detailsPromise) !== null && _b !== void 0 ? _b : (this.detailsPromise = rawResponse.json().then(details => details));
21
+ return this.detailsPromise.then(details => details);
22
+ }
23
+ return Promise.reject(new Error("There are no problem details in the response"));
24
+ }
25
+ }
26
+ //# sourceMappingURL=http-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../src/http-error.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAQhC,YAAmB,UAAkB,EAAU,WAAqC,SAAS;QACzF,KAAK,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAC;QADzC,eAAU,GAAV,UAAU,CAAQ;QAAU,aAAQ,GAAR,QAAQ,CAAsC;QAEzF,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QAExB,wEAAwE;QACxE,mJAAmJ;QACnJ,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAZD,IAAI,UAAU;;QACV,MAAM,WAAW,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,0CAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5E,OAAO,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC7D,CAAC;IAWD,OAAO;;QACH,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,CAAC;QAE/C,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,MAAA,IAAI,CAAC,cAAc,oCAAnB,IAAI,CAAC,cAAc,GAAK,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAiB,OAAO,CAAC,EAAC;YACpF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAW,OAAO,CAAC,CAAC;SACjE;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACrF,CAAC;CACJ"}
@@ -0,0 +1,18 @@
1
+ export declare class HttpResponse {
2
+ rawResponse: Response;
3
+ get url(): string;
4
+ get statusCode(): number;
5
+ get headers(): Headers;
6
+ get isInformational(): boolean;
7
+ get isSuccessful(): boolean;
8
+ get isRedirection(): boolean;
9
+ get isClientError(): boolean;
10
+ get isServerError(): boolean;
11
+ constructor(rawResponse: Response);
12
+ ensureSuccessfulStatusCode(): this;
13
+ }
14
+ export declare class HttpResponseOfT<T> extends HttpResponse {
15
+ private handler;
16
+ constructor(rawResponse: Response, handler: (response: HttpResponse) => Promise<T>);
17
+ receive(): Promise<T>;
18
+ }
@@ -0,0 +1,46 @@
1
+ import { HttpError } from "./http-error";
2
+ export class HttpResponse {
3
+ constructor(rawResponse) {
4
+ this.rawResponse = rawResponse;
5
+ }
6
+ get url() {
7
+ return this.rawResponse.url;
8
+ }
9
+ get statusCode() {
10
+ return this.rawResponse.status;
11
+ }
12
+ get headers() {
13
+ return this.rawResponse.headers;
14
+ }
15
+ get isInformational() {
16
+ return this.statusCode >= 100 && this.statusCode < 200;
17
+ }
18
+ get isSuccessful() {
19
+ return this.statusCode >= 200 && this.statusCode < 300;
20
+ }
21
+ get isRedirection() {
22
+ return this.statusCode >= 300 && this.statusCode < 400;
23
+ }
24
+ get isClientError() {
25
+ return this.statusCode >= 400 && this.statusCode < 500;
26
+ }
27
+ get isServerError() {
28
+ return this.statusCode >= 500 && this.statusCode < 600;
29
+ }
30
+ ensureSuccessfulStatusCode() {
31
+ if (!this.isSuccessful) {
32
+ throw new HttpError(this.statusCode, this);
33
+ }
34
+ return this;
35
+ }
36
+ }
37
+ export class HttpResponseOfT extends HttpResponse {
38
+ constructor(rawResponse, handler) {
39
+ super(rawResponse);
40
+ this.handler = handler;
41
+ }
42
+ receive() {
43
+ return this.handler(this);
44
+ }
45
+ }
46
+ //# sourceMappingURL=http-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-response.js","sourceRoot":"","sources":["../../src/http-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,OAAO,YAAY;IAiCvB,YAAmB,WAAqB;QAArB,gBAAW,GAAX,WAAW,CAAU;IAAG,CAAC;IAhC5C,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACzD,CAAC;IAIM,0BAA0B;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SAC5C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,eAAmB,SAAQ,YAAY;IAClD,YACE,WAAqB,EACb,OAA+C;QAEvD,KAAK,CAAC,WAAW,CAAC,CAAC;QAFX,YAAO,GAAP,OAAO,CAAwC;IAGzD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { Subscription } from "./event-aggregator";
2
+ import { HttpBuilder, HttpMethod, Message } from "./http-builder";
3
+ import { HttpResponse, HttpResponseOfT } from "./http-response";
4
+ export declare type Fetch = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
5
+ export declare class Http {
6
+ static defaults: HttpOptions;
7
+ private static instance?;
8
+ options: HttpOptions;
9
+ constructor(options?: Partial<HttpOptions>);
10
+ static request(method: HttpMethod, url: string, params?: any): HttpBuilder;
11
+ static head(url: string, params?: any): HttpBuilder;
12
+ static post(url: string, params?: any): HttpBuilder;
13
+ static get(url: string, params?: any): HttpBuilder;
14
+ static put(url: string, params?: any): HttpBuilder;
15
+ static patch(url: string, params?: any): HttpBuilder;
16
+ static delete(url: string, params?: any): HttpBuilder;
17
+ private static getInstance;
18
+ request(method: HttpMethod, url: string, params?: any): HttpBuilder;
19
+ head(url: string, params?: any): HttpBuilder;
20
+ post(url: string, params?: any): HttpBuilder;
21
+ get(url: string, params?: any): HttpBuilder;
22
+ put(url: string, params?: any): HttpBuilder;
23
+ patch(url: string, params?: any): HttpBuilder;
24
+ delete(url: string, params?: any): HttpBuilder;
25
+ onSend(callback: (request: Message) => void | Promise<void>): Subscription;
26
+ onSent(callback: (response: HttpResponse, request: Message) => void | Promise<void>): Subscription;
27
+ onReceived(callback: (response: HttpResponseOfT<any>, request: Message, value: any) => void | Promise<void>): Subscription;
28
+ }
29
+ export interface HttpOptions {
30
+ fetch?: Fetch;
31
+ timeout?: number;
32
+ baseUrl?: string;
33
+ }
@@ -0,0 +1,92 @@
1
+ import { EventAggregator } from "./event-aggregator";
2
+ import { HttpBuilder } from "./http-builder";
3
+ import { QueryString } from "./query-string";
4
+ export class Http {
5
+ constructor(options) {
6
+ /** @internal */
7
+ this._onSend = new EventAggregator();
8
+ /** @internal */
9
+ this._onSent = new EventAggregator();
10
+ /** @internal */
11
+ this._onReceived = new EventAggregator();
12
+ this.options = Object.assign({}, Http.defaults, options); // Later sources' properties overwrite earlier ones.
13
+ }
14
+ static request(method, url, params) {
15
+ return this.getInstance().request(method, url, params);
16
+ }
17
+ static head(url, params) {
18
+ return this.getInstance().head(url, params);
19
+ }
20
+ static post(url, params) {
21
+ return this.getInstance().post(url, params);
22
+ }
23
+ static get(url, params) {
24
+ return this.getInstance().get(url, params);
25
+ }
26
+ static put(url, params) {
27
+ return this.getInstance().put(url, params);
28
+ }
29
+ static patch(url, params) {
30
+ return this.getInstance().patch(url, params);
31
+ }
32
+ static delete(url, params) {
33
+ return this.getInstance().delete(url, params);
34
+ }
35
+ static getInstance() {
36
+ if (!this.instance) {
37
+ this.instance = new Http();
38
+ // The singleton instance should always use the static options
39
+ this.instance.options = Http.defaults;
40
+ }
41
+ return this.instance;
42
+ }
43
+ request(method, url, params) {
44
+ const message = {
45
+ method,
46
+ url: url + QueryString.serialize(params),
47
+ headers: new Headers(),
48
+ properties: {},
49
+ };
50
+ const fetch = this.options.fetch;
51
+ if (!fetch) {
52
+ throw Error("fetch() is not properly configured");
53
+ }
54
+ const builder = new HttpBuilder(message, {
55
+ fetch,
56
+ timeout: this.options.timeout,
57
+ baseUrl: this.options.baseUrl,
58
+ }, this);
59
+ return builder;
60
+ }
61
+ head(url, params) {
62
+ return this.request("HEAD", url, params);
63
+ }
64
+ post(url, params) {
65
+ return this.request("POST", url, params);
66
+ }
67
+ get(url, params) {
68
+ return this.request("GET", url, params);
69
+ }
70
+ put(url, params) {
71
+ return this.request("PUT", url, params);
72
+ }
73
+ patch(url, params) {
74
+ return this.request("PATCH", url, params);
75
+ }
76
+ delete(url, params) {
77
+ return this.request("DELETE", url, params);
78
+ }
79
+ onSend(callback) {
80
+ return this._onSend.subscribe(callback);
81
+ }
82
+ onSent(callback) {
83
+ return this._onSent.subscribe(callback);
84
+ }
85
+ onReceived(callback) {
86
+ return this._onReceived.subscribe(callback);
87
+ }
88
+ }
89
+ Http.defaults = {
90
+ fetch: self.fetch ? self.fetch.bind(self) : undefined,
91
+ };
92
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAuB,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C,MAAM,OAAO,IAAI;IAaf,YAAY,OAA8B;QAP1C,gBAAgB;QAChB,YAAO,GAAG,IAAI,eAAe,EAAa,CAAC;QAC3C,gBAAgB;QAChB,YAAO,GAAG,IAAI,eAAe,EAA2B,CAAC;QACzD,gBAAgB;QAChB,gBAAW,GAAG,IAAI,eAAe,EAAwC,CAAC;QAGxE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,oDAAoD;IAChH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAkB,EAAE,GAAW,EAAE,MAAY;QAC1D,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAW,EAAE,MAAY;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAW,EAAE,MAAY;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAAY;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAAY;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAW,EAAE,MAAY;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAW,EAAE,MAAY;QACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAEO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3B,8DAA8D;YAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;SACvC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,MAAkB,EAAE,GAAW,EAAE,MAAY;QACnD,MAAM,OAAO,GAAG;YACd,MAAM;YACN,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACxC,OAAO,EAAE,IAAI,OAAO,EAAE;YACtB,UAAU,EAAE,EAAE;SACf,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACnD;QACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAC7B,OAAO,EACP;YACE,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAC9B,EACD,IAAI,CACL,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,MAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,GAAW,EAAE,MAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,MAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,MAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,MAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,MAAY;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,QAAoD;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CACJ,QAA4E;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CACR,QAIyB;QAEzB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;;AAtHM,aAAQ,GAAgB;IAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;CACtD,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import { expect } from "chai";
2
+ import { Http } from "./http";
3
+ describe("static http", () => {
4
+ it("can get", () => {
5
+ const builder = Http.get("hello");
6
+ expect(builder.getUrl()).to.equal("hello");
7
+ expect(builder.options.fetch).to.equal(Http.defaults.fetch);
8
+ });
9
+ it("can get with leading /", () => {
10
+ const builder = Http.get("/hello");
11
+ expect(builder.getUrl()).to.equal("/hello");
12
+ expect(builder.options.fetch).to.equal(Http.defaults.fetch);
13
+ });
14
+ it("can get with changed default fetch", () => {
15
+ Http.get("/hello"); // Creates internal singleton
16
+ // Change static default after request is created
17
+ const fetch = Http.defaults.fetch;
18
+ Http.defaults.fetch = fakeFetch;
19
+ const builder = Http.get("/hello");
20
+ expect(builder.options.fetch).to.equal(fakeFetch);
21
+ Http.defaults.fetch = fetch;
22
+ });
23
+ });
24
+ describe("instance http", () => {
25
+ it("can get with different timeout", () => {
26
+ const http = new Http();
27
+ const builder = http.get("/hello");
28
+ expect(builder.options.fetch).to.equal(Http.defaults.fetch);
29
+ expect(builder.options.timeout).to.equal(undefined);
30
+ });
31
+ it("can get with different timeout", () => {
32
+ const http = new Http({ timeout: 123 });
33
+ const builder = http.get("/hello");
34
+ expect(builder.options.fetch).to.equal(Http.defaults.fetch);
35
+ expect(builder.options.timeout).to.equal(123);
36
+ });
37
+ it("can get with different fetch", () => {
38
+ const http = new Http({ fetch: fakeFetch });
39
+ const builder = http.get("/hello");
40
+ expect(builder.options.fetch).to.equal(fakeFetch);
41
+ expect(builder.options.timeout).to.equal(undefined);
42
+ });
43
+ it("can get hello with base url", () => {
44
+ const http = new Http({ baseUrl: "base" });
45
+ const builder = http.get("hello");
46
+ expect(builder.getUrl()).to.equal("base/hello");
47
+ });
48
+ it("can get hello with base/", () => {
49
+ const http = new Http({ baseUrl: "base/" });
50
+ const builder = http.get("hello");
51
+ expect(builder.getUrl()).to.equal("base/hello");
52
+ });
53
+ it("can get /hello with base url", () => {
54
+ const http = new Http({ baseUrl: "base" });
55
+ const builder = http.get("/hello");
56
+ expect(builder.getUrl()).to.equal("base/hello");
57
+ });
58
+ it("can get /hello with base/", () => {
59
+ const http = new Http({ baseUrl: "base/" });
60
+ const builder = http.get("/hello");
61
+ expect(builder.getUrl()).to.equal("base/hello");
62
+ });
63
+ });
64
+ function fakeFetch(input, init) {
65
+ return Promise.resolve(new Response());
66
+ }
67
+ //# sourceMappingURL=http.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.spec.js","sourceRoot":"","sources":["../../src/http.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { Http } from "./http";
2
+ export type { Page, PaginationResult, InfinitePage, InfinitePaginationResult, } from "./pagination";
3
+ export type { ProblemDetails } from "./problem-details";
4
+ export { QueryString } from "./query-string";
5
+ export { HttpResponse, HttpResponseOfT } from "./http-response";
6
+ export { HttpBuilder, HttpBuilderOfT } from "./http-builder";
7
+ export type { Message } from "./http-builder";
8
+ export { HttpError } from "./http-error";
9
+ export { TimeoutError } from "./timeout-error";
10
+ export { events } from "./events";
11
+ export * from "./helpers";
12
+ export type { Fetch } from "./http";
13
+ export type { Subscription } from "./event-aggregator";
14
+ export { statusCodes } from "./status-codes";
15
+ export * as Mapping from "./mapping";
@@ -0,0 +1,11 @@
1
+ export { Http } from "./http";
2
+ export { QueryString } from "./query-string";
3
+ export { HttpResponse, HttpResponseOfT } from "./http-response";
4
+ export { HttpBuilder, HttpBuilderOfT } from "./http-builder";
5
+ export { HttpError } from "./http-error";
6
+ export { TimeoutError } from "./timeout-error";
7
+ export { events } from "./events";
8
+ export * from "./helpers";
9
+ export { statusCodes } from "./status-codes";
10
+ export * as Mapping from "./mapping";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAQ9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Mapping } from "@utiliread/http";
2
+ import type { InfinitePaginationResult, PaginationResult } from "@utiliread/http";
3
+ declare module "@utiliread/http" {
4
+ interface HttpBuilder {
5
+ withJson(content: any): this;
6
+ expectJson<T>(typeOrMapper?: Mapping.TypeOrMapper<T>): HttpBuilderOfT<T>;
7
+ expectJsonArray<T>(typeOrMapper: Mapping.TypeOrMapper<T>): HttpBuilderOfT<T[]>;
8
+ expectJsonNullableArray<T>(typeOrMapper: Mapping.TypeOrMapper<T>): HttpBuilderOfT<(T | null)[]>;
9
+ expectJsonPaginationResult<T>(typeOrMapper: Mapping.TypeOrMapper<T>): HttpBuilderOfT<PaginationResult<T>>;
10
+ expectJsonInfinitePaginationResult<T>(typeOrMapper: Mapping.TypeOrMapper<T>): HttpBuilderOfT<InfinitePaginationResult<T>>;
11
+ }
12
+ interface HttpBuilderOfT<T> {
13
+ withJson(content: any): this;
14
+ }
15
+ }
@@ -0,0 +1,72 @@
1
+ import { HttpBuilder, HttpBuilderOfT, Mapping } from "@utiliread/http";
2
+ import { deserialize, serialize } from "@utiliread/json";
3
+ HttpBuilder.prototype.withJson = function (content) {
4
+ this.message.content = serialize(content);
5
+ this.message.contentType = "application/json";
6
+ return this;
7
+ };
8
+ HttpBuilderOfT.prototype.withJson = function (content) {
9
+ this.message.content = serialize(content);
10
+ this.message.contentType = "application/json";
11
+ return this;
12
+ };
13
+ HttpBuilder.prototype.expectJson = function (typeOrMapper) {
14
+ this.message.headers.set("Accept", "application/json");
15
+ return this.useHandler((response) => {
16
+ return response.rawResponse
17
+ .json()
18
+ .then((x) => Mapping.getMapper(deserialize, typeOrMapper)(x));
19
+ });
20
+ };
21
+ HttpBuilder.prototype.expectJsonArray = function (typeOrMapper) {
22
+ this.message.headers.set("Accept", "application/json");
23
+ return this.useHandler((response) => {
24
+ return response.rawResponse.json().then((x) => {
25
+ const itemFactory = Mapping.getMapper(deserialize, typeOrMapper);
26
+ return x.map(itemFactory);
27
+ });
28
+ });
29
+ };
30
+ HttpBuilder.prototype.expectJsonNullableArray = function (typeOrMapper) {
31
+ this.message.headers.set("Accept", "application/json");
32
+ return this.useHandler((response) => {
33
+ return response.rawResponse.json().then((x) => {
34
+ const itemFactory = Mapping.getNullableMapper(deserialize, typeOrMapper);
35
+ return x.map(itemFactory);
36
+ });
37
+ });
38
+ };
39
+ HttpBuilder.prototype.expectJsonPaginationResult = function (typeOrMapper) {
40
+ this.message.headers.set("Accept", "application/json");
41
+ return this.useHandler((response) => {
42
+ return response.rawResponse.json().then((x) => {
43
+ const itemFactory = Mapping.getMapper(deserialize, typeOrMapper);
44
+ return {
45
+ meta: {
46
+ pageCount: x.meta.pageCount,
47
+ pageSize: x.meta.pageSize,
48
+ totalItems: x.meta.totalItems,
49
+ },
50
+ data: x.data.map(itemFactory),
51
+ };
52
+ });
53
+ });
54
+ };
55
+ HttpBuilder.prototype.expectJsonInfinitePaginationResult = function (typeOrMapper) {
56
+ this.message.headers.set("Accept", "application/json");
57
+ return this.useHandler((response) => {
58
+ return response.rawResponse
59
+ .json()
60
+ .then((x) => {
61
+ const itemFactory = Mapping.getMapper(deserialize, typeOrMapper);
62
+ return {
63
+ meta: {
64
+ pageSize: x.meta.pageSize,
65
+ continuationToken: x.meta.continuationToken,
66
+ },
67
+ data: x.data.map(itemFactory),
68
+ };
69
+ });
70
+ });
71
+ };
72
+ //# sourceMappingURL=index.js.map