@nestia/fetcher 2.5.1 → 2.5.2-dev.20240204
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Resolved.d.ts +5 -5
- package/lib/internal/FetcherBase.js +61 -20
- package/lib/internal/FetcherBase.js.map +1 -1
- package/lib/internal/IFetchRoute.d.ts +1 -1
- package/package.json +1 -1
- package/src/Resolved.ts +30 -28
- package/src/internal/FetcherBase.ts +28 -4
- package/src/internal/IFetchRoute.ts +1 -0
package/lib/Resolved.d.ts
CHANGED
|
@@ -22,23 +22,23 @@
|
|
|
22
22
|
* `Class` | `interface`
|
|
23
23
|
* Native Class or Others | No change
|
|
24
24
|
*
|
|
25
|
-
* @template
|
|
25
|
+
* @template T Target argument type.
|
|
26
26
|
* @author Jeongho Nam - https://github.com/samchon
|
|
27
27
|
* @author Kyungsu Kang - https://github.com/kakasoo
|
|
28
28
|
*/
|
|
29
29
|
export type Resolved<T> = Equal<T, ResolvedMain<T>> extends true ? T : ResolvedMain<T>;
|
|
30
30
|
type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
|
|
31
|
-
type ResolvedMain<
|
|
32
|
-
type ResolvedObject<
|
|
33
|
-
[P in keyof
|
|
31
|
+
type ResolvedMain<T> = T extends [never] ? never : ValueOf<T> extends boolean | number | bigint | string ? ValueOf<T> : T extends Function ? never : T extends object ? ResolvedObject<T> : ValueOf<T>;
|
|
32
|
+
type ResolvedObject<T extends object> = T extends Array<infer U> ? IsTuple<T> extends true ? ResolvedTuple<T> : ResolvedMain<U>[] : T extends Set<infer U> ? Set<ResolvedMain<U>> : T extends Map<infer K, infer V> ? Map<ResolvedMain<K>, ResolvedMain<V>> : T extends WeakSet<any> | WeakMap<any, any> ? never : T extends Date | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView | Blob | File ? T : {
|
|
33
|
+
[P in keyof T]: ResolvedMain<T[P]>;
|
|
34
34
|
};
|
|
35
35
|
type ResolvedTuple<T extends readonly any[]> = T extends [] ? [] : T extends [infer F] ? [ResolvedMain<F>] : T extends [infer F, ...infer Rest extends readonly any[]] ? [ResolvedMain<F>, ...ResolvedTuple<Rest>] : T extends [(infer F)?] ? [ResolvedMain<F>?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [ResolvedMain<F>?, ...ResolvedTuple<Rest>] : [];
|
|
36
|
-
type ValueOf<Instance> = IsValueOf<Instance, Boolean> extends true ? boolean : IsValueOf<Instance, Number> extends true ? number : IsValueOf<Instance, String> extends true ? string : Instance;
|
|
37
36
|
type IsTuple<T extends readonly any[] | {
|
|
38
37
|
length: number;
|
|
39
38
|
}> = [T] extends [
|
|
40
39
|
never
|
|
41
40
|
] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;
|
|
41
|
+
type ValueOf<Instance> = IsValueOf<Instance, Boolean> extends true ? boolean : IsValueOf<Instance, Number> extends true ? number : IsValueOf<Instance, String> extends true ? string : Instance;
|
|
42
42
|
type IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object ? Object extends IValueOf<infer Primitive> ? Instance extends Primitive ? false : true : false : false;
|
|
43
43
|
interface IValueOf<T> {
|
|
44
44
|
valueOf(): T;
|
|
@@ -120,15 +120,16 @@ var FetcherBase;
|
|
|
120
120
|
return function (props) {
|
|
121
121
|
return function (connection, route, input, stringify) { return __awaiter(_this, void 0, void 0, function () {
|
|
122
122
|
var headers, init, path, url, response, _a, result, _b, type, text, query, _c, _d, _e, _f;
|
|
123
|
-
var _g, _h, _j, _k, _l, _m, _o, _p;
|
|
124
|
-
return __generator(this, function (
|
|
125
|
-
switch (
|
|
123
|
+
var _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
124
|
+
return __generator(this, function (_r) {
|
|
125
|
+
switch (_r.label) {
|
|
126
126
|
case 0:
|
|
127
127
|
headers = __assign({}, ((_g = connection.headers) !== null && _g !== void 0 ? _g : {}));
|
|
128
128
|
if (input !== undefined) {
|
|
129
129
|
if (((_h = route.request) === null || _h === void 0 ? void 0 : _h.type) === undefined)
|
|
130
130
|
throw new Error("Error on ".concat(props.className, ".fetch(): no content-type being configured."));
|
|
131
|
-
|
|
131
|
+
else if (route.request.type !== "multipart/form-data")
|
|
132
|
+
headers["Content-Type"] = route.request.type;
|
|
132
133
|
}
|
|
133
134
|
init = __assign(__assign({}, ((_j = connection.options) !== null && _j !== void 0 ? _j : {})), { method: route.method, headers: (function () {
|
|
134
135
|
var e_1, _a, e_2, _b;
|
|
@@ -171,24 +172,26 @@ var FetcherBase;
|
|
|
171
172
|
// BODY TRANSFORM
|
|
172
173
|
((_k = route.request) === null || _k === void 0 ? void 0 : _k.type) === "application/x-www-form-urlencoded"
|
|
173
174
|
? request_query_body(input)
|
|
174
|
-
: ((_l = route.request) === null || _l === void 0 ? void 0 : _l.type)
|
|
175
|
-
? (
|
|
176
|
-
:
|
|
175
|
+
: ((_l = route.request) === null || _l === void 0 ? void 0 : _l.type) === "multipart/form-data"
|
|
176
|
+
? request_form_data_body(input)
|
|
177
|
+
: ((_m = route.request) === null || _m === void 0 ? void 0 : _m.type) !== "text/plain"
|
|
178
|
+
? (stringify !== null && stringify !== void 0 ? stringify : JSON.stringify)(input)
|
|
179
|
+
: input, headers);
|
|
177
180
|
path = connection.host[connection.host.length - 1] !== "/" &&
|
|
178
181
|
route.path[0] !== "/"
|
|
179
182
|
? "/".concat(route.path)
|
|
180
183
|
: route.path;
|
|
181
184
|
url = new URL("".concat(connection.host).concat(path));
|
|
182
|
-
if (!((
|
|
183
|
-
_a =
|
|
185
|
+
if (!((_o = connection.fetch) !== null && _o !== void 0)) return [3 /*break*/, 1];
|
|
186
|
+
_a = _o;
|
|
184
187
|
return [3 /*break*/, 3];
|
|
185
188
|
case 1: return [4 /*yield*/, polyfill.get()];
|
|
186
189
|
case 2:
|
|
187
|
-
_a = (
|
|
188
|
-
|
|
190
|
+
_a = (_r.sent());
|
|
191
|
+
_r.label = 3;
|
|
189
192
|
case 3: return [4 /*yield*/, (_a)(url.href, init)];
|
|
190
193
|
case 4:
|
|
191
|
-
response =
|
|
194
|
+
response = _r.sent();
|
|
192
195
|
result = {
|
|
193
196
|
success: response.status === 200 ||
|
|
194
197
|
response.status === 201 ||
|
|
@@ -203,7 +206,7 @@ var FetcherBase;
|
|
|
203
206
|
return [4 /*yield*/, response.text()];
|
|
204
207
|
case 5:
|
|
205
208
|
// WHEN FAILED
|
|
206
|
-
_b.data =
|
|
209
|
+
_b.data = _r.sent();
|
|
207
210
|
type = response.headers.get("content-type");
|
|
208
211
|
if (method !== "fetch" &&
|
|
209
212
|
type &&
|
|
@@ -211,25 +214,25 @@ var FetcherBase;
|
|
|
211
214
|
try {
|
|
212
215
|
result.data = JSON.parse(result.data);
|
|
213
216
|
}
|
|
214
|
-
catch (
|
|
217
|
+
catch (_s) { }
|
|
215
218
|
return [3 /*break*/, 13];
|
|
216
219
|
case 6:
|
|
217
220
|
if (!(route.method === "HEAD")) return [3 /*break*/, 7];
|
|
218
221
|
result.data = undefined;
|
|
219
222
|
return [3 /*break*/, 13];
|
|
220
223
|
case 7:
|
|
221
|
-
if (!(((
|
|
224
|
+
if (!(((_p = route.response) === null || _p === void 0 ? void 0 : _p.type) === "application/json")) return [3 /*break*/, 9];
|
|
222
225
|
return [4 /*yield*/, response.text()];
|
|
223
226
|
case 8:
|
|
224
|
-
text =
|
|
227
|
+
text = _r.sent();
|
|
225
228
|
result.data = text.length ? JSON.parse(text) : undefined;
|
|
226
229
|
return [3 /*break*/, 13];
|
|
227
230
|
case 9:
|
|
228
|
-
if (!(((
|
|
231
|
+
if (!(((_q = route.response) === null || _q === void 0 ? void 0 : _q.type) === "application/x-www-form-urlencoded")) return [3 /*break*/, 11];
|
|
229
232
|
_c = URLSearchParams.bind;
|
|
230
233
|
return [4 /*yield*/, response.text()];
|
|
231
234
|
case 10:
|
|
232
|
-
query = new (_c.apply(URLSearchParams, [void 0,
|
|
235
|
+
query = new (_c.apply(URLSearchParams, [void 0, _r.sent()]))();
|
|
233
236
|
result.data = route.parseQuery ? route.parseQuery(query) : query;
|
|
234
237
|
return [3 /*break*/, 13];
|
|
235
238
|
case 11:
|
|
@@ -237,8 +240,8 @@ var FetcherBase;
|
|
|
237
240
|
_f = (_e = props).decode;
|
|
238
241
|
return [4 /*yield*/, response.text()];
|
|
239
242
|
case 12:
|
|
240
|
-
_d.data = _f.apply(_e, [
|
|
241
|
-
|
|
243
|
+
_d.data = _f.apply(_e, [_r.sent(), result.headers]);
|
|
244
|
+
_r.label = 13;
|
|
242
245
|
case 13: return [2 /*return*/, result];
|
|
243
246
|
}
|
|
244
247
|
});
|
|
@@ -275,6 +278,9 @@ var polyfill = new Singleton_1.Singleton(function () { return __awaiter(void 0,
|
|
|
275
278
|
}
|
|
276
279
|
});
|
|
277
280
|
}); });
|
|
281
|
+
/**
|
|
282
|
+
* @internal
|
|
283
|
+
*/
|
|
278
284
|
var request_query_body = function (input) {
|
|
279
285
|
var e_3, _a;
|
|
280
286
|
var q = new URLSearchParams();
|
|
@@ -301,6 +307,41 @@ var request_query_body = function (input) {
|
|
|
301
307
|
}
|
|
302
308
|
return q;
|
|
303
309
|
};
|
|
310
|
+
/**
|
|
311
|
+
* @internal
|
|
312
|
+
*/
|
|
313
|
+
var request_form_data_body = function (input) {
|
|
314
|
+
var e_4, _a;
|
|
315
|
+
var encoded = new FormData();
|
|
316
|
+
var append = function (key) { return function (value) {
|
|
317
|
+
if (value === undefined)
|
|
318
|
+
return;
|
|
319
|
+
else if (value instanceof Blob)
|
|
320
|
+
if (value instanceof File)
|
|
321
|
+
encoded.append(key, value, value.name);
|
|
322
|
+
else
|
|
323
|
+
encoded.append(key, value);
|
|
324
|
+
else
|
|
325
|
+
encoded.append(key, String(value));
|
|
326
|
+
}; };
|
|
327
|
+
try {
|
|
328
|
+
for (var _b = __values(Object.entries(input)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
329
|
+
var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
|
|
330
|
+
if (Array.isArray(value))
|
|
331
|
+
value.map(append(key));
|
|
332
|
+
else
|
|
333
|
+
append(key)(value);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
337
|
+
finally {
|
|
338
|
+
try {
|
|
339
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
340
|
+
}
|
|
341
|
+
finally { if (e_4) throw e_4.error; }
|
|
342
|
+
}
|
|
343
|
+
return encoded;
|
|
344
|
+
};
|
|
304
345
|
/**
|
|
305
346
|
* @internal
|
|
306
347
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetcherBase.js","sourceRoot":"","sources":["../../src/internal/FetcherBase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA8B;AAE9B,0CAAyC;AAKzC,yCAAwC;AAExC,IAAiB,WAAW,
|
|
1
|
+
{"version":3,"file":"FetcherBase.js","sourceRoot":"","sources":["../../src/internal/FetcherBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ export declare namespace IFetchRoute {
|
|
|
43
43
|
* Describes how content-type being used in body, and whether encrypted or not.
|
|
44
44
|
*/
|
|
45
45
|
interface IBody {
|
|
46
|
-
type: "application/json" | "application/x-www-form-urlencoded" | "text/plain";
|
|
46
|
+
type: "application/json" | "application/x-www-form-urlencoded" | "multipart/form-data" | "text/plain";
|
|
47
47
|
encrypted?: boolean;
|
|
48
48
|
}
|
|
49
49
|
}
|
package/package.json
CHANGED
package/src/Resolved.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* `Class` | `interface`
|
|
23
23
|
* Native Class or Others | No change
|
|
24
24
|
*
|
|
25
|
-
* @template
|
|
25
|
+
* @template T Target argument type.
|
|
26
26
|
* @author Jeongho Nam - https://github.com/samchon
|
|
27
27
|
* @author Kyungsu Kang - https://github.com/kakasoo
|
|
28
28
|
*/
|
|
@@ -31,28 +31,28 @@ export type Resolved<T> =
|
|
|
31
31
|
|
|
32
32
|
type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
|
|
33
33
|
|
|
34
|
-
type ResolvedMain<
|
|
34
|
+
type ResolvedMain<T> = T extends [never]
|
|
35
35
|
? never // (special trick for jsonable | null) type
|
|
36
|
-
: ValueOf<
|
|
37
|
-
? ValueOf<
|
|
38
|
-
:
|
|
36
|
+
: ValueOf<T> extends boolean | number | bigint | string
|
|
37
|
+
? ValueOf<T>
|
|
38
|
+
: T extends Function
|
|
39
39
|
? never
|
|
40
|
-
:
|
|
41
|
-
? ResolvedObject<
|
|
42
|
-
: ValueOf<
|
|
40
|
+
: T extends object
|
|
41
|
+
? ResolvedObject<T>
|
|
42
|
+
: ValueOf<T>;
|
|
43
43
|
|
|
44
|
-
type ResolvedObject<
|
|
45
|
-
|
|
46
|
-
? IsTuple<
|
|
47
|
-
? ResolvedTuple<
|
|
48
|
-
: ResolvedMain<
|
|
49
|
-
:
|
|
44
|
+
type ResolvedObject<T extends object> =
|
|
45
|
+
T extends Array<infer U>
|
|
46
|
+
? IsTuple<T> extends true
|
|
47
|
+
? ResolvedTuple<T>
|
|
48
|
+
: ResolvedMain<U>[]
|
|
49
|
+
: T extends Set<infer U>
|
|
50
50
|
? Set<ResolvedMain<U>>
|
|
51
|
-
:
|
|
51
|
+
: T extends Map<infer K, infer V>
|
|
52
52
|
? Map<ResolvedMain<K>, ResolvedMain<V>>
|
|
53
|
-
:
|
|
53
|
+
: T extends WeakSet<any> | WeakMap<any, any>
|
|
54
54
|
? never
|
|
55
|
-
:
|
|
55
|
+
: T extends
|
|
56
56
|
| Date
|
|
57
57
|
| Uint8Array
|
|
58
58
|
| Uint8ClampedArray
|
|
@@ -68,9 +68,11 @@ type ResolvedObject<Instance extends object> =
|
|
|
68
68
|
| ArrayBuffer
|
|
69
69
|
| SharedArrayBuffer
|
|
70
70
|
| DataView
|
|
71
|
-
|
|
71
|
+
| Blob
|
|
72
|
+
| File
|
|
73
|
+
? T
|
|
72
74
|
: {
|
|
73
|
-
[P in keyof
|
|
75
|
+
[P in keyof T]: ResolvedMain<T[P]>;
|
|
74
76
|
};
|
|
75
77
|
|
|
76
78
|
type ResolvedTuple<T extends readonly any[]> = T extends []
|
|
@@ -85,15 +87,6 @@ type ResolvedTuple<T extends readonly any[]> = T extends []
|
|
|
85
87
|
? [ResolvedMain<F>?, ...ResolvedTuple<Rest>]
|
|
86
88
|
: [];
|
|
87
89
|
|
|
88
|
-
type ValueOf<Instance> =
|
|
89
|
-
IsValueOf<Instance, Boolean> extends true
|
|
90
|
-
? boolean
|
|
91
|
-
: IsValueOf<Instance, Number> extends true
|
|
92
|
-
? number
|
|
93
|
-
: IsValueOf<Instance, String> extends true
|
|
94
|
-
? string
|
|
95
|
-
: Instance;
|
|
96
|
-
|
|
97
90
|
type IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
|
|
98
91
|
never,
|
|
99
92
|
]
|
|
@@ -104,6 +97,15 @@ type IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
|
|
|
104
97
|
: true
|
|
105
98
|
: false;
|
|
106
99
|
|
|
100
|
+
type ValueOf<Instance> =
|
|
101
|
+
IsValueOf<Instance, Boolean> extends true
|
|
102
|
+
? boolean
|
|
103
|
+
: IsValueOf<Instance, Number> extends true
|
|
104
|
+
? number
|
|
105
|
+
: IsValueOf<Instance, String> extends true
|
|
106
|
+
? string
|
|
107
|
+
: Instance;
|
|
108
|
+
|
|
107
109
|
type IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object
|
|
108
110
|
? Object extends IValueOf<infer Primitive>
|
|
109
111
|
? Instance extends Primitive
|
|
@@ -79,7 +79,8 @@ export namespace FetcherBase {
|
|
|
79
79
|
throw new Error(
|
|
80
80
|
`Error on ${props.className}.fetch(): no content-type being configured.`,
|
|
81
81
|
);
|
|
82
|
-
|
|
82
|
+
else if (route.request.type !== "multipart/form-data")
|
|
83
|
+
headers["Content-Type"] = route.request.type;
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
// INIT REQUEST DATA
|
|
@@ -103,9 +104,11 @@ export namespace FetcherBase {
|
|
|
103
104
|
// BODY TRANSFORM
|
|
104
105
|
route.request?.type === "application/x-www-form-urlencoded"
|
|
105
106
|
? request_query_body(input)
|
|
106
|
-
: route.request?.type
|
|
107
|
-
? (
|
|
108
|
-
:
|
|
107
|
+
: route.request?.type === "multipart/form-data"
|
|
108
|
+
? request_form_data_body(input as any)
|
|
109
|
+
: route.request?.type !== "text/plain"
|
|
110
|
+
? (stringify ?? JSON.stringify)(input)
|
|
111
|
+
: input,
|
|
109
112
|
headers,
|
|
110
113
|
);
|
|
111
114
|
|
|
@@ -183,6 +186,9 @@ const polyfill = new Singleton(async (): Promise<typeof fetch> => {
|
|
|
183
186
|
return window.fetch;
|
|
184
187
|
});
|
|
185
188
|
|
|
189
|
+
/**
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
186
192
|
const request_query_body = (input: any): URLSearchParams => {
|
|
187
193
|
const q: URLSearchParams = new URLSearchParams();
|
|
188
194
|
for (const [key, value] of Object.entries(input))
|
|
@@ -193,6 +199,24 @@ const request_query_body = (input: any): URLSearchParams => {
|
|
|
193
199
|
return q;
|
|
194
200
|
};
|
|
195
201
|
|
|
202
|
+
/**
|
|
203
|
+
* @internal
|
|
204
|
+
*/
|
|
205
|
+
const request_form_data_body = (input: Record<string, any>): FormData => {
|
|
206
|
+
const encoded: FormData = new FormData();
|
|
207
|
+
const append = (key: string) => (value: any) => {
|
|
208
|
+
if (value === undefined) return;
|
|
209
|
+
else if (value instanceof Blob)
|
|
210
|
+
if (value instanceof File) encoded.append(key, value, value.name);
|
|
211
|
+
else encoded.append(key, value);
|
|
212
|
+
else encoded.append(key, String(value));
|
|
213
|
+
};
|
|
214
|
+
for (const [key, value] of Object.entries(input))
|
|
215
|
+
if (Array.isArray(value)) value.map(append(key));
|
|
216
|
+
else append(key)(value);
|
|
217
|
+
return encoded;
|
|
218
|
+
};
|
|
219
|
+
|
|
196
220
|
/**
|
|
197
221
|
* @internal
|
|
198
222
|
*/
|